【问题标题】:php function for language translation用于语言翻译的php函数
【发布时间】:2011-12-14 21:47:11
【问题描述】:

对于 CMS 的多语言使用,他们通过类似于

的功能翻译术语
function __($word) {
include 'fr.php';
if(!empty($lang[$word])) {$translated=$lang[$word];
} else {
$translated = $word;
} 
return $translated;
}
  1. 由于我们需要在一个php页面中多次使用这个函数,因为所有的单词和短语都会被__(' ');函数每次都需要包含语言时间,还是第一次加载后会为函数缓存?

  2. 由于语言文件包含整个网站使用的单词和短语的完整列表(数千个键/值),因此 pho 需要在每次访问页面时将这个长数组加载到内存中。向 CMS 添加多语言功能真的是最好的方法吗?

【问题讨论】:

    标签: php content-management-system multilingual


    【解决方案1】:

    如果你因为某种原因不能使用gettext(),你最好用这样的东西,把它放入一个包含语言字符串作为静态数组的对象中,比如:

    class Message {
    
      private static $_messages = array();
    
      public static function setMessageLibrary($sMessageLibrary) {
        require_once $sMessageLibrary;
        self::$_messages = $aMsgs;
      }
    
      public static function getMessage($sMessageId) {
        return isset(self::$_messages[$sMessageId]) ? self::$_messages[$sMessageId] : "";
      }
    }
    

    您的消息库文件(包含在 setMessageLibrary() 静态函数中),每种语言都有一个,其中需要一个名为 $aMsgs 的变量,它可能类似于:

    // Messages for fr-FR
    $aMsgs = array(
      'hello_everybody' => "Bonjour tout le monde"
    
      ...
    
      and so on
    );
    

    由于它都是静态的,但在对象内,您可以通过在脚本开头设置它来有效地缓存包含的语言文件。

    <?php
    Message::setMessageLibrary('/lang/fr-FR/messages.inc.php');
    echo Message::getMessage('hello_world');
    echo Message::getMessage('another_message');
    echo Message::getMessage('yet_another_message');
    ?>
    

    然后所有三个消息都将引用存储在Message::$_messages 中的单一语言数组

    那里没有消毒,也没有健全性检查,但无论如何这是基本原则......如果你不能使用 gettext() ;)

    【讨论】:

      【解决方案2】:

      1) 不会被缓存,请改用include_once

      2) 不,我认为 gettext 是另一种/更好的方式

      【讨论】:

      • +1,我忘了提到include_once,但无论如何我都会放弃整个方法;-)
      【解决方案3】:
      1. IIRC,它会做一些缓存。
      2. 不,不是。查看gettext

      【讨论】:

        猜你喜欢
        • 2012-10-21
        • 2011-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-03
        • 1970-01-01
        相关资源
        最近更新 更多