Форматирование стринга на иврите-арабском
От: bekris  
Дата: 16.02.09 08:53
Оценка:
Проблема с локализацией, стринги содержат как слова на английском так и на местном.

пример задаваемого формата
"%s(%s)(%f km)"
Скобки скачут и перворачиваются на обратные по непонятной мне логике.
Re: Форматирование стринга на иврите-арабском
От: Аноним  
Дата: 16.02.09 09:05
Оценка:
B>пример задаваемого формата
B>"%s(%s)(%f km)"
B>Скобки скачут и перворачиваются на обратные по непонятной мне логике.
А иврите читается права налево. Если в ивритском тексте есть слова на английском или арабские цифры — они читаются слева направо. То есть при проходе курсором текста содержащего оба языка он "прыгает" на "границах" языков. Может в этом дело и так и надо.
Re[2]: Форматирование стринга на иврите-арабском
От: bekris  
Дата: 16.02.09 09:17
Оценка:
Здравствуйте, Аноним, Вы писали:

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) йиксбара
Re[4]: Форматирование стринга на иврите-арабском
От: bekris  
Дата: 16.02.09 09:39
Оценка:
Здравствуйте, Аноним, Вы писали:
А>тскет (english text) йиксбара
ошибаешся, я тоже так думал сначало
стринги содержатся в том же порядке как и в европейских языках, винды их просто переворачивают при показе на экране
Re: Форматирование стринга на иврите-арабском
От: Кодт Россия  
Дата: 16.02.09 15:57
Оценка:
Здравствуйте, bekris, Вы писали:

B>Проблема с локализацией, стринги содержат как слова на английском так и на местном.


B>пример задаваемого формата

B>"%s(%s)(%f km)"
B>Скобки скачут и перворачиваются на обратные по непонятной мне логике.

А вот нефиг хардкодить порядок слов в локализуемой строке. И тем более, хардкодить (а не локализовать) строку, которую увидит пользователь.
В некоторых языках знаки препинания (вплоть до пробелов) отличаются от европейских.

Нужно взять какой-нибудь форматтер, поддерживающий произвольный порядок слов (например, boost::format, WinAPI FormatMessage, Qt не помню что).
std::string address_and_range =
    your_favorite::format(
        gettext("%1 (%2) (%3 km)"),
        object,
        district,
        your_favourite::float_to_string(range)
        );
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Перекуём баги на фичи!
Re: Форматирование стринга на иврите-арабском
От: c-smile Канада http://terrainformatica.com
Дата: 16.02.09 16:39
Оценка:
Здравствуйте, bekris, Вы писали:

B>Проблема с локализацией, стринги содержат как слова на английском так и на местном.


B>пример задаваемого формата

B>"%s(%s)(%f km)"
B>Скобки скачут и перворачиваются на обратные по непонятной мне логике.

Скачут при выводе. При выводе куда?
Re[2]: Форматирование стринга на иврите-арабском
От: bekris  
Дата: 16.02.09 17:06
Оценка:
Здравствуйте, c-smile, Вы писали:

B>>пример задаваемого формата

B>>"%s(%s)(%f km)"
B>>Скобки скачут и перворачиваются на обратные по непонятной мне логике.

CS>Скачут при выводе. При выводе куда?

на экран
пример
имя (99 км) будет выглядеть на экране так
سقلب99) km)
имя (99 км)
Re[3]: Форматирование стринга на иврите-арабском
От: c-smile Канада http://terrainformatica.com
Дата: 16.02.09 17:29
Оценка:
Здравствуйте, 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.


http://en.wikipedia.org/wiki/Bi-directional_text
Re[3]: Форматирование стринга на иврите-арабском
От: Кодт Россия  
Дата: 16.02.09 18:04
Оценка:
Здравствуйте, bekris, Вы писали:

CS>>Скачут при выводе. При выводе куда?

B>на экран

Нужно расставить там спецсимволы, определяющие направление текста в каждом фрагменте.
Иначе алгоритм вывода сделает это своим дефолтным способом, который здесь засбоил.

http://www.unicode.org/reports/tr9/#Directional_Formatting_Codes

Строка форматирования (для арабского языка) должна быть, по всей видимости,
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"
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Перекуём баги на фичи!
Re[4]: Форматирование стринга на иврите-арабском
От: bekris  
Дата: 16.02.09 18:11
Оценка:
Здравствуйте, c-smile, Вы писали:
CS>На экран чего? Операционная система? Какая конкретно функция осуществляет вывод?

PDA, WinCE, на С, sprintf, добавка листконтроль
Re[4]: Форматирование стринга на иврите-арабском
От: Кодт Россия  
Дата: 16.02.09 18:18
Оценка:
Здравствуйте, 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.

Теперь остаётся объяснить это локализаторам-переводчикам
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Перекуём баги на фичи!
Re[5]: Форматирование стринга на иврите-арабском
От: Кодт Россия  
Дата: 16.02.09 18:24
Оценка:
Здравствуйте, bekris, Вы писали:

B>PDA, WinCE, на С, sprintf, добавка листконтроль


Почему, кстати, сразу не swprintf? Ведь в WinCE оконные строки — широкие?
Как должен выглядеть список у арабов?

никпуП ясаВ (100 .д ,анинеЛ ацилу) (99 km)
никпуП ясаВ (100 .д ,анинеЛ ацилу) (99 km)
никпуП ясаВ (100 .д ,анинеЛ ацилу) (99 km)

или

(99 km) (100 .д ,анинеЛ ацилу) никпуП ясаВ
(99 km) (100 .д ,анинеЛ ацилу) никпуП ясаВ
(99 km) (100 .д ,анинеЛ ацилу) никпуП ясаВ
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Перекуём баги на фичи!
Re[6]: Форматирование стринга на иврите-арабском
От: bekris  
Дата: 16.02.09 19:03
Оценка:
Здравствуйте, Кодт, Вы писали:
К>Почему, кстати, сразу не swprintf? Ведь в WinCE оконные строки — широкие?
К>Как должен выглядеть список у арабов?
К>(99 km) (100 .д ,анинеЛ ацилу) никпуП ясаВ

swprintf и использую, опечатка была
FormatMessage выдает такуюже фигню

опытным путем получил такую форматирующую строку
L"(%.1f km)(%s(%s"
она выдает правльно если оба стринга не содержат латиницу

но форматов выдачи дофига, хотелось бы автоматизировать
Re[5]: Форматирование стринга на иврите-арабском
От: c-smile Канада http://terrainformatica.com
Дата: 16.02.09 22:22
Оценка:
Здравствуйте, bekris, Вы писали:

B>Здравствуйте, c-smile, Вы писали:

CS>>На экран чего? Операционная система? Какая конкретно функция осуществляет вывод?

B>PDA, WinCE, на С, sprintf, добавка листконтроль


Так надо и говорить с самого начала.

Поставь тому окну WS_EX_LTRREADING (убирая дефолтный WS_EX_RTLREADING если он там есть). Должно помочь.
Re[7]: Форматирование стринга на иврите-арабском
От: Кодт Россия  
Дата: 17.02.09 09:55
Оценка:
Здравствуйте, 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
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Перекуём баги на фичи!
Re[8]: Форматирование стринга на иврите-арабском
От: bekris  
Дата: 17.02.09 11:40
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, 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);
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.