Как смоделировать многоязычную базу данных с Zend, l18n mysql?

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

Ситуация Я разрабатываю реляционную базу данных mysql, которая позже должна содержать многоязычный контент. Вы знаете это из Википедии или страниц технической поддержки Microsoft. Содержание должно быть одинаковым для всех языков. например, если переводы отсутствуют, сайт предлагает вам тот же контент, автоматически переведенный или на языках, на которых доступна информация. через гугл. Среда разработки Zend.

Мои идеи на данный момент касаются решения проблемы:

Два первичных ключа: (идентификатор, язык) Преимущество: простой доступ к базе данных через уровни абстракции базы данных. Проблема: внешние ключи, отношения, отступления

Столбцы с языковым суффиксом: Преимущество: производительность БД, отсутствие реляционных проблем. Проблема: уровни абстракции базы данных не могут справиться с этим?

Зарекомендовала ли себя какая-либо концепция или предпочтительнее другой? Кто-нибудь уже создал что-то подобное и может поделиться со мной своим опытом? Существует ли модифицированный контроллер Zend DB для этой ситуации? Как связать эту информацию с формой?

Спасибо за помощь, подсказки и предложения!

С уважением,

Мануэль


person Manuel    schedule 06.07.2011    source источник
comment
я бы предпочел использовать доктрину I18n Behavior doctrine-project.org/projects/orm/1.2/docs/manual/behaviors/ и немного сэкономить время :)   -  person tawfekov    schedule 06.07.2011


Ответы (3)


Второй вариант будет не ремонтопригоден (это следует добавить к минусам). Чтобы действительно добавить еще один язык, вам потребуется изменить уровни абстракции таблицы и. Звучит как кошмар.

Первый вариант кажется гораздо более перспективным, но, к сожалению, многое еще предстоит сделать, чтобы заставить его работать. Однако, по моему опыту, это довольно типичное решение, поэтому я бы не стал изобретать велосипед.
Что я должен добавить, так это то, что откат языка должен выполняться на стороне Zend, в базе данных будет пропущена какая-то информация. Вы можете придумать какую-то индексную таблицу для хранения такой информации, как уникальный идентификатор содержимого и доступные языки. Если вам нужно что-то обслуживать, вы должны прочитать такую ​​запись, сравнить ее с Accept Languages ​​​​и снова запросить базу данных для действительного содержимого (используя наиболее подходящий язык). Единственная проблема заключается в том, что вам нужно будет каким-то образом создать такую ​​индексную таблицу (лучшим способом, который я вижу, будет триггер при вставке содержимого в вашу таблицу содержимого).

Работы много, но задача не из легких.

person Paweł Dyda    schedule 06.07.2011
comment
Спасибо @Pawel Dyda и @tawfekov! - person Manuel; 06.07.2011
comment
@tawfekov Я думаю, что доктрина делает именно то, что описывает Павел? Как это ведет себя, если вы поделились информацией? Общая информация идет с таблицей идентификаторов, а все материалы, связанные с языком, идут к таблице, на которую ссылаются? Вы ищете с соединениями? Можно ли интегрировать доктрину в Zend? Способна ли доктрина обрабатывать реляционные базы данных с помощью языков? Вы знаете хороший учебник/пример? - person Manuel; 06.07.2011
comment
@Manual Доктрину смотрите на Zendcasts.com zendcasts.com/category/screencasts/ databases/doctrine-databases, а также ознакомьтесь с видеоподкастами Джона Лебенсолда itunes.apple.com/us/podcast/zend-screencasts-video-tutorials/ - person Adrian World; 06.07.2011

Я сейчас работаю над точно такой же проблемой.

Как-то мне не имеет смысла складывать все в одну базу. Допустим, я хочу пойти на крайние меры и поддерживать около 50 языков, это просто раздует мою БД. Итак, я склонен сохранять свою основную БД на своем основном языке, а затем вводить в нее некоторую концепцию Zend_Translate. Zend_Translate должен предоставить вам запасное решение, которое вы ищете. Хотя основная навигация и основной дизайн не являются большой проблемой для моего веб-сайта, сейчас меня больше всего беспокоит то, как хранить весь основной контент и как его переводить, потому что эти элементы, среди прочего, содержат HTML. Для основного контента я, вероятно, буду использовать альтернативный подход и использовать отдельную БД с таблицами для каждого языка.

person Adrian World    schedule 06.07.2011
comment
разместил мою идею решения этой проблемы ниже. Что вы думаете об этой идее? - person Manuel; 07.07.2011
comment
@ Мануэль, я почти в том же месте, с небольшой разницей. Я буду использовать TMX, и если у меня будет перевод, я перенесу содержимое для этого столбца (т. е. даже для основного языка) в файл tmx и добавлю строку «tmx». Итак, я также проверю каждый столбец, как и вы, но если я получу $value === 'tmx', я делегирую ваше решение по языку 1,2,3 Zend_Translate. - person Adrian World; 07.07.2011
comment
Но это значит, что вы всегда исходите из одного основного языка (вероятно, английского) и чем переводите на другие языки? Мои входные данные поступают с m: n языков. Примеры: с немецкого на английский, с испанского на французский. Это, вероятно, будет довольно сложно с файлами перевода. Мое основное приложение также будет переведено с помощью Zend Translate. - person Manuel; 12.07.2011
comment
Да, я установил основной язык, но его можно изменить на лету (правда, еще не проверено). Язык по умолчанию в основном выступает в качестве основного резервного языка. Между ними вы можете установить маршрут (я полагаю, > 1.11) и перейти через ряд языков, если перевод недоступен. - person Adrian World; 12.07.2011
comment
Есть ли у вас опыт использования гугл-переводчиков? Вы покидаете страницу на языке автора и переводите содержимое с помощью Google или любого другого аналогичного сервиса перевода? - person Manuel; 12.07.2011
comment
Да, потому что я двуязычный (де-CH/en-US), и, честно говоря, это ужасно. - person Adrian World; 12.07.2011
comment
Это все еще типичные роботизированные переводы. Это ужасно, но я думаю лучше, чем ничего не предлагать пользователю? - person Manuel; 12.07.2011
comment
В какой-то степени удивительно, что он делает, и работает довольно хорошо для коротких предложений. Если вам нравится его использовать, я думаю, все сводится к тому, какая у вас аудитория. - person Adrian World; 12.07.2011

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

Языковое решение: запуск, приложение получает заданный пользователем язык, дополнительный язык, родной английский язык статьи. Извлекая статью из базы данных, я проверю для каждого столбца следующее: 1. Доступен ли основной язык? 2. Доступен ли дополнительный язык? 3. Если ни один из них, отобразите статью на родном или английском языке и предложите пользователю перевести ее с предложениями из API Google Translate. Я предполагаю, что для этого потребуется немного покрыть и манипулировать контроллерами или построить бизнес-модель.

@tawfekov что-то подобное или подобное легко реализовать с помощью доктрины?

person Manuel    schedule 07.07.2011