Таблица перевода на все языки мира

кто-нибудь может сказать мне, где я могу найти таблицу перевода для всех букв мира, включая русский, греческий, тайский и т. д.? Мне нужна функция для создания причудливого URL-адреса из текста на любом языке. И, поскольку мы ничего не знаем, например, о японском языке, я пробую этот путь. Спасибо за ваши ответы


person Community    schedule 29.06.2009    source источник
comment
Что вы имеете в виду под таблицей перевода?   -  person Paulo Santos    schedule 29.06.2009


Ответы (4)


Похоже, вам нужна таблица транслитерации. Попробуйте некоторые из ссылок на этой странице. Если вы хотите использовать его только для URL-адресов HTTP, взгляните на percent-encoding.

person l0b0    schedule 29.06.2009

Транслитерация в целом нетривиальна, см. Руководство по транслитерации 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.

person Community    schedule 11.09.2009
comment
Результаты не столь привлекательны для таких языков, как арабский и иврит, в которых нет знаков для всех гласных. Вот результат транслитерации нескольких имён собственных на иврите с помощью Unidecode: שִׁמְעוֹן =› shim@`von ; רְפָיָהוּ =› r@payahv' . Unidecode, кажется, работает особенно странно, когда присутствуют никудим символы (точки), тогда он создает мусор, например '@'. Это вряд ли приемлемо. - person Alex Konnen; 12.02.2019

Не правильно понял ваш вопрос. Вы ищете что-то подобное?

http://www.joelonsoftware.com/articles/Unicode.html

person Carlos Lima    schedule 29.06.2009

Вы всегда можете попытаться преобразовать текст в iso-8859-1 (легко используя, например, iconv, если он в php), а затем просто заменить пробелы и все те недопустимые символы, которые допустимы в iso-8859-1, но не в URL; -)

person RomanT    schedule 29.06.2009
comment
Нет, ты не можешь. Потому что в оригинале указано, что ввод будет из произвольных скриптов, то есть текст будет иметь кодовые точки, которые не закодированы в латинице-1. - person ; 12.09.2009