Мой многоязычный веб-сайт с базовым php (без zend_translate, gettext и т. Д.) У меня будут проблемы в будущем?

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

Итак, я закончил этот учебник:

http://www.bitrepository.com/php-how-to-add-multi-language-support-to-a-website.html

Если автор использует только базовый php (не уверен), и, похоже, он работает, но я не совсем уверен, хорошая ли это (или обычная) практика или если это может вызвать у меня проблемы в будущем (добавление и удаление группы код).

Вот:

common.php :

 <?php session_start(); header('Cache-control: private'); // IE 6 FIX if(isSet($_GET['lang'])) { $lang = $_GET['lang']; // register the session and set the cookie $_SESSION['lang'] = $lang; setcookie("lang", $lang, time() + (3600 * 24 * 30)); } else if(isSet($_SESSION['lang'])) { $lang = $_SESSION['lang']; } else if(isSet($_COOKIE['lang'])) { $lang = $_COOKIE['lang']; } else { $lang = 'en'; } switch ($lang) { case 'en': $lang_file = 'lang.en.php'; break; case 'de': $lang_file = 'lang.es.php'; break; default: $lang_file = 'lang.en.php'; } include_once 'languages/'.$lang_file; ?> 

Языки / lang.en.php:

 <?php /* ----------------- Language: English ----------------- */ define('GREETING, Hello World'); ?> 

Языки / lang.es.php:

 <?php /* ----------------- Language: Espanol ----------------- */ define('GREETING, Hola Mundo'); ?> 

index.php:

 include_once 'common.php'; <p><?php echo LANG_TEST; ?></p> 

Итак, если я хочу изменить его на испанский, я просто добавляю ?lang=es в URL (после index.php )

Solutions Collecting From Web of "Мой многоязычный веб-сайт с базовым php (без zend_translate, gettext и т. Д.) У меня будут проблемы в будущем?"

Прежде всего, он не будет работать с вашим кодом. Вы должны будете использовать

 define('GREETING', 'Hello World'). 

Проверьте руководство по PHP для определения .

Во-вторых, использование контингентов для этого – ужасная идея. Вы засоряете глобальное пространство имен тоннами констант и постоянным намечением на риск. См. Руководство пользователя по именам пользователей .

Если вы не хотите использовать Zend_Translate (вам не нужно использовать всю инфраструктуру для этого) и не можете использовать gettext , я предлагаю вам использовать массивы для хранения переводов, например, что-то вроде этого:

 $lang = array( 'greeting' => 'Hello World' 'something' => 'else' ); 

а затем вы можете использовать его в шаблоне:

 <h1><?php echo $lang['greeting'] ?></h1> 

Таким образом, вам нужно только убедиться, что $lang еще не определен в глобальной области.

Некоторые люди предпочитают использовать язык по умолчанию вместо идентификаторов перевода, например, они предпочитают писать

 <h1><?php echo t('Hello World') ?></h1> 

где t будет функционировать, сопоставляя входную строку с выходной строкой. Массив перевода должен будет содержать полные предложения и сопоставить их с другими языками, например

 $lang = array( 'Hello World' => 'Hola Mundo' ); 

Но, конечно, вы могли бы просто получить доступ к этому с помощью $lang['Hello World'] . Это просто неудобно для длинных строк. Многие функции перевода позволяют вам передать дополнительные параметры, чтобы позволить что-то вроде этого:

 $lang = array( 'currentTime' => 'The current time is %s' ); <h1><?php echo t('currentTime', date('H:i:s')) ?></h1>