我有一个带Django后端和AngularJS前端的应用程序。 我使用angular-gettext plugin和Grunt来处理翻译。
问题是,我有时会通过API从后端收到动态字符串。例如,关于外键约束或重复键条目的MySQL错误。 如何将此字符串添加到.pot文件或非编码字符串中?
我试过跟随,但当然不能奏效:
angular.module('app').factory('HttpInterceptor', ['$q', '$injector', '$rootScope', '$cookieStore', 'gettext', function ($q, $injector, $rootScope, $cookieStore, gettext) {
responseError: function (rejection) {
gettext('static string'); //it works
gettext(rejection.data.error); //does not work
$rootScope.$emit('errorModal', rejection.data);
}
// Return the promise rejection.
return $q.reject(rejection);
}
};
}]);
})();
我能想到的一个解决方案是将每个动态字符串写入JSON对象。将此json发送到服务器并从那里写入包含这些字符串的静态文件,以便gettext可以提取它们。
你有什么建议?
答案 0 :(得分:3)
我还使用angular-gettext并从服务器返回需要翻译的字符串。我们不喜欢为这些消息设置单独的翻译系统,所以我们用普通的默认语言发送它们。
为了实现这一点,我们做了两件事。我们在后端创建了一个函数,我们可以调用它来检索要翻译的所有可能的字符串。在我们的例子中,它主要是静态数据,只是偶尔会改变一次。理想情况下,这将是自动化的,但现在还可以。
该列表通过代码正确格式化为带有translate标签的html。此文件未部署,只是允许提取任务查找字符串。
其次,我们创建了一个过滤器来对插值进行翻译,因此如果它是foo的值,它将翻译{{foo}}
而不是翻译bar
。我们称之为postTranslate
,这很简单:
angular
.module('app')
.filter('postTranslate', ['gettextCatalog', function (gettextCatalog) {
return function (s) {
return gettextCatalog.getString(s);
};
}]);
对于 in 数据库中的东西,我们有另一个文件用于我们手动输入的文件。所以你的错误信息可能会在这里。
如果您只是担心错误,您可能会考虑不直接显示所有错误消息,而是确定要显示的用户友好错误消息。该用户友好的错误消息位于前端,因此可以避免所有其他问题:)