6

在构建国际 Web 应用程序时,有一个非常流行的用例:

每种文化都有本地化模板,名称约定如“en_US/name.html”、“ru_RU/name.html”等。

用户的区域设置只能在用户登录后获取(或者用户可以选择区域设置)。

所以我发现最好的选择是使用 DI 提供本地化价值(因此它可以在任何地方更新 - 或者当我收到来自后端的用户配置响应时,或者当用户选择某些东西时)。

但是只能在配置步骤中配置路由,其中​​无法注入“值”。因此,您不能根据该值注入语言环境配置并添加 templateUrl。

这是一个Plnkr 示例来说明我的解决方案。

我看到的唯一其他解决方案是修改私有路由数组(使用 $route.routes[]),但这听起来很丑陋。

是否有其他解决方案可以实现这种使用本地化模板的常见用例?

4

1 回答 1

1

可能有一些方法可以根据需要执行此操作,例如覆盖templateCache而不是修改路由,但我将以不同的方式处理此问题。

在您的方法中,随着站点的增长,维护(至少)2 个模板副本将非常困难。如果你支持更多的语言,那么你遇到的麻烦就会少得多。

我会创建一个服务,它包含像语言对象一样的字典。

angular.module("myApp", [])
       .factory("Internationalization", function () {
           var dict: {
               en_US: {
                   hello: "Hello,"
               },
               fr_FR: {
                   salut: "Salut,"
               }
           };
           var get = function (locale, key) {
               return formatdict[locale][key];
           }
           return {get: get};
       });

然后您可以在控制器中注入服务并将其附加到范围。

这应该可以帮助您入门,如果您需要支持,您可能需要检查一下。string.format

于 2013-01-20T15:13:33.937 回答