Развертывание спутниковой сборки - PullRequest
0 голосов
/ 30 августа 2011

Я пытаюсь локализовать приложение Windows Phone 7 с помощью спутниковых сборок.Я построил

(al /t:lib /embed:stringlibrary.it-It.resx /culture:it /out:PhoneApp2.resources.dll /template:PhoneApp2.dll)

dll "PhoneApp2.resources.dll" для моего приложения PhoneApp2 из файла ресурсов stringlibrary.it-It.resx, а затем я загрузил dll с помощью веб-клиента и сохранил в каталоге it-IT из приложенияPhoneApp2. Теперь dll находится в изолированном хранилище phoneapp2.

У меня есть еще один файл ресурсов stringlibrary.resx, который всегда компилируется с приложением и содержит записи для поддержки английского языка (по умолчанию).

using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream("it-IT\\"+resfile, System.IO.FileMode.Create, file))
{
    byte[] buffer = new byte[1024];
    while (e.Result.Read(buffer, 0, buffer.Length) > 0)
    {
        stream.Write(buffer, 0, buffer.Length);
    }

}

Iиметь запись [assembly: NeutralResourcesLanguageAttribute ("it-IT", UltimateResourceFallbackLocation.Satell)] в файле сборки.

Он всегда показывает мне текст на нейтральном языке (английский) в окне сообщений, даже если текущий язык икультура итальянскаяЭто означает, что он не может найти спутниковую сборку.

rm = new ResourceManager("PhoneApp2.stringlibrary", Assembly.GetExecutingAssembly());
string greeting = rm.GetString("String1");
MessageBox.Show(greeting);

Но если я скомпилирую stringlibrary.it-It.resx с PhoneApp2 вместо спутниковой сборки, в окне сообщений правильно отображается итальянский текст, когда культура итальянская и английский для английскогоМойылдыКатон.Я что-то упускаю при развертывании спутниковых сборок?Пожалуйста, дайте мне знать.

С уважением, Сентил

Ответы [ 2 ]

1 голос
/ 30 августа 2011

Вы не можете использовать сборки в своем приложении, которое вы загрузили в изолированное хранилище. Только сборки, подписанные Microsoft (таким образом, те сборки, которые уже находятся в вашем XAP при отправке), могут быть загружены / выполнены во время выполнения.

Если после этого вы захотите скачать дополнительные переводы, вам следует использовать resx-файлы или любой другой формат, который вы можете затем проанализировать самостоятельно. Я бы предложил использовать какую-то базу данных для всех строк ресурсов, а затем добавить новостные загруженные данные в эту базу данных. Это намного гибче, чем то, что вы пытаетесь достичь:)

0 голосов
/ 30 августа 2011

Я не пробовал локализовать так, как вы это делаете. Мне это кажется слишком сложным. Но я локализовал несколько приложений и, учитывая, что мне было трудно найти полный источник, как это сделать, я написал в блоге. Вот мой блог: http://hopnet.mobi/website/Blog.aspx

В основном вы делаете это:

  1. Создать проект
  2. Отредактируйте файл .csproj в блокноте, чтобы добавить в тег нужные культуры.
  3. Выберите нейтральную культуру в свойствах проекта
  4. Добавление ресурсов в проект в обозревателе решений
  5. Создать класс для доступа к этим ресурсам
  6. Добавить этот класс в тег файла App.xaml
  7. Поместите свои строки в файл ресурсов
  8. Привязка к этим строкам с помощью привязки ресурса в вашем xaml.
  9. Если вы используете ApplicationBar, вы должны сделать это в коде, так как он не может быть связан в xaml.
  10. Создайте еще один файл ресурсов для каждой поддерживаемой культуры.
  11. Создайте файлы dll для каждого поддерживаемого языка, чтобы заголовок был правильным в списке плиток и программ.
...