2009-07-21 5 views
0

Я пишу Программное обеспечение для управления контентом на PHP (которое не должно быть больше 3kb при минировании), но какой движок я должен использовать для языков (английский, голландский, немецкий, китайский и т. Д.)? Я думал о создании функции под названиемPHP язык движок

function _(){} 

, который считывает строки из файла (файл .ini или аналогичный файл). Но есть ли у кого-нибудь (возможно, как можно меньше кода) двигатель, который может быть меньше или быстрее?

Я не уверен, что эти двигатели существуют, если нет, скажите, и я буду использовать функцию _().

+5

о_О Вы не Минимизировать PHP код! – Greg

+0

Ow да, но я также включу неминифицированный код в пакет – 2009-07-21 16:41:00

+4

Согласен с Грегом. Исходный код PHP не передается по сети, поэтому для вас это не поможет. Если вы хотите повысить производительность, вы должны использовать кеш-код операции, такой как APC. – sixthgear

ответ

1

Вы не можете использовать _(), потому что это встроенная функция интернационализации. Вы можете перевернуть свою собственную функцию (назовите ее __()) или используйте встроенную систему, в которой используется широко распространенная система gettext.

0

Drupal, например, использует функцию t() для этой цели.

3

Если бы я тебя, я бы свою функцию перевода, как например (я считаю, это очень похоже на GetText): сделать это в Sprintf() - как функция и перевести на основе строки формата, например, так:

function __() { 
    $a = func_get_args(); 
    $a[0] = lookup_translation($a[0]); 
    return call_user_func_array("sprintf", $a); 
} 

Теперь вы можете использовать функцию просто, как это:

echo __("Thanks for logging in, %s!", $username); 

И в файле данных где-то есть:

"Thanks for logging in, %s!"="Merci pour enlogger, %s!" (*) 

Преимущества этого являются:

  • Вы не должны придумать идентификаторы для каждого отдельного сообщения: __("login_message", $username), __("logout_message", $username) и т.д ...
  • Вы не сразу должны написать перевод строка, которую вы должны были бы использовать, если бы вы использовали идентификатор. Вы можете отложить перевод до конца, как только закончите кодирование, и все работает на английском языке.
  • (Точно) Вы не должны переводить все строки для всех языков сразу, но вы можете сделать это на кусках

Для максимального удобства, я сделал бы журнал __ функции непереведенных сообщений где-нибудь, так вам не нужно идти на охоту за нетранслированными струнами. Пусть система сообщит вам, что нужно перевести!

(*) Отказ от ответственности: Я не говорю по-французски;)

Смежные вопросы