Как реализовать перевод в существующем веб-проекте? - PullRequest
5 голосов
/ 01 октября 2011

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

Этот проект имеет 3 вида текстовых строк:

  • Строки, написанные на PHP : Например: echo "Hello world"
  • Короткие строки в полях базы данных : поля базы данных, содержащие текст, например списки названий стран.
  • Встроенные строки HTML (статические файлы) : Например, статический файл, содержащий файл HTML: <html>...<body>...<p>Hello world</p> ...
  • Встроенные строки HTML (база данных) : То же, что и выше, но файл HTML вставлен в текстовое поле в базе данных.

Во-первых, это не проблема, потому что строк очень мало и они очень локализованы. Второй случай также очень локализован, так что это не очень большая проблема. Но последние 2 случая неуправляемы: сотни HTML-файлов (статические + базы данных) с сотнями строк внутри.

Итак, я ищу автоматизированный метод для извлечения всех строк в узнаваемый формат, передачи их переводчикам и последующего размещения моих страниц на других языках.

Существует ли что-то подобное или я должен создать собственное решение? В таком случае, есть идеи?

1 Ответ

8 голосов
/ 01 октября 2011

Хорошо.I18n (Интернационализация) - довольно странная вещь.Вы должны внести много изменений в свой код, чтобы сделать его многоязычным.

Для меня лучшее решение - это перенести его на CakePHP, который уже поддерживает I18n во многих слоях.Но это решение заставит вас потратить много времени.Итак ....

Быстрый метод перевода внутренних текстов, таких как

echo "Hello World"

или

<p>Hello World</p>

. Создает соответствующий языковой файл с расширением php для каждого.язык (то есть: es.php, el.php, en.php и т. д.), который будет содержать массив с ключами и значениями, который будет выглядеть следующим образом:

$l = array(
   'WEB_TITLE' => 'My web site title',
   'GEN_HELLO' => 'Hello World',
   'MENU_HOME' => 'Home',
   'MENU_PRODUCTS' => 'Products',
   ...
);

Затем на свой веб-сайт вынеобходимо загрузить соответствующий языковой файл в самом начале каждой страницы, и на вашей странице вы должны сделать что-то вроде этого:

echo $l['GEN_HELLO'];

и

<p><?php echo $l['GEN_HELLO']; ?></p>

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

Допустим, у вас есть эта таблица

ARTICLES
id    Title    Content   Date   Active

В приведенной выше структуре вы должны сделать заголовок и содержимое I18n.совместимы.Чтобы перевести эти столбцы, вы должны создать еще одну таблицу с именем ARTICLES_L, которая будет выглядеть следующим образом:

ARTICLES_L
ID    POST_ID    COLUMN    LANGUAGE    CONTENT

В приведенной выше таблице вы должны сохранить идентификатор статьи, столбец, к которому относится перевод (т.е.: title) язык и переведенный контент.

Так что, если у вас есть эти записи в ARTICLES

ARTICLES
id    Title    Content            Date                 Active
1     Title 1  This is content 1  2011-10-01 13:28:45  1
2     Title 2  This is content 2  2011-10-01 13:28:45  1
3     Title 3  This is content 3  2011-10-01 13:28:45  1

Таблица ARTICLES_L будет содержать эти записи

ARTICLES_L
ID    POST_ID    COLUMN    LANGUAGE    CONTENT
1     1          title     es_ES       Título 1
2     1          content   es_ES       Este es el contenido 1
3     1          title     el_GR       Τίτλος 1
4     1          content   el_GR       Αυτό είναι το περιεχόμενο 1
5     2          title     es_ES       Título 2
6     2          content   es_ES       Este es el contenido 1
....

На самом деле есть много других задач, которые вам нужно выполнить, но эта идея лежит в основе решения, которое я вам даю:)

Удачи

PN: Еще лучше для переднего концавашего приложения использовать это http://php.net/manual/en/book.gettext.php Этот способ используется в WordPress и CakePHP, но на очень низком уровне:Просто взгляни.Это будет лучше, чем создание файлов для каждого языка.

...