angularjs-gettext: перевод текста в заполнитель

Я использую плагин angular-gettext, но у меня проблемы с переводом заполнителя. Это работает:

<legend translate>Lower secondary studies</legend>

Когда я запускаю grunt, строка добавляется в файл .POT, и я могу экспортировать ее в en.po, ....

Но у меня также есть следующее поле ввода:

<input ng-model="application.lwsdegreeTitle" type="text" placeholder="Degree title" name="lwsappdegreetitle" id="lwsappdegreetitle" />

Как видите, у меня есть заполнитель с текстом: Degree title. Я пробовал добавить атрибут, переведенный в поле ввода, но строка не вставляется в файл .pot. Я также пробовал следующее:

placeholder="{{ Degree title}}" но безуспешно. Как я могу это исправить?


person nielsv    schedule 05.06.2015    source источник
comment
Точный случай, о котором вы спрашиваете - перевод атрибута заполнителя - рассматривается в качестве примера в документации по адресу angular-gettext.rocketeer.be/dev-guide/custom-annotations. Я слишком занят прямо сейчас, чтобы написать ответ, основанный на этом, так что не стесняйтесь сделать это, прежде чем я перейду к нему.   -  person Mark Amery    schedule 02.09.2015


Ответы (2)


Скопировано из прекрасной документации (не благодарите меня слишком ;-)

Использование собственных аннотаций

Если вам постоянно приходится переводить один и тот же атрибут, вы можете указать gettext использовать его как перевод. После этого вам решать, как его переводить. Например, если вы переводите атрибут placeholder для каждого ввода, скорее всего, вы делаете что-то вроде:

<input placeholder="{{ 'Input something here' | translate }}">

Если вы не хотите добавлять привязку данных и переводить фильтр к каждому входу, вы можете указать заполнитель в качестве атрибута в вашей конфигурации Grunt:

grunt.initConfig({   nggettext_extract: {
    pot: {
      options: {
        attributes: ['placeholder']
      },
      files: {
        'po/template.pot': ['src/views/*.html']
      }
    },   }, })

После этого вам нужно реализовать директиву, которая переводит атрибут заполнителя. Вот простой пример:

angular.module('myModule').directive('placeholder', ['gettextCatalog',
function(gettextCatalog){   return {
    restrict: 'A',
    link: function(scope, element, attrs){
      var translatedPlaceholder = gettextCatalog.getString(attrs.placeholder);
      element.attr('placeholder', translatedPlaceholder);
    }   }; }]);

И, наконец, вы можете продолжать использовать атрибут placeholder как обычно:

<input placeholder="Input something here">
person Community    schedule 03.11.2015
comment
Это нормально, если текст-заполнитель всегда является простой строкой. Но работает ли это в тех случаях, когда это переменная области видимости? - person richard; 11.03.2018

Вы можете добавить новую метку с помощью ng-if = "false", просто чтобы сгенерировать в файле .pot запись для строки заполнителя:

<input type="text" placeholder="{{'Degree title'| translate}}" />
<label ng-if="false" translate>Degree title</label>

Вывод HTML:

введите описание изображения здесь

.Pot файл вывода:

msgid "Degree title" msgstr ""

После выполнения задачи nggettext_compile местозаполнитель должен быть переведен.

Вывод HTML:

введите описание изображения здесь

person LGC    schedule 18.06.2015