PHP本地化

use*_*039 4 php localization

我正在开发一个小项目,包括后端的注册,登录,密码重置和用户管理.我必须为不同的语言创建翻译文件,而不是使用像gettext这样的东西(我一无所知),我决定为每个语言文件使用静态数组实现一个非常简单的方法,如下所示:

function plLang($phrase) {
    $trimmed = trim($phrase);
    static $lang = array(
    /* -----------------------------------
    1. REGISTRATION HTML
    ----------------------------------- */
    'LNG_1'     => 'some text',
    'LNG_2'     => 'some other text',
    etc. ...
    );

    $returnedPhrase = (!array_key_exists($trimmed,$lang)) ? $trimmed : $lang[$trimmed];
    echo $returnedPhrase;
}
Run Code Online (Sandbox Code Playgroud)

它运行正常,在这个阶段非常快,但我的标记现在充满了php语言标签,我不确定我做出了正确的决定.我以前从未这样做过,所以我不知道我期待什么.似乎在我完成所有工作之后,这个文件将长达一英里.

这是一个很好的方法吗?你有什么更好的建议吗?

谢谢!

小智 6

这就是我在我的cms中做的事情:

  • 对于each插件/程序/实体(你的名字)我开发,我创建一个/translations文件夹.
  • 我把所有的翻译都放在那里,名字如el.txt,de.txt,uk.txt等所有语言
  • 我将翻译数据存储在JSON中,因为它易于存储,易于阅读,并且最容易让每个人发布.
  • 文件可以在文件中轻松进行UTF8编码而不会弄乱数据库,从而可以在文件模式下读取它们.(只是JSON.parse他们)
  • 在安装这样的插件时,我只是循环遍历所有翻译并将它们放入数据库中,每个表行的每种语言.(等a data column of TEXT datatype)
  • 对于每个页面渲染,我只查询一次数据库以获取该行所选语言,并调用json_decode()整个结果获取一次; 然后将它放在$ _SESSION中,以便下一次获得当前所选语言的flash-speed翻译字符串.

整个事情是在我考虑性能和兼容性的情况下开发的.

在你的情况下,这样的文件中的行可能是这样的:

en.txt中

{"id":"LNG_1","str":"My word"}
Run Code Online (Sandbox Code Playgroud)

de.txt中

{"id":"LNG_1","str":"Mein Wort"}
Run Code Online (Sandbox Code Playgroud)

当前语言可以存储在会话中,如$ _SESSION ["language"]; 并以此为出发点.然后,您可以阅读以下翻译:

lang("LNG_1");
Run Code Online (Sandbox Code Playgroud)