Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Сайт на 2 языках [2]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (3): « 1 [2] 3 »   

> Описание: CodeIgniter
DeepVarvar Супермодератор
Отправлено: 11 Октября, 2011 - 17:54:09
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Я выдал самый аккуратный, понятный.
У тебя же три велосипеда с квадратными колесами, и четвертый с треугольными.
 
 Top
pantela
Отправлено: 12 Октября, 2011 - 14:01:53
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 765
Дата рег-ции: Авг. 2010  


Помог: 1 раз(а)




Вы реально не можите правильно обяснить мне. я Понял отв ас что надо две копии сайта с разными запросами, так запросы будут идти на одну таблицу и там по полю будет оперделятся запись для какого языка, или для каждой копии сайта делать свою таблицу?
 
 Top
EuGen Администратор
Отправлено: 12 Октября, 2011 - 14:15:47
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Структура примерно такая (упрощенно):
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. Для текстов сайта (таблица, скажем, materials):
  3. id|localizated_string|token|language_id
  4.  
  5. Языки (таблица languages)
  6. id|name
  7.  

Стало быть храниться оно будет примерно так:

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. Языки
  3. id|name
  4. 1|English
  5. 2|Русский
  6. 3|Deutch
  7. ...
  8.  
  9. Материалы:
  10. id|localizated_string|token|language_id
  11. 1|Привет|1|2
  12. 2|Hello|1|1
  13. 3|Это мой сайт!|2|2
  14. 4|It's my site!|2|1
  15.  
  16. ...
  17.  

И выборка соответственно будет
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT localizated_string FROM materials WHERE token=$token AND language_id=$language_id
  3.  

Ну а уж Ваша задача - хранить в сессии идентификатор языка и знать, какой token в каком месте Вашего сайта Вам нужно вывести.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
pantela
Отправлено: 12 Октября, 2011 - 14:33:01
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 765
Дата рег-ции: Авг. 2010  


Помог: 1 раз(а)




Большое спасибо, но у меня будет всего 2 языка и в будушем не будет расширятся и всё ранво делать по этому принципу значит?

Просто некоторые говорят что лучще добавть поль в таблицу напр
CODE (htmlphp):
скопировать код в буфер обмена
  1. id|title_rus|title_eng|text_rus|text_eng

и так выбреать, чем связывать ьаблицы между собой. + при этом определённо одно и тоже количество записей будут на обоих языка, + при запросе и поиске не будет прогон по тем записям которые не пренодлежат выброному языку (т.е. как вашем случии)

т.е. при добавления полей мы избавляемся вот одно таблицы (язык) и количество записей в тбалице материалы. При этом ведь по идей запрос должен быстрее проходить. Растерялся
 
 Top
EuGen Администратор
Отправлено: 12 Октября, 2011 - 14:50:20
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




В приведенном Вами слачае на каждое добавление языка нужно будет делать ALTER TABLE; в моем случае - нет, так как структура универсальна.
Кроме прочего в Вашем случае плохо то, что меняется название поля, которое нужно выбрать, а не его значение, чего следует избегать. Например, к Вам придет запрос на отображение в немецком языке. Как исходя из Вашей структуры можно просто понять, что у Вас такого языка нет? Разве что через служебные запросы типа DESCRIBE.
Кроме прочего - сколько бы текстов ни было, сколько бы языков ни было, структура, подобная приведенной мной (там, где разделены сами token и локализация с языками) - всегда будет одинаковой.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
pantela
Отправлено: 12 Октября, 2011 - 14:55:52
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 765
Дата рег-ции: Авг. 2010  


Помог: 1 раз(а)




Да я понимаю что универсальнее, один вопрос только для чего служит поле token не очень понимаю Однако
 
 Top
Viper
Отправлено: 12 Октября, 2011 - 15:07:21
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




pantela трактуйте token как объект.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
EuGen Администратор
Отправлено: 12 Октября, 2011 - 15:16:57
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Проще пояснить так.
Представьте себе, что у Вас есть шаблон вида
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <html>
  3. <head>
  4. <title>Привет</title>
  5. </head>
  6. <body>
  7. <h1>Это мой сайт!</h1>
  8. </body>
  9. </html>
  10.  

который Вам нужно локализовать. В этом случае две присутствующие строки и будут представлять собой эти самые token
Каким образом Вы будете управлять ими в скрипте - вопрос реализации. Если предположить, что Вы где-то храните это в виде массива $rgTokens где ключом является номер token в БД, а значением - localizated_string, то Вам достаточно изменить шаблон так:
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <html>
  3. <head>
  4. <title><?=$rgTokens[1]?></title>
  5. </head>
  6. <body>
  7. <h1><?=$rgTokens[2]?></h1>
  8. </body>
  9. </html>
  10.  

