Как сохранить язык на разных страницах локализованного сайта? - PullRequest
0 голосов
/ 07 февраля 2019

Я занимаюсь разработкой базового веб-сайта с использованием встроенной в PHP поддержки gettex.Я не хочу использовать какие-либо компоненты внешних библиотек по разным причинам;во-первых, потому что я хочу практиковать методы, связанные с gettex, во-вторых, потому что сайт достаточно мал, чтобы не требовать ничего, кроме vanilla php, в-третьих, для производительности.Проблема, с которой я сейчас сталкиваюсь, связана с навигацией по сайту на языках, которые я уже локализовал.

Я начал с установки необходимой структуры каталогов:

locales/
    - pt_BR/
        - LC_MESSAGES
            messages.mo
            messages.po
    - es_ES/
    - ru/

Затем включил файл с кодом ниже вверху каждой страницы:

<?php
// use sessions
session_start();

// get language preference
if (isset($_GET["lang"])) {
    $language = $_GET["lang"];
}
elseif (isset($_SESSION["lang"])) {
    $language  = $_SESSION["lang"];
}
else {
    $language = "en_US";
}

// save language preference for future page requests
$language = $_SESSION["Language"];

$folder = "locale";
$domain = "messages";
$encoding = "UTF-8";

putenv("LANG=" . $language);
setlocale(LC_ALL, $language);

bindtextdomain($domain, $folder);
bind_textdomain_codeset($domain, $encoding);

textdomain($domain);

После настройки кода я добавил в мое .htaccess простое правило не использовать строку запроса, а вместо этого простые коды локали:

RewriteEngine on
RewriteRule (.+/)?pt-br/? ?lang=pt_BR

Для домашней страницы в корневом каталоге сервера это сработалокак и ожидалось.Если я наберу URL-адрес, например mysite.test , он отобразит все на английском, а если я переключусь на mysite.test / pt-br , я получу все на бразильском португальском языке.Моя проблема в том, как я могу иметь другие страницы на сайте, чтобы сохранить этот шаблон?Например, если я введу mysite.test / pt-br / about , я получу ту же домашнюю страницу на бразильском португальском, а не страницу About (в равной степени ранее локализованную).

В моем понимании это происходит потому, что сервер ищет файл about.php внутри каталога pt-br , который, на самом деле, не существует, а затем восстанавливаетвернемся к правилу перезаписи, но ... я не думаю, что это так, и мне интересно, как все это делается, то есть создание структуры, где URL-адреса, такие как:

mysite.test/pt-br/about
mysite.test/es/about
mysite.test/ru/about

И то же самое для любой другой страницы.

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

...