Форум программистов, компьютерный форум, киберфорум
Наши страницы

PHP для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 75, средняя оценка - 4.75
alpex
600 / 575 / 18
Регистрация: 16.07.2012
Сообщений: 1,760
#1

двуязычный сайт - PHP

31.08.2012, 02:20. Просмотров 10165. Ответов 20
Метки нет (Все метки)

Сейчас делаю сайт на русском и английском.
И вот возник какой вопрос как правильнее реализовать двуязычность, с точки зрения функциональности, быстродействия, индексирования поисковиками и т.д.
Есть варианты сделать субдомен для английского, либо просто разместить в разные папки английские и русские страницы, и третий вариант(который почему то мне ближе) сделать все на одних и тех же страницах но в зависимости от того какой язык в куках выводить соответственно разные строки.
Возможно есть и другие варианты более правильные , но мне они пока в голову не пришли.
Просветите , кто понимает в этом.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.08.2012, 02:20
Я подобрал для вас темы с готовыми решениями и ответами на вопрос двуязычный сайт (PHP):

Сайт после 5 секунд заходит на другой сайт (взломали сайт) - PHP
Когда я открою свое сайт он после 5 секунд заходит на другой сайт (взломали сайт) там написано что взломали турецкие хакеры.. Как лечить...

Создать сайт, оформленный как новостной сайт или блог - PHP
Подготовить для сайта базу данных “новости автоспорта”. Сайт должен быть оформлен или как новостной сайт или блог. В состав одной новости...

Хочу разработать с нуля сайт, похожий на сайт знакомств. Что для этого нужно? - PHP
Хочу разработать с нуля сайт, похожий на сайт знакомств. Что для этого нужно? Без использования готовых движков. Поделитесь пожалуйста...

Покрашился сайт, Что-то накосячил, сайт не доступен - PHP
Поменял пароль в базе php.admin и теперь сайт не доступен, пишет Error establishing a database connection. Больше ничего не менял. ...

Через сайт зайти на другой сайт - PHP
Нужно с одного сайта сделать доступ к другому сайту, чтобы через один айпи пользователи могли заходить например в мой ак ВК. со страницы...

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

20
spyeye
31 / 31 / 1
Регистрация: 06.08.2012
Сообщений: 155
31.08.2012, 02:49 #2
Сделать папку lang/ в ней eng.php и rus.php
В них создаешь массивы с одинаковыми(!) имена, например:
Русский:
PHP
1
$lang['header'] = "Мой сайт";
Английский:
PHP
1
$lang['header'] = "My Site";
Прописываешь это всё в страницу, например:
HTML5
1
2
3
...
<title> <? php echo $lang['header']; ?> </title>
...
и в зависимости от условия инклюдишь разные файлы, например:
PHP
1
if($chosen_lang == "rus"){ include 'rus.php'; } else { include 'eng.php'; }
Ну я думаю понятно, по какому принципу работать.
2
crautcher
2018 / 1990 / 176
Регистрация: 27.05.2011
Сообщений: 6,835
31.08.2012, 10:36 #3
лучше ключ использовать английскую версию
русский:
PHP
1
$lang['my site'] = "Мой сайт";
и к примеру немецкий :
PHP
1
$lang['my site'] = "Meine website";
а выводить функцией , в которую подаешь ключ , и если значения не будет то выводим ключ , тоесть если вдруг забыли добавить в какойто ланг фразу ,то она появится на английском.
1
alpex
600 / 575 / 18
Регистрация: 16.07.2012
Сообщений: 1,760
31.08.2012, 11:24  [ТС] #4
хм интересная версия, но что то я не совсем уловил, какие у нее преимущества, скажем по сравнению с той что бы написать например так
PHP
1
<title><?php if($_COOCKIE['lang']=='ru')echo "Мой Cайт";else echo "My Site"?></title>
по обьему написаного кода это будет даже меньше, так как не нужно создавать 2 дополнительные страницы и заносить их в массивы, а потом выводить значения из них.
Да и как мне кажется можно и запутаться в названиях, если под каждую фразу создавать отдельный массив?
Но вот как это скажется на быстродействии сайта и на индексировании поиисковиками в одном и другом варианте.
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16713 / 6635 / 434
Регистрация: 12.06.2012
Сообщений: 19,880
Завершенные тесты: 1
31.08.2012, 11:29 #5
создаете в БД две одинаковые по структуре таблицы, но с содержанием на разных языках (к примеру со столбцами id,url,title,content,left_menu,right_menu,footer) и затем просто извлекаете из нужной таблицы данные.

