【问题标题】:What are the best practices for JSON response from multi lingual API来自多语言 API 的 JSON 响应的最佳实践是什么
【发布时间】:2013-12-24 06:08:39
【问题描述】:

我想为当前的英语 API 响应添加语言。当前的 API 响应如下所示:

{
   status : "success",
   data : {
    query: "contains search query",
    queryType: "search"

    results: [
        {
            title: "Marvel Captain America T-shirt",
            price: 624,
            category: "t-shirt",
            gender: "men",                  
        },
        .....
    ],
    language: "english",
    currency: "rupee",    
   }
}

我可以通过两种方式开发 API,一种是使用不同的核心进行 API 响应,并根据应用程序中的语言偏好进行调用,但我的应用程序还需要保留某些英语元素。另一种方法是将所有语言以某种结构放入响应中以区分每种语言。无论哪种情况,我都希望保留英文元素。

如果gender: 'men',但语言是法语,所以我想要一个额外的字段,比如gender_display: 'hommes' 或gender_fr: 'hommes'

补充:搜索结果来自Solr

【问题讨论】:

  • 这里的问题部分似乎有点不清楚或宽泛,听起来需要设计决策
  • @JaakKütt 这是一个设计问题。有很多方法可以做到,我想知道是否有人探索并找到了一个好的方法。

标签: javascript json api translation


【解决方案1】:

谈到:[国际化 | 全球化 | 本地化 ] 最流行的标准之一是i18n。从编码的角度来看,就是创建一个“资源字典”。

不同的图书馆已经实施了这个标准,他们的原则涵盖了从翻译到转换的原则,涉及到货币、日期和数字等内容。

例如i18n-js 建议这种结构:

I18n.translations = {
            en: {
                hello: "Hello World!"               
            },
            "pt-BR": {
                hello: "Olá Mundo!"
            },
            "de": {
                hello: "Hallo Welt!"
            },
            "nb": {
                hello: "Hei Verden!"
            }
        };

   I18n.t("hello", {locale: "en"});    //returns  "Hello World!"
   I18n.t("hello", {locale: "pt-BR"}); //returns "Olá Mundo!"

JQuery plug-in 也有帮助:

$.i18n.load({ a_key: 'translated string %2$s - %1$s' });
$.i18n._('a_key', ['order', 'in'])); //returns 'translated string in - order'

结论

要定义 JSON 的结构,建议首先选择更适合您需求的框架,并遵循社区的最佳实践。这将使决策过程在社区经验中更具指导性和支持性。

【讨论】:

  • 谢谢,这就是我要找的:)
【解决方案2】:

您可能会问自己一个问题:

有多少种语言,不同的编辑是否会为每种语言处理 API 文件,每个人都专注于一种语言?如果每种语言都有不同的编辑器,那么每种语言都有一组 [set] API 文件可能适合您。但是,不必为每种语言重复所有内容(例如,所有语言的价格可能保持不变),您可以将主 API 设置为一种语言,并且只存储与其他本地化 API 集中的主 API 不同的内容。

假设您正在(通过实现示例)JavaScript 和 jQuery 进行编码,那么您可以使用 jQuery 的扩展功能轻松地将本地化 API 覆盖在主 API 之上。这样做的一个好处是,如果您的本地化文件缺少翻译,您将求助于主 API 的措辞。

警告:这可能不一定是适合您情况的最佳方法,因为您只提供了一般信息。希望这个建议要么有用,要么值得进一步思考。我还假设您正在处理 API 文件,因为本地化通常是这种情况,但您可能有数据库驱动的内容或其他内容。

【讨论】:

  • 虽然我希望通过单个 API 调用来解决它,但我喜欢将本地化 API 的响应扩展到主 API 的响应的想法。如果我没有很快得到更好的答案,我会接受这个。
  • 在考虑添加未来功能之前,这种方法对我很有用。我只需要向主集添加额外的数据,我就可以启动并运行了。祝你的项目好运。
  • 也希望对您的问题有更多的答复。 (总是很高兴接受其他想法。)如果您决定接受这个答案,那将不胜感激。
猜你喜欢
  • 2015-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-24
  • 1970-01-01
相关资源
最近更新 更多