То есть token - это некоторое выражение внутри шаблона/сайта, которое должно быть локализовано.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
pantela
Отправлено: 12 Октября, 2011 - 15:30:23
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 765
Дата рег-ции: Авг. 2010  


Помог: 1 раз(а)




аа тебе более менее понятно, это ответ на мой следуюший вопрос да:

напр. есть CMS, где есть материалы и каждый новый материал выводтся на главной странице, при добавлении как вы говорили способом локлаизации материалов, при изменении языка, надо что бы выводить соотвествуюший материал на втором языке, и т.е. когда будет совподение по token тогда запросу будет ясно что нужен этот материал, а там уже будет по полю язык выбератся запись.
верно Закатив глазки

Если нет подправте и подскажите решение.

спс.
 
 Top
EuGen Администратор
Отправлено: 12 Октября, 2011 - 15:35:33
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Примерно так.
Вообще можно загружать из БД все token для того языка, который у Вас сейчас в сессии, в тот самый массив $rgTokens - и затем работать с ним - вроде как
PHP:
скопировать код в буфер обмена
  1. $rgTokens    = array();
  2. $language_id = (int)$_SESSION['language_id'];
  3. $rSelect     = mysql_query('SELECT token, localizated_string FROM materials WHERE language_id='.$language_id);
  4. while($rgRow = mysql_fetch_array($rSelect))
  5. {
  6.    $rgTokens[$rgRow['token']]=$rgRow['localized_string'];
  7. }


Правда если этих token слишком много, лучше разделить и выбирать только то, что нужно в конкретной странице (скажем, ввести массив соответствия страниц и номеров token, выбирая их на этой самой странице) - чтобы не загружать в память слишком много и в то же время не делать запрос для каждого token по отдельности.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
DeepVarvar Супермодератор
Отправлено: 12 Октября, 2011 - 19:43:28
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




EuGen а как это выглядит в админке для простого админа?
Доп. поля (вкладки дублирующих полей) для каждого языка страницы?
Или всетаки это (визуально) разные редактируемые админом страницы?
 
 Top
EuGen Администратор
Отправлено: 13 Октября, 2011 - 10:23:30
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




А для администратора это выглядит просто в виде некоторой формы, в которой, к примеру, есть два дропдауна (списка выбора) - первый со списком token а второй со списком языков. Ну и, разумеется, текстовое поле для ввода localizated_string
Удобства ради можно token не нумеровать списком - а ввести, скажем, строковые их названия, например,

titleForMainPage
siteGreetings
usersPageBottomText

и т.п. - или сделать таблицу, где номерам token ставить в соответствие некоторое примечание (вероятно, на родном - русском - языке) - и в панели для администратора отображать уже эти названия.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
DeepVarvar Супермодератор
Отправлено: 13 Октября, 2011 - 13:17:00
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




EuGen тогда зачем столько лишних телодвижений?
В моем варианте в админке есть дерево документов с любой вложенностью.
По сути дела "язык сайта" это просто соответствующий раздел в котором лежат документы на том или ином языке.
Админу останется только следить за ссылками в контенте документов, чтобы они указывали на правильный языковой адрес вложенности (/en/document22/ , /fr/document22/).
Но он и так обязан следить за этим.

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

Токены (текстики для приветствий, кнопок, алертов, подсказок) у меня лично хранятся в виде констант с префиксом lang_ в соответствующей папке в файлах поназванию языков. (ru.lang.php, en.lang.php) и инклюдятся по условию.

Но ничто не мешает хранить эти данные в БД для расширяемости прямо в админке.
С добавлением языка и редактированием этих токенов.

Кстати человек спрашивал не про токены, а про документы на разных языках.
Это получается такие огромные "токенища" - для каждого документа?

Я же спросил как будет выглядеть не редактор токенов, а форма редактирования отдельного документа для скажем трех языков сразу?
 
 Top
EuGen Администратор
Отправлено: 13 Октября, 2011 - 13:29:14
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




DeepVarvar пишет:
Это получается такие огромные "токенища" - для каждого документа?

Нет. Читайте, пожалуйста, внимательно - их набор постоянный и не меняется (если, конечно, на сайте не появляются новые тексты)
DeepVarvar пишет:
Кстати человек спрашивал не про токены

Верно, но они пришли из моего варианта решения проблемы, озвученной автором.
DeepVarvar пишет:
Админу останется только следить за ссылками в контенте документов

Я бы это как раз и назвал Вашим определением:
DeepVarvar пишет:
зачем столько лишних телодвижений

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


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
DeepVarvar Супермодератор
Отправлено: 13 Октября, 2011 - 13:30:58
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




EuGen пишет:
если, конечно, на сайте не появляются новые тексты
С учетом того что контент агрессивно редактируется.
 
 Top
Страниц (3): « 1 [2] 3 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB