Локализация через базу данных или плоский файл? - PullRequest
3 голосов
/ 10 апреля 2011

Для многоязычного PHP-приложения предположите, что надписи / фразы будут переведены на несколько языков. Эти метки могут быть помещены в файлы для определенного языка (например, один файл на язык) или могут быть загружены в базу данных, чтобы приложение могло обращаться к ним при необходимости.

Вопрос с точки зрения производительности, какой подход лучше?

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

Ответы [ 2 ]

4 голосов
/ 10 апреля 2011

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

Если вы не хотите загружать всю строку локализации каждый раз, когда вы что-то отображаете, у вас всегдаварианты поместить их в разные файлы.Например, «глобальный» файл для строки, отображаемый повсюду, и файл локализации, относящийся к вашей странице / разделу.

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

1 голос
/ 10 апреля 2011

База данных позволяет вам выбрать только интересующую вас запись ...
Но:

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


Из любопытства, почему бы не взглянуть на что-то еще - что-то, чья цель - перевод?

Здесь я думаю о Gettext , который широко используется - и есть расширение Gettext для PHP (я должендобавить есть другие доступные классы - например, в Zend Framework) .

...