澄清:
我有一个类根据当前语言解析“服务器级”.mo
gettext文件(默认为en),遍历每个msgid和msgstr并使用msgid的键/值填充数组和msgstr。
之后我有一个解析“应用程序级”.mo
文件的方法,并在设置的初始数组中将两者合并在一起,因此应用程序级转换优先于服务器端泛型转换。
由于我正在使用合并数组进行字符串翻译,并且我不想在每个页面上读取.mo文件,因此我需要一些方法来实际缓存它并使用缓存版本 if 正在读取的页面与缓存版本的语言/语言环境相同。
所以如果我去我的网站并且默认语言是英语,它会读取英文服务器/应用程序mo文件,合并它们,制作数组,缓存它。如果用户单击的下一页是英语,则将使用缓存版本。否则,如果说是西班牙语,则会再次进行合并,并使用西班牙语缓存版本。
基本上,我将如何缓存语言/特定于语言环境的合并数组?我自己从未实际实现过缓存,但我认为我需要做的就是serialize
我的数组,然后将其写入应用程序级缓存目录,并将文件名保存为“翻译 - {$ locale}'其中$ locale类似于'en',然后使用逻辑来确定我的应用程序中的语言环境,具体取决于是否有可用的缓存版本 - 如果是,unserialize
并使用是什么?
这通常是怎么做的?我非常感谢代码示例。我拥有的数组有大约200-300个键/值对,只是一个两级多维数组:
array(
'en' => array(
'Hello' => '',
),
'es' => array(
'Hello' => 'Hola',
)
);
答案 0 :(得分:1)
我不明白你为什么要缓存多个语言数组?您是否必须为>提供支持?在你的应用程序的单个请求(它的php)中有1种语言吗?
无论如何,你说的很好 - 序列化数组,将其粘贴在缓存中并在将来检索它。如果cache-miss,则重新计算数组。
然后将其写入 应用程序级缓存目录,和 将文件名保存为类似的东西 'translation - {$ locale}'其中$ locale 就像'en',然后使用逻辑 确定我的语言环境 应用程序,基于那看看是否有 缓存版本可用。
文件I / O没有内存访问速度快 - 如果您遇到缓存问题,我建议您查看内存缓存。