Как работает Locbaml?

Я создал тестовый проект WPF, одно окно с одной кнопкой в ​​нем. Затем я выгрузил проект и изменил csproj, чтобы он содержал следующее <UICulture>en-US</UICulture>, После восстановления папка сборки теперь содержит подпапку с именем en-US и файл WpfLocalizationTest.resources.dll. Пока все ясно.

Затем я скачал исходный код для Locbaml и собрал его. (Невозможно найти бинарную загрузку в любом месте, пойди разберись

Затем я скопировал Locbaml.exe в папку en-US и попробовал следующее.

locbaml /parse WpfLocalizationTest.resources.dll /out:test.csv

Это приводит к ошибке "Не удалось загрузить файл или сборку WpfLocalizationTest.resources.dll или одну из ее зависимостей. Была предпринята попытка загрузить программу с неверным форматом.'

В папке obj\x86\Debug находится файл с именем WpfLocalizationTest.g.en-US.resources. Я попытался запустить locbaml, но результат был тот же.

Как предполагается использовать locbaml? MSDN полон образцов кокамами, ни один из которых не работает. Действительно ли с помощью locbaml Microsoft планирует локализовать приложения WPF? Или они придумали подходящие инструменты для работы?

3 ответа

Решение

Продолжая поиск, я нашел еще одну ссылку на Stackru. Ошибки компиляции, которые мы первоначально получали, были связаны с устаревшим проектом LocBaml, не установленным для.Net4.0. Вот почему я не смог сгенерировать CSV из DLL, и мне пришлось сразу перейти к файлу ресурсов. Перейдите по этой ссылке для более подробной информации. Locbaml локализация приложения.net wpf4

Эта ссылка предоставляет ссылку на двоичные файлы.net 4, которые после компиляции позволяют вам перейти непосредственно к dll, чтобы сгенерировать CSV с помощью LocBaml.

Просто обновление я вытащил свои заметки сегодня утром. Надеюсь, это поможет вам продвинуться дальше.

После компиляции проекта скопируйте LocBaml.exe в каталог проекта, в котором была сгенерирована сборка: в моем примере я скопировал файл в E:\localiztion_sample\localiztion_sample\obj\x86\Release

Это сложная часть в том, что сборка не содержала все файлы DLL из каталога bin (элементы управления telerik и другие сборки). В результате я пошел в bin\release\ и скопировал все DLL и файлы ресурсов оттуда в каталог obj \ x86 \ Release. Для файлов, где меня попросили перезаписать, я посмотрел, есть ли разница в размере файла или дате создания, и если нет, я пропустил копию для этих объектов.

ПРИМЕЧАНИЕ. Чтобы создать CSV-файл, мне пришлось скопировать dll и файлы ресурсов из каталога bin и поместить их в каталог obj. Если вы пропустите этот шаг, файл CSV будет создан, но не заполнен данными.

После того, как вы скопировали необходимые файлы в каталог, вы затем проанализируете файл.resource, расположенный в каталоге Release.

В моем проекте файл ресурса был расположен по адресу:

E: \ localiztion_sample \ localiztion_sample \ OBJ \ x86 \ Release

И имя файла было названо: localiztion_sample.g.en-US.resources

Примечание: это отличается от инструкции на веб-сайте Microsoft. Microsoft заявляет, что вам следует запустить инструмент LocBaml для файла dll, расположенного в каталоге en-US. Однако после нескольких попыток и исследований я обнаружил, что это на самом деле вызвало ряд проблем с совместимостью между 32- и 64-разрядными сборками, а также просто не работает.

При чтении открытых wpf4, а также онлайн-форумов вместо этого предлагается указывать на файл *.gen.en-Us.resources. * = название проекта и gen.en-Us отражает выбранный язык разработки

Затем в рамках команды VS вам нужно будет ввести следующее

LocBaml /parse filename.resources /out: sample-en.csv

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

Для моего примера проекта команда выглядела так:

* LocBaml / parse localization_sample.g.en-US.resources / out: sample-en.csv *

Затем эта команда создает файл CSV, который действует как определение текущего проекта.

Насколько я понял, я смог изменить файл и восстановить dll, но я не смог изменить культуру в приложении, поэтому я все еще работаю над этой частью. Я сделаю репост, когда получу работу.

1) Выгрузите проект, который хотите локализовать

2) Редактировать проект.cproj файл

3) Добавить группу свойств в конце последней группы свойств

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == Release|AnyCPU' ">
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <PlatformTarget>x86</PlatformTarget>   
</PropertyGroup>   

ан-ГБ

4) Перезагрузите проект и скомпилируйте его, чтобы создать спутниковую сборку "yourlibrary.resources.dll" в папке en-GB в папке bin\debug, эта сборка будет сборкой по умолчанию.

5) Откройте файл Properties\AssemblyInfo.cs и раскомментируйте эту строку [Assembly: NeutralResourcesLanguage("en-GB", UltimateResourceFallbackLocation.Satell)] это резервная сателлитная сборка. И нам нужна эта запись, иначе для приложения wpf она выдает исключение вокруг app.xaml.cs не может загрузить

6) Из командной строки запустите эту команду, которая использует msbuild для создания UID C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild /t:updateuid . \yourlibrary.csproj, откройте файл xaml и проверьте ваши элементы управления, там будет UID для всех элементов.

7) Загрузите инструмент с исходным кодом locabaml.exe с веб-сайта https://github.com/JeremyDurnell/locbaml

8) Скопируйте файл locabaml.exe в папку \yourprojectname\bin\debug

9) мы бы сейчас создали спутниковую сборку для французского. Сначала нам нужно проанализировать спутниковую сборку по умолчанию и записать содержимое в файл csv, как показано здесь

10: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ MSBuild / parse C: \ yourprojectname \ bin \ Debug \ yourlibrary.resources.dll /out:C:\yourprojectname\bin\Debug\yourlibrary.resources_FR.csv

11) Откройте yourlibrary.resources_FR.csv сделайте необходимые переводы

12) Теперь нам нужно создать спутниковую сборку на французском языке, используя командную строку

13) C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ MSBuild / generate C: \ yourprojectname \ bin \ Debug \ yourlibrary.Resources.dll / trans: C: \ yourprojectname \ bin \ Debug \ yourlibrary.resources_FR. csv / out: C: \ yourporjectname \ bin \ Debug \ temp / cul: fr-FR

14) Команда выше создаст папку fr-FR в папке \ bin\debug

15) Переключите настройки региона вашего компьютера на французский (Франция)

16) В коде установите локализацию для Thread.CurrentThread.CurrentCulture = CultureInfo.CurrentCulture; Thread.CurrentThread.CurrentUICulture = CultureInfo.CurrentUICulture;

17) Скомпилируйте и запустите приложение, вы увидите переведенный текст на элементах управления

Другие вопросы по тегам