多语言API的JSON响应有哪些最佳实践?

7

我可以帮您将当前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


这里的问题部分似乎有点不清晰或宽泛,听起来像是需要一个设计决策。 - Jaak Kütt
@JaakKütt 这是一个设计问题。有很多方法可以解决它,我想知道是否有人已经探索并找到了一个好的方法。 - islahul
2个回答

2
说到国际化、全球化和本地化,最流行的标准之一是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 插件
$.i18n.load({ a_key: 'translated string %2$s - %1$s' });
$.i18n._('a_key', ['order', 'in'])); //returns 'translated string in - order'

结论:
为了定义您的JSON结构,建议首先选择最适合您需求的框架,并遵循社区的最佳实践。这将使决策过程更加有指导性,并得到社区经验的支持。

谢谢,这就是我在寻找的 :) - islahul

1

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

需要翻译多少种语言?每种语言的API文件将由不同的编辑人员处理,每个人都专注于一种语言吗?如果每种语言都有不同的编辑人员,那么每种语言可能需要一个[集合]的API文件。但是,不要为每种语言重复所有内容(例如,所有语言的价格保持不变),可以在一种语言中拥有一个主API集,并仅存储其他本地化API集中与主API不同的内容。

假设您正在使用JavaScript和jQuery进行编码(例如实现方式),然后可以使用jQuery的extend函数轻松地将本地化API叠加在主API上。这样做的好处是,如果本地化文件缺少翻译,您可以使用主API的措辞。

注意:这可能并不是您情况下最好的方法,因为您只提供了一般信息。希望这个建议对您有所帮助或引发更多的思考。我还假设您正在处理API文件,因为这通常是本地化的情况,但您也可能有DB驱动的内容或其他内容。


虽然我一开始想在一个API调用中解决它,但我喜欢将本地化API的响应扩展到主API的响应的想法。如果我不久能得到更好的答案,我会接受这个答案。 - islahul
这种方法在我考虑添加未来功能时对我很有用。我只需要向主数据集添加额外的数据,就可以运行起来了。祝你的项目好运。 - Neil Cresswell
也希望有更多人回答您的问题。(从他人那里学习想法总是很好的。)如果您决定接受这个答案,那将不胜感激。 - Neil Cresswell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接