php字符语言,在PHP应用程序中实现国际化(语言字符串)

我想建立一个可以处理提取语言环境字符串以支持国际化的CMS。我计划将字符串存储在数据库中,然后在数据库和应用程序之间放置一个密钥/值缓存(如memcache),以防止性能下降,从而使数据库的每个页面进行翻译。

这比使用带有字符串数组的PHP文件更复杂 – 但是当您有2000个翻译行时,该方法是非常低效的。

我想到了使用gettext,但是我不确定CMS的用户将会喜欢使用gettext文件。如果字符串存储在数据库中,那么可以设置一个不错的管理系统,以便他们可以随时进行更改,并且RAM中的缓存将确保提取这些字符串的速度快于或快于gettext。考虑到not even the zend framework uses it,我也不觉得安全使用PHP扩展。

这种方法有什么问题吗?

更新

我想我也许会为思想添加更多的食物。字符串翻译的一个问题是它们不支持日期,金钱或条件语句。不过,由于intl现在有MessageFormatter这是真正需要使用的。

// Load string from gettext file

$string = _("{0} resulted in {1,choice,0#no errors|1#single error|1

// Format using the current locale

msgfmt_format_message(setlocale(LC_ALL, 0), $string, array('Update', 3));

另一个注意事项,我不喜欢gettext的其中一个事情是将文本嵌入到应用程序中。这意味着负责主要翻译(通常为英语)的团队必须能够访问项目源代码,以便在所有地方进行默认语句的更改。这几乎与具有SQL意大利面代码的应用程序一样糟糕。

所以,使用_(‘error.404_not_found’)这样的键是有意义的,然后允许内容编写者和翻译者担心PO / MO文件,而不会弄乱代码。

但是,如果给定键不存在gettext转换,则无法回退到默认值(就像您可以使用自定义处理程序)。这意味着你可能会在你的代码中写入一些文字,或者给没有语言环境翻译的用户显示“error.404_not_found”。

另外,我不知道使用PHP的gettext的任何大型项目。我会感谢任何实际依赖于本机PHP gettext扩展的系统的良好使用(并因此测试)的链接。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值