Общий (грубый) алгоритм транслитерации языка RTL на язык LTR - PullRequest
0 голосов
/ 28 сентября 2019

Я начинаю думать о том, как транслитерировать строку RTL (т.е. арабский, иврит) в строку LTR (то есть латинизацию звуков / букв).Это относительно просто, если это LTR -> LTR, но более хитроумно для RTL -> LTR.Для LTR -> LTR вы можете иметь простое сопоставление для каждой буквы в A с каждой буквой в B .Может быть, в некоторых случаях несколько комбинаций A образуют B, или один элемент A образует цепочку Bs.

a        b
-        -
X        1
YZ       2
ABC      3
D        456
E        78

Затем, получив строку типа XYZYZDDEABC, вы получите 122456456783.Достаточно простой, хотя сам по себе алгоритм будет немного сложнее, потому что ему, возможно, придется смотреть в будущее и иметь приоритеты для элементов.Но это суть.

Теперь для преобразования RTL -> LTR я запутался на двух уровнях.Во-первых, как вы перебираете строку RTL?Символы на самом деле в порядке LTR, верно?Это просто визуальный макет в браузерах и тому подобное, что делает его RTL.Таким образом, с точки зрения кода, ваш язык RTL на самом деле читается как LTR (это не значит, что мы должны что-то делать наоборот или что-то в этом роде)Просто убедитесь, что я правильно истолковываю это.Это означало бы, что я могу просто сделать вышеупомянутое преобразование LTR -> LTR для всех намерений и целей.

Если это не так, и есть что-то еще, чтобы рассмотреть, я хотел бы знать в общем, как это сделать,Если для демонстрации нужен язык, тогда JavaScript будет хорош.

1 Ответ

1 голос
/ 28 сентября 2019

Ты прав.Текст хранится в «логическом порядке», то есть в том порядке, в котором он будет напечатан (или, в большинстве случаев, в порядке, в котором на нем говорят).Таким образом, вам не нужно принимать во внимание направленность во время транслитерации.

Обратите внимание, что во многих письменных системах, включая арабский и иврит, числа пишутся как "big-endian", с самой значимой цифрой слева,Они также набираются в этом порядке, что означает, что текст на самом деле является двунаправленным.Это также тот случай, когда тексты различной направленности смешиваются вместе, например, когда имена, написанные латинским шрифтом, включены в арабский или иврит документ.К счастью, вам не нужно беспокоиться об этом, если только вы не пишете Unicode рендер.(Если это так, вам нужно прочитать Приложение 9 к стандарту Unicode , в котором рассматриваются все детали двунаправленного рендеринга.)

...