Если по какой-то причине вы не можете использовать 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 ();)