X   Сообщение сайта
(Сообщение закроется через 2 секунды)

Здравствуйте, гость ( Вход | Регистрация )

2 страниц Открыть меню  < 1 2  
Ответить в данную темуНачать новую тему
> Как делать мультиязычность?
Youshi
сообщение 2008-12-31, 19:51
Сообщение #21
Любитель
Иконка группы

Группа: Разработчики
Сообщений: 118
Регистрация: 2008-12-14
Из: Россия. Астрахань

Репутация:   нет  
Всего: 8


Дамп БД:

-- phpMyAdmin SQL Dump
-- version 2.11.3deb1ubuntu1.1
-- [url]http://www.phpmyadmin.net[/url]
--
-- Хост: localhost
-- Время создания: Дек 31 2008 г., 19:38
-- Версия сервера: 5.0.51
-- Версия PHP: 5.2.4-2ubuntu5.4

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- База данных: `eleanor`
--

-- --------------------------------------------------------

--
-- Структура таблицы `el_news`
--

CREATE TABLE IF NOT EXISTS `el_news` (
  `id` int(11) NOT NULL auto_increment,
  `url` varchar(100) NOT NULL,
  `cid` int(11) NOT NULL default &#39;0&#39;,
  `status` tinyint(1) NOT NULL default &#39;1&#39;,
  `def_lang` tinyint(1) unsigned NOT NULL default &#39;0&#39;,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `url` (`url`),
  KEY `cid` (`cid`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=7;

--
-- Дамп данных таблицы `el_news`
--

INSERT INTO `el_news` (`id`, `url`, `cid`, `status`, `def_lang`) VALUES
(1, &#39;url_1&#39;, 1, 1, 0),
(2, &#39;url_2&#39;, 2, 1, 0),
(3, &#39;url_3&#39;, 1, 1, 0),
(4, &#39;url_4&#39;, 3, 1, 0),
(5, &#39;url_5&#39;, 2, 1, 0),
(6, &#39;url_6&#39;, 3, 1, 1);

-- --------------------------------------------------------

--
-- Структура таблицы `el_news_lang`
--

CREATE TABLE IF NOT EXISTS `el_news_lang` (
  `id` int(11) NOT NULL,
  `language` varchar(10) NOT NULL,
  `title` varchar(200) NOT NULL,
  `text` text NOT NULL,
  KEY `language` (`language`),
  KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

--
-- Дамп данных таблицы `el_news_lang`
--

INSERT INTO `el_news_lang` (`id`, `language`, `title`, `text`) VALUES
(1, &#39;ru&#39;, &#39;Новость 1&#39;, &#39;Это новость 1&#39;),
(1, &#39;en&#39;, &#39;Story 1&#39;, &#39;This is story 1&#39;),
(2, &#39;ru&#39;, &#39;Новость 2&#39;, &#39;Эт новость 2&#39;),
(3, &#39;ru&#39;, &#39;Новость 3&#39;, &#39;Это новость 3&#39;),
(4, &#39;ru&#39;, &#39;новость 4&#39;, &#39;Это новость 4&#39;),
(5, &#39;en&#39;, &#39;Новость 5&#39;, &#39;Это новость 5&#39;),
(5, &#39;ru&#39;, &#39;Новость 5&#39;, &#39;Это новость 5 русская&#39;),
(6, &#39;ru&#39;, &#39;Новость 6&#39;, &#39;Это новость 6&#39;);


Запрос:

SELECT * 
FROM el_news AS n
INNER JOIN el_news_lang AS nl
USING ( `id` ) 
WHERE n.status =1 -- ну это понятно
HAVING IF( n.def_lang =1, nl.language = &#39;ru&#39;, nl.language = &#39;en&#39; )  -- это поясню отдельно


результат:

id     url     cid     status     def_lang     language     title     text
1    url_1    1    1    0    en    Story 1    This is story 1
5    url_5    2    1    0    en    Новость 5    Это новость 5
6    url_6    3    1    1    ru    Новость 6    Это новость 6

И поясню запрос. В табличке el_news я добавил еще один флаг def_lang. Он указывает, отображать новость всегда на языке по умолчанию или же с учетом языка. Данный запрос подойдет для пункта (1)

Цитата (Alexander @ 31.12.2008, 18:49)
1. Должна быть возможность установить одну новость для всех языков. Это не значит, что так должно быть по-умолчанию.


Для пункта 2 я пока не придумал... размышляю.
Попутных вопрос:

а что делать, если к примеру дефолтный язык русский, новость размещена только на украинском, а сайт работает с русским/украинским/английским?
Перейти в начало страницы
+Цитировать сообщение
Alexander
сообщение 2008-12-31, 20:01
Сообщение #22
Eleanor developer
Иконка группы

Группа: Администраторы
Сообщений: 5 262
Регистрация: 2008-11-11
Из: Николаев
Версия системы: RC5

Репутация:   нет  
Всего: 67


Цитата (Youshi @ 31.12.2008, 20:51)
а что делать, если к примеру дефолтный язык русский, новость размещена только на украинском, а сайт работает с русским/украинским/английским?

Такого не будет. А даже, если и будет - новость должна будет отображаться в украинской версии сайта.

Кстати, лучше мне кажется поле language сделать типа enum.. На одно действие больше при добавлении/удалении языка.. Зато нагрузка на БД меньше.
Перейти в начало страницы
+Цитировать сообщение
Youshi
сообщение 2008-12-31, 20:30
Сообщение #23
Любитель
Иконка группы

Группа: Разработчики
Сообщений: 118
Регистрация: 2008-12-14
Из: Россия. Астрахань

Репутация:   нет  
Всего: 8


Цитата (Alexander @ 31.12.2008, 20:01)
Кстати, лучше мне кажется поле language сделать типа enum.. На одно действие больше при добавлении/удалении языка.. Зато нагрузка на БД меньше.


Не стоит, имхо. Лучше языки выбирать по целочисленному индексу. Размерности tinyint (3) unsigned, думаю, хватит за глаза. потому как менять структуру таблицы для каждого модуля, имхо, не разумно. Но решай сам ;)
Перейти в начало страницы
+Цитировать сообщение
Alexander
сообщение 2008-12-31, 21:01
Сообщение #24
Eleanor developer
Иконка группы

Группа: Администраторы
Сообщений: 5 262
Регистрация: 2008-11-11
Из: Николаев
Версия системы: RC5

Репутация:   нет  
Всего: 67


Цитата (Youshi @ 31.12.2008, 21:30)
Не стоит, имхо. Лучше языки выбирать по целочисленному индексу.

А вот тут я не согласен. Это затруднит прямое редактирование БД через PMA.. Да и как-то приравнивать языки к цифрам по-моиму не очень: я вообще планировал только русско-английскую версию системы. Лишь благодаря некоторым людям, решил добавить еще и украинский язык. Не думаю, что enum медленнее tinyint.
Перейти в начало страницы
+Цитировать сообщение
Youshi
сообщение 2008-12-31, 21:14
Сообщение #25
Любитель
Иконка группы

Группа: Разработчики
Сообщений: 118
Регистрация: 2008-12-14
Из: Россия. Астрахань

Репутация:   нет  
Всего: 8


Цитата (Alexander @ 31.12.2008, 21:01)
А вот тут я не согласен. Это затруднит прямое редактирование БД через PMA.. Да и как-то приравнивать языки к цифрам по-моиму не очень: я вообще планировал только русско-английскую версию системы. Лишь благодаря некоторым людям, решил добавить еще и украинский язык. Не думаю, что enum медленнее tinyint.


Если количество языков фиксировано, то я с тобой абсолютно согласен - enum лучший вариант.
Перейти в начало страницы
+Цитировать сообщение
Alexander
сообщение 2008-12-31, 21:50
Сообщение #26
Eleanor developer
Иконка группы

Группа: Администраторы
Сообщений: 5 262
Регистрация: 2008-11-11
Из: Николаев
Версия системы: RC5

Репутация:   нет  
Всего: 67


Цитата (Youshi @ 31.12.2008, 22:14)
Если количество языков фиксировано

Количество языков не фиксированно. Вероятность изменения количества языков стремится к 0. Система в первую очередь будет ориентированна на русскоязычное население планеты - именно поэтому в качестве кодировки по-умолчанию выбрана ср1251. Если кому-то нужно будет добавить еще один какой-то язык, скажем китайский - нужно будет перелопатить всю в утф всю базу и все файлы. На фоне этого, добавление еще одного пункта в enum поля покажется детской забавой.
Перейти в начало страницы
+Цитировать сообщение
Youshi
сообщение 2009-01-02, 16:56
Сообщение #27
Любитель
Иконка группы

Группа: Разработчики
Сообщений: 118
Регистрация: 2008-12-14
Из: Россия. Астрахань

Репутация:   нет  
Всего: 8


Цитата (Alexander @ 31.12.2008, 21:50)
Количество языков не фиксированно. Вероятность изменения количества языков стремится к 0. Система в первую очередь будет ориентированна на русскоязычное население планеты - именно поэтому в качестве кодировки по-умолчанию выбрана ср1251. Если кому-то нужно будет добавить еще один какой-то язык, скажем китайский - нужно будет перелопатить всю в утф всю базу и все файлы. На фоне этого, добавление еще одного пункта в enum поля покажется детской забавой.



Ну никто не отменял еще пакетной конвертации ;)
Перейти в начало страницы
+Цитировать сообщение
Гость_ProG_*
сообщение 2009-01-10, 7:26
Сообщение #28



Гости





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

Как будут хранится данные

Тут уже стоит вопрос в след.

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

2 способ
В зависиости от того какие языки вкл. администратор
будут создваться таблицы с языками для разных новостей типа
en_news_content
ru_news_content
ua_news_content

и будет опять же основная таблица
news

id|date|...|ua|..(и остальные языки которые были включены админом)значение полей языка
типа 1\0 добавлена ли новость на этом языке или нет

Потом просто когда пользователь будет смотреть новость
будет надпись смотреть новость так же на таких-то языках: и будет перечислены языки на которых она была написано(выборк будет осуществлятся из таблиц по значению языковых полей типа ua\en\ru (0 или 1 )).

Или просто отображать пользователь с руским языком только новости которые были опубликованые на рус.

Или взависиомтси от того какие доп. языки выбрал себе пользователь(в своих настройках типа какими владеет)....

Вот такие варианты от меня

Сообщение отредактировал ProG - 2009-01-10, 7:32
Перейти в начало страницы
+Цитировать сообщение
Alexander
сообщение 2009-01-11, 1:33
Сообщение #29
Eleanor developer
Иконка группы

Группа: Администраторы
Сообщений: 5 262
Регистрация: 2008-11-11
Из: Николаев
Версия системы: RC5

Репутация:   нет  
Всего: 67


Цитата (ProG @ 10.1.2009, 8:26)
идет автоопределение языка(по умолчанию это тот который выбран на сайте у пользователя)
Далее он заполняет это на своем языке . После нажатии добавить его спрашивают не хотели бы вы заполнить новость еще на каком-то языке и появляется список из доступных языков.

Очень хорошая идея. Будет реализовано, но позже.. Пока новость с пользовательской части будет добавляться только с одним языком.
Перейти в начало страницы
+Цитировать сообщение
Гость_ProG_*
сообщение 2009-01-11, 16:20
Сообщение #30



Гости





Дело ваше. Мое мнение делать сразу все правильно . что бы потом не переделывать.
Перейти в начало страницы
+Цитировать сообщение
Alexander
сообщение 2009-01-11, 18:28
Сообщение #31
Eleanor developer
Иконка группы

Группа: Администраторы
Сообщений: 5 262
Регистрация: 2008-11-11
Из: Николаев
Версия системы: RC5

Репутация:   нет  
Всего: 67


Я просто до конца не уверен в правильности избранного пути. Мне, например не нравится, что для добавления новости нужно будет переходить по страницам. Уж лучше, чтобы все было на одной. (тогда не возникнет проблем, если в момент добавления, вдруг прервется связь с сервером).
Перейти в начало страницы
+Цитировать сообщение
Гость_ProG_*
сообщение 2009-01-11, 19:11
Сообщение #32



Гости





Цитата (Alexander @ 11.1.2009, 18:28)
Я просто до конца не уверен в правильности избранного пути. Мне, например не нравится, что для добавления новости нужно будет переходить по страницам. Уж лучше, чтобы все было на одной. (тогда не возникнет проблем, если в момент добавления, вдруг прервется связь с сервером).


Смотри допустим когда автора нажал добавить Происходит Новость добавлена успешно тоесть она уже добавилась, после того как от сервера пришел ответ ок , происходит вопрос к клиенту хотите ли добавить еще на каком языке , и сморти новость добавиться даже при дисконекте.

А твой вариант всё на одном это ужастно смотртится прдставь тебе что на сайте 5 языков!!!Ты представляешь какого размера будет стр.
А как говорилось в какой-то статье жилательно чтобы стр вписывалась так чтобы не появлялась скролбара это не удобно для пользователя.
2 языка это 4 больших техт_ареа + еще доп поля. Слишком много места заниматся будет на 1 стр.

И зачем переход по стр. ??? После того как пользователь успешно добавил 1 новость , он нажимает допустим добавить новость на англ . После этого из файла англ языка. подгружаются новые названия тоесть заменится пару слов : Title ,Date, Shor news, Ful News etc.
Перейти в начало страницы
+Цитировать сообщение
Alexander
сообщение 2009-01-11, 19:50
Сообщение #33
Eleanor developer
Иконка группы

Группа: Администраторы
Сообщений: 5 262
Регистрация: 2008-11-11
Из: Николаев
Версия системы: RC5

Репутация:   нет  
Всего: 67


Цитата (ProG @ 11.1.2009, 20:11)
А твой вариант всё на одном это ужастно смотртится прдставь тебе что на сайте 5 языков!!!Ты представляешь какого размера будет стр.

Есть куча вариантов, как повысить юзабилити:
-догрузка содержимого на AJAX
-разбить по вкладкам
...

Я хочу, чтобы все было на одной странице прежде всего потому, чтобы можно было сразу все отредактировать. Вдруг, при написании текста на английском, автору придет еще парочка гениальных мыслей, которые он захочет добавить и в русскую версию. Когда все под рукой - так намного удобнее.
Перейти в начало страницы
+Цитировать сообщение
Гость_ProG_*
сообщение 2009-01-11, 20:48
Сообщение #34



Гости





Хорошо можно сделать закладки (на счет аякса понятно через через аякс)

вот по вкладкам да согласен лучше сделать тогда так

News Lang : Русский | Украинаский | English

То есть в зависимости какая вкладка заполнения выбрана пользователем
а дальше опять же при нажатии добавить если пользователь не заполнен больше новость не на какхи языках выскакивает диалоговое окно .
Перейти в начало страницы
+Цитировать сообщение
Alexander
сообщение 2009-01-11, 21:24
Сообщение #35
Eleanor developer
Иконка группы

Группа: Администраторы
Сообщений: 5 262
Регистрация: 2008-11-11
Из: Николаев
Версия системы: RC5

Репутация:   нет  
Всего: 67


Делать для каждого языка отдельную вкладу - не самое оптимальное решение. Сам же сказал, что на сайте может быть больше 5 языков.. И это пять вкладок - очень некрасиво будет. Нужно все делать на одной вкладке, но для ненагромождения внешнего вида, можно реализовать свертку других языков. Смотри пример на сайте http://www.dni.ru/polit/2009/1/11/156855.html в правой колонке "Политика".
Перейти в начало страницы
+Цитировать сообщение
Screatch
сообщение 2009-01-11, 23:11
Сообщение #36
Опытный
Иконка группы

Группа: Eleanor TEAM
Сообщений: 717
Регистрация: 2008-11-11
Из: Таллинн

Репутация:   нет  
Всего: 20


Вот как переключение языков вижу я, ну и конечно переключение между вкладками должно быть организовано на ajax.


Сообщение отредактировал Screatch - 2009-01-11, 23:12
Перейти в начало страницы
+Цитировать сообщение
Гость_Elf_*
сообщение 2009-04-07, 9:09
Сообщение #37



Гости





Если посмотреть на lenta.ru, bbc.com то там нету выбора языка... Все таки наверно сайты создают для публики родного языка. Не будем же мы просить юзеров при создании тем на форуме просить их заполнить три поля на 3 языках :)

Сообщение отредактировал Elf - 2009-04-07, 9:17
Перейти в начало страницы
+Цитировать сообщение

2 страниц Открыть меню  < 1 2
Ответить в данную темуНачать новую тему
0 чел. читают эту тему (гостей: 0, скрытых пользователей: 0)
Пользователей: 0

 
RSS Текстовая версия 0.0376 сек.    11 запросов    GZIP включен    Сейчас: 2024-12-06, 8:35