gpt4 book ai didi

php - 使用货币和语言切换处理语言环境的最佳实践

转载 作者:可可西里 更新时间:2023-10-31 22:52:02 27 4
gpt4 key购买 nike

我正在使用 Zend Framework(德语和英语)开发一个多语言项目,我有一个小表格来订购产品。用户应该能够:

  • 更改产品价格的首选货币
  • 更改整个网站的首选语言

目前我使用 Zend_Locale::findLocale() 来获取用户的区域设置。通过我的浏览器设置,我得到了“de_CH”并且效果很好。但是一旦出现了一些问题:

  • 用户已将他的浏览器配置为只提供语言代码(“de”而不是“de_CH”)
  • 用户喜欢我的网站不支持的语言
  • 用户所在的国家/地区使用我的产品订单不支持的货币

只是语言代码语言代码足以处理 Zend_Translate,但 Zend_Currency 需要更多信息。我认为没有解决方案可以从每个可能的用户那里获得带有国家代码的完整语言环境。我的问题是:你如何处理这些情况?如果缺少国家代码并使用默认国家代码,您是否检查 Bootstrap 的 _initLocale()?是否有任何 Zend Framework 方法可以做到这一点?

不支持的语言如果用户语言是“fr”,我想使用默认语言,因为我们的网站不支持法语。有没有比在 Bootstrap 中添加白名单数组更好的可能性?例如来自 Zend_Translate 的方法?

一种不受支持的货币如果支持用户的语言但不支持他的货币怎么办?我应该在 bootstrap 中更改语言环境还是复制语言环境并将其更改为 Zend_Currency?

主要问题我认为我的主要问题是我不确定如何处理所有这些不同的语言环境问题。我的首选方法是验证在 bootstrap 的 _initLocale() 中设置的区域设置,这样我可以确定我可以支持它的语言和货币。

谢谢你的建议。

最好的问候,妮可

编辑 1我已经对处理这些问题的方法有了更多的想法。您如何看待这种方法?

  1. Zend_Locale():过滤所有简短的语言环境(没有国家代码)并使用包含您的应用程序支持的语言的白名单(仅语言代码)。如果没有匹配项,请使用您的应用程序提供的默认值。
  2. Zend_Translate:从语言环境的语言代码开始。但是,如果用户更改了首选语言,请保持语言环境不变(可能没有基于新语言代码和旧国家代码的匹配语言环境),只需更改 Zend_Translate 中的语言代码。
  3. Zend_Currency:使用语言环境作为默认值。如果用户更改首选货币,只需更改货币而不是语言环境。因此格式将保持基于旧的区域设置,因为货币的变化并不意味着用户也想更改他的区域设置。

这种方法是否可以接受?如果浏览器区域设置如下,则步骤 1 会出现问题:

  • zh_CN

也许该应用程序确实支持德语,但由于它是一个简短的语言环境,该应用程序将改用 en_US。但我不知道哪种解决方案可以解决这个问题,因为我无法将简短的语言环境“升级”到完整的语言环境。

最佳答案

您强调的问题很常见,我想为您的用户设置语言环境需要做少量工作。

de 到 de_DE 要求您知道他们是否位于德国,但如果您不知道用户所在地,则可以默认为 de_CH,这是您的所在地。

* The user has configured his browser to just give me the language code ('de' instead of 'de_CH')

在您的应用程序中映射它。对于说德语的德国居民,您的映射可以将其转换为 de_DE。或 de_CH,适用于说德语的瑞士居民。或者对于说法语的瑞士居民来说是 fr_CH,对于说英语的人来说则是 en_CH 或 en_DE。所以这解决了2个问题。

需要用户的语言和位置才能准确确定用户的语言环境。

如果您不知道那里的位置,您应该默认使用您自己的默认语言和位置。

链接:Unicode - locality and language mapping

* The user prefers a language which is not supported by my website

你应该有一个默认的语言和货币,如果你在欧洲,那么选择就是你的默认地区和语言,如果你是瑞士人,那么 de_CH 是有意义的。

* The user is from a country where they got a currency which isn't supported by my product order form

在这种情况下,您应该恢复为默认设置。

Zend 在他们的 wiki 上有很多使用 Locales 的例子。在 Zend 中设置位置最常见的地方是 Bootstrap 文件。

我使用此链接来引用 Zend Framework wiki 上对此响应的支持。下面的代码提供了一个小例子,说明 Zend_Locale 类如何在语言环境无效时抛出异常。此时您可以检查位置和语言,并将其与您从浏览器收到的信息结合使用,以准确地为用户设置区域设置。

链接:Zend Locale Introduction

  // within the bootstrap file
try {
$locale = new Zend_Locale('auto');
} catch (Zend_Locale_Exception $e) {
$locale = new Zend_Locale('de');
}
// within your model/controller
$date = new Zend_Date($locale);
$currency = new Zend_Currency($locale)

关于php - 使用货币和语言切换处理语言环境的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4563208/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com