Проблема с локализацией, стринги содержат как слова на английском так и на местном.
пример задаваемого формата
"%s(%s)(%f km)"
Скобки скачут и перворачиваются на обратные по непонятной мне логике.
Re: Форматирование стринга на иврите-арабском
От:
Аноним
Дата:
16.02.09 09:05
Оценка:
B>пример задаваемого формата B>"%s(%s)(%f km)" B>Скобки скачут и перворачиваются на обратные по непонятной мне логике.
А иврите читается права налево. Если в ивритском тексте есть слова на английском или арабские цифры — они читаются слева направо. То есть при проходе курсором текста содержащего оба языка он "прыгает" на "границах" языков. Может в этом дело и так и надо.
Здравствуйте, Аноним, Вы писали:
B>>пример задаваемого формата B>>"%s(%s)(%f km)" B>>Скобки скачут и перворачиваются на обратные по непонятной мне логике. А>А иврите читается права налево. Если в ивритском тексте есть слова на английском или арабские цифры — они читаются слева направо. То есть при проходе курсором текста содержащего оба языка он "прыгает" на "границах" языков. Может в этом дело и так и надо.
так в том то и вопрос по каким правилам прыгает, слова могут моут быть как на арабском, так просто цифра или смесь арабского с английским, это первое,
а второе переворачиваются скобки
примеры стрингов которые требуется создать
имяSTATION(район города)(12 км)
2(бензокалонка)(район) (12 км)
имя(район) (12 км)
Имя Улицы 2-32 (район города)
как правильно задавать формат стрингина этих языках
Re[3]: Форматирование стринга на иврите-арабском
От:
Аноним
Дата:
16.02.09 09:34
Оценка:
B>>>пример задаваемого формата B>>>"%s(%s)(%f km)" B>>>Скобки скачут и перворачиваются на обратные по непонятной мне логике. А>>А иврите читается права налево. Если в ивритском тексте есть слова на английском или арабские цифры — они читаются слева направо. То есть при проходе курсором текста содержащего оба языка он "прыгает" на "границах" языков. Может в этом дело и так и надо.
B>так в том то и вопрос по каким правилам прыгает, слова могут моут быть как на арабском, так просто цифра или смесь арабского с английским, это первое, B>а второе переворачиваются скобки
B>примеры стрингов которые требуется создать B>имяSTATION(район города)(12 км) B>2(бензокалонка)(район) (12 км) B>имя(район) (12 км) B>Имя Улицы 2-32 (район города)
B>как правильно задавать формат стрингина этих языках
Здравствуйте, Аноним, Вы писали: А>тскет (english text) йиксбара
ошибаешся, я тоже так думал сначало
стринги содержатся в том же порядке как и в европейских языках, винды их просто переворачивают при показе на экране
Здравствуйте, bekris, Вы писали:
B>Проблема с локализацией, стринги содержат как слова на английском так и на местном.
B>пример задаваемого формата B>"%s(%s)(%f km)" B>Скобки скачут и перворачиваются на обратные по непонятной мне логике.
А вот нефиг хардкодить порядок слов в локализуемой строке. И тем более, хардкодить (а не локализовать) строку, которую увидит пользователь.
В некоторых языках знаки препинания (вплоть до пробелов) отличаются от европейских.
Нужно взять какой-нибудь форматтер, поддерживающий произвольный порядок слов (например, boost::format, WinAPI FormatMessage, Qt не помню что).
Здравствуйте, bekris, Вы писали:
B>Проблема с локализацией, стринги содержат как слова на английском так и на местном.
B>пример задаваемого формата B>"%s(%s)(%f km)" B>Скобки скачут и перворачиваются на обратные по непонятной мне логике.
Здравствуйте, c-smile, Вы писали:
B>>пример задаваемого формата B>>"%s(%s)(%f km)" B>>Скобки скачут и перворачиваются на обратные по непонятной мне логике.
CS>Скачут при выводе. При выводе куда?
на экран
пример
имя (99 км) будет выглядеть на экране так
سقلب99) km)
имя (99 км)
Здравствуйте, bekris, Вы писали:
B>Здравствуйте, c-smile, Вы писали:
B>>>пример задаваемого формата B>>>"%s(%s)(%f km)" B>>>Скобки скачут и перворачиваются на обратные по непонятной мне логике.
CS>>Скачут при выводе. При выводе куда? B>на экран B>пример B>имя (99 км) будет выглядеть на экране так B>سقلب99) km) B>имя (99 км)
На экран чего? Операционная система? Какая конкретно функция осуществляет вывод?
Это должно пригодиться:
The mark (U+200E LTR or U+200F RTL) is to be inserted into a location to make an enclosed weak character inherit its writing direction.
Здравствуйте, bekris, Вы писали:
CS>>Скачут при выводе. При выводе куда? B>на экран
Нужно расставить там спецсимволы, определяющие направление текста в каждом фрагменте.
Иначе алгоритм вывода сделает это своим дефолтным способом, который здесь засбоил.
Строка форматирования (для арабского языка) должна быть, по всей видимости,
RLO
RLE %1 PDF
RLE(%2)PDF
LRE(%3 km)PDF
PDF
то есть,
L"\x202E \x202B%1\x202C \x202B(%2)\x202C \x202A(%3 km)\x202C \x202C"
или в UTF-8,
"\xE2\x80\xAE \xE2\x80\xAB%1\xE2\x80\xAC \xE2\x80\xAB(%2)\xE2\x80\xAC \xE2\x80\xAA(%3 km)\xE2\x80\xAC \xE2\x80\xAC"
Здравствуйте, c-smile, Вы писали:
CS>Это должно пригодиться: CS>
CS>The mark (U+200E LTR or U+200F RTL) is to be inserted into a location to make an enclosed weak character inherit its writing direction.
Тут нужно соблюдать аккуратность и понимание. В зависимости от контекста, "арабский (арабский 100) (99 km)" должен появиться как
— монолитная часть заведомо европейского текста — т.е. "english-before (99km) (100 йиксбара) йиксбара english-after"
— европейски выглядящая часть европейского текста — "english-before йиксбара (100 йиксбара) (99 km) english-after"
— монолитная часть заведомо арабского текста — "тсовх-йиксбара (99km) (100 йиксбара) йиксбара аволог-яаксбара"
Вставлять прямые выключатели в общем виде LRM|RLM неправильно, там должны быть скобки контекста (LRE|RLE)-PDF, (LRO|RLO)-PDF.
Теперь остаётся объяснить это локализаторам-переводчикам
Здравствуйте, Кодт, Вы писали: К>Почему, кстати, сразу не swprintf? Ведь в WinCE оконные строки — широкие? К>Как должен выглядеть список у арабов? К>(99 km) (100 .д ,анинеЛ ацилу) никпуП ясаВ
swprintf и использую, опечатка была
FormatMessage выдает такуюже фигню
опытным путем получил такую форматирующую строку
L"(%.1f km)(%s(%s"
она выдает правльно если оба стринга не содержат латиницу
но форматов выдачи дофига, хотелось бы автоматизировать
Здравствуйте, bekris, Вы писали:
B>Здравствуйте, c-smile, Вы писали: CS>>На экран чего? Операционная система? Какая конкретно функция осуществляет вывод?
B>PDA, WinCE, на С, sprintf, добавка листконтроль
Так надо и говорить с самого начала.
Поставь тому окну WS_EX_LTRREADING (убирая дефолтный WS_EX_RTLREADING если он там есть). Должно помочь.
Здравствуйте, bekris, Вы писали:
B>swprintf и использую, опечатка была B>FormatMessage выдает такуюже фигню
Это не FormatMessage выдаёт фигню, это ты сделал некорректный bidi-текст. И неважно, с помощью чего ты его получил — хоть посимвольно руками склеил.
B>опытным путем получил такую форматирующую строку B>L"(%.1f km)(%s(%s" B>она выдает правльно если оба стринга не содержат латиницу
Если араб скопипастит результат подстановки в ворд, ты его страшно и неприятно удивишь.
Не извращайся, а используй управляющие символы юникода.
B>но форматов выдачи дофига, хотелось бы автоматизировать
Формат — это локализуемая информация. Он не может быть одним и тем же для всех языков и стран.
Наиболее универсальный формат в твоём случае — это
— обернуть всю строку в LRO-PDF либо RLO-PDF
— каждую подстроку обернуть в RLE%1PDF, RLE(%2)PDF, LRE(%3 km)PDF
Здравствуйте, Кодт, Вы писали:
К>Здравствуйте, bekris, Вы писали:
B>>swprintf и использую, опечатка была B>>FormatMessage выдает такуюже фигню
К>Это не FormatMessage выдаёт фигню, это ты сделал некорректный bidi-текст. И неважно, с помощью чего ты его получил — хоть посимвольно руками склеил.
B>>опытным путем получил такую форматирующую строку B>>L"(%.1f km)(%s(%s" B>>она выдает правльно если оба стринга не содержат латиницу
К>Если араб скопипастит результат подстановки в ворд, ты его страшно и неприятно удивишь. К>Не извращайся, а используй управляющие символы юникода.
B>>но форматов выдачи дофига, хотелось бы автоматизировать
К>Формат — это локализуемая информация. Он не может быть одним и тем же для всех языков и стран. К>Наиболее универсальный формат в твоём случае — это К>- обернуть всю строку в LRO-PDF либо RLO-PDF К>- каждую подстроку обернуть в RLE%1PDF, RLE(%2)PDF, LRE(%3 km)PDF
На СЕ ворда нет
с управляющими кодами вот такая байда
swprintf(out, L"(%.1f km)%c(%c%s%c)%c%c%s", dist, 0x200F, 0x200F, city, 0x200F, 0x200F, 0x200E, label);