Что я должен знать, чтобы заставить мое приложение I18N работать на японском языке?

#php #utf-8 #internationalization #gettext #utf-16

#php #utf-8 #интернационализация #gettext #utf-16

Вопрос:

Я работаю над приложением I18N, которое будет размещено на японском языке, я не знаю ни одного слова на японском, и сначала мне интересно, достаточно ли utf8 для этого языка.

Обычно для европейского языка достаточно utf8, и мне нужно настроить кодировку / параметры сортировки моей базы данных для использования utf8_general_ci (в MySQL) и мои html-представления в utf8, и этого достаточно.

Но как насчет японского, можно ли что-то еще сделать?

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

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

Есть ли какие-либо рекомендации?

Кстати, я планирую использовать gettext, я почти уверен, что он поддерживает такие языки без каких-либо проблем, поскольку это стандарт де-факто почти для всех программ GNU, но какие-либо отзывы?

Комментарии:

1. Посмотрите: yahoo.jp имеет кодировку UTF-8. Я думаю, это означает, что с UTF-8 все в порядке.

Ответ №1:

Пара моментов:

  • UTF-8 подходит для внутренних данных вашего приложения, но если вам нужно обработать предоставленные пользователем документы (например, загружаемые файлы), они могут использовать другие кодировки, такие как Shift-JIS или ISO-2022-JP
  • В японском тексте не используются пробелы между словами. Если вашему приложению где-то нужно разделить текст на слова, у вас проблема.
  • Помимо текста, форматы даты и чисел различаются
  • Общая сортировка может не привести к удобному порядку сортировки японского текста — если ваше приложение содержит большие списки, в которых людям приходится что-то искать, это может быть проблемой.

Комментарии:

1. Спасибо, это отличный контрольный список. Что-нибудь о направлении текста? Я думаю, что японский язык может быть написан в любом смысле, но может ли быть стандарт в Интернете, чтобы избежать проблем с языком rtl?

2. @Boris: Японский — это не rtl. Традиционно оно написано вертикальными линиями, но на электронных носителях этого практически никогда не делается. Однако Rtl связан с арабским и ивритом, и вы можете получить странные эффекты при смешивании их с текстом ltr. Но я знаю об этой проблеме не намного больше, чем то, что она существует — если вы хотите серьезно поддерживать языки rtl, вам придется изучить ее.

3. Я только что проверил, и вы правы, я был почти уверен, что где-то читал, что японский язык может быть RTL. Однако direction сейчас довольно злая предварительная оптимизация, но мне все равно стало любопытно. Спасибо

4. @Boris: ну, если вы пишете японский или китайский вертикально, строки становятся rtl.

Ответ №2:

Да, Unicode содержит все кодовые точки, необходимые для отображения английского, французского, японского, русского и практически любого языка в мире (включая тайваньский, чероки, эсперанто, действительно чего угодно, кроме эльфийского). Вот для чего это нужно. Однако из-за природы UTF8 текст на более эзотерических языках займет на несколько байт больше для хранения.

Gettext широко используется, и ваша сборка PHP, вероятно, даже включает его. Смотрите http://php.net/gettext для получения подробной информации об использовании.

Ответ №3:

Просто добавлю этот интересный веб-сайт, который поможет создать приложение I18N: http://www.i18nguy.com /

Ответ №4:

Если вы храните текст в текстовых файлах, то это выглядит следующим образом:

Это основная структура папок для language:

 -lang
      -en
      -fr
      -jp
      etc
  

каждая вложенная папка, en, fr … содержит одни и те же файлы, одни и те же переменные с разными значениями.

Например, в lang/en/links.txt Вы бы

 class txtLinks 
{

public static $menu="Menu";
public static $products="Show products";
....

class txtErrors 
{

public static $wrongUName="This user  does not exists";
....
  

Затем, когда скрипт загружается, вы делаете

 if(en)
define(__LANG,'en')
if(fr)
define(__LANG,'fr')
...
  

Затем

 include('lang'.__LANG.'what ever file you want')
  

Тогда это фрагмент из вашего php-скрипта:

 echo txtLink::$menu etc...
  

Если вы используете базу данных аналогичным образом, где вместо файлов у вас есть таблицы.

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

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

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