Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
 Аватар для stupidstudent
18 / 15 / 0
Регистрация: 25.10.2011
Сообщений: 241

Как лучше реализовывать мультиязычность?

05.09.2012, 21:10. Показов 2194. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
разницы особо нет, но всеже:
lang.php
PHP
1
2
3
4
5
6
7
8
9
10
11
<?php
$lan = array (
    'rus' => array (
        'welcome' => 'Добро пожаловать.',
        'other' => 'Что еще?'
    ),
    'eng' => array (
        'welcome' => 'You are welcome.',
        'other' => 'What else?'
    )
);
или

ru.php

PHP
1
const HELLO = 'добро пожаловать';
en.php

PHP
1
const HELLO = 'You are welcome';
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.09.2012, 21:10
Ответы с готовыми решениями:

Как правильно реализовать мультиязычность?
на сайте есть три языка , списывал с этого урока ( https://www.youtube.com/watch?v=tb2HpNlqmaY&amp;t=2152s ) проблема при нажатии смены языка в...

Какой вид ЧПУ лучше реализовывать?
Всем привет. Уже 3 дня ломаю голову, какой вид ЧПУ будет лучшим?! Кто что думает по этому вопросу? Есть вот такие варианты: ...

Как лучше в принципе реализовывать систему регистрации/авторизации
Как лучше в принципе реализовывать систему регистрации/авторизации? Создаётся свой MembershipProvider, происходит валидация пользователя...

4
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
05.09.2012, 21:15
ну вроде как с массивами в разы удобнее работать чем с кучей переменных/констант - если забыл какие переменные у вас есть всегда можно прописать var_dump($array) у посмотреть где что лежит.. да и красивее это, имхо

Добавлено через 1 минуту
хотя.. через get_defined_constants тоже можно получить список..
0
 Аватар для alpex
603 / 578 / 103
Регистрация: 16.07.2012
Сообщений: 1,762
06.09.2012, 01:56
Вот очень похожая тема на Вашу двуязычный сайт
Я себе сделал так - у меня есть две папки ru и en в которых лежат страницы сайта и код в страницах абсолютно одинаковый за исключением одной строки в начале,где инклудится файл ( ru.inc для страниц в папке ru и en.inc для папки en ), который проверяет наличие куки на язык, для русского и английского языков код в принципе одинаковый за исключением лишь значения которое посылается в куки ru или en, и
PHP
1
2
3
4
5
6
7
8
<?php
    session_start();
    if(!isset($_COOKIE['lang'])){
       setcookie("lang","en",time()+600000," /");
       header("Location:$_SERVER[SCRIPT_NAME]");
    }
    else  $_SESSION['lang'] = $_COOKIE['lang']; 
?>
сразу после него я иклужу еще один файл с языками в зависимости от того какой язык лежит в сессии
PHP
1
include "../lang/$_SESSION[lang].php";
, ну и везде в ссылках или по тексту где нужно вставить ru или en вставляется сессия.
Языки хранятся в папке lang в двух файлах ru.php и en.php. В этих файлах массивы с абсолютно одинаковыми названиями и ключами, конечно же один файл с русским текстом и другой с английским ну и везде в файлах на сайте вместо текта соответственно стоят названия массива и ключа к этому тексту, ну а более большие тексты типа статей лежат в БД опять же с названиями ru и en.
Кстати индексные первые страницы я тоже положил в папки ко всем остальным страницам , а в корне лежит файл index.php, в котором проверяются куки и потом перенаправляет в папку ru или в en
PHP
1
2
3
4
5
6
7
8
9
<?php
session_start();
if(isset($_COOKIE['lang']) && $_COOKIE['lang'] == 'ru'){
    header("Location:ru/index.php");
}
else{
    header("Location:en/index.php");
}
?>
Почему я сделал именно так?
Во первых мне написали , что для поисковиков должны быть разные адреса для разных языков.
Во вторых все хорошо структурировано, то что написано в языковых файлах например в ячейке 32 на русском и английском имеет один и тот же текст и ключ.
И в третьих если понадобится добавить еще язык нужно написать лишь языковой файл а все страницы просто скопировать еще в одну папку, и поменять лве буквы на каждой странице.
Может это конечно не самый лучший вариант , но меня вроде бы пока все устраивает.
Ну хотелось бы конечно и услышать мнение профессионалов по этому способу
0
1 / 1 / 2
Регистрация: 07.06.2013
Сообщений: 94
10.10.2014, 16:03
я сделал по вашему примеру, только немного упростил редактирование в дальнейшем
в корне создал index.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
// получаем язык
$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
//записываем определившийся язык в куки
setcookie ("lang",'en',time()+3600*24*62,"/");
// если язык английский то перенаправляем
if(($lang=='en' || $_COOKIE['lang']=='en') && empty($_COOKIE['at_en']))
header('Location: en/index.php');
 
if($_COOKIE['lang'] == 'en'){
    header("Location:en/index.php");
}
else{
    header("Location:ru/index.php");
}
Определяет язык браузера и записывает в куки, если не определено значение, то английский по умолчанию.
Потом перекидывает на нужную языковую страничку
в папке с языком тоже индекс пхп
PHP
1
2
3
setcookie ("lang",'ru',time()+3600*24*62,"/"); //переписываем куки если вдруг не определились почему то
require_once 'lang_ru.php'; тут же подключаем файл с константами языка
require_once '../view/index.php'; //и самое главное - подключаем единый для всех языков файл шаблона(вьюха)
теперь, если нужно что то изменить в отображении, достаточно поменять в одном файле '../view/index.php' и изменения затронут все языки сразу
PHP
1
2
3
4
5
6
7
8
9
10
11
12
require_once '../config.php';
require_once 'header.php'; /* HEADER */ ?>
<div class="container">
    <div class="main-content column col-md-8">
        <?php require_once 'content.php'; /* HEADER */ ?>
    </div>
    <div class="sidebar column col-md-4">
        <?php require_once 'sidebar.php'; /* HEADER */ ?>
    </div>
</div>
 
<?php require_once 'footer.php'; /* FOOTER */ ?>
0
1 / 1 / 2
Регистрация: 07.06.2013
Сообщений: 94
13.10.2014, 13:08
Возникла проблемка!
Подскажите плиз в чем подвох
Переключение языка делаю переходом по ссылке на индексную страницу языка, та вначале записываю в куки значение выбранного языка
Цитата Сообщение от alexmixaylov Посмотреть сообщение
setcookie ("lang",'ru',time()+3600*24*62,"/"); //переписываем куки
Преключение работает норм, НО
Куки не переписываются с первого раза, только повторном клике
Вообще не пойму что это????
в отладчике показывает что переключились, а языковая переменная, которая берет значение из $_COOKIE['lang'] и которую хочу использовать на страничке - Препеисывается только пр рефреше страницы или второму клику по ссылке

Добавлено через 43 минуты
Преписал по своему, то был код из нета скопипастил
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
// получаем язык
$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
//записываем определившийся язык в куки
setcookie ("lang",$lang,time()+3600*24*62,"/");
var_dump($lang);
// если язык английский то перенаправляем
 
if($lang == 'ru' or $lang == 'en') {
header("Location: $lang/index.php");
}
else {
    header("Location: en/index.php");
}
но результат тот же куки не переписываются
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.10.2014, 13:08
Помогаю со студенческими работами здесь

Что лучше и оптимально, на этом языке реализовывать?
Хочу изучить язык, на котором я бы писал игровую логику! Этот язык идеально подходит? и почему? А если выбирать другой язык? то какой?

где лучше реализовывать методы в классе или вне
читал где-то, что реализация метода в теле класса или вне его не одно и то же. так ли это и в чем разница?

На каком элементе лучше всего реализовывать плавное движение bitmap?
На каком элементе лучше всего реализовывать движение bitmap? Есть 3 кандидата: сама форма, panel, picturebox. Главное - это плавность...

Подскажите как реализовывать
У человека есть имя и силы. Изначально силы равны 100. Есть три вида людей: 1) Бабушка - готовит. При этом теряет 10 своих сил и...

Как реализовывать IEnumerator?
Никак не могу вникнуть в то, как правильно реализовывать интерфейс IEnumerator. Мсдн и гугл не помогли. Поможете разобраться в том, что я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru