2010-03-24 2 views
1

Я разрабатываю веб-сайт, который будет доступен на разных языках. Это настройка LAMP (Linux, Apache, MySQL, PHP), и она использует Smarty, главным образом для механизма шаблонов.
Способ, которым мы в настоящее время переводим, - это самозаписываемый плагин smarty, который распознает определенные теги в файлах HTML и найдет соответствующий тег в ранее определенном языковом файле.

HTML, может выглядеть следующим образом:Что является самым эффективным способом создания многоязычного сайта

<p>Hi, welcome to $#gamedesc;!</p> 

И языковый файл может выглядеть следующим образом:

gamedesc:Poing 2009$; 
welcome:this is another tag$; 

Какой бы тогда выход

<p>Hi, welcome to Poing 2009!</p> 


Эта система очень но это довольно сложно контролировать, если я хотел бы отслеживать то, что было переведено до сих пор, или предоставить определенным пользователям права переводить только определенные теги.
Я рассматривал некоторые альтернативные способы приблизиться к этому, заменив текстовый файл на файлы XML, которые могут хранить некоторые дополнительные метаданные или, возможно, хранить все тексты в базе данных и извлекать их там.
Вопрос в том, что было бы лучшим способом сделать эту систему пригодной для обслуживания и хорошо работать с высоким пользовательским трафиком? Могут ли быть какие-то (легкие) плагины, на которые я мог бы взглянуть?

ответ

3

Вы можете нажать на gettext. Это так, как это делается в большинстве Linux-приложений C/C++, и это расширение для PHP тоже. Идея не очень отличается от того, что вы уже делаете, но есть инструменты, которые облегчают перевод переводов (то есть poedit).

Для прав пользователей на переводы gettext не будет иметь большой поддержки, я думаю, вам нужно будет сделать это самостоятельно или посмотреть на некоторые структуры, если у них более разумные решения.

+0

Спасибо, мне кажется, что это подход, сопоставимый с моей текущей настройкой, но с достаточными дополнительными функциями, чтобы сделать его более прочным. Мне нравится тот факт, что для этого существуют существующие инструменты. –

+0

Вы также можете сделать снимок Zend_Translate Zend Framework: http://tinyurl.com/yl28xqy – Kjir

+0

Также посмотрите на страницу, где он говорит об адаптерах для Zend_Translate, есть список форматов файлов, которые обычно используются, и это может помочь вам найти решение, которое идеально подходит для ваших нужд. – Kjir

1

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

Вам нужно указать пользователю возможность выбрать предпочтительный язык. Вы должны убедиться, что у вас либо есть значение по умолчанию «это не было переведено» для каждого используемого вами языка, либо язык по умолчанию, на который может ссылаться весь ваш сайт.

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

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

+0

Это довольно близко к одной идее, с которой я играл. Однако, на веб-сайте с высоким трафиком, не будет ли это массовая загрузка базы данных? –

+1

Если вы беспокоитесь о загрузке базы данных, вы можете создать систему для кеширования страниц или их частей, но зависит от того, насколько динамичны отображаемые данные и сколько страниц/языков у вас есть. – Kjir

+0

Может быть, это еще один вариант, который может быть выполнен с помощью любого сервера клиентского кода. На каждой странице есть каждая секция текста, повторяемая для каждого языка, для всех отображаемых: нет, кроме тех, которые вы хотите использовать, для чего используется код для очистки свойства отображения. Это решение обеспечивает отличную загрузку базы данных ZERO. Если это будет сделано на стороне сервера, это позволит файлам сохранять небольшие (при передаче) файлы, если на клиентской стороне сохраняется загрузка сервера, но за счет пропускной способности. EDIT: Вам нужно подумать о том, в какой части вы хотите быть эффективными. Является ли это нагрузкой на сервер, вам нужна эффективность, время загрузки страницы и т. Д. – thecoshman

0

Глядя на веб вещи сегодня я наткнулся на этот сайт: http://translateth.is/

Это выглядит простой в использовании ... копировать вставить в некоторых JavaScript.

+0

Да, это основано на API Google Translate. Хотя в последнее время в последнее время многое улучшилось, я бы не стал зависеть от машинного перевода для любых серьезных веб-сайтов. –

1

в нашем проекте, http://pkp.sfu.ca/ojs, мы используем файлы XML для хранения пар ключ-значение перевода.Просмотрите наш код: http://github.com/pkp/pkp-lib/blob/master/classes/i18n/PKPLocale.inc.php

Мы используем этот класс для чтения XML-файлов для каждого языкового стандарта, а в нашем коде мы используем Locale :: translate ('locale.key.name') ;. Подобно gettext, но с использованием XML-файла для упрощения обновления.

+0

спасибо, похоже, что в этом коде есть полезные компоненты! Регистрация отсутствующих ключей f.e. –