我有一个带有Django后端和AngularJS前端的应用程序。我使用角-gettext插件和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就可以提取它们。
你有什么建议?
发布于 2014-10-13 18:43:33
我也使用角-gettext,并从服务器返回需要翻译的字符串。我们不喜欢为这些消息建立一个单独的翻译系统的想法,所以我们像平常一样以默认语言发送它们。
为了让它发挥作用,我们做了两件事。我们在后端创建了一个函数,我们可以调用这个函数来检索所有可能的字符串来进行转换。在我们的例子中,主要是静态数据,只是偶尔变化一次。理想情况下,这将是自动化的,但目前还可以。
该列表通过代码被正确地格式化为带有translate标记的html。这个文件没有被部署,它只是允许提取任务找到字符串。
其次,我们创建了一个过滤器来对插值的值进行转换,因此,如果{{foo}}是foo的值,它将不翻译bar。我们调用了这个postTranslate,它很简单:
angular
.module('app')
.filter('postTranslate', ['gettextCatalog', function (gettextCatalog) {
return function (s) {
return gettextCatalog.getString(s);
};
}]);至于数据库中没有的东西,我们有另一个文件供我们手动放入的文件。所以你的错误信息可能会出现在这里。
如果您只担心错误,您可能会考虑不直接显示所有错误消息,而是确定要显示哪些用户友好的错误消息。该用户友好错误消息位于前端,因此避开了所有其他头痛问题:)
https://stackoverflow.com/questions/25045947
复制相似问题