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 :: Локализация данных

 PHP.SU

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


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

> Без описания
pantela
Отправлено: 04 Апреля, 2015 - 20:18:49
Post Id



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


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


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




Имеется проект, в котором есть таблица список:
1. Страна
2. Регион
3. Город
4. Район
5. Улица

Требуется иметь значения виде локализации, хотел бы макс. правильно реализовать логику, т.к. записей много и производительность надо учитывать.
Приведу прим. таблицы "Страна", по моему мнению имеется 2 варианта, если есть ещё варианты подскажите.:
1. Хранить в БД значения и уже через PHP файл выводить яз. константу
CODE (SQL):
скопировать код в буфер обмена
  1. CREATE TABLE IF NOT EXISTS `map_country` (
  2.   `id` tinyint(2) NOT NULL AUTO_INCREMENT,
  3.   `title` varchar(55) NOT NULL,
  4.   PRIMARY KEY (`id`),
  5.   KEY `id` (`id`)
  6. ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
  7.  
  8. INSERT INTO `map_country` (`id`, `title`) VALUES
  9. (1, 'map_country_russia', 'ru'),
  10. (2, 'map_country_usa', 'usa');


2. Хранить всё в БД и через доп. поле определять яз.
CODE (SQL):
скопировать код в буфер обмена
  1. CREATE TABLE IF NOT EXISTS `map_country` (
  2.   `id` tinyint(2) NOT NULL AUTO_INCREMENT,
  3.   `title` varchar(55) NOT NULL,
  4.   `lang` varchar(2) NOT NULL,
  5.   `local` varchar(2) NOT NULL,
  6.   PRIMARY KEY (`id`),
  7.   KEY `id` (`id`)
  8. ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;
  9.  
  10. INSERT INTO `map_country` (`id`, `title`, `lang`, `local`) VALUES
  11. (1, 'Россия', 'ru', 'ru'),
  12. (2, 'Russia', 'ru', 'en'),
  13. (3, 'США', 'usa', 'ru'),
  14. (4, 'USA', 'usa', 'en');



Если тему надо было создать в разделе "SQL и Архитектура БД" перенесите пожалуйста, просто тут и PHP вариант рассматриваю (прив. №1)

(Отредактировано автором: 06 Апреля, 2015 - 01:27:55)

 
 Top
KingStar
Отправлено: 04 Апреля, 2015 - 21:35:53
Post Id



Участник


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


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




думаю будет правильно сделать

CODE (htmlphp):
скопировать код в буфер обмена
  1. `map_country` :
  2. `id`
  3. `title_ru`
  4. `title_en`
  5.  
  6. ------
  7.  
  8. (1, 'Россия', 'Russia')



т.к. id страны нужен жесткий, для связей


-----
То что программа работает, не означает что она написана правильно!
 
 Top
pantela
Отправлено: 04 Апреля, 2015 - 23:26:19
Post Id



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


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


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




ХммМ, да но на сколько я помню такого вида локализация не особо хорошая, т.к. при добавлении нового яз. придётся всё структуру менять БД что бы новые поля ещё добавить...

Хотя строго будет только 3 яз.
 
 Top
Sail
Отправлено: 04 Апреля, 2015 - 23:35:09
Post Id



Участник


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


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




pantela, можно представить такую, например, структуру:
Одна таблица:
id страны, другие параметры (кроме строк, зависящих от локализации)
Другая таблица:
id локализации
описание локализации (одним, или несколькими полями, по необходимости)
Третья таблица:
id строки, требующей локализации
описание строки...
Четвёртая таблица:
id страны
id строки (название, полное название, аббревиатура)
id локализации
собственно текстовое представление строки в необходимой версии локализации названия и чего-там-ещё.
 
 Top
pantela
Отправлено: 04 Апреля, 2015 - 23:39:07
Post Id



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


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


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




тоже такое думал, вот только при связке этого всего через JOIN и при сравнению с другими вариантами какой будет более быстрее работать?
Если учитывать и вариант KingStar, просто его вариант на сколько я понимаю ни динамичен с точки зрения если количество яз. будет изменятся на сайте, но у меня строго известно что только 3 яз. будет в проекте...
 
 Top
KingStar
Отправлено: 05 Апреля, 2015 - 21:38:03
Post Id



Участник


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


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




pantela, чем он не динамечен? если использовать другие варианты, то что? не придется заново добавлять языки? я представляю себе так - в кукисы по умолчанию добавляется локаль, запрос береться

PHP:
скопировать код в буфер обмена
  1.  SELECT `title_".$_COOKIE['local']."` FROM .....


меняется локаль - меняется поле, при этом строго задан id страны, который используется в связях с

Цитата:
2. Регион
3. Город
4. Район
5. Улица


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


-----
То что программа работает, не означает что она написана правильно!
 
 Top
Sail
Отправлено: 05 Апреля, 2015 - 23:10:04
Post Id



Участник


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


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




KingStar, есть разница между добавлением записи и добавлением поля в таблицу БД. Закатив глазки
 
 Top
LIME
Отправлено: 05 Апреля, 2015 - 23:11:40
Post Id


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


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


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




pantela твой вариант 2 вполне рабочий
так называемая умышленная денормализация
причем самый ее классический пример
KingStar пишет:
если использовать другие варианты, то что? не придется заново добавлять языки?
не придется заново добавлять поля
переписывать модель, модульные тесты и бох знает что еще
только данные добавятся
 
 Top
pantela
Отправлено: 05 Апреля, 2015 - 23:13:23
Post Id



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


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


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




Ну это ясн, что через куки или другим методом в запрос подставлять яз., но просто помню что такое вариант сильно критиковали... Растерялся
`title_ru`
`title_en`

Хотя по моему мнению такое метод будет быстрее работать чем другие...
 
 Top
Sail
Отправлено: 05 Апреля, 2015 - 23:17:08
Post Id



Участник


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


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




pantela, кстати, почему во втором варианте в три поля добавляются четыре значения?
 
 Top
LIME
Отправлено: 05 Апреля, 2015 - 23:21:42
Post Id


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


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


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




да кстати
незаметил
(`id`, `title`, `lang`, `local`)
так наверное?
(Добавление)
pantela пишет:
такое метод будет быстрее работать чем другие...
фигня
 
 Top
pantela
Отправлено: 06 Апреля, 2015 - 01:27:12
Post Id



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


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


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




Цитата:
(`id`, `title`, `lang`, `local`)
так наверное?
Да, отпичатался...

Цитата:
фигня
Ну почему, смотри напр. у меня 100 записей, и через вариант lang_ru, lang_en будет выводить данные быстрее, вроде чем-же среди 200 записей, где через поле lang будет выводить записи соотвествующего яз.
 
 Top
LIME
Отправлено: 06 Апреля, 2015 - 01:35:43
Post Id


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


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


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




разница настолько получится мизерная на реальном приложении(кэширование запросов СУБД, выборка по индексам в большой таблице и неважность оптимизации для маленькой) что ... фигня
а выгода в скорости и качестве разработки есть вполне определенная
динамичность добавления новых переводов как сам сказал
в форме достаточно указать любой язык
перевод добавляется без участия программиста
 
 Top
pantela
Отправлено: 06 Апреля, 2015 - 12:16:38
Post Id



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


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


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




Ок, но если выбирать напр. Страну Россия, и все её дочерные записи (регион, город, район, улицы) в этом случае тоже мизерная разница будет? Просто представь себе 4 JOIN и по скольким записям надо вытаскивать + результат улиц может быть несколько...
 
 Top
LIME
Отправлено: 06 Апреля, 2015 - 17:26:58
Post Id


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


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


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




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


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB