Лучший способ реализовать многоязычный PHP
Прежде всего - я знаю, что есть много ответов о многоязычной функциональности, я не нашел ответа на то, что хочу
Я думал о трех способах, с которыми я могу работать, мне нужно создавать файлы языков с помощью PHP каждый раз, когда я добавляю новое значение в интерфейс веб-формы
Первые 2 являются похожими - с использованием массивов или определением в конкретном языковом файле и включают его в начале запуска,
Но в этом случае я могу загрузить тысячи определений или массивов, чтобы использовать только несколько на каждой странице.
Третий способ - создать функцию, которая вызывается каждый раз с ключевым словом или полной фразой, и используя IF
-s или switch
, чтобы выбрать правильный термин (или вернуть ключ, если нет соответствия
Каков наилучший способ сделать это?
Изменить: я решил сделать какой-то тест, я попробовал 3 разных способа и измерил время, и память заняла его:
-
Я определил массив (22 значения) и пропустил его от 1 до 1 000 000 - проверено на значение вызова - 1 из трех, используя оператор %
, чтобы выбрать, что использовать, и просто установить его на переменная
- Время: 0.476591110229 секунд
- Память: 6536 байт
-
Я использовал тот же массив (22 значения) и вызвал его с помощью функции - return $arr[$string];
(просто для удобного способа работы и возможности изменить его по-другому, если понадобится)
- Время: 0,960635185242 секунд
- Память: 6704 байт.
-
Я создал функцию со списком строк и используя switch
→ case
Я выбрал возвращаемую строку
- Время: 1.46953487396 секунд
- Память: 848 байт
Ну, теперь вопрос в том, какой правильный выбор - предпочитая время или предпочитая память,
И в случае, если сайты большие, и для этого потребуется много памяти - я не мог ее изменить, потому что он построен с массивами. Если он работает с функцией, я всегда могу ее изменить.
Я буду очень благодарен за вашу помощь,
Спасибо
Ответы
Ответ 1
С точки зрения кода, что-то вроде этого будет здорово для вас. Он должен основываться на выборе пользователя (выбор языка с помощью кнопки или меню) или на основе языка просмотра (это не самый лучший пример).
index.php
<?php
// verify the user choice
if ($_POST[lang] == "en")
{
include_once("en_language.php");
}
if ($_POST[lang] == "pt")
{
include_once("pt_language.php");
}
// calling a lable in your page
echo LABEL_MENU;
// the rest of your file
...
?>
en_language.php
<?php
// ENGISH Language file
define('LABEL_MENU','Main Menu');
// the whole file with the labels of your system
?>
pt_language.php
<?php
// PORTUGUESE Language file
define('LABEL_MENU','Menu Principal');
// the whole file with the labels of your system
?>
дополнительности
Если вы хотите использовать тип массива, чем значения константы с define(), но я не уверен, что быстрее, чем..
$arrays = array("MAIN_MENU" => "Main Menu", "LEFT_MENU" => "Left Menu");
echo $arrays["MAIN_MENU"];
Ответ 2
Группируйте свои строки в категории - один глобальный и другой - соответствующий представлениям, которые у вас есть на веб-сайте (например, lang_global, lang_profile, lang_something_else)
Включите глобальный файл и файл, соответствующий текущему виду. Таким образом, вы не загрузите весь перевод, а только его подмножество. И это более управляемо, и вы можете предоставить контекст, имеющий разные переводы в одной строке.