【问题标题】:multi-language site with multiple locales misbehaviour具有多个区域设置不当行为的多语言站点
【发布时间】:2012-03-29 08:31:49
【问题描述】:

在我公司的一个项目中,有一个提供 6 种语言的网站。该网站向客户/会员发送一些电子邮件。每个短语/单词都存储在数据库中,并且在网站上都运行良好。我们的主要问题出现在电子邮件中。

在每封电子邮件中都有每日报告。我们使用 set_locale() 来定义每种语言并将日期名称(也包括月份)“显示”为正确选择的语言。这工作正常。

在某些情况下,要发送不止一封电子邮件(使用 2 种不同的语言) - 我们遇到了问题。 电子邮件中的每个信息都显示正确 - 来自数据库的文本/翻译。 日期名称(以及月份)仅以第一语言出现在两封电子邮件中。 因此,如果第一封电子邮件是德语,第二封是法语,那么法语电子邮件将包含法语的所有内容,除了日期名称将是德语(即使我们在发送第二封电子邮件之前再次执行 set_locale)

这是为什么呢?这是一些 set_locale 的不良行为吗?我们如何预防/解决这个问题?感谢您提供任何见解/提示

编辑: 我们使用的代码是:setlocale(LC_ALL, $setLocale); 其中 setLocale 看起来像“fr_FR.UTF8”

【问题讨论】:

  • 由于setLocale() 不是线程安全的,在负载下可能会出现不一致。发生这种情况时,您的网络服务器是否处于高负载状态?
  • 您使用的是setlocale() 参数,对吗?如果没有看到一些代码,就很难说出具体是什么问题。
  • @S Morgan:我在我的问题中添加了 set locale 部分
  • @phpdev 我没有注意到服务器的负载。只是当我们以不同的语言发送 2 封电子邮件时,就会出现这个“错误”。是否可以在每个线程中设置 set_locale?如果是这样,那么我认为我们无能为力

标签: php locale


【解决方案1】:

你应该使用这个模块(来自 Zend 框架):http://framework.zend.com/manual/en/zend.locale.html 识别浏览器上下文语言非常有用。

您可以使用 Zend Translate 进行翻译:

http://framework.zend.com/manual/en/zend.translate.html

真的很有用!

【讨论】:

  • 我们不希望更改我们的脚本/逻辑。我们只是问我们如何纠正/改进当前的
猜你喜欢
  • 1970-01-01
  • 2011-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多