首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带有gettext的动态消息(AngularJS)

带有gettext的动态消息(AngularJS)
EN

Stack Overflow用户
提问于 2014-07-30 20:06:24
回答 1查看 2.1K关注 0票数 4

我有一个带有Django后端和AngularJS前端的应用程序。我使用角-gettext插件和Grunt来处理翻译。

问题是,我有时通过API从后端接收动态字符串。例如,有关外键约束或重复密钥条目的MySQL错误。我如何将这些字符串添加到.pot文件中,或者一般情况下添加未重新编码的字符串?

我试过跟踪,但当然行不通:

代码语言:javascript
运行
复制
 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就可以提取它们。

你有什么建议?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-13 18:43:33

我也使用角-gettext,并从服务器返回需要翻译的字符串。我们不喜欢为这些消息建立一个单独的翻译系统的想法,所以我们像平常一样以默认语言发送它们。

为了让它发挥作用,我们做了两件事。我们在后端创建了一个函数,我们可以调用这个函数来检索所有可能的字符串来进行转换。在我们的例子中,主要是静态数据,只是偶尔变化一次。理想情况下,这将是自动化的,但目前还可以。

该列表通过代码被正确地格式化为带有translate标记的html。这个文件没有被部署,它只是允许提取任务找到字符串。

其次,我们创建了一个过滤器来对插值的值进行转换,因此,如果{{foo}}是foo的值,它将不翻译bar。我们调用了这个postTranslate,它很简单:

代码语言:javascript
运行
复制
angular
.module('app')
.filter('postTranslate', ['gettextCatalog', function (gettextCatalog) {
    return function (s) {
        return gettextCatalog.getString(s);
    };
}]);

至于数据库中没有的东西,我们有另一个文件供我们手动放入的文件。所以你的错误信息可能会出现在这里。

如果您只担心错误,您可能会考虑不直接显示所有错误消息,而是确定要显示哪些用户友好的错误消息。该用户友好错误消息位于前端,因此避开了所有其他头痛问题:)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25045947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档