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

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

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

А как насчет японцев, есть ли еще чем заняться?

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

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

Есть ли лучшие практики?

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


person Boris Guéry    schedule 01.06.2011    source источник
comment
Посмотрите: yahoo.jp закодирован в UTF-8. Я думаю, это означает, что UTF-8 в порядке.   -  person Félix Saparelli    schedule 01.06.2011


Ответы (4)


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

  • UTF-8 подходит для внутренних данных вашего приложения, но если вам нужно обрабатывать документы, предоставленные пользователем (например, загрузки), они могут использовать другие кодировки, такие как Shift-JIS или ISO-2022-JP.
  • В японском тексте не используются пробелы между словами. Если вашему приложению нужно где-то разделить текст на слова, у вас проблема.
  • Помимо текста, различаются форматы даты и числа.
  • Общая сортировка может не привести к полезному порядку сортировки для японского текста - если ваше приложение включает в себя большие списки, в которых люди должны искать что-то, это может быть проблемой.
person Michael Borgwardt    schedule 01.06.2011
comment
Спасибо, это отличный контрольный список. Что-нибудь о направлении текста? Я думаю, что на японском можно писать в любом смысле, но может ли быть стандарт в сети, чтобы избежать проблем с языком RTL? - person Boris Guéry; 08.06.2011
comment
@Boris: Японский - это не RTL. Обычно это пишется вертикальными линиями, но в электронных средствах массовой информации этого почти никогда не бывает. Однако Rtl вызывает беспокойство у арабского и иврита, и вы можете получить странные эффекты при смешивании их с текстом ltr. Но я не знаю больше об этой проблеме, чем то, что она существует - если вы хотите серьезно поддерживать языки RTL, вам придется изучить ее. - person Michael Borgwardt; 08.06.2011
comment
Я только что проверил, и вы правы, я был почти уверен, что где-то читал, что японский может быть RTL. Тем не менее, направление сейчас довольно плохо до оптимизации, но мне все равно стало любопытно. Спасибо - person Boris Guéry; 08.06.2011
comment
@Boris: ну, если писать вертикально по-японски или по-китайски, строки идут rtl. - person Michael Borgwardt; 09.06.2011

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

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

person Wander Nauta    schedule 01.06.2011

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

person Boris Guéry    schedule 08.06.2011

Если вы храните текст в текстовых файлах, это выглядит так:

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

-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, вы можете разделить языковые файлы в соответствии с контроллерами, чтобы не загружать огромный текстовый файл.

person Melsi    schedule 01.06.2011