20
Tworzenie aplikacji wielojęzykowych w Bartłomiej Narożnik

Bartłomiej Narożnik - AngularJS

Embed Size (px)

DESCRIPTION

Bartłomiej Narożnik - AngularJS. Tworzenie aplikacji wielojęzykowych

Citation preview

Page 1: Bartłomiej Narożnik - AngularJS

Tworzenie aplikacji wielojęzykowych

w

Bartłomiej Narożnik

Page 2: Bartłomiej Narożnik - AngularJS

Agenda

• Podejścia do tłumaczenia stron

• Angular Translate

• Wykrywanie języka dla użytkownika

Bartłomiej Narożnik - Aplikacje wielojęzykowe w AngularJS 2

Page 3: Bartłomiej Narożnik - AngularJS

Zarządzanie wielojęzykowością

• Podejście monarchistyczne

• Podejście anarchistyczne

• Podejście federalistyczne

Bartłomiej Narożnik - Aplikacje wielojęzykowe w AngularJS 3

Page 4: Bartłomiej Narożnik - AngularJS

• Filter

• Directive

• Service

• Asynchroniczne tłumaczenie

• Obsługa pluralizacji

• Tłumaczenie fragmentów HTML

• Obsługa błędów

Bartłomiej Narożnik - Aplikacje wielojęzykowe w AngularJS 4

Page 5: Bartłomiej Narożnik - AngularJS

Konfiguracja

Bartłomiej Narożnik - Aplikacje wielojęzykowe w AngularJS 5

var app = angular.module('myApp', ['pascalprecht.translate']);

app.config(['$translateProvider', function ($translateProvider) { $translateProvider .translations('pl', translations) .preferredLanguage('pl'); } ]);

Page 6: Bartłomiej Narożnik - AngularJS

Struktura tłumaczenia

Bartłomiej Narożnik - Aplikacje wielojęzykowe w AngularJS 6

var translations = { TITLE: 'Pan Tadeusz', AUTHOR: 'Adam Mickiewicz', CHAPTERS: { CHAPTER1_TITLE: 'KSIĘGA PIERWSZA: GOSPODARSTWO' } };

Page 7: Bartłomiej Narożnik - AngularJS

$translate service

app.controller('Controller1', ['$scope', '$translate',

function ($scope, $translate) {

$translate('TITLE').then(function (title) {

$scope.title = title;

});

$translate(['AUTHOR', 'PUBLICATION.YEAR'])

.then(function (translations) {

$scope.author = translations.AUTHOR;

$scope.pubYear = translations['PUBLICATION.YEAR'];

});

$scope.paragraph1 = $translate.instant('PARAGRAPH.PART1');

} ]);

Bartłomiej Narożnik - Aplikacje wielojęzykowe w AngularJS 7

Page 8: Bartłomiej Narożnik - AngularJS

Filter

<h1>{{'TITLE' | translate}}</h1>

<p>{{'AUTHOR' | translate}}</p>

Bartłomiej Narożnik - Aplikacje wielojęzykowe w AngularJS 8

Page 9: Bartłomiej Narożnik - AngularJS

Directive

<p translate>AUTHOR</p>

<p translate="AUTHOR"></p>

<p translate>{{translationKey}}</p>

<p translate="{{translationKey}}"></p>

<p data-translate>AUTHOR</p>

Bartłomiej Narożnik - Aplikacje wielojęzykowe w AngularJS 9

Page 10: Bartłomiej Narożnik - AngularJS

Przetwarzanie zmiennych

{

"AUTHOR_INFO": "Author name is {{name}}"

}

<p translate="AUTHOR_INFO" translate-values="{ name: 'Adam Mickiewicz'}"></p>

<p translate="AUTHOR_INFO" translate-value-name="Adam Mickiewicz"></p>

Bartłomiej Narożnik - Aplikacje wielojęzykowe w AngularJS 10

Page 11: Bartłomiej Narożnik - AngularJS

Zmiana języka

app.controller('Controller2',['$translate', '$scope', function ($translate, $scope) {

$scope.changeLanguage = function (langKey) {

$translate.use(langKey);

};

} ]);

Bartłomiej Narożnik - Aplikacje wielojęzykowe w AngularJS 11

Page 12: Bartłomiej Narożnik - AngularJS

Pluralizacja (Przy wykorzystaniu MessageFormat.js)

$translateProvider.useMessageFormatInterpolation(); $translateProvider.translations('en', { RESULT: "{GENDER, select, male {He} female {She} other {They}} found {NUM_RESULTS, plural, one {1 result} other {# results}}" });

<p translate="RESULT" translate-values="{GENDER: 'male', NUM_RESULTS: 3}" translate-interpolation="messageformat"></p>

Wynik: „He found 3 results”

Bartłomiej Narożnik - Aplikacje wielojęzykowe w AngularJS 12

Page 13: Bartłomiej Narożnik - AngularJS

Obsługa błędów - standardowa

$translateProvider.useMissingTranslationHandlerLog();

Bartłomiej Narożnik - Aplikacje wielojęzykowe w AngularJS 13

Page 14: Bartłomiej Narożnik - AngularJS

$translateProvider

.useMissingTranslationHandler('customTranslationHandler');

app.factory('customTranslationHandler', function () {

return function (translationID, uses) {

return 'Missing Translation';

};

});

Obsługa błędów - własna

Bartłomiej Narożnik - Aplikacje wielojęzykowe w AngularJS 14

Page 15: Bartłomiej Narożnik - AngularJS

Zdarzenia

• $translateChangeStart • $translateChangeSuccess • $translateChangeError • $translateChangeEnd

• $translateLoadingStart • $translateLoadingSuccess • $translateLoadingError • $translateLoadingEnd • $translatePartialLoaderStructureChanged

Bartłomiej Narożnik - Aplikacje wielojęzykowe w AngularJS 15

Page 16: Bartłomiej Narożnik - AngularJS

Bezpieczeństwo

$translateProvider.useSanitizeValueStrategy('sanitize');

• sanitize: używa $sanitize

• escape: escapes HTML in the translation

• sanitizeParameters

• escapeParameters

Bartłomiej Narożnik - Aplikacje wielojęzykowe w AngularJS 16

Page 17: Bartłomiej Narożnik - AngularJS

Wykrywanie języka

$translateProvider.determinePreferredLanguage();

navigator.languages[0]

navigator.language

navigator.browserLanguage

navigator.systemLanguage

navigator.userLanguage

Bartłomiej Narożnik - Aplikacje wielojęzykowe w AngularJS 17

Page 18: Bartłomiej Narożnik - AngularJS

Pobieranie języka z nagłówka HTTP

Bartłomiej Narożnik - Aplikacje wielojęzykowe w AngularJS 18

Page 19: Bartłomiej Narożnik - AngularJS

19

Page 20: Bartłomiej Narożnik - AngularJS

• http://angular-translate.github.io/

• http://stackoverflow.com/questions/1043339/javascript-for-detecting-browser-language-preference

• http://www.euroconferences.info/proceedings/2005_Proceedings/2005_Sandrini_Peter.pdf

mailto:[email protected]

Bartłomiej Narożnik - Aplikacje wielojęzykowe w AngularJS

Źródła