Началось с того, что я написал тулзу, чтобы удобнее переводить формы — она делает текстовый уникодовый файл, который посылается переводчику, а затем автоматом его вставляет в ресурсы.. Вообщем выскочили такие грабли с проектом (который перевожу) — размер exe-файла увеличился с 1.1М до 3.6М! (это release), да и начали глючить некоторые места (к примеру тулбар главной формы стал половинной ширины!)..
Я еще пытаюсь разобраться что к чему, но такой вопрос мне не дает покоя — почему на локализацию одной небольшой формы exe-шнику нужно 100К и больше*?! Ну чуть-чуть идет в ресурсы.. ну еще чуть-чуть в код (надо ж десериализовать всякие строки из ресурсов?).. но не настолько же!
Здравствуйте, Sinatr, Вы писали:
S>Привет!
привет, это ты про .NET?
S>Началось с того, что я написал тулзу, чтобы удобнее переводить формы — она делает текстовый уникодовый файл, который посылается переводчику,
Ну это понятно. S>а затем автоматом его вставляет в ресурсы.
А что вот эта фраза означает, в какие ресурсы и как он его вставляет.
Точно!
S>>а затем автоматом его вставляет в ресурсы. VP>А что вот эта фраза означает, в какие ресурсы и как он его вставляет.
Неважно.. просто после того как я заметил появление глюков — я начал копать (т.к. решил, что виноваты мои ручки)..
Кстати, читал твой с АВК топик про локализацию, там есть одна идея, до которой я (дибил) не додумался, вернее для Net не использовал — генерировать тулзой некий класс констант, чтобы в проге было поменьше строк типа:
// было
Lng.GetString("Form1.MessageBox.Caption");
// стало
Lng.GetString(LngStrings.Form1.MessageBox.Caption);
Вообщем ща полезу в Анус.. тьфу.. в Янус ковыряться..
Вопрос про размер exe остается открытым..
Еще наблюдение — стоит поставить для формы Localization = true и после сохранения формы в дизайнере все текстовые и еще какие-то константы для Language = Default дружно переползают из InitializeComponent() в ресурсы.. А если сделать наоборт — почему-то не переползают.. Это нормально?
При создании какой-нибудь локали (ru) в нее помещаются только измениния и даже если попробовать тулзой запихнуть туда что-то из дефоултовой локали (ресурсов) — они (изменения) таинственно исчезает после октрытия/закрытия формы в дизайнере, из-чего можно сделать вывод, что дизайнер читает/сохраняет только те ресурсы (entries), которые запрашивается в InitializeComponent, верно?
Еще такое — после создания какой-нибудь локализации, той же "ru" — другие делаются методом копирования/перевода ресурсов (ru — заменяешь на uk или еще на что-нибудь)..
Здравствуйте, Sinatr, Вы писали:
S>Вопрос про размер exe остается открытым..
Не заню, я с такой проблемой не сталкивался ни разу. Скорее всего ты что то где то напортачил.
S>Еще наблюдение — стоит поставить для формы Localization = true и после сохранения формы в дизайнере все текстовые и еще какие-то константы для Language = Default дружно переползают из InitializeComponent() в ресурсы.. А если сделать наоборт — почему-то не переползают.. Это нормально?
Как то не приходилось подобное делать.
S>При создании какой-нибудь локали (ru) в нее помещаются только измениния и даже если попробовать тулзой запихнуть туда что-то из дефоултовой локали (ресурсов) — они (изменения) таинственно исчезает после октрытия/закрытия формы в дизайнере, из-чего можно сделать вывод, что дизайнер читает/сохраняет только те ресурсы (entries), которые запрашивается в InitializeComponent, верно?
Дизайнер после каждого изменения формы полностью пересоздает resx файлы.
У меня вот какой вопрос.
В локализованной форме сообщения выдаваемые MessageBox (и в др. случаях) должны дыть тоже локализованы. Я эти сообщения добавил в resx файл формы, а значения извлекал с помощью ResourceManager.GetString(). Все нормально, но после каждого изменения формы, все мои сообщения из файла пропадают (Из-за того, что дизайнер регенирирует файл ресурсов). Как же в таком случае поступать?
Здравствуйте, Руслан Разбежкин, Вы писали:
РР>У меня вот какой вопрос. РР>Как же в таком случае поступать?
Эти сообщения добавляй в другой resx файл. Делаешь Add-New Item-Resx File и туда вставляешь все строки.
Вот глянь Локализация приложения .NET
Здравствуйте, Руслан Разбежкин, Вы писали:
РР>ОК. РР>А как тогда писать локализованные сообщения?
Опять делаешь Add — New Item — Resx File и указываешь имя культуры.
Для русского файл должен быть MyResources.ru.resx, смотри MSDN. РР>Если используешь стандартные resx файлы. то извлекать строки можно таким кодом:
РР>rx=new System.Resources.ResourceManager(typeof(MainForm)); РР>rx.GetString("SaveConfigMessage");
По мною преведенной ссылке ты найдешь как создать ResourceManager. РР>не заботясь о том какой язык сейчас используется, сообщения выбираются из того файла, который является текущим по отношению к языку.
Об этом заботиться ResourceManager