【问题标题】:PascalPrecht angular-translate useUrlLoaderPascalPrecht 角度平移 useUrlLoader
【发布时间】:2015-04-14 18:37:14
【问题描述】:

我对编程和角度都是新手。我需要将 angular-translate 与它的 useUrlLoader 一起使用,因为我的翻译存储在数据库中。 $translateProvider.useUrlLoader('foo/bar.json'); $translateProvider.preferredLanguage('en');

虽然使用 staticFilesLoader 对我来说似乎很简单,因为我只需要两个带有翻译数据的单独 json 文件,但我无法得到 useUrlLoader 的期望。据我了解,它需要包含多种语言翻译(例如英语和德语)的 json。 在任何地方都找不到此类文件的示例。

【问题讨论】:

    标签: javascript angularjs angular-translate


    【解决方案1】:

    StaticFilesLoader 希望您将不同语言的所有翻译存储在服务器上的单独文件中。它发出这样的请求:

    /your/server/i18n/locale-en.json
    /your/server/i18n/locale-de.json
    /your/server/i18n/locale-fr.json
    

    其中/your/server/i18n/locale-.json 分别是您在配置过程中传递的前缀后缀

    UrlLoader 期望您拥有一个“聪明”的端点,而不是一堆文件。它发出这样的请求:

    /your/server/i18n/locale-endpoint?lang=en
    /your/server/i18n/locale-endpoint?lang=de
    /your/server/i18n/locale-endpoint?lang=fr
    

    其中/your/server/i18n/locale-endpointlang 分别是您在配置期间传递的urlqueryParameterurl 是必需的,但 queryParameter 可以省略(默认为“lang”)。

    您可以像这样设置 UrlLoader:

    $translateProvider.useUrlLoader('/path/to/your/endpoint', {
      queryParameter : 'localeKey'
    });
    

    或者像这样:

    $translateProvider.useLoader('$translateUrlLoader', {
      url : '/path/to/your/endpoint',
      queryParameter : 'localeKey'
    });
    

    两个加载器都希望将翻译加载为 JSON 对象。它可能看起来像这样:

    {
      "translationId" : "Translation for this ID",
      "anotherTranslationId": "Another translation for another id"
    }
    

    你可以在the official guide找到更多关于不同加载器的信息。

    UrlLoader 的源代码可以在the angular-translate repository 找到。

    希望,这会有所帮助。

    【讨论】:

    • 我切换到其他不需要多语言的项目。今天在这里找到这个答案真是太棒了,当我再次需要它们时。非常感谢!
    • 嗨@DWand我需要为我的后端传递比url和queryParameter更多的变量,有什么建议吗?
    • 嗨,@razorblade。在这种情况下,我建议您创建一个自定义加载器。可能,它可能基于一些内置的加载器。在这种情况下,您将能够以任何您喜欢的方式操作 URL。
    • 这给出了Error: [$injector:unpr]。有什么建议可以解决这个问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-08
    • 1970-01-01
    • 2015-10-23
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    相关资源
    最近更新 更多