PascalPrecht angular-translate useUrlLoader

时间:2015-04-14 18:37:14

标签: javascript angularjs angular-translate

我是编程和棱角分明的新手。我需要使用angular-translate及其'useUrlLoader,因为我的翻译存储在数据库中。 $translateProvider.useUrlLoader('foo/bar.json'); $translateProvider.preferredLanguage('en');

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

1 个答案:

答案 0 :(得分:7)

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分别是 url queryParameter (分别),这些都是您在配置期间传递的。 url 是必需的,但 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中找到有关不同加载器的更多信息。

可以在the angular-translate repository

中找到UrlLoader的源代码

希望,这有帮助。