小编Nic*_*ico的帖子

使用货币和语言切换处理区域设置的最佳做法

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

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

目前我使用Zend_Locale :: findLocale()来获取用户的语言环境.使用我的浏览器设置,我得到'de_CH'并且效果很好.但是有一些问题:

  • 用户已将其浏览器配置为只给我语言代码('de'而不是'de_CH')
  • 用户更喜欢我的网站不支持的语言
  • 用户来自他们获得我的产品订单表格不支持的货币的国家/地区

只是语言代码 语言代码足以处理Zend_Translate,但Zend_Currency需要更多信息.我认为没有解决方案可以使用来自每个可能用户的国家/地区代码来获取完整的语言环境.我的问题是:你如何处理这些情况?如果缺少国家/地区代码并使用默认国家/地区代码,您是否检查了引导程序的_initLocale()?是否有任何Zend Framework方法可以做到这一点?

不支持的语言 如果用户语言是'fr',我想使用默认语言,因为我们的网站不支持法语.是否有更好的可能性,而不是在bootstrap中添加白名单数组?例如Zend_Translate的方法?

不支持的货币 如果支持用户的语言但不支持其货币,该怎么办?我应该更改引导程序中的语言环境,还是应该复制语言环境并将其更改为Zend_Currency?

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

谢谢你的建议.

最好的问候,尼科

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

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

这种方法是否可以接受?如果浏览器语言环境设置如下,则步骤1存在问题:

  • EN_US

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

php frameworks locale zend-framework currency

10
推荐指数
1
解决办法
2049
查看次数

标签 统计

currency ×1

frameworks ×1

locale ×1

php ×1

zend-framework ×1