Я попробовал 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
)
Прежде всего, он не будет работать с вашим кодом. Вы должны будете использовать
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>