Форумы портала PHP.SU » » Работа с СУБД » Разные языки

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

1. McLotos - 25 Мая, 2011 - 13:11:14 - перейти к сообщению
Подскажите как сделать чтобы имя и фамилия пользователя выводились на русском и на английском, в БД эти данные только на английском.
И как сделать чтобы выводилось не полное имя, а только первая буква
Ну допустим пользователь в БД записан как Petr Ivanov
А в приветствии выводится только Ivanov P
Имя и фамилия в БД хранятся в разных полях таблицы
2. EuGen - 25 Мая, 2011 - 13:18:51 - перейти к сообщению
Обычно бывает наоборот, есть вариант на русском и выполняется транслитерация.
Если же нужно сделать с английского на русский, то транслитерацию можно сделать просто по принципу "1:1". Завести, например, массив и использовать его. Простой пример (замена 1:1):
PHP:
скопировать код в буфер обмена
  1.  
  2. //варианты для всех букв, не забыть заглавные
  3. $rgLetters=array('a'=>'а', 'b'=>'б');
  4. $nameEng='Peter Ivanov';
  5. $nameRus=join('',array_map(create_function('$item', 'global $rgLetters; return $rgLetters[$item];'), str_split($nameEng)));
  6.  

Но следует помнить, что в английском языке тоже есть комбинации вроде "th" - читающееся как "з". Так что надежнее всего - хранить 2 поля в БД.
3. McLotos - 25 Мая, 2011 - 13:24:11 - перейти к сообщению
Блин. Огромное человеческое! А то я никак не мог сообразить как это реализовывается, раньше использовал готовые lang файлы, теперь хоть буду знать как это пишется.
4. Мелкий - 25 Мая, 2011 - 13:26:59 - перейти к сообщению
EuGen, ничего себе конструкция. А разве не проще:
5. EuGen - 25 Мая, 2011 - 13:29:07 - перейти к сообщению
На случай, когда мы захотим сделать более сложную обработку, скажем, учесть все такие хитрости вроде транскрипций, проверки закрытых/открытых слогов, больше подойдет array_map
6. McLotos - 25 Мая, 2011 - 13:45:20 - перейти к сообщению
А расположение букв играет роль?
Ну к примеру фамилия Zhilenko. Логически человек понимает что это Жиленко, а не Зхиленко.
Переведётся ли это корректно, если в списке
PHP:
скопировать код в буфер обмена
  1. $rgLetters=array('zh'=>'ж', 'z'=>'з','h'=>'х');

Будут сначала стоять парные, а патом одинарные.
7. EuGen - 25 Мая, 2011 - 13:57:46 - перейти к сообщению
В случае с str_replace - да.
Для array_map же нужно будет изменить логику встроенной функции. В этом вариант, предложенный Мелкий предпочтительнее
8. McLotos - 25 Мая, 2011 - 14:10:21 - перейти к сообщению
Так какой вариант мне использовать? Я что-то запутался
9. EuGen - 25 Мая, 2011 - 14:18:58 - перейти к сообщению
Этот:
PHP:
скопировать код в буфер обмена
  1.  
  2. $rgLetters=array('Zh'=>'Ж', 'z'=>'з','h'=>'х', 'i'=>'и', 'l'=>'л','o'=>'о','k'=>'к', 'n'=>'н');
  3. $nameEng ='Zhilenko';
  4. $nameRus = str_replace(array_keys($rgLetters),array_values($rgLetters), $nameEng);
  5.  

 

Powered by ExBB FM 1.0 RC1