Привет всем. Долго думал куда написать - решил сюда. Такой каверзный вопро. Я думаю не стоит объяснять, что такое интернационализация (I18N). Так вот, работая над ней первый раз, начал разбираться в кодировках, чарсэтах и тому подобному. Что почем Пошарил я и в phpBB и в MyAdnmin и насчупал, что например русский перевод сохранен в ANSI. При этом есть гдето в настройках крутой массив доступных языков, чтобы при подключении какогото языка например ru типа отправлять header CHARSET=windows-1251. И только в одной книге по PHP4 нашел освещение этого вопроса. Там такая же ситуация - принимаем HTTP_ACCEPT_LANGUAGE (или как оно там пишеться) отправляем хедэр соответственно, не забыв при этом подключить соответственный перевод из файла например ru.php c "русской кодировкой" Как сделал я Значит подумал, что надо при вышесказанном мочить везде динамичный set names $GLOBALS['accept_language'] в зависимости от того кто заше немец или русский или китаец... Думаю ну его в баню... Прописал в классе db жестко set names utf8 и остальное тоже utf8. посохранял все переводы подключаемых языков в utf8 -все : и русский и английский и немецкий и польский предположим :wink: ну и скрипты тоже в этой кодировке. Теперь также принимаю HTTP_ACCEPT_LANGUAGE подключаю соответсвующий файл перевода и отправляю хедер везде и в мету charset utf8. тоже сделал крутой массив для функции mb_convert_encoding() которая работает в крутой процедуре для preg_mach - ей. Вот такие блины получаются... Внимание вопрос Зачем тогда в phpBB и в MyAdnmin понавыдумывали эту кучу кодировок и все равно в MyAdnmin у меня все в UTF-8 покаызывает и зачем в книжке так написано, если можно проще как я. Просто я впервые с этим столкнулся, и хотелось бы узнать Ваши мнения, кто как делае... за | против... и все такое... Заранее благодарю.
думаю дело в том, что win-1251 в два раза короче - читай в два раза меньше трафа ) нахрен эта UTF8, пусть китайцы с ней паряться )) ну не нравится мне движение в сторону тотального использования UTF8 помоему большим бредом являются только домены на национальных языках чисто ИМХО
Привет еще раз. Тема затрагивает интернационализацию, но все равно отдельная, но все рвано затрагивает. Подскажите пожалуйста, как шаблонизировать подключаемые по link в шаблоны html джаваскрипты с учетом разных языков, тоест сообщения из javascript должны быть на разных языках - или не париться и создать кудч файлов типа например для регистрации register_ru.js register_en.js и подключать их в шаблонах в зависимости от языка заменя {U_JAVASCRIPT} в шаблоне html?
я думаю китайцу приятно будет на русском сайте увидет знакомые иероглифы :wink: если он вообще туда зайдет!
kostyl по JS - думаю да. типа: 1) создаёшь кучу файлов *.js содержащих только данные с языком 2) а в основном js файле (с функциями) используешь их 3) в html подкулючаешь нужный язык и стандартный js с функциями =))
Ага - я так сначала и попробывал - подключил основной а перед этим "языковый" c чисто строковыми переменными, но у меня не получилось не знаю почему Вот например в первом написал, допустим: [js]LOGIN_ERROR = 'Неверный логин';[/js] Во втором : [js] function ShowtError() { var mess = '&nbps;'; /*не помню как точно знак пробела*/ if ('траляля') { mess = LOGIN_ERROR ; } document.getElementbyId('message_location').innerHTML = mess.fontcolor(#FF0000); /*не помню точно как раскрашивается*/ } [/js] Если то что в первом написать во второй - работает... Тут чтото с областью видимости - но я не знаю...
kostyl странно.. некогда к сожалению доки по JS перелопачивать сейчас.. как временный выход - можно генерить динамически JS с помощью PHP составляя его из двух файлов но лучше по JS документацию почитать конечно
kostyl попробуй покопать в сторону заголовка запроса Accept-Language. у мну FF3 например шлет такое: Код (Text): Accept-Language ru,en-us;q=0.7,en;q=0.3 IE 6.0 такое: Код (Text): Accept-Language: ru оперу, извини, не проверял)
Это ответ на какой вопрос? Че тут копать читаешьпервые два символа с HTTP_ACCEPT_LANGUAGE и вот тебе язык ! :wink:
ага в той же книге говориться что можно и своими силами сделать gettext даже типа назвать одинаково как то что если php скомпилен с поддержкой gettext то будет работать расширение а если нет то своя реализация. Вот только книгу не помню как зовут, автор на А фамилия иностранная ) А как лично вам то как я сделал? А поповоду джавы скрипт знаете?
Значит кому интересно: Получается так что LOGIN ERROR в области видимости функции ShowtError() не видитсья как глобальная и даже как локальная так, как она не создана и при попытке прочитать ее появляется ошибка. Я не разобрался как данным способом сделать ее локальной. При таком разнесении переменных вроде даже если передавать их в функции то все равно не будет работать... ну это уже кому надо тот и разберется. Я сделел проще - объявил в head файла шаблона переменные скрипта в виде: HTML: <script tupe="text/javascript"> LOGIN_ERROR = {JM_ERROR_MESSAGE} </script> и все работает, и заменяется и необходимым языком Причем аттачить фунцкии можно перед объявление переменных, но объявить переменные желательно в head-е, чтобы проинициализировать до загрузки. А ранее приатаченные функции - всего лишь функции - так что вот так ребятки :wink:
kostyl один минус - подключаемые JS файлы кэшируются браузером, а так каждая страница длиннее на язык ))
Я у себя как делал...... Записывал идентификатор языка в сессию. index.php проверяет идентификатор. в папке /lang/ лежат языковые файлы в виде архива. lang-файл представляет собой классический языковой массив. Я использовал смарти... В зависимости от идентификатора загружался lang-файл... Кста, кодировку я сразу поставил utf-8
да сессии это круто - они пригодяться если браузер случайно посылает не тот язык доступа или пользователь хочет переключиться на другой язык, например если я вдруг захочу почитать тоже самое но на китайском, правильно, а это перевод с китайского на русском, который мой браузер запросил и послал HTTP_ACCEPT_LANGUAGE ru, но на китайском же оригинал ГЫ ...
В зависимости от идентификатора, из папки я зыком requirим ланг-файл. Как браузер ошибиться-то сможет? А если utf8, то по барабану, какой там язык))) Китайский, не китайский...... p.s. Кста, а чем utf-16 отличается от utf-8? Какие-то еще мифические языки поддерживает? Клинопись?))))
Обычно, откуда он знает какой язык вы умеете читать? Или вы ему призапуске говорите в микрофон? :wink: естественно нет если определять язык из запроса браузера... без понятия.... наверно каждый символ повторяется для уверенности... :wink:
Хмм... ну для этого, можно исходить из IP-адреса, и устанавливать соотв. идентификатор сессии. Или делать defaultный английский..... Ага, и выводится тоже так же))
Ну разумеется. Как сделано у меня в lilium-group.com Там снизу два языка index.php?setlanguage=ru index.php?setlanguage=en В завис-ти от того, что выбрано, $_SESSION['lang'] = $_GET['setlanguage']; И далее if($_SESSION['lang'] == 'ru') require('./lang/ru.php'); else require('./lang/en.php'); Ну, это я дла примера. А изначально $_SESSION['lang'] == 'ru'