Re[9]: Локализация приложения .NET
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 15.07.03 14:41
Оценка:
Здравствуйте, V.Petrovski, Вы писали:

VP>Я тебе что-то должен доказать?? Ты мой начальник или заказчик?


Нет, но с какой это стати ты разговариваешь со мной с позиций старшего товарища?

AVK>>ЧТо тогда?


VP>есть классная пословица

VP>

VP> Каждый кулик свое болото хвалит


Ну тогда что ты в этом болоте делаешь?
... << RSDN@Home 1.1 beta 1 (np: тихо) >>
AVK Blog
Re[10]: Локализация приложения .NET
От: V.Petrovski Беларусь  
Дата: 15.07.03 14:55
Оценка: 1 (1)
Здравствуйте, AndrewVK, Вы писали:

AVK>Ну тогда что ты в этом болоте делаешь?

AVK>Нет, но с какой это стати ты разговариваешь со мной с позиций старшего товарища?

Если обидел, то извини. Но я много где видел ответ от тебя следующего шаблона

return String.Format("Ответ на вопрос ""{0}"" в исходниках януса", question);


Просто не знаешь где наедешь где потеряешь ... весь смысл в познании.
... << RSDN@Home 1.0 beta 7a тишину>>
Re[6]: Локализация приложения .NET
От: V.Petrovski Беларусь  
Дата: 15.07.03 15:11
Оценка:
Здравствуйте, Gollum, Вы писали:

G>Здравствуйте, V.Petrovski, Вы писали:


G>Можно дурацкий вопрос: а чем вот такой подход не устраивает?


Такой подход для визуальной части, как сие для бизнес логики замутить получше?
... << RSDN@Home 1.0 beta 7a тишину>>
Re[11]: Локализация приложения .NET
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 15.07.03 16:51
Оценка:
Здравствуйте, V.Petrovski, Вы писали:

VP>Если обидел, то извини. Но я много где видел ответ от тебя следующего шаблона


Не обидел, но твое сообщение не содержало ничего кроме личного наезда.

VP>

VP>return String.Format("Ответ на вопрос ""{0}"" в исходниках януса", question);


VP>Просто не знаешь где наедешь где потеряешь ... весь смысл в познании.


Если бы ты посмотрел исходники то увидел бы там отдельный проект Rsdn.Localization.
... << RSDN@Home 1.1 beta 1 (np: тихо) >>
AVK Blog
Re: Локализация приложения .NET
От: mihailik Украина  
Дата: 06.08.03 15:26
Оценка: 6 (1)
VP>А вот как по поводу таких вещей

VP>
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 реализован вообще без ресурсов. Можно просто выделить его в отдельную сборку и так подключать.

Если в процессе разработки какой-нибудь горе-программист забудет добавить русский перевод для
... << RSDN@Home 1.1 beta 1 >>
Re[2]: Локализация приложения .NET
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 07.08.03 05:46
Оценка:
Здравствуйте, mihailik, Вы писали:

M>Соответственно, после написания самой программы, нужно пройтись и поиском повыклёвывать строчки вида "ResStrings.GetString(", создать заготовку и перевести разом все сообщения:


Я бы посоветовал не изобретать велосипед и использовать класс ResourceManager
... << RSDN@Home 1.1 beta 1 >>
AVK Blog
Re: Локализация приложения .NET
От: maloyDS Россия  
Дата: 07.08.03 06:38
Оценка:
Здравствуйте, V.Petrovski, Вы писали:

VP>По поводу визуальной части вроде все ясно

VP>1. Ставишь свойство Localizable в true
VP>2. Выбираешь нужный Language и локализуешь
Можно насчёт этого по-подробнее, пожайлуста.
... << RSDN@Home 1.1 beta 1 >>
Re[2]: Локализация приложения .NET
От: V.Petrovski Беларусь  
Дата: 07.08.03 10:28
Оценка:
Здравствуйте, maloyDS, Вы писали:

DS>Здравствуйте, V.Petrovski, Вы писали:


VP>>По поводу визуальной части вроде все ясно

