澄清:
-
我没有使用GetText PHP模块
/扩展,原因是我必须处理没有包含gettext的服务器,我知道php gettext,但这会使我不得不使用多个库的事情变得复杂。此外,我不想依赖于安装了必要区域设置的用户,以及一些我没有根访问权限的服务器。我还认识到,一般来说,地区存在很多问题。
-
我
必须支持php4
. 是的,它死了。是的,我讨厌它。但我别无选择。
我有一个类解析“服务器级别”
.mo
基于当前语言的getText文件(默认为en),遍历每个msgid和msgstr,并用msgid和msgstr的键/值填充数组。
然后我有了一个方法来解析“应用程序级别”
钼
在所设置的初始数组中,文件和合并这两者,因此应用程序级转换优先于服务器端通用转换。
因为我使用合并数组进行字符串转换,而且我不想在每次读取一页时都读取.mo文件,所以我需要某种方法来实际缓存该文件并使用缓存的版本。
如果
正在读取的页面的语言/区域设置与缓存版本相同。
因此,如果我访问我的网站,默认语言是英语,它将读取英语服务器/应用程序mo文件,合并它们,生成数组,缓存它。如果用户单击的下一页是英语,则将使用缓存版本。否则,如果说西班牙语,则再次进行合并,并使用西班牙语缓存版本。
所以,基本上,我该如何缓存特定于语言/区域设置的合并数组呢?我从未真正实现过缓存,但我想我需要做的就是
serialize
我的数组,然后将其写入应用程序级缓存目录,并将文件名保存为“translation-$locale”,其中$locale类似于“en”,然后使用逻辑确定应用程序中的区域设置,在此基础上查看是否有可用的缓存版本-如果有,
unserialize
就用这个?
这通常是怎么做的吗?我非常感谢代码示例。我拥有的数组大约有200-300个键/值对,只是一个两级多维数组:
array(
'en' => array(
'Hello' => '',
),
'es' => array(
'Hello' => 'Hola',
)
);