Локализация ресурсов
От: 777777w  
Дата: 05.04.12 10:38
Оценка:
Про локализацию здесь написано много, непонятно только одно: как это применить на практике? Например, создал я два диалога с одинаковым идентификатором и разными языками. Как вызвать тот или иной в зависимости от языка системы? Ведь внутренности DoModal мне недоступны. А как с этим обстоят дела в WTL?
Re: Локализация ресурсов
От: Carc Россия https://vk.com/gosha_mazov
Дата: 05.04.12 11:22
Оценка: 15 (1)
Здравствуйте, 777777w, Вы писали:

7>Про локализацию здесь написано много, непонятно только одно: как это применить на практике? Например, создал я два диалога с одинаковым идентификатором и разными языками. Как вызвать тот или иной в зависимости от языка системы? Ведь внутренности DoModal мне недоступны. А как с этим обстоят дела в WTL?

Всё вовне. Чего я только не пробовал с локализациями для MFC-приложений. Те еще поделия получаются: причем геморрой безмерный и главное для всех и с оператором AND Крайне неудобно и для разработчиков, и для переводчиков UI, и для пользователей.
Ситуацию MS-овских официальных способов локализации можно описать кратко вопросом в разработчикам MS "А сами вы хоть раз этим пользовались?".

Безусловно, задачи локализации бывают очень разные. Но я бы рекомендовал сосредоточиться на главных аспектах.
— основное это строки. Все остальное — изображения, и прочая дребедень скорее исключение. Поэтому если возникнет проблема с локализацией 3-ех рисунков, не нужно париться. Три случая на весь проект тупо решаются одним костылем. Оптимизировать и упрощать работу нужно с остальными 99,99% локализуемых ресурсов. Именно она будет отнимать массу времени и сил.

— хранить локализации лучше вовне. Чтобы не плодить дистрибутивов, чтобы пользователь мог доставить локализацию.

— никаких диалогов в DLL. Лажа это. Пока диалога два — это не проблема. Как только их становиться больше пяти, начинаются косяки да баги, которые растут экспоненциально.

— строковые локализации должны легко правиться пользователями. Никакого *авна вроде таблиц Excel, и прочих форматов данных. Это все для девочек из бухгалтерии, они за это зарплату получают. Если для пользователя будет сложно переводить локализацию, он просто кладет болт на это. И никакие бесплатные лицензии не помогут.

— сразу стоит думать вперед, что локализации будут опаздывать к релизам. Соответственно логика должна быть построена так, что если нет локализованного ресурса, это ничего не ломает. Не то что там баг какой возникает — это вообще ни в какие ворота не лезет. А даже не должно быть пустого места — т.е. должно использоваться нелокализованное значение ресурса (строка на основном языке, рисунок или что там).

Это основное. Детали зависят от задач.
Aml Pages Home
Re: Локализация ресурсов
От: 5er Россия  
Дата: 05.04.12 13:54
Оценка: 8 (1)
Здравствуйте, 777777w, Вы писали:

7>Про локализацию здесь написано много, непонятно только одно: как это применить на практике? Например, создал я два диалога с одинаковым идентификатором и разными языками. Как вызвать тот или иной в зависимости от языка системы? Ведь внутренности DoModal мне недоступны. А как с этим обстоят дела в WTL?


