javascript - angularjs-gettext : translate text in placeholder

标签 javascript jquery angularjs translation 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}}" 但没有成功。我该如何解决这个问题?

最佳答案

从优秀的文档中复制粘贴(不要太感谢我 ;-)

使用自定义注释

如果您发现自己必须一直翻译相同的属性,您可以告诉 gettext 将其作为翻译。之后由您决定如何翻译。例如,如果您要翻译每个输入的占位符属性,您可能会做类似的事情:

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

如果你想跳过必须向每个输入添加数据绑定(bind)和翻译过滤器,你可以在你的 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);
    }   }; }]);

最后您可以像往常一样继续使用占位符属性:

<input placeholder="Input something here">

关于javascript - angularjs-gettext : translate text in placeholder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30670536/

相关文章:

javascript - 将其正确放入方法中(TypeScript 新手)

javascript - 如何使用 jQuery 倒计时插件创建计时器 "count up"?

javascript - 如何按长度排序然后按字母顺序排序

javascript - 如何在移动 View Owl Carousel 中运行jump(n)幻灯片?

jquery - Ajax 在 MVC AsP.net 中发布表单(验证)?

angularjs - 如何避免嵌套使用 `ng-repeat` ?

javascript - 我怎样才能有一个下拉列表(选择 HTML),我想在其中包含允许用户输入用户特定条目的选项之一?

javascript - 实时 JavaScript 计算

javascript - Fullcalendar 和 jQuery 日期选择器

javascript - Angular 在 localStorage 中存储日期值