Я нарушаю любую «хорошую практику php» в следующем массиве php, который имеет дело с 3 (человеческими) языками?

Это самый оптимальный способ иметь дело с многоязычным веб-сайтом, о котором я могу думать, прямо сейчас (не уверен), который не включает gettext, zend_translate или любой плагин php или фреймворк.

Я думаю, что это довольно просто: у меня есть 3 языка, и я пишу их «контент» в разных файлах (в виде массивов), а позже я называю этот контент своим index.php как вы можете оценить на следующем рисунке:

alt text http://img31.imageshack.us/img31/1471/codew.png

Я только начинал с php, и мне хотелось бы знать, не нарушаю ли я хорошие методы работы с PHP, если код уязвим для атаки XSS или если я пишу больше кода, чем необходимо.

EDIT: я разместил изображение, чтобы вы могли видеть дерево файлов (я не ленив)

EDIT2: Я использую Vim с темой ir_black и NERDTree.

Solutions Collecting From Web of "Я нарушаю любую «хорошую практику php» в следующем массиве php, который имеет дело с 3 (человеческими) языками?"

Выглядит хорошо, хотя я лично предпочитаю создавать и использовать вспомогательную функцию словаря:

 <?php echo dictionary("showcase_li2"); ?> 

что позволит вам легко переключать методы позже и дает вам в целом больше контроля над вашим словарем. Также с массивом у вас будет проблема с областью – вам придется импортировать ее в каждую функцию, используя global $language; очень надоедливый.

Вы, вероятно, также достигнете точки, когда вам нужно вставить значения в интернационализированную строку:

 You have %1 votes left in the next %2 hours. Sie haben %1 stimmen übrig für die nächsten %2 stunden. Sinulla on %1 ääntä jäljellä seuraavan %2 tunnin ajassa. 

это что-то вспомогательная функция может быть очень полезно для:

 <?php echo dictionary("xyz", $value1, $value2 ); ?> 

$value1 и $value2 будут вставлены в %1 и %2 в строку словаря.

Такая вспомогательная функция может быть легко построена с неограниченным количеством параметров, используя func_get_args () .

Все нормально. Например, локализация punBB работает таким образом. Это очень быстро. Быстрее вызова функции или метода или свойства объекта. Но я вижу проблему с этим подходом, поскольку он не поддерживает языковые резервные копии. Я имею в виду, если у вас нет строки для китайского языка, пусть она будет отображаться на английском языке.

Эта проблема актуальна, когда вы обновляете свою систему, и у вас нет времени переводить все на каждом языке.

Мне лучше использовать что-то вроде

lang.en.php

 $langs['en'] = array( ... ); 

lang.cn.php

 $langs['cn'] = array( ... ); 

[prepend].php (некоторые общие библиотеки)

 define('DEFAULT_LANG', 'en'); include_once('lang.' . DEFAULT_LANG '.php'); include_once('lang.' . $user->lang . '.php'); $lang = array_merge($langs[DEFAULT_LANG], $langs[$user->lang]); 

Похоже на меня, но :

Кажется, что у вас есть локализация для нескольких модулей / сайтов, так почему бы не разбить ее на многомерный массив?

 $localization = array( 'module' => (object)array( 'heading' => 'oh, no!', 'perex' => 'oh, yes!' ) ); 

Мне лично нравится stdClass из массивов с помощью

 $localization = (object)$localization; 

поэтому вы можете использовать

 $localization->module->heading; 

🙂 мои 2 цента

Единственным способом, которым это может быть xss, является то, что у вас есть register_globals = On, и вы не устанавливаете $ lang ['showcase_lil'] или другие $ lang's. Но я не думаю, что вам нужно беспокоиться об этом. Поэтому я думаю, что вы в ясности.

как xss-тест: http://127.0.0.1/whatever.php?lang%5Bshowcase_lil%5D= alert (/ xss /)

Разве не лучше было бы опубликовать код и кратко объяснить эту проблему нам?

В любом случае, каждый язык в своем собственном файле и загрузка его через какой-то компонент языка выглядит нормально. Я бы предпочел использовать какой-то gettext, но это тоже нормально.

Вы должны сделать функцию вызова языковых ключей, а не полагаться на массив, что-то вроде <?php echo lang('yourKey'); ?> <?php echo lang('yourKey'); ?>

Одна вещь, на которую нужно обратить внимание, – интерполяция; это действительно единственное место, где XSS может проникнуть, если ваши настройки сервера разумны. Если вам в какой-то момент нужно что-то сделать в соответствии с переводом «имя проекта $ project->, у него есть члены проекта $ project-> member_count», вам нужно убедиться, что вы избегаете всего HTML, который там находится.

Но кроме этого, все должно быть хорошо.