Таблица перевода для всех языков мира - PullRequest
0 голосов
/ 29 июня 2009

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

Ответы [ 4 ]

3 голосов
/ 12 сентября 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

Какие выходы:

английский
Привет, мир!
Привет, мир!

ФРАНЦУЗСКИЙ
Салют ле Монд!
Салют ле Монд!

ESPERANTO
Салютон Мондо!
Салютон Мондо!

ЛАТВИЯ
Свейка, пасауле!
Свейка, пасауле!

ЭСТОНИЯ
Tere, maailm!
Тере, маилм!

ТУРЕЦКИЙ
Merhaba dünya!
Мерхаба Дуня!

ПОРТУГАЛИЯ
Ола Мундо!
Ола Мундо!

КОРЕИ
안녕, 세상!
аньён, сесанг!

* * КИТАЙСКАЯ тысяча сорок-девять
你好, 世界!
Ни Хао, Ши Цзе!

ЯПОНСКИЙ
こ ん に ち は 世界!
коннитиха ши цзе!

1058 * амхарский язык * 10 ዓለም!
szalaame `aalame!

кантонском
哈 佬 世界!
Ха Лао Ши Цзе!

РОССИЯ
Привет, мир!
Привет, мир!

ГРЕЦИЯ
!Αλημέρα κόσμε!
Калемера косме!

THAI
สวัสดี ราคา ถูก!
swasdiiraakhaathuuk!

Для языков, которые в первую очередь являются латиноамериканскими, это весьма полезно: оно удаляет знаки ударения. За пределами этого все становится рискованно быстро.

Если вы сравните примеры на китайском и японском языках, вы увидите, что последовательность 世界 транслитерирована Shi Jie в обоих случаях. Это неправильно - «транслитерация» (или лучше «чтение») японского языка должна быть seikai . Русские и греки не так уж и плохи. Но амхарский и тайский языки ужасны - я предполагаю, что они даже не читаются тем, кто свободно говорит на этих языках.

Общая проблема здесь заключается в том, что транслитерация не может быть определена, если не принимается во внимание информация, относящаяся к конкретному языку, и даже определение языка является нетривиальным: как ваша программа должна знать, находится ли 世界 в Японец или китаец?

Лучшая политика, чем попытка принудительной хакерской транслитерации в вашем приложении, - это сначала выяснить, как правильно поддерживать Unicode. Если вам необходимо представление текста в формате ASCII, отличном от текста на латинице, используйте кодировку URL.

3 голосов
/ 29 июня 2009

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

0 голосов
/ 29 июня 2009

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

0 голосов
/ 29 июня 2009

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

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

...