Intereting Posts
Аудио-элемент HTML5 с динамическим источником Есть ли идиоматический способ получить потенциально неопределенный ключ из массива в PHP? Запустить приложение php с помощью tomcat? Преобразование простых текстовых URL в гиперссылки HTML в PHP Чтение и скандир Получить исходный URL-адрес реферера из Google Search с помощью PHP? Как управлять различными настройками php.ini в процессе производства и разработки? как запретить доступ к функциям контроллера в системе codeigniter Есть ли доступный PHP-скрипт, который может захватить скриншот URL-адреса? Выберите в раскрывающемся меню и перезагрузите страницу Преобразование массивов в другой формат (PHP) Как узнать, вызывается ли страница через Ajax или ее собственный Структурирует тип данных в php? laravel – привязка к пользовательским шрифтам Любой надежный API, доступный для определения города и страны пользователя с IP-адреса

Создание веб-страницы с помощью Multilanguage в PHP

Я хотел бы разработать многоязычную страницу на PHP, например, на английском / немецком / японском языке. Поэтому, когда я нажимаю на немецкий язык, язык страницы будет изменяться на немецкий, затем я нажму английский, чтобы он изменился на английский. Пожалуйста, помогите мне сделать это. Заранее спасибо….

Как ни странно, многие разработчики php, похоже, думают, что все естественные языки имеют одну и ту же грамматику. Создание каркаса перевода без параметров просто невозможно. Хотя строка $lang['welcomeTo'] $sitename может правильно переводиться для большинства языков (Welcome to stackoverflow), она терпит неудачу для турецкого языка, например, где должно быть $sitename $lang['welcomeTo'] (stackoverflow'a hos geldiniz) или для немецкого, где в любом случае это возможно (Willkommen auf stackoverflow / Stackoverflow heißt Sie willkommen). И это становится хуже, когда вы пытаетесь перевести предложения с несколькими переменными.

Единственный вариант – использовать параметризованные переводы (скажем: функции)

 Language::getCurrentLanguage()->translate('welcomeTo', array('sitename' => $sitename)); # Translation file for english (configfile-style): welcomeTo=Welcome to $sitename # Translation file for turkish: welcomeTo=$sitename'a hos geldiniz # Translation file for german: welcomeTo=Willkommen auf $sitename # Or welcomeTo=$sitename heißt sie willkommen 

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

Мы используем способ http://php.net/manual/en/intro.gettext.php . Хорошо работает, и все мы уже работали с http://www.gnu.org/software/gettext/manual/gettext.html в других проектах (не PHP-проектах). Так было легко начать.

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

Вы можете использовать сеансы для хранения языка, который пользователь установил.

 $_SESSION["lang"] = "en"; $_SESSION["lang"] = $_GET["lang"]; // or this way, then you can do example.com/?lang=en 

Затем создайте файл с массивом перевода.

 $lang["en"]["welcome"] = "Welcome to the site"; 

И тогда в другом файле может быть немецкий перевод

 $lang["de"]["welcome"] = "Willkommen auf der Webseite"; 

И тогда вы просто вызовите массив $ lang с сеансом

 echo $lang[$_SESSION["lang"]]["welcome"]; 

Это упрощенная версия, вы также можете использовать объекты для хранения перевода. Но я не рекомендую использовать базу данных для хранения перевода, поскольку это связано с очень большим SELECT или очень многими.

Обычно вам нужен веб-сайт с поддержкой UTF-8. Это устанавливается через заголовок файла. (и может быть задано с помощью функции header ()).

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

Затем, чтобы узнать, на каком языке запрашивается пользователь, я бы использовал $ _SESSION для хранения выбранного вами языка.

Тогда ваш языковой файл может выглядеть так:

 $lang["en"]["Welcome"] = "Welcome to the site"; 

И тогда у китайского файла приветствия будет что-то вроде этого

 $lang["ch"]["Welcome"] = "歡迎"; 

Затем в месте, которое вы хотите распечатать. Вы бы сделали

 echo $lang[$_SESSION["lang"]]["Welcome"]; 

Одним из эффективных способов создания многоязычных веб-сайтов является не использование жестко закодированных ярлыков, а получение их из соответствующего языкового файла, потому что в основном то, что вам нужно сделать, – это ориентировать разных пользователей на вашем сайте. Если бы вы отображали данные, хранящиеся в базе данных, возможно, вам стоит рассмотреть возможность добавления некоторых таблиц базы данных, хранящих переводы на разных языках. Чтобы выполнить некоторую работу в C #, например, вы можете использовать файлы ресурсов, хранящие значения меток.

В большинстве инфраструктур будут помощники, которые помогут вам в этом. Здесь используются Codeigniter и cakePHP для стартеров.

Вы можете просто набрать часть содержимого вашего HTML в любом наборе символов, который вам нужен. Просто не забудьте правильно установить кодировку и кодировку содержимого . Например, установите его в UTF-8 для простого юникода.

Rails отлично справляется с этим. Вы можете проверить это на предмет того, как это сделать.

Как сказал Грегор; gettext – это профессиональный способ для меня …

вот хорошая ссылка на статью

Но я хочу добавить некоторые важные моменты

I- С помощью этого метода u вам придется использовать файлы .po и .mo, если вы создаете po-файл под окнами, вы не можете использовать его под Linux. Или файл .po, созданный под Linux, не может использоваться под окнами.

II-linux может создавать сами файлы .po, но в Windows я предлагаю вам использовать такую ​​программу, как poedit (которую вы можете получить со своего сайта: http://www.poedit.net/ )

III. Некоторые локали имеют проблемы характера. Но я не помню, кто они? 🙁

Я лично перевел свои полные взгляды. Таким образом, у вас будет файловая структура, например:

 application/ someScript.php views/ de/ someView.php en/ someView.php models/ someModel.php 

И тогда, как предложил Олафур, сохраните язык в переменной сеанса и сделайте что-нибудь подобное.

  session_start(); //dont forget to call this somewhere $_SESSION['lang'] = 'en'; //and then in somewehere else: include 'views/'.$_SESSION['lang'].'/someView.php'; //or whatever method is used to include views. 

РЕДАКТИРОВАТЬ
Вы должны отделить вас от своего сценария. Таким образом, у вас будет скрипт, который выполняет некоторые скриптовые записи, например, получение искомой метки времени UNIX, это будет someScript.php в приведенном выше примере:

  //someScript.php $timestamp = time(); 

Теперь мы могли бы добавить все результаты непосредственно под этим, но это было бы очень легко ремонтируемо, поэтому мы делаем вывод в другом файле, который здесь будет файлами someView.php. Таким образом, someView.php в папке «en» будет:

 <html> <head> <title>Currect UNIX timestamp!</title> </head> <body> <p>The current UNIX timestamp is: <?php echo $timestamp; ?> seconds</p> </body></html> 

И в папке «de» это будет практически тот же файл, но со всем текстом на немецком языке.

Теперь все, что нам нужно сделать, это включить эти выходные файлы в наш файл someScript.php, поэтому мы добавим следующую строку в конец этого скрипта:

  include '../views/'.$_SESSION['lang'].'/someView.php'; 

Вы должны прочитать больше на MVC здесь: http://www.onlamp.com/pub/a/php/2005/09/15/mvc_intro.html

Примечание. Этот пример не является строгим MVC, но это должно дать вам эту идею.