Использование очень просто:
Во первых, включаем в свой скрипт файл класса:
require "class.phpMultiLang.php";
Затем, делаем то же, что мы делаем с большинством классов, -создаём объект.
В конструкторе задаётся общая директория для языковых файлов ( _LangRoot ), если таковые будут использованы.
Второй параметр - директория для файлов кеша ( _LangCachePath ).
Путь может быть как абсолютным, так и относительным к текущей.
Указанные директории должны существовать, и быть доступными для чтения, а _LangCachePath - также и для записи.
Если какое-либо из этих условий не выполнено, будет сгенирирована ошибка, и значение директории установится в CWD.
Текущая рабочая директория также является значением по умолчанию для обоих аргументов.
$Lang = new phpMultiLang('languages','cache');
Затем необходимо задать индексы и параметры языков:
$Lang -> AssignLanguage('EN','en');
$Lang -> AssignLanguage('RU',null,array('LC_ALL','ru'));
Первый аргумент метода AssignLanguage() - уникальный индекс языка (string), по которому в дальнейшем он будет идентифицироваться.
Второй (необязательный) - путь к директории относительно _LangRoot, в которой должны находиться файлы
для регистрируемого языка.
По умолчанию будет использован _LangRoot.
Третий аргумент используется если Вы хотите установить значение локали для данной языковой конфигурации.
В качестве третьего параметра может быть передан массив, нулевой элемент которого - ИМЯ КОНСТАНТЫ (в формате строки) для функции PHP setlocale(), а
элемент с индексом '1' - имя локали для этой же функции (см. мануал к setlocale()).
Если Вы хотите установить настройки локали, не указывая каталог для языковых файлов,
передайте NULL в качестве второго параметра
Если на момент вызова AssignLanguage() директория неизвестна,
можно задать её и позже
с помощью вызова SetLanguageDir(), передав в качестве параметров индекс языка и имя директории.
Например:
$Lang -> SetLanguageDir('RU','ru');
После этого мы указываем, где брать необходимые данные.
Для этого используется метод AssignLanguageSource().
В качестве первого аргумента передаётся индекс языка, для которого добавляются данные.
В качестве второго может быть передано имя файла(относительно директории с файлами,
определённой для этого языка), доступного для чтения, либо массив, непосредственно содержащий данные.
$Lang -> AssignLanguageSource('RU','russian.lang',3600);
$Lang -> AssignLanguageSource('EN','english.lang',3600);
$Lang -> AssignLanguageSource('RU',array("some_index1"=>"Какая-то строка"));
$Lang -> AssignLanguageSource('RU',array("some_index2"=>"Cтрока с %sмодификаторами%s"));
Третий параметр - время устаревания кеша данного файла(в секундах),
имеет смысл только при добавлении файла и при использовании для данного языка режима кеширования:
После того, как мы решим, какой язык нам понадобится,
мы должны будем инициализировать его, передав его индекс(тот, который задали вызовом AssignLanguage),
в качестве параметра в метод SetLanguage():
$Lang -> SetLanguage('RU', TRUE);
Если второй параметр == TRUE, то для данного языка включается режим кеширования файлов исходных данных.
В момент вызова этого метода, в спучае, если были заданы настройки локали для языка (см. метод AssignLanguage()),
произойдёт вызов setlocale() с переданными ранее параметрами.
Всё, что нам теперь осталось, -вывести обработанные данные.
Это делается путём вызова метода GetString(),
в качестве параметра для которого необходимо передать индекс нужной нам строки:
echo $Lang->GetString("some_index1");
echo $Lang->GetString("some_index2");
Выведет соответственно:
Какая-то строка
и
Строка с %s модификаторами %s
Также существует возможность дополнительного форматирования строки,
содержащей sprintf-модификаторы(в данном примере - строка под индексом "some_index2")
во время вывода с использованием метода GetFString():
echo $Lang->GetFString("some_index2",array("<font color=#008080><b>","</b></font>"));
Выведет:
Строка с модификаторами
В качестве первого параметра GetFString() принимает индекс нужной строки.
В качестве второго - массив, содержащий данные, подлежащие форматированной вставке в строку.
Имена ключей значения не имеют. Значения обрабатываются в том порядке, в котором они заданы в массиве.
Если модификаторов в строке окажется меньше, чем значений в массиве, лишние значения игнорируются.
Если наоборот, -модификатор, соответствующее значение для которого не найдено,
возвращается без изменений.
Ещё одна возможность, которая может пригодиться, -динамическое изменение строки.
Для этого служит метод GetStringReference().
Если вызвать его подобным образом:
$d =&$Lang->GetStringReference('some_index1');
то $d окажется ссылкой на строку под индексом "some_index1",
и посредством изменения $d будет возможно напрямую изменять содержимое строки "some_index1":
$d = "Изменённая строка";
echo $Lang->GetString("some_index1");
Выведет:
Изменённая строка
Наконец, ещё два метода, которые могут пригодиться:
- GetLanguage() - возвращает индекс текущего используемого языка.
и
- GetLocale() - возвращает текущую установленную локаль, если она была установлена.
.