Лучший способ получить многоязычные URL? - PullRequest
5 голосов
/ 28 октября 2010

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

www.example.com/home становится www.example.com/inicio

www.example.com/profile становится www.example.com/perfil

www.example.com/help становится www.example.com/ayuda

И так далее. Мой вопрос: каков наилучший способ поддержать это в приложении PHP? Для входящих запросов я подумал, что в моем файле router.php будет достаточно словаря, подобного следующему:

<?php
$request = explode("/", trim($_SERVER['REQUEST_URI'], "/"));

// Dictionaries of page slugs.
$slugs = array(
    'es' => array(
        'inicio' => 'home',
        'perfil' => 'profile',
        'ayuda' => 'help',
    )
    // additional languages can be added here
);

// Rewrite any incoming (foreign) requests
if ($host=="www.example.es") { // to be made programmatic
    $lang = "es"; // pick up from locale constant rather being hard-coded
    if (array_key_exists($request[0], $slugs[$lang])) {
        $request[0] = $slugs[$lang][$request[0]];
    }
}

...

Который в основном берет сегменты URL и сопоставляет их с английским контрагентом, если он существует. Если нет, то он будет работать как обычно и, скорее всего, вызовет 404, поскольку контроллер не существует для сегмента URL.

Хотя эти слова мне нужны, чтобы они были обратно совместимы. Например, при создании URL-адресов в моем приложении.

Естественно, поскольку приложение на данный момент только на английском языке, оно жестко запрограммировано. Скажем, при извлечении объекта User я делаю следующее:

<?php
class User {

    function __construct($id) {
        // fetch user details
        $this->profile_url = ROOT . "/profile/" . $this->username;
    }
}

Каков наилучший способ замены экземпляров "/profile/", которые жестко запрограммированы на получение переведенной версии, то есть "/perfil/" на испанском сайте?

Ответы [ 4 ]

2 голосов
/ 28 октября 2010

Я всегда могу ошибаться, но здесь идет речь ...

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

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

Обычно префикс раздела «путь» в вашем URL-адресес языком, который вы запрашиваете - например: http://foo.bar/en-us/foobar.html

Подводя итог: Я бы не стал беспокоиться о переводе ваших URL-адресов, поскольку это не стандартная практика (по крайней мере, не то, чтобы явидел).Просто добавьте префикс «путь» к URL-адресу, например, в приведенном выше URL-адресе.

1 голос
/ 01 ноября 2010

У меня есть что-то похожее в приложении, которое я разрабатываю.

Каждая страница имеет уникальный идентификатор, который соответствует слагу, заголовку страницы, мета-описанию и тому подобное для каждого языка в таблице.*

Что касается людей, которые говорят, что это не стандартная практика, и я не согласен с ней, я не согласен с тем, что хорошо переведенные URL-адреса могут помочь вашему SEO на разных языках.

1 голос
/ 28 октября 2010

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

Имейте переменную сеанса, называемую language, которая первоначально может быть «en» для английского языка (или того, что вы предпочитаете), а затем включать команду «include (language. '/Main.php');»; в которой у вас есть папка 'en', которая содержит все файлы php для включения в перевод. Если main становится слишком большим, вы можете разделить и включить любой перевод, который соответствует вашим потребностям (например, /en/forum.php для переводов на форуме и /en/blob.php для переводов на первой странице).

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

0 голосов
/ 30 ноября 2012

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

Я собирался иметь язык, "включающий" файлы со всеми строками сайта.Итак ...

/ languages ​​/ en.php

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

В файле en.php я собирался вставить поля, подобные этому

define('PageTitleWelcomeMessage', 'Welcome to Foo');

, а затем вызвать эту статическую переменную в любом месте сайта.Язык en будет определен в их профиле

Я мог бы затем назвать эту переменную так:

echo PageTitleWelcomeMessage;
...