Добавлено через 1 минуту
зависит, собственно, от самой структуры сайта. Сколько точек входа у вас, паттерн-непаттерн, и т.д.
0
crautcher
2018 / 1990 / 176
Регистрация: 27.05.2011
Сообщений: 6,835
31.08.2012, 11:31 #6
предположим на вашем сайте в 1000 местах нужно вставить фразы:
1. что проще
PHP
1
<title><?php if($_COOCKIE['lang']=='ru')echo "Мой Cайт";else echo "My Site"?></title>
или прописывать
PHP
1
<title><?= LoadLang('My Site'); ?></title>
2. вам надо поменять (заменить) фразу , как удбнее рыскать по всем файлам сайта , искать и править все места где эта фраза , или заглянуть в 1 файл языков и там поменять ,и сразу заменится на всех страницах сайта

3. что читабельнее , гора ифов с кучей вложений где черт ногу сломит , или грамотно распределеннеы файлы
/языки
/стили
/картинки
/класы
/шаблоны
/ещеченить
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16713 / 6635 / 434
Регистрация: 12.06.2012
Сообщений: 19,880
Завершенные тесты: 1
31.08.2012, 11:36 #7
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
if(!isset($_COOKIE['lang'])) {
$table = 'english'; #язык по дефолту
}
else {
if($_COOKIE['lang'] == 'english') $table = 'english';
else $table = 'russian';
#очищаешь и экранируешь для запроса
#если много языков - лучше через switch-case
}
if(!isset($_GET['cat'])) {
#главная страница
$query = "SELECT * FROM `{$table}` WHERE `url`='index'";
}
else {
$url = stripslashes(strip_tags(trim($_GET['cat'])));
if(empty($url)) $url = 'index'; #на всякий, вдруг что ввели
else {
#очищаешь и экранируешь для запроса
$query = "SELECT * FROM `{$table}` WHERE `url`='{$url}'";
}
}
#выполняешь запрос от $query и выводишь найденную инфу
если по простому
0
crautcher
2018 / 1990 / 176
Регистрация: 27.05.2011
Сообщений: 6,835
31.08.2012, 11:42 #8
KOPOJI , предлагаешь все фразы сайта держать в базе , тоесть там например чтобы валуе на кнопу найти "отправить" или "send" обращатся к базе , выполнять запрос и фетчить его ? в резултате все альты , тайтлы , пункты меню .. этож порядка 1000 запросов на страницу ...
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16713 / 6635 / 434
Регистрация: 12.06.2012
Сообщений: 19,880
Завершенные тесты: 1
31.08.2012, 11:57 #9
crautcher, это на простой сайт, где немного запросов будет.
0
Darevill
67 / 60 / 16
Регистрация: 05.05.2009
Сообщений: 131
31.08.2012, 12:21 #10
Выборка из базы производится один раз - выбираются все ключи и значения для выбранного языка и потом подставляются везде, где надо.
По сути получается то-же самое, что и подключить php файл с массивом, только при хранении фраз в базе их проще править/добавлять, особенно если языков больше двух.
Таблицу проще использовать одну, просто с полями значений под каждый язык (это более простой вариант - при добавлении языка придётся добавлять столбец в таблицу)

keyvalue_rusvalue_eng
my siteМой сайтMy site
helloПриветствиеHello

При такой организации не возникает проблем с синхронизацией массивов, когда в русском массиве ключ есть, а в английском нету.
Получать массив фраз для выбранного языка таким запросом
PHP
1
$q = "SELECT `key`, `value_".$lang."` AS `value` FROM `languages`";
Добавлено через 6 минут
Кстати, запоминать язык в куках не лучший вариант. Кинуть кому-то ссылку на определённую языковую версию не получится, да и поисковики второй язык либо не найдут, либо найдут, но не обрадуются, найдя по одной и той-же ссылке два разных контента.
лучше использовать явное указание языка в ссылках
0
alpex
600 / 575 / 18
Регистрация: 16.07.2012
Сообщений: 1,760
31.08.2012, 12:32  [ТС] #11
crautcher, да пожалуй все таки этот подход более правильный, с ним и намного проще будет добавить например третий язык.
НО, если с вариантом который предложил spyeye, все ясно то в Вашем варианте я что то не совсем понимаю механизма как именно должна быть написана функция LoadLang
Я как понял страницы с массивами нужно инклудить именно в функцию а не на страницу, и далее от того какой язык выбран функция будет возвращать элемент массива или из папки en или из папки ru.
Если это так то каким образом можно выбирать массивы из разных папок у которых абсолютно одинаковое имя, как именно это реализовать в коде?
Или тогда вообще не имеет смысла делать им одинаковые имена, а сделать массивы с названиями en и ru , но с одинаковыми ключами?

