Laravel - перевод данных после выборки из базы данных или перевод текста в базу данных? - PullRequest
2 голосов
/ 20 июня 2019

Я хочу запустить многоязычный сайт с Laravel.

Это хорошая идея:

  1. Перевести строку из полученных данных из базы данных, используя trans()?

OR

  1. Есть три столбца для каждого языка с разными названиями?

Например, в номере 1 у меня есть:

ID - title
1  - hello
2  - how_are_you

$texts = Text::all();
$translatedText = trans('somefile.'.$texts[0]->title);

А для номера 2 у меня есть:

ID - title_fa - title_en    - title_ar
1  - درود     - Hello       - سلام
2  - خوبی؟    - How are you - کیف احوالک؟


$texts = Text::all();
$translatedText = $texts[0]->title_fa;

Какой из них лучше с разных сторон?

1 Ответ

2 голосов
/ 20 июня 2019

Это зависит от ваших требований и объема данных, которые вы хотели бы изменить.Оба имеют свои плюсы и минусы.

1.Использование файла перевода:

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

Если вы не знакомы с текстом, будет трудно добавить перевод об этом.


2.Использование базы данных:

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

Вы можете добавить условия в Accessor для установки значений атрибутовтак что не нужно беспокоиться о лезвии.

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

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


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

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

Как будто у вас есть 5 полей в table1, где вам нужно сохранить перевод для 3 полей, вы должны создать другую таблицу, например table1_translation, с этими 3 полями иоставьте только 2 поля в table1

...