Локализация с SharpDevelop - PullRequest
       27

Локализация с SharpDevelop

1 голос
/ 20 ноября 2008

Я работаю над локализованным приложением, которое разрабатываю в SharpDevelop. На основании учебника я столкнулся с ошибкой:

Не удалось найти ресурсы, подходящие для указанной культуры (или нейтральной культуры) на диске. baseName:

Я создал файл ресурсов с помощью Project | Добавить | Новый элемент, соответствующий «Пустому файлу ресурса» (я не смог найти «Файл ресурса сборки»). Кроме того, я установил «Build action» на «EmbeddedResource».

Внутри программы у меня есть класс, который выполняет следующие действия:

// load the resource file once
resourceManager = ResourceManager.CreateFileBasedResourceManager(file, filePath, null);

// depending on user selection, I set the CultureInfo in the code behind the form, i.e.
Thread.CurrentThread.CurrentUICulture = locales[0];   // which contains "en"

// and that's the method of the same class used to lookup the values
public string getValue ( string key )
{
    return resourceManager.GetString(key);
}

SharpDevelop 3.0.0.3437 .NET версия 2.0.50727.3053

Даже после тщательного изучения комментариев и поиска в Google в течение долгого времени, я не мог найти пример или решение. Отсюда и вопросы:

  • Как добавить культуру в сам файл ресурсов?
  • Можете ли вы привести пример или ссылку?

Большое спасибо!

Ответы [ 2 ]

1 голос
/ 20 ноября 2008

CreateFileBasedResourceManager будет работать только с двоичными файлами .resources (не с файлами .resx).

Если вы настаиваете на загрузке ресурсов из внешнего файла, а не встраиваете ресурсы в сборку, вам нужно будет запустить утилиту командной строки resgen для генерации файла .resources. Поэтому, если вы этого не сделали, сгенерируйте один для каждой поддерживаемой культуры.

В противном случае все выглядит нормально.

Но если вы предпочитаете встраивать ресурсы в сборку, в окне свойств установите для параметра Действия сборки значение Встроенный ресурс.

Если вы хотите также создать строго типизированный класс, заботящийся обо всей грязной работе, установите пользовательский инструмент только для базового файла (инвариантный) на ResXFileCodeGenerator, или PublicResXFileCodeGenerator, если вам это нужно (хорошо при создании сателлитных сборок).

Тогда вам не нужно заботиться о загрузке локализованных ресурсов самостоятельно. Созданный класс делает все это за вас.

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

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

0 голосов
/ 20 ноября 2008

Я не уверен, какую версию .NET вы используете, но эта статья MSDN о , как среда выполнения находит сборки , может быть вам полезна.

...