VP>>1. Ставишь свойство Localizable в true
VP>>2. Выбираешь нужный Language и локализуешь
DS>Можно насчёт этого по-подробнее, пожайлуста.
Зри в корень
... << RSDN@Home 1.1 beta 1 >>
Re[3]: Локализация приложения .NET
От: maloyDS Россия  
Дата: 07.08.03 12:52
Оценка:
Здравствуйте, V.Petrovski, Вы писали:

DS>>Можно насчёт этого по-подробнее, пожайлуста.

VP>Зри в корень
Спасибо, жутко интересно, но плохо понятно
Может кто коротко ответит у меня такая проблема, размещаю, например, кнопку на форме, делаю её Caption на русском языке, а при запуске вместо русского ерунда всякая.
... << RSDN@Home 1.1 beta 1 >>
Re[7]: Локализация приложения .NET
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.08.03 17:32
Оценка:
Здравствуйте, V.Petrovski, Вы писали:

VP>Такой подход для визуальной части, как сие для бизнес логики замутить получше?


Ты внимательно читал? Да и АВК тебе ровно про тоже говорил. Просто тебе почему-то не понравился этот подход и ты встал в позу. Ну, тогда рожай велосипед, что воду то зря мутить?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Локализация приложения .NET
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.08.03 17:41
Оценка:
Здравствуйте, V.Petrovski, Вы писали:

VP>выкинет исключение. И вообще человек не машина, неужели ты никогда не делал опечаток при написании программы? Но тебя спасал компилятор, а здесь ты об "опечатке" узнаешь только в рантайме.


А вот так не пробовал?


string GetRes(string key, params string[] args)
{
  string s;
  try
  {
    s = string.Format(resourceManager.GetString(key), args);
  }
  catch(Exception ex)
  {
    s = "Неверный формат ресурсов: " + ex.Message;
  }

  return s;
}


Да и вместо Format-а можно применять Replase. Тогда ошибок не будет.

В общем, у тебя какие-то личные проблемы которые ты пытаешся приписать МС.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Локализация приложения .NET
От: V.Petrovski Беларусь  
Дата: 25.08.03 06:08
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, V.Petrovski, Вы писали:


VP>>Такой подход для визуальной части, как сие для бизнес логики замутить получше?


VD>Ты внимательно читал? Да и АВК тебе ровно про тоже говорил. Просто тебе почему-то не понравился этот подход и ты встал в позу. Ну, тогда рожай велосипед, что воду то зря мутить?


Я велоспипед не рожаю.
А по поводу этого подхода, ради интереса посмотри как сделана локализация в Framework.NET или в ROTOR.
... << RSDN@Home 1.1 beta 1 >>
Re[8]: Локализация приложения .NET
От: V.Petrovski Беларусь  
Дата: 25.08.03 06:27
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, V.Petrovski, Вы писали:


VP>>Такой подход для визуальной части, как сие для бизнес логики замутить получше?


VD>Ты внимательно читал? Да и АВК тебе ровно про тоже говорил. Просто тебе почему-то не понравился этот подход и ты встал в позу. Ну, тогда рожай велосипед, что воду то зря мутить?


Я велоспипед не рожаю.
А по поводу этого подхода, ради интереса посмотри как сделана локализация в Framework.NET или в ROTOR.
... << RSDN@Home 1.1 beta 1 >>
Re[10]: Локализация приложения .NET
От: V.Petrovski Беларусь  
Дата: 25.08.03 06:27
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, V.Petrovski, Вы писали:


VP>>выкинет исключение. И вообще человек не машина, неужели ты никогда не делал опечаток при написании программы? Но тебя спасал компилятор, а здесь ты об "опечатке" узнаешь только в рантайме.


VD>А вот так не пробовал?



VD>
VD>string GetRes(string key, params string[] args)
VD>{
VD>  string s;
VD>  try
VD>  {
VD>    s = string.Format(resourceManager.GetString(key), args);
VD>  }
VD>  catch(Exception ex)
VD>  {
VD>    s = "Неверный формат ресурсов: " + ex.Message;
VD>  }

VD>  return s;
VD>}
VD>


