Как работает Locbaml? - PullRequest
       30

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

7 голосов
/ 08 февраля 2011

Я создал тестовый проект 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 ]

3 голосов
/ 16 февраля 2011

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

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

1 голос
/ 19 апреля 2018

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

2) Редактировать файл Project.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>   

en-GB

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 location

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

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

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

1 голос
/ 16 февраля 2011

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

После компиляции проекта скопируйте 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, но мне не удалось изменить культуру в приложении, поэтому я все еще работаю над этой частью.Я сделаю репост, как только у меня получится.

...