кто-нибудь может сказать мне, где я могу найти таблицу перевода для всех букв мира, включая русский, греческий, тайский и т. д.? Мне нужна функция для создания причудливого URL-адреса из текста на любом языке. И, поскольку мы ничего не знаем, например, о японском языке, я пробую этот путь. Спасибо за ваши ответы
Таблица перевода на все языки мира
Ответы (4)
Похоже, вам нужна таблица транслитерации. Попробуйте некоторые из ссылок на этой странице. Если вы хотите использовать его только для URL-адресов HTTP, взгляните на percent-encoding.
Транслитерация в целом нетривиальна, см. Руководство по транслитерации Unicode. Прямой ответ на ваш вопрос заключается в том, что таблицы, которую вы ищете, не существует.
Тем не менее, есть несколько доступных обходных путей, таких как Unidecode Perl-модуль (и порты на Ruby Python). Но, как он указывает, вы не собираетесь использовать транслитерацию, скажем, для тайского или японского языка, которую удобно читать при таком преобразовании.
Взгляните на следующий тестовый сеанс с использованием порта Python:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from unidecode import unidecode
hello = u"""Hello world! English
Salut le monde! French
Saluton Mondo! Esperanto
Sveika, pasaule! Latvian
Tere, maailm! Estonian
Merhaba dünya! Turkish
Olá mundo! Portuguese
안녕, 세상! Korean
你好,世界! Chinese
こんにちは 世界! Japanese
ሠላም ዓለም! Amharic
哈佬世界! Cantonese
Привет, мир! Russian
Καλημέρα κόσμε! Greek
สวัสดีราคาถูก! Thai"""
lines = hello.splitlines()
samples = []
for line in lines:
language, text = line.split()[-1], ' '.join(line.split()[:-1])
samples.append( (language, text) )
for language, text in samples:
print language.upper()
print text
print unidecode(text)
print
Что выводит:
РУССКИЙ
Привет, мир!
Привет, мир!
ФРАНЦУЗСКИЙ
Salut le monde!
Salut le monde!
Эсперанто
Приветствую мир!
Приветствую мир!
ЛАТВИЙСКИЙ
Швейка, пасауле!
Швейка, пасауле!
ЭСТОНСКИЙ
Tere, maailm!
Tere, maailm!
ТУРЕЦКИЙ
Merhaba dünya!
Merhaba dunya!
ПОРТУГАЛЬСКИЙ
Olá mundo!
Ola mundo!
КОРЕЙСКИЙ
안녕, 세상!
анён, сэсан!
КИТАЙСКИЙ
你好,世界!
Ни Хао, Ши Цзе!
ЯПОНСКИЙ
こんにちは 世界!
konnitiha Shi Jie !
АМХАРСКИЙ
ሠላም ዓለም!
szalaame `aalame!
КАНТОНСКИЙ
哈佬世界!
Ха Лао Ши Цзе !
РУССКИЙ
Привет, мир!
Привет, мир!
ГРЕЧЕСКИЙ
Καλημέρα κόσμε!
Kalemera kosme!
ТАЙСКИЙ
สวัสดีราคาถูก!
swasdiiraakhaathuuk!
Для языков, которые в первую очередь похожи на латиницу, это очень полезно: он удаляет знаки ударения. За их пределами все становится рискованным быстро.
Если вы сравните китайский и японский примеры, вы увидите, что последовательность 世界
транслитерируется Shi Jie
в обоих. Это неправильно — «транслитерация» (или, лучше, «чтение») японского языка должна быть seikai. Русский и грек не так уж плохи. Но амхарский и тайский языки ужасны — я полагаю, что их не сможет прочитать даже тот, кто бегло говорит на этих языках.
Общая проблема здесь заключается в том, что транслитерация не может быть определена, если также не принимается во внимание информация, специфичная для языка, и даже определение языка нетривиально: как ваша программа должна знать, является ли 世界
японским или китайским?
Лучшая политика, чем пытаться принудительно внедрить хакерскую транслитерацию в ваше приложение, — это выяснить, как правильно поддерживать Unicode в первую очередь. Если вам необходимо представление текста, написанного не латинскими буквами, в формате ASCII, используйте кодировку URL.
Не правильно понял ваш вопрос. Вы ищете что-то подобное?
http://www.joelonsoftware.com/articles/Unicode.html
Вы всегда можете попытаться преобразовать текст в iso-8859-1 (легко используя, например, iconv, если он в php), а затем просто заменить пробелы и все те недопустимые символы, которые допустимы в iso-8859-1, но не в URL; -)