VD>Да и вместо Format-а можно применять Replase. Тогда ошибок не будет.


VD>В общем, у тебя какие-то личные проблемы которые ты пытаешся приписать МС.

И это по твоему правильная реализация??? И что увидит пользователь в случае ошибки?
Не важно русский, японец или балгар —

"Неверный формат ресурсов: " + ex.Message


И нецжели приятно видеть такие вот месаги (пример WinCMD)?


Руccий message не найден.

... << RSDN@Home 1.1 beta 1 >>
Re[11]: Локализация приложения .NET
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.08.03 14:20
Оценка:
Здравствуйте, V.Petrovski, Вы писали:

VD>>В общем, у тебя какие-то личные проблемы которые ты пытаешся приписать МС.

VP>И это по твоему правильная реализация??? И что увидит пользователь в случае ошибки?
VP>Не важно русский, японец или балгар —

VP>

VP>"Неверный формат ресурсов: " + ex.Message


Это сообщение должно вылезать только в самом крайнем случае. И не надо себе заморачивать голову красотой в подвале. Ты основной кода сделай красивым.

VP>И нецжели приятно видеть такие вот месаги (пример WinCMD)?


VP>

VP>Руccий message не найден.


Да выдавай. Только если ты ограничишся только этим сообщением, то пользователь вообще не поймет в чем проблема, а человек которому придется принимать багрепорт и искать ошибку не сможет ее локализовать и устранить. Зто называется шетишизм, т.е. когда вместо полезной программы пишится "правильная" программа. Оно тебе надо?
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Локализация приложения .NET
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.08.03 14:20
Оценка:
Здравствуйте, V.Petrovski, Вы писали:

VP>Я велоспипед не рожаю.

VP>А по поводу этого подхода, ради интереса посмотри как сделана локализация в Framework.NET или в ROTOR.

А ты думаешь тот же АВК откуда этот подход взял?
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Локализация приложения .NET
От: ika Беларусь  
Дата: 11.08.06 13:38
Оценка:
Здравствуйте, 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 вместо _отдельных_ легко читаемых файлов?
Re[2]: Локализация приложения .NET
От: V.Petrovski Беларусь  
Дата: 11.08.06 14:02
Оценка:
Здравствуйте, 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.


RSDN@Home
Nemerle
.NET Localizer
Re[2]: Локализация приложения .NET
От: Mab Россия http://shade.msu.ru/~mab
Дата: 11.08.06 14:04
Оценка:
Здравствуйте, ika, Вы писали:

ika>Мой вопрос заключается в следующем. На данный момент, IMHO, основной способ локализации — использование ResourceManager (либо напрямую, либо через обертки фреймфорков, например Spring.NET), который берет даные из resource-файлов, внедренных в сборки.

Почитай про сателлитные сборки (satellite assemblies). Все совсем не так. как далее описано в посте.
Re[2]: Локализация приложения .NET
От: hugo Австрия  
Дата: 11.08.06 14:15
Оценка:
Здравствуйте, ika, Вы писали:

ika>Мой вопрос заключается в следующем. На данный момент, IMHO, основной способ локализации — использование ResourceManager (либо напрямую, либо через обертки фреймфорков, например Spring.NET), который берет даные из resource-файлов, внедренных в сборки. Но дело в том, что если файлы ресурсов внедрены в сборки, то теряется некоторая гибкость. Например, необходимо поставить заказчику language pack — нужно заменять все сборки новыми, внутри которых есть нужные ресурсы. С другой стороны — если бы данные для локализации были представлены просто пачкой текстовых файлов messages<culture>.ini, то суть патча сводилась бы только к дополнению установленного приложения набором таких файлов. Отсюда — так ли уж действительно разумно использовать ResourceManager вместо _отдельных_ легко читаемых файлов?


Можно делать отдельную сборку с ресурсами. Единственный недостаток ResourceManager'а — он генерит internal класс для типизированного доступа к ресурсам. Я для таких целей напиал AddIn, который меняет область видимости на public и позволяет делать поиск/добавление/изменение реурсов; очень удобно. Потом просто переводишь ресурсы сборки на нужные языки и пользуешь.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.