Как работает 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) Скомпилируйте и запустите приложение, вы увидите переведенный текст на элементах управления