Добавлено через 9 минут
Цитата Сообщение от Darevill Посмотреть сообщение

Добавлено через 6 минут
Кстати, запоминать язык в куках не лучший вариант. Кинуть кому-то ссылку на определённую языковую версию не получится, да и поисковики второй язык либо не найдут, либо найдут, но не обрадуются, найдя по одной и той-же ссылке два разных контента.
лучше использовать явное указание языка в ссылках
Т.е, Вы считаете, что лучше сделать разные папки для ru и en?
mysite.com/ru и mysite.com/en?
или добавить субдомен для английского?
mysite.com и en.mysite.com?
0
crautcher
2018 / 1990 / 176
Регистрация: 27.05.2011
Сообщений: 6,835
31.08.2012, 12:32 #12
дак в функции тоже самое условие будет только если нету такого элемента отдаём ключ
PHP
1
2
3
4
5
6
7
8
9
LoadLang ($key)
{
static $lang = false;
 if (!$lang && isset($_COOKIE['lang']) && file_exists( 'langs/'.$_COOKIE['lang'] . '.php'))
 {
   $lang = include 'langs/'.$_COOKIE['lang'] . '.php';
 }
return (isset($lang[$key])) ? $lang[$key] : $key;
}
0
Darevill
67 / 60 / 16
Регистрация: 05.05.2009
Сообщений: 131
31.08.2012, 12:56 #13
Цитата Сообщение от alpex Посмотреть сообщение
Т.е, Вы считаете, что лучше сделать разные папки для ru и en?
mysite.com/ru и mysite.com/en?
или добавить субдомен для английского?
mysite.com и en.mysite.com?
Да, выбранный язык, если он отличается от языка по умолчанию, должен отображаться в ссылке
0
alpex
600 / 575 / 18
Регистрация: 16.07.2012
Сообщений: 1,760
01.09.2012, 08:30  [ТС] #14
Вообщем думал думал и решил все таки делать как описывал crautcher, почему то мне кажется что это самый нормальный в моей ситуации подход.
Хотя конечно вот это замечание
Кстати, запоминать язык в куках не лучший вариант. Кинуть кому-то ссылку на определённую языковую версию не получится, да и поисковики второй язык либо не найдут, либо найдут, но не обрадуются, найдя по одной и той-же ссылке два разных контента.
лучше использовать явное указание языка в ссылках
вносит смуту в мои мысли

Добавлено через 14 часов 15 минут
мда начал делать но вот трабл не видно массива который находится в файле который инклудится, т.е

lang.php
PHP
1
2
$param = array(
"speed" => "Скорость",);
файл selector.php
PHP
1
2
include ('lang.php');
echo $param['speed'];
получается ошибка Notice: Undefined variable: speed in selector.php

Я как подозреваю, что с ООП подходом можно с этим легко разобратся при помощи public, но как быть с процедурным подходом, как сделать что бы было видно переменную?

Добавлено через 14 минут
Я в принципе нашел способ но подозреваю , что это не совсем правильно или может даже совсем не правильно:
lang.php
PHP
1
2
3
4
5
6
function lang($key){
$param = array(
"speed" => " Скорость",);
$key = $param['$key'];
return $key;
}
В таком подходе вообще не иммеет смысла создать массив, можно делать все при помощи переменных.
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16713 / 6635 / 434
Регистрация: 12.06.2012
Сообщений: 19,880
Завершенные тесты: 1
01.09.2012, 09:04 #15
должно все работать так. может быть он у вас по другому называется, не lang.php?
0
01.09.2012, 09:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.09.2012, 09:04
Привет! Вот еще темы с ответами:

При попытка зайти на любой сайт антишпионом перехватывается сайт partner-pop.men. Как убрать этот сайт? - Безопасность
При попытка зайти на любой сайт через Гугл Хром антишпионом Антимальварэ-байтс перехватывается сайт partner-pop.men. Как убрать этот сайт?...

я создал сайт на dreamwaver как установить на мой сайт cms joomla - Joomla
я создал сайт на dreamwaver как установить на мой сайт cms joomla

При заходе в интернет и клике на любой сайт перекидывает редиректом на др.сайт - Удаление вирусов
Нужна помощь. Подскажите плиз что делать. Где искать вредоносный файл и как удалить. При заходе в интернет и клике на любой сайт...

При запуске google открывается сайт nftds2.ru и перенаправляет на сайт с рекламой - Удаление вирусов
При запуске google открывается сайт nftds2.ru, потом перенаправляет на nftds.ru, после он перенаправляет по нескольким рекламным сайтам....


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru