Подтвердить что ты не робот

Лучший способ реализовать многоязычный PHP

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

Я думал о трех способах, с которыми я могу работать, мне нужно создавать файлы языков с помощью PHP каждый раз, когда я добавляю новое значение в интерфейс веб-формы

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

Третий способ - создать функцию, которая вызывается каждый раз с ключевым словом или полной фразой, и используя IF -s или switch, чтобы выбрать правильный термин (или вернуть ключ, если нет соответствия

Каков наилучший способ сделать это?


Изменить: я решил сделать какой-то тест, я попробовал 3 разных способа и измерил время, и память заняла его:

  • Я определил массив (22 значения) и пропустил его от 1 до 1 000 000 - проверено на значение вызова - 1 из трех, используя оператор %, чтобы выбрать, что использовать, и просто установить его на переменная

    • Время: 0.476591110229 секунд
    • Память: 6536 байт
  • Я использовал тот же массив (22 значения) и вызвал его с помощью функции - return $arr[$string]; (просто для удобного способа работы и возможности изменить его по-другому, если понадобится)

    • Время: 0,960635185242 секунд
    • Память: 6704 байт.
  • Я создал функцию со списком строк и используя switchcase Я выбрал возвращаемую строку

    • Время: 1.46953487396 секунд
    • Память: 848 байт

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

Я буду очень благодарен за вашу помощь,

Спасибо

4b9b3361

Ответ 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) Включите глобальный файл и файл, соответствующий текущему виду. Таким образом, вы не загрузите весь перевод, а только его подмножество. И это более управляемо, и вы можете предоставить контекст, имеющий разные переводы в одной строке.