Здравствуйте, AndrewVK, Вы писали:
AVK>Ну тогда что ты в этом болоте делаешь? AVK>Нет, но с какой это стати ты разговариваешь со мной с позиций старшего товарища?
Если обидел, то извини. Но я много где видел ответ от тебя следующего шаблона
return String.Format("Ответ на вопрос ""{0}"" в исходниках януса", question);
Просто не знаешь где наедешь где потеряешь ... весь смысл в познании.
VP> throw new ParseException("Invalid value format",ex);
VP>
Я как-то изобрёл свой способ:
throw new ParseException(ResStrings.GetString("Invalid value format"),ex);
Класс ResStrings использует передаваемую строку как ключ и по ней ищет в каких-то своих закромах русский вариант. Если же русского варианта нет, используется непосредственно Invalida value format.
Соответственно, после написания самой программы, нужно пройтись и поиском повыклёвывать строчки вида "ResStrings.GetString(", создать заготовку и перевести разом все сообщения:
public class ResStrings
{
static readonly Hashtable strings=new Hashtable();
static ResStrings()
{
// В этом методе генерируются строки для переводов всех сообщений.
// После перевода должно быть так:
strings["Invalid value format"]="Неправильный формат значения";
// А сама заготовка должна выглядеть примерно так:
strings["Invalid version"] ="Invalid version";
strings["Bad row number"] ="Bad row number";
strings["Message failed"] ="Message failed";
...
}
public static string GetString(string englishKey)
{
string result=strings[englishKey] as string;
if( result==null )
return englishKey;
else
return result;
}
}
Ну, в данном случае ResStrings реализован вообще без ресурсов. Можно просто выделить его в отдельную сборку и так подключать.
Если в процессе разработки какой-нибудь горе-программист забудет добавить русский перевод для
Здравствуйте, mihailik, Вы писали:
M>Соответственно, после написания самой программы, нужно пройтись и поиском повыклёвывать строчки вида "ResStrings.GetString(", создать заготовку и перевести разом все сообщения:
Я бы посоветовал не изобретать велосипед и использовать класс ResourceManager
Здравствуйте, V.Petrovski, Вы писали:
VP>По поводу визуальной части вроде все ясно VP>1. Ставишь свойство Localizable в true VP>2. Выбираешь нужный Language и локализуешь
Можно насчёт этого по-подробнее, пожайлуста.
Здравствуйте, maloyDS, Вы писали:
DS>Здравствуйте, V.Petrovski, Вы писали:
VP>>По поводу визуальной части вроде все ясно VP>>1. Ставишь свойство Localizable в true VP>>2. Выбираешь нужный Language и локализуешь DS>Можно насчёт этого по-подробнее, пожайлуста. Зри в корень
Здравствуйте, V.Petrovski, Вы писали:
DS>>Можно насчёт этого по-подробнее, пожайлуста. VP>Зри в корень
Спасибо, жутко интересно, но плохо понятно
Может кто коротко ответит у меня такая проблема, размещаю, например, кнопку на форме, делаю её Caption на русском языке, а при запуске вместо русского ерунда всякая.
Здравствуйте, V.Petrovski, Вы писали:
VP>Такой подход для визуальной части, как сие для бизнес логики замутить получше?
Ты внимательно читал? Да и АВК тебе ровно про тоже говорил. Просто тебе почему-то не понравился этот подход и ты встал в позу. Ну, тогда рожай велосипед, что воду то зря мутить?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, V.Petrovski, Вы писали:
VP>выкинет исключение. И вообще человек не машина, неужели ты никогда не делал опечаток при написании программы? Но тебя спасал компилятор, а здесь ты об "опечатке" узнаешь только в рантайме.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, V.Petrovski, Вы писали:
VP>>Такой подход для визуальной части, как сие для бизнес логики замутить получше?
VD>Ты внимательно читал? Да и АВК тебе ровно про тоже говорил. Просто тебе почему-то не понравился этот подход и ты встал в позу. Ну, тогда рожай велосипед, что воду то зря мутить?
Я велоспипед не рожаю.
А по поводу этого подхода, ради интереса посмотри как сделана локализация в Framework.NET или в ROTOR.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, V.Petrovski, Вы писали:
VP>>Такой подход для визуальной части, как сие для бизнес логики замутить получше?
VD>Ты внимательно читал? Да и АВК тебе ровно про тоже говорил. Просто тебе почему-то не понравился этот подход и ты встал в позу. Ну, тогда рожай велосипед, что воду то зря мутить?
Я велоспипед не рожаю.
А по поводу этого подхода, ради интереса посмотри как сделана локализация в Framework.NET или в ROTOR.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, V.Petrovski, Вы писали:
VP>>выкинет исключение. И вообще человек не машина, неужели ты никогда не делал опечаток при написании программы? Но тебя спасал компилятор, а здесь ты об "опечатке" узнаешь только в рантайме.
VD>А вот так не пробовал?
VD>Да и вместо Format-а можно применять Replase. Тогда ошибок не будет.
VD>В общем, у тебя какие-то личные проблемы которые ты пытаешся приписать МС.
И это по твоему правильная реализация??? И что увидит пользователь в случае ошибки?
Не важно русский, японец или балгар —
"Неверный формат ресурсов: " + ex.Message
И нецжели приятно видеть такие вот месаги (пример WinCMD)?
Здравствуйте, V.Petrovski, Вы писали:
VD>>В общем, у тебя какие-то личные проблемы которые ты пытаешся приписать МС. VP>И это по твоему правильная реализация??? И что увидит пользователь в случае ошибки? VP>Не важно русский, японец или балгар —
VP>
VP>"Неверный формат ресурсов: " + ex.Message
Это сообщение должно вылезать только в самом крайнем случае. И не надо себе заморачивать голову красотой в подвале. Ты основной кода сделай красивым.
VP>И нецжели приятно видеть такие вот месаги (пример WinCMD)?
VP>
VP>Руccий message не найден.
Да выдавай. Только если ты ограничишся только этим сообщением, то пользователь вообще не поймет в чем проблема, а человек которому придется принимать багрепорт и искать ошибку не сможет ее локализовать и устранить. Зто называется шетишизм, т.е. когда вместо полезной программы пишится "правильная" программа. Оно тебе надо?
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, V.Petrovski, Вы писали:
VP>Я велоспипед не рожаю. VP>А по поводу этого подхода, ради интереса посмотри как сделана локализация в Framework.NET или в ROTOR.
А ты думаешь тот же АВК откуда этот подход взял?
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, V.Petrovski, Вы писали:
VP>По поводу визуальной части вроде все ясно VP>1. Ставишь свойство Localizable в true VP>2. Выбираешь нужный Language и локализуешь VP>А вот как по поводу таких вещей VP>
VP>.....
VP>
VP>Я конечно же не стал изобретать велосипед, немного подточил gensr.pl что бы генерил более удобный для использования класс SR, но все же не покидует душу вопрос — Неужели нет другого механизма или способа для локализации кода????
Я хочу возобновить эту тему.
Мой вопрос заключается в следующем. На данный момент, IMHO, основной способ локализации — использование ResourceManager (либо напрямую, либо через обертки фреймфорков, например Spring.NET), который берет даные из resource-файлов, внедренных в сборки. Но дело в том, что если файлы ресурсов внедрены в сборки, то теряется некоторая гибкость. Например, необходимо поставить заказчику language pack — нужно заменять все сборки новыми, внутри которых есть нужные ресурсы. С другой стороны — если бы данные для локализации были представлены просто пачкой текстовых файлов messages<culture>.ini, то суть патча сводилась бы только к дополнению установленного приложения набором таких файлов. Отсюда — так ли уж действительно разумно использовать ResourceManager вместо _отдельных_ легко читаемых файлов?
Здравствуйте, ika, Вы писали:
ika>Я хочу возобновить эту тему. ika>Мой вопрос заключается в следующем. На данный момент, IMHO, основной способ локализации — использование ResourceManager (либо напрямую, либо через обертки фреймфорков, например Spring.NET), который берет даные из resource-файлов, внедренных в сборки. Но дело в том, что если файлы ресурсов внедрены в сборки, то теряется некоторая гибкость. Например, необходимо поставить заказчику language pack — нужно заменять все сборки новыми, внутри которых есть нужные ресурсы. С другой стороны — если бы данные для локализации были представлены просто пачкой текстовых файлов messages<culture>.ini, то суть патча сводилась бы только к дополнению установленного приложения набором таких файлов. Отсюда — так ли уж действительно разумно использовать ResourceManager вместо _отдельных_ легко читаемых файлов?
Не надо поставлять новые модулю достаточно в language pack включить Satellite Assemblies.
Для примера можешь посмотреть как делает MS language packs для .NET Framework.
В использовании ResourceManager есть только один недостаток, нельзя менять язык форм в runtime.
Здравствуйте, ika, Вы писали:
ika>Мой вопрос заключается в следующем. На данный момент, IMHO, основной способ локализации — использование ResourceManager (либо напрямую, либо через обертки фреймфорков, например Spring.NET), который берет даные из resource-файлов, внедренных в сборки.
Почитай про сателлитные сборки (satellite assemblies). Все совсем не так. как далее описано в посте.
Здравствуйте, ika, Вы писали:
ika>Мой вопрос заключается в следующем. На данный момент, IMHO, основной способ локализации — использование ResourceManager (либо напрямую, либо через обертки фреймфорков, например Spring.NET), который берет даные из resource-файлов, внедренных в сборки. Но дело в том, что если файлы ресурсов внедрены в сборки, то теряется некоторая гибкость. Например, необходимо поставить заказчику language pack — нужно заменять все сборки новыми, внутри которых есть нужные ресурсы. С другой стороны — если бы данные для локализации были представлены просто пачкой текстовых файлов messages<culture>.ini, то суть патча сводилась бы только к дополнению установленного приложения набором таких файлов. Отсюда — так ли уж действительно разумно использовать ResourceManager вместо _отдельных_ легко читаемых файлов?
Можно делать отдельную сборку с ресурсами. Единственный недостаток ResourceManager'а — он генерит internal класс для типизированного доступа к ресурсам. Я для таких целей напиал AddIn, который меняет область видимости на public и позволяет делать поиск/добавление/изменение реурсов; очень удобно. Потом просто переводишь ресурсы сборки на нужные языки и пользуешь.