Зачем для каждого языка отдельный диалог?
Нужен один диалог, а строки грузить в обработчике WM_INITDIALOG через
LoadString( HINSTANCE hInstance...
где hInstance — ресурсный файл с переведенными строками.

Соответственно, если ресурсного файла для данной локали нет, то грузить дефолтные строки, которые должы быть доступны всегда.
Re: Локализация ресурсов
От: fuyant  
Дата: 05.04.12 14:11
Оценка: 1 (1)
Здравствуйте, 777777w, Вы писали:

7>Про локализацию здесь написано много, непонятно только одно: как это применить на практике? Например, создал я два диалога с одинаковым идентификатором и разными языками. Как вызвать тот или иной в зависимости от языка системы? Ведь внутренности DoModal мне недоступны. А как с этим обстоят дела в WTL?


вызвать AfxSetResourceHandle в самом начале (в InitInstance), передать в нее хэндл длл-ки с нужным языком
мфс будет вызывать ресурсы (диалоги/строки/...) из этой длл
Re[2]: Локализация ресурсов
От: Carc Россия https://vk.com/gosha_mazov
Дата: 05.04.12 15:15
Оценка:
Здравствуйте, fuyant, Вы писали:

F>Здравствуйте, 777777w, Вы писали:


7>>Про локализацию здесь написано много, непонятно только одно: как это применить на практике? Например, создал я два диалога с одинаковым идентификатором и разными языками. Как вызвать тот или иной в зависимости от языка системы? Ведь внутренности DoModal мне недоступны. А как с этим обстоят дела в WTL?


F>вызвать AfxSetResourceHandle в самом начале (в InitInstance), передать в нее хэндл длл-ки с нужным языком

F>мфс будет вызывать ресурсы (диалоги/строки/...) из этой длл
НИКОГДА ТАК НЕ ДЕЛАЙТЕ!
Aml Pages Home
Re[2]: Локализация ресурсов
От: Carc Россия https://vk.com/gosha_mazov
Дата: 05.04.12 15:19
Оценка:
Здравствуйте, 5er, Вы писали:

5er>Здравствуйте, 777777w, Вы писали:


7>>Про локализацию здесь написано много, непонятно только одно: как это применить на практике? Например, создал я два диалога с одинаковым идентификатором и разными языками. Как вызвать тот или иной в зависимости от языка системы? Ведь внутренности DoModal мне недоступны. А как с этим обстоят дела в WTL?


5er>Зачем для каждого языка отдельный диалог?

5er>Нужен один диалог, а строки грузить в обработчике WM_INITDIALOG через
5er>LoadString( HINSTANCE hInstance...
5er>где hInstance — ресурсный файл с переведенными строками.

5er>Соответственно, если ресурсного файла для данной локали нет, то грузить дефолтные строки, которые должы быть доступны всегда.

Дельная мысль. В точку! Только что делать когда огромная аппликуха уже написана, и диалогов в ней куча!?! Дописывать код чуть ли не с нуля, перетряхивать каждый диалог!?!
По уму — другой бы спорил — именно как Вы сказали и нужно делать. Но если б мы все были такие вумные как выпь да заранее, то багов бы и проблем и вовсе не было. Любопытственность начинается, когда все сделано, и нужно прикручивать локализацию сбоку-припеку.
Aml Pages Home
Re[2]: Локализация ресурсов
От: Carc Россия https://vk.com/gosha_mazov
Дата: 05.04.12 15:22
Оценка:
Здравствуйте, 5er, Вы писали:

5er>Здравствуйте, 777777w, Вы писали:


7>>Про локализацию здесь написано много, непонятно только одно: как это применить на практике? Например, создал я два диалога с одинаковым идентификатором и разными языками. Как вызвать тот или иной в зависимости от языка системы? Ведь внутренности DoModal мне недоступны. А как с этим обстоят дела в WTL?


5er>Зачем для каждого языка отдельный диалог?

5er>Нужен один диалог, а строки грузить в обработчике WM_INITDIALOG через
PS: но ключевая мысль абсолютно правильная — не нужно отдельный диалог на отдельный язык. Это постоянный источник багов и проблем. И вообще, выражаясь "масемасисьски", нарушается правило единственного определения данных (One Definition Rule).
Aml Pages Home
Re[3]: Локализация ресурсов
От: Onorin Нигерия  
Дата: 05.04.12 16:51
Оценка:
Здравствуйте, Carc, Вы писали:

C>Здравствуйте, fuyant, Вы писали:


F>>Здравствуйте, 777777w, Вы писали:


7>>>Про локализацию здесь написано много, непонятно только одно: как это применить на практике? Например, создал я два диалога с одинаковым идентификатором и разными языками. Как вызвать тот или иной в зависимости от языка системы? Ведь внутренности DoModal мне недоступны. А как с этим обстоят дела в WTL?


F>>вызвать AfxSetResourceHandle в самом начале (в InitInstance), передать в нее хэндл длл-ки с нужным языком

F>>мфс будет вызывать ресурсы (диалоги/строки/...) из этой длл
C>НИКОГДА ТАК НЕ ДЕЛАЙТЕ!
Почему?
Re[4]: Локализация ресурсов
От: Carc Россия https://vk.com/gosha_mazov
Дата: 05.04.12 17:08
Оценка: 3 (1)
Здравствуйте, Onorin, Вы писали:

O>Здравствуйте, Carc, Вы писали:


C>>Здравствуйте, fuyant, Вы писали:


F>>>Здравствуйте, 777777w, Вы писали:


7>>>>Про локализацию здесь написано много, непонятно только одно: как это применить на практике? Например, создал я два диалога с одинаковым идентификатором и разными языками. Как вызвать тот или иной в зависимости от языка системы? Ведь внутренности DoModal мне недоступны. А как с этим обстоят дела в WTL?


F>>>вызвать AfxSetResourceHandle в самом начале (в InitInstance), передать в нее хэндл длл-ки с нужным языком

F>>>мфс будет вызывать ресурсы (диалоги/строки/...) из этой длл
C>>НИКОГДА ТАК НЕ ДЕЛАЙТЕ!
O>Почему?
Потому как писал уже выше
Автор: Carc
Дата: 05.04.12
.
Рано или поздно версии диалогов в самой софтине (exe), и диалогов в DLL рассинхронизируются. В одном будет лежать одна версия, а в другом другая.

Хорошо если только бордюрчег не так прорисовываться будет, хотя "преотличнейший" на самом что ни на есть нативно-матерном языке (на том же, на котором была и версия ДЛЛ с кривым диалогом) фидбек от пользователей уже обеспечит. Дык ведь а то и баги пойдут... Эти... Они такие... Эти придут, точно!

А если учесть что у MFC есть жаркая, прямо таки мулатская страсть к конструкциям вида CWnd* pWndPointer=GetDlgItem, то в момент икс получаем нулевой указатель. Радостно по нему вызываем метод и получаем исключение нумер 5 с полным крахом софта (а ведь еще и несохраненные пользовательские данные под собой похоронит)... И вот в этот момент, матерный фидбек по форумам пойдет уже пойдет на многих языках, включая эсперанто.
И главное, убедить пользователей "что мы хотели как лучше" не получается. Им пох. И не в курсе они про наше любимое продолжение "а получилось как всегда". Им и оно пох.

Проще говоря — этот путь ведет к ошибкам. К ошибкам неприятным во многих отношениях. У одних юзеров все работает, а у других нет. Вот и гадайте в чем дело. А все почему? А совершенство, это когда нечего добавить, а не нечего убрать. Локализовать что надо было? В 99 процентов случаев это строки, строки, и только строки. Дык вот и не фиг дублировать все остальное, вроде есть кнопка, или нет, где расположена и.т.д.

И не стоит слушать MS про их "одна замечательный способ, да, через ДЛЛ лакализаваться, вай "... Нож хорош для того, у кого он окажется в нужный момент, и плох для того у кого нет (C) Абдула. В отличие от Microsoft у 99, и 9 в периоде нет ни времени, ни возможностей, ни финансов держать цельный сонм переводчиков, тестеров и прочих технических чувачков, которые будут следить за полным соответствием всех версий диалогов во всех ДЛЛ.
В общем проблем в будущем и так хватит — не стоит начинать путь софтины с заведомо потенциальных будущих геморроев.
Aml Pages Home
Re[2]: Локализация ресурсов
От: Аноним  
Дата: 05.04.12 17:24
Оценка: -1
Здравствуйте, Carc, Вы писали:

C>Здравствуйте, 777777w, Вы писали:


7>>Про локализацию здесь написано много, непонятно только одно: как это применить на практике? Например, создал я два диалога с одинаковым идентификатором и разными языками. Как вызвать тот или иной в зависимости от языка системы? Ведь внутренности DoModal мне недоступны. А как с этим обстоят дела в WTL?

C>Всё вовне. Чего я только не пробовал с локализациями для MFC-приложений. Те еще поделия получаются: причем геморрой безмерный и главное для всех и с оператором AND Крайне неудобно и для разработчиков, и для переводчиков UI, и для пользователей.
C>Ситуацию MS-овских официальных способов локализации можно описать кратко вопросом в разработчикам MS "А сами вы хоть раз этим пользовались?".

C>Безусловно, задачи локализации бывают очень разные. Но я бы рекомендовал сосредоточиться на главных аспектах.

C>- основное это строки. Все остальное — изображения, и прочая дребедень скорее исключение. Поэтому если возникнет проблема с локализацией 3-ех рисунков, не нужно париться. Три случая на весь проект тупо решаются одним костылем. Оптимизировать и упрощать работу нужно с остальными 99,99% локализуемых ресурсов. Именно она будет отнимать массу времени и сил.

C>- хранить локализации лучше вовне. Чтобы не плодить дистрибутивов, чтобы пользователь мог доставить локализацию.

Из-за этой глупости как раз и возникают проблемы. Перевод текста с языка на язык не всегда совпадает по символьной длине и количеству строк. И диалоги будут выглядеть не красиво.

C>- никаких диалогов в DLL. Лажа это. Пока диалога два — это не проблема. Как только их становиться больше пяти, начинаются косяки да баги, которые растут экспоненциально.

Где вы предлагаете хранить диалоги? Их как раз и нужно хранить в разных DLL-ках. Это как раз и избавит от проблем с "опаздывающий локализацией".


C>- строковые локализации должны легко правиться пользователями. Никакого *авна вроде таблиц Excel, и прочих форматов данных. Это все для девочек из бухгалтерии, они за это зарплату получают. Если для пользователя будет сложно переводить локализацию, он просто кладет болт на это. И никакие бесплатные лицензии не помогут.

Строковые локализации никогда не должны правится пользователем.

C>- сразу стоит думать вперед, что локализации будут опаздывать к релизам. Соответственно логика должна быть построена так, что если нет локализованного ресурса, это ничего не ломает. Не то что там баг какой возникает — это вообще ни в какие ворота не лезет. А даже не должно быть пустого места — т.е. должно использоваться нелокализованное значение ресурса (строка на основном языке, рисунок или что там).


C>Это основное. Детали зависят от задач.
Re[3]: Локализация ресурсов
От: Carc Россия https://vk.com/gosha_mazov
Дата: 05.04.12 18:15
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Carc, Вы писали:


C>>Здравствуйте, 777777w, Вы писали:


7>>>Про локализацию здесь написано много, непонятно только одно: как это применить на практике? Например, создал я два диалога с одинаковым идентификатором и разными языками. Как вызвать тот или иной в зависимости от языка системы? Ведь внутренности DoModal мне недоступны. А как с этим обстоят дела в WTL?

C>>Всё вовне. Чего я только не пробовал с локализациями для MFC-приложений. Те еще поделия получаются: причем геморрой безмерный и главное для всех и с оператором AND Крайне неудобно и для разработчиков, и для переводчиков UI, и для пользователей.
C>>Ситуацию MS-овских официальных способов локализации можно описать кратко вопросом в разработчикам MS "А сами вы хоть раз этим пользовались?".

C>>Безусловно, задачи локализации бывают очень разные. Но я бы рекомендовал сосредоточиться на главных аспектах.

C>>- основное это строки. Все остальное — изображения, и прочая дребедень скорее исключение. Поэтому если возникнет проблема с локализацией 3-ех рисунков, не нужно париться. Три случая на весь проект тупо решаются одним костылем. Оптимизировать и упрощать работу нужно с остальными 99,99% локализуемых ресурсов. Именно она будет отнимать массу времени и сил.

C>>- хранить локализации лучше вовне. Чтобы не плодить дистрибутивов, чтобы пользователь мог доставить локализацию.

А>Из-за этой глупости как раз и возникают проблемы. Перевод текста с языка на язык не всегда совпадает по символьной длине и количеству строк. И диалоги будут выглядеть не красиво.
Глупости. Некрасиво выглядящие диалоги связаны с кривизной рук, и угловым схождением глаз. Если про сферического коня в вакууме. А если конкретно про MFC, то там о таких вещах нужно думать вперед.

C>>- никаких диалогов в DLL. Лажа это. Пока диалога два — это не проблема. Как только их становиться больше пяти, начинаются косяки да баги, которые растут экспоненциально.

А>Где вы предлагаете хранить диалоги? Их как раз и нужно хранить в разных DLL-ках. Это как раз и избавит от проблем с "опаздывающий локализацией".
Нет, не избавит. Проблема запаздывания локализации связана не хранением, или нехранением диалогов в DLL или где-бы то ни было. Причина запаздывания в самой сути коллективной работы.

А вот хранение диалогов во внешних DLL приводит к тому в большинстве случаев что откуда-ни-возьмись таки появляются разные версии диалогов. А это ведет к очень трудноуловимым багам. Причем не по самой технической сути бага — они то как раз будут что ни на есть тривиальные. А в том, что о возникновении бага можно, ну очень долго вообще и не подозревать, т.к. он будет проявляться в конкретном месте, при конкретных сочетаниях условий, у конкретных пользователей. И только уже поэтому баг будет жить ну очень долго.
Вам просто даже никто и не сообщит о проблеме. Упала аппликуха и упала. А и гуй с ним. Uninstall и до свиданья. Это практика, печальная — но она такова. Другое дело, что под концепции боксеров-теоретиков она плохо подходит: ибо "некрасиво", ибо "избавит от проблем". Не важно насколько красивый диалог, если пользователь его даже не увидит. А после анисталла он его точно не увидит.

C>>- строковые локализации должны легко правиться пользователями. Никакого *авна вроде таблиц Excel, и прочих форматов данных. Это все для девочек из бухгалтерии, они за это зарплату получают. Если для пользователя будет сложно переводить локализацию, он просто кладет болт на это. И никакие бесплатные лицензии не помогут.

А>Строковые локализации никогда не должны правится пользователем.
Чушь. Продвигаемая агенствами переводчиков. Вменяемый нейтив делает преотличнейший перевод.
Никто и не говорит, что пользователя надо обязывать делать перевод. Или обязательно его включать. Но дать ему возможность сделать это за лицензию, имеет смысл. Можно получить отличный результат. В конце концов включать конкретную локализацию в официальный дистрибутив или нет — решение за разработчиками.
Aml Pages Home
Re: Локализация ресурсов
От: FreeHandler  
Дата: 05.04.12 18:32
Оценка:
Здравствуйте, 777777w, Вы писали:

7>Про локализацию здесь написано много, непонятно только одно: как это применить на практике? Например, создал я два диалога с одинаковым идентификатором и разными языками. Как вызвать тот или иной в зависимости от языка системы? Ведь внутренности DoModal мне недоступны. А как с этим обстоят дела в WTL?


Используйте утилиту langagent (http://langagent.com)
Таким макаром локализована утилита hddlife
Re[5]: Локализация ресурсов
От: MasterZiv СССР  
Дата: 05.04.12 19:17
Оценка: -1
> В общем проблем в будущем и так хватит — не стоит начинать путь софтины с
> заведомо потенциальных будущих геморроев.

Это всё хорошо, только есть одно НО.
Строки на английском языке имеют одну длину, строки на русском другую,
а стоки на немецком -- третью.

Оно просто тупо НЕВЛЕЗЕТ.

Кстати, в интерфейсе андроида сделано именно так всё. Случаев, когда
невлазит, дофига. Правда, достаточно всё терпимо.
Posted via RSDN NNTP Server 2.1 beta
Re[6]: Локализация ресурсов
От: Carc Россия https://vk.com/gosha_mazov
Дата: 06.04.12 07:26
Оценка:
Здравствуйте, MasterZiv, Вы писали:


>> В общем проблем в будущем и так хватит — не стоит начинать путь софтины с

>> заведомо потенциальных будущих геморроев.

MZ>Это всё хорошо, только есть одно НО.

MZ>Строки на английском языке имеют одну длину, строки на русском другую,
MZ>а стоки на немецком -- третью.
MZ>Оно просто тупо НЕВЛЕЗЕТ.
MZ>Кстати, в интерфейсе андроида сделано именно так всё. Случаев, когда
MZ>невлазит, дофига. Правда, достаточно всё терпимо.
Офигеть какое новость! Малыш, ты не поверишь, оно все-таки не влезает... Прям открытие 2012-го года
А Вы что-нибудь слышали про то, что UI принято тестировать? Ну хотя бы банально проверить, а оно вообще как выглядит!?!
Aml Pages Home
Re[3]: Локализация ресурсов
От: 5er Россия  
Дата: 06.04.12 07:30
Оценка: 1 (1)
Здравствуйте, Carc, Вы писали:

C>Здравствуйте, 5er, Вы писали:


5er>>Здравствуйте, 777777w, Вы писали:


7>>>Про локализацию здесь написано много, непонятно только одно: как это применить на практике? Например, создал я два диалога с одинаковым идентификатором и разными языками. Как вызвать тот или иной в зависимости от языка системы? Ведь внутренности DoModal мне недоступны. А как с этим обстоят дела в WTL?


5er>>Зачем для каждого языка отдельный диалог?

5er>>Нужен один диалог, а строки грузить в обработчике WM_INITDIALOG через
5er>>LoadString( HINSTANCE hInstance...
5er>>где hInstance — ресурсный файл с переведенными строками.

5er>>Соответственно, если ресурсного файла для данной локали нет, то грузить дефолтные строки, которые должы быть доступны всегда.

C>Дельная мысль. В точку! Только что делать когда огромная аппликуха уже написана, и диалогов в ней куча!?! Дописывать код чуть ли не с нуля, перетряхивать каждый диалог!?!
C>По уму — другой бы спорил — именно как Вы сказали и нужно делать. Но если б мы все были такие вумные как выпь да заранее, то багов бы и проблем и вовсе не было. Любопытственность начинается, когда все сделано, и нужно прикручивать локализацию сбоку-припеку.

Если приложение уже написано, то:
— берем диалог
— выделяем все строки
— делаем транслятор типа Qt'шного tr.
Здесь же организуем корректировку по длине и прочую логику типа выбора локали и подгрузку ресурса с переведенными строками.
Здесь же фактически сидит глобальный мап IDS->текст, чтобы лишний раз не дергать API
— далее при создании диалога инициализируем в нем каждую строчку, вот так без дураков строчка
за строчкой: tr(IDS_N), tr(IDS_N+1)...
Если какую забыли, не беда — в диалоге уже сидит дефолтная (приложение же уже написано), потом поправим
— на 3-4-м диалоге доходим да всех нюансов и далее просто рутина.
Re[4]: Локализация ресурсов
От: Carc Россия https://vk.com/gosha_mazov
Дата: 06.04.12 07:40
Оценка:
Здравствуйте, 5er, Вы писали:

5er>Здравствуйте, Carc, Вы писали:


C>>Здравствуйте, 5er, Вы писали:


5er>>>Здравствуйте, 777777w, Вы писали:


7>>>>Про локализацию здесь написано много, непонятно только одно: как это применить на практике? Например, создал я два диалога с одинаковым идентификатором и разными языками. Как вызвать тот или иной в зависимости от языка системы? Ведь внутренности DoModal мне недоступны. А как с этим обстоят дела в WTL?


5er>>>Зачем для каждого языка отдельный диалог?

5er>>>Нужен один диалог, а строки грузить в обработчике WM_INITDIALOG через
5er>>>LoadString( HINSTANCE hInstance...
5er>>>где hInstance — ресурсный файл с переведенными строками.

5er>>>Соответственно, если ресурсного файла для данной локали нет, то грузить дефолтные строки, которые должы быть доступны всегда.

C>>Дельная мысль. В точку! Только что делать когда огромная аппликуха уже написана, и диалогов в ней куча!?! Дописывать код чуть ли не с нуля, перетряхивать каждый диалог!?!
C>>По уму — другой бы спорил — именно как Вы сказали и нужно делать. Но если б мы все были такие вумные как выпь да заранее, то багов бы и проблем и вовсе не было. Любопытственность начинается, когда все сделано, и нужно прикручивать локализацию сбоку-припеку.

5er>Если приложение уже написано, то:

5er>- берем диалог
5er>- выделяем все строки
5er>- делаем транслятор типа Qt'шного tr.
5er>Здесь же организуем корректировку по длине и прочую логику типа выбора локали и подгрузку ресурса с переведенными строками.
5er>Здесь же фактически сидит глобальный мап IDS->текст, чтобы лишний раз не дергать API
5er>- далее при создании диалога инициализируем в нем каждую строчку, вот так без дураков строчка
5er>за строчкой: tr(IDS_N), tr(IDS_N+1)...
5er>Если какую забыли, не беда — в диалоге уже сидит дефолтная (приложение же уже написано), потом поправим
5er>- на 3-4-м диалоге доходим да всех нюансов и далее просто рутина.
А если не только диалоги!?! А если меню? А если окна? А если строки?
Что-то я сомневаюсь, что обойдется все вот такой вот централизацией загрузки диалогов.

Хотя, к слову говоря, отчасти теперь я в большинстве новых проектов всегда завожу какой-нить базовый диалог что-то вроде CMySuperAppDialog, от которого наследуются уже все фактические. Это решает проблему (хотя и потянуло на эти рюшечки не из-за локализации, а из-за поддержки тем UI, но и локализацию тут не сложно прикрутить).
Aml Pages Home
Re[5]: Локализация ресурсов
От: 5er Россия  
Дата: 06.04.12 08:55
Оценка:
Здравствуйте, Carc, Вы писали:

...
5er>>- далее при создании диалога инициализируем в нем каждую строчку, вот так без дураков строчка
5er>>за строчкой: tr(IDS_N), tr(IDS_N+1)...
5er>>Если какую забыли, не беда — в диалоге уже сидит дефолтная (приложение же уже написано), потом поправим
5er>>- на 3-4-м диалоге доходим да всех нюансов и далее просто рутина.
C>А если не только диалоги!?! А если меню? А если окна? А если строки?
C>Что-то я сомневаюсь, что обойдется все вот такой вот централизацией загрузки диалогов.

Локализация касается только строк.
Даже если есть надпись на битмапе, по хорошему ее нужно рисовать из IDS.
А вставляются ли эти строки в меню или в левый угол окна не суть важно.
Важно, чтобы был IDS строки и место, где известно как и куда ее вывести.

Пока писал, у меня вопрос созрел. А все-таки есть ли ситуации, когда нужны два и более диалога.
Например, кнопки располагаются в порядке OK Cancel, для любой локали.
А где-то, к примеру, принят порядок Cancеl OK.
По идее нужно рисовать отдельный диалог. Но примеров из реальной жизни не припоминаю.
Или не диалог, а меню или порядок столбцов в листе, могут ли зависеть от локали?

C>Хотя, к слову говоря, отчасти теперь я в большинстве новых проектов всегда завожу какой-нить базовый диалог что-то вроде CMySuperAppDialog, от которого наследуются уже все фактические. Это решает проблему (хотя и потянуло на эти рюшечки не из-за локализации, а из-за поддержки тем UI, но и локализацию тут не сложно прикрутить).


Да, удобней делать такие обертки.
Re[6]: Локализация ресурсов
От: baily Россия  
Дата: 06.04.12 09:20
Оценка:
Здравствуйте, 5er, Вы писали:

5er>Здравствуйте, Carc, Вы писали:


5er>Пока писал, у меня вопрос созрел. А все-таки есть ли ситуации, когда нужны два и более диалога.

5er>Например, кнопки располагаются в порядке OK Cancel, для любой локали.
5er>А где-то, к примеру, принят порядок Cancеl OK.
5er>По идее нужно рисовать отдельный диалог. Но примеров из реальной жизни не припоминаю.
5er>Или не диалог, а меню или порядок столбцов в листе, могут ли зависеть от локали?

В японском языке часто бывают проблемы, из-за того, что у них нестандартный размер шрифта.
Обычно у диалогов используется фонт "MS Shell Dlg", который имеет логический размер.
Реальный же размер зависит от локализации.

Это очень неприятно, когда реализуешь плагин, в котором твои окна встраиваются в окна другого приложения,
т.е имеются ограничения на размер окон плагина.
Re[6]: Локализация ресурсов
От: Carc Россия https://vk.com/gosha_mazov
Дата: 06.04.12 10:12
Оценка:
Здравствуйте, 5er, Вы писали:

5er>Здравствуйте, Carc, Вы писали:


5er>...

5er>>>- далее при создании диалога инициализируем в нем каждую строчку, вот так без дураков строчка
5er>>>за строчкой: tr(IDS_N), tr(IDS_N+1)...
5er>>>Если какую забыли, не беда — в диалоге уже сидит дефолтная (приложение же уже написано), потом поправим
5er>>>- на 3-4-м диалоге доходим да всех нюансов и далее просто рутина.
C>>А если не только диалоги!?! А если меню? А если окна? А если строки?
C>>Что-то я сомневаюсь, что обойдется все вот такой вот централизацией загрузки диалогов.

5er>Локализация касается только строк.

5er>Даже если есть надпись на битмапе, по хорошему ее нужно рисовать из IDS.
5er>А вставляются ли эти строки в меню или в левый угол окна не суть важно.
5er>Важно, чтобы был IDS строки и место, где известно как и куда ее вывести.

5er>Пока писал, у меня вопрос созрел. А все-таки есть ли ситуации, когда нужны два и более диалога.

5er>Например, кнопки располагаются в порядке OK Cancel, для любой локали.
5er>А где-то, к примеру, принят порядок Cancеl OK.
5er>По идее нужно рисовать отдельный диалог. Но примеров из реальной жизни не припоминаю.
Внимательно, внимательно читаем Макконнелла, Фредерика Брукса — и ищем упоминание славной мысли

"Программист берет один случай из миллиона и бесконечно оптимизирует его до тех пор пока все окончательно не сломается"


Да поймите Вы наконец. Есть правильно 90\10. И то что для нас занимает 90 процентов времени, это те самые 10 процентов программы. Понятно, что нам дюже нравится до бесконечности оптимизировать тот самый 1 случай из миллиона. Это и есть наша профессия, наша работа, наше всё. Потому как остальные 999 999 случаев неинтересны, они выполняются автоматически (кодом, компилятором, кодогенератором и.т.д.).

Но в реальной жизни все с точностью до наоборот. Пользователь будет иметь 90 процентов времени дело с 90 процентами Вашего кода. В том числе и с изысками по локализации. Поверьте, ему будет абсолютно *асрать на порядок кнопок, потому как в остальных 90 процентов был допущен пусть маленький, но косяк. Зато который проявляется все 90 процентов времени работы, и постоянно мешают этому же пользователю.

Не то, не то оптимизируете. Более того, мне совсем не нравится идея перетряхивать все диалоги, и переписывать всю инициализацию строк. Угадайте почему? А как раз потому, что те самые 90 процентов рутинной работы, которые нам с Вами неинтересны. Но главное: это явно не лезет ни в какие ворота — чтобы кто-то лез в код отлаженного диалога, и только из-за какой-то локализации влиял на логику работы. А такие изменения как преждевременная инициализация — это достаточное изменение, чтобы где-нибудь до сломалось.

Такие вещи нужно делать через аспектное программирование. Да и вообще подход из серии "переписать всё нафиг" оставим для школьничков. У них аккурат скоро юбилей — первая тыща строк за плечами. Не грех и переписать нафиг. А в реальном, отлаженном, работающем на пользователя проекте с сотнями тысяч строк это не пойдет. Да вас просто не подпустят к коду (и правильно сделают).

Ладно заканчиваем холивар. Пошли знакомые школьнически-академические мысли я смотрю. Предлагаемые решения "переписать" идеальны и мерцают в ночи, восхищая своей гармонией. Так бывает на бумаге, да забыли про овраги. В реальных проектах эти решения не работают.

PS: не надо только про QT — как идеал, и пример для подражания. Убожество ее архитектуры потрясло меня до основания... Изначально предлагать чуть ли не всё и вся инициализировать в main, как общий подход — это что-то. Иногда и так надо, иногда в начале поиска решения — ну куда деваться. Но к 2012-му году на что-то претендовать в архитектурном смысле слова это ей богу даже не смешно.
Aml Pages Home
Re[7]: Локализация ресурсов
От: Carc Россия https://vk.com/gosha_mazov
Дата: 06.04.12 10:14
Оценка:
Здравствуйте, baily, Вы писали:

B>Здравствуйте, 5er, Вы писали:


5er>>Здравствуйте, Carc, Вы писали:


5er>>Пока писал, у меня вопрос созрел. А все-таки есть ли ситуации, когда нужны два и более диалога.

5er>>Например, кнопки располагаются в порядке OK Cancel, для любой локали.
5er>>А где-то, к примеру, принят порядок Cancеl OK.
5er>>По идее нужно рисовать отдельный диалог. Но примеров из реальной жизни не припоминаю.
5er>>Или не диалог, а меню или порядок столбцов в листе, могут ли зависеть от локали?

B>В японском языке часто бывают проблемы, из-за того, что у них нестандартный размер шрифта.

B>Обычно у диалогов используется фонт "MS Shell Dlg", который имеет логический размер.
B>Реальный же размер зависит от локализации.

B>Это очень неприятно, когда реализуешь плагин, в котором твои окна встраиваются в окна другого приложения,

B>т.е имеются ограничения на размер окон плагина.
А посмотрите на плагины FAR... У него локализация это часть Plugin API, чтобы ни кто во что горазд оттягивался. И действительно, хост-приложению явно будет больше известно о всех потенциальных проблемах, чем конкретному плагину, в том числе и о проблемах локализации.
Aml Pages Home
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.