Использование angular-translate путем передачи текста в качестве ключа - PullRequest
0 голосов
/ 16 октября 2019

Мое приложение на angularJs. Я новичок в угловом переводе. Перебрал несколько примеров, таких как http://angular -translate.github.io / . В каждом сценарии мне нужно определить оба языковых текста (например, если мне нужно изменить «Заголовок» с английского на немецкий, мне нужно определить заголовок на двух языках $ translateProvider.translations ('en') $ translateProvider.translations ('de'))) Это единственный способ перевести приложение angularJs? Можно ли как-нибудь передать текст в качестве ключа и выполнить перевод в соответствии с языком, выбранным без определения обоих текстов?

Пробовал таким образом, но не сработал.

$rootScope.$on('$translateChangeSuccess', function () {
    $translateProvider.preferredLanguage('fa');
    $scope.pageTitle = $translate.instant('Title');
  });

В представлении: {{pageTitle}}

Могу ли я узнать лучший способ изменить текст.

1 Ответ

0 голосов
/ 16 октября 2019

Нет, это не разрешено. Вам необходимо указать текст для всех языков, которые вы поддерживаете. Поскольку вы правильно поделились URL-адресом документации по угловому переводу - http://angular -translate.github.io / . Вы должны убедиться, что все ключи и текст, представленные для одного языка, присутствуют и для других языков, которые вы поддерживаете. В противном случае это может привести к ошибкам в пользовательском интерфейсе со строковыми литералами, которые отображаются как {{title}}, что нехорошо.

Я бы также порекомендовал вам определить свой запасной язык, указав fallbackLanguage и предпочитаемый язык.

Если у вас есть какие-то enum-подобные значения, поступающие из бэкэнда, и они не переведены в бэкэнд, я бы порекомендовал вам добавить ключи для этих перечислений в ваши переводы и использовать их во время выполнения (как я делился выше).

Вы также можете использовать введенные пользователем данные и сопоставить их с локализованным текстом, как показано ниже:

//Let's say $scope.name is the name of the user.
$translate.instant('welcome_msg', [$scope.name]);

//String literal in your translation will have {0} and name will be populated at
//this place at runtime.
'welcome_msg' : 'Welcome {0}'
...