Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Существует два способа создания локализованных версий библиотеки:
- Включите все локализованные сборки ресурсов в один пакет.
- Создайте отдельные локализованные спутниковые пакеты, следуя строгому набору соглашений.
Оба метода имеют свои преимущества и недостатки, как описано в следующих разделах.
Локализованные сборки ресурсов в одном пакете
Включение локализованных сборок ресурсов в один пакет обычно является самым простым подходом. Для этого создайте папки в lib поддерживаемом языке, отличном от используемого по умолчанию пакета (предполагается, что en-us). В этих папках можно разместить сборки ресурсов и локализованные XML-файлы IntelliSense.
Например, следующая структура папок поддерживает немецкий (de), итальянский (it), японский (ja), русский (ru), китайский (упрощённый) (zh-Hans), и китайский (традиционный) (zh-Hant):
lib
└───net40
│ Contoso.Utilities.dll
│ Contoso.Utilities.xml
│
├───de
│ Contoso.Utilities.resources.dll
│ Contoso.Utilities.xml
│
├───it
│ Contoso.Utilities.resources.dll
│ Contoso.Utilities.xml
│
├───ja
│ Contoso.Utilities.resources.dll
│ Contoso.Utilities.xml
│
├───ru
│ Contoso.Utilities.resources.dll
│ Contoso.Utilities.xml
│
├───zh-Hans
│ Contoso.Utilities.resources.dll
│ Contoso.Utilities.xml
│
└───zh-Hant
Contoso.Utilities.resources.dll
Contoso.Utilities.xml
Вы можете увидеть, что языки перечислены под папкой целевой net40 платформы. Если вы поддерживаете несколько платформ, у вас есть папка lib для каждого варианта.
Далее, настроив эти папки, вы сможете ссылаться на все файлы в .nuspec.
<?xml version="1.0"?>
<package>
<metadata>...
</metadata>
<files>
<file src="lib\**" target="lib" />
</files>
</package>
Одним из примеров пакета, использующего этот подход, является Microsoft.Data.OData 5.4.0.
Преимущества и недостатки (локализованные ассамблеи ресурсов)
Объединение всех языков в одном пакете имеет несколько недостатков:
-
Общие метаданные. Так как пакет NuGet может содержать только один файл, можно предоставить метаданные только для одного
.nuspecязыка. То есть NuGet не поддерживает локализованные метаданные. - Размер пакета. В зависимости от количества поддерживаемых языков библиотека может стать значительно большой, что замедляет установку и восстановление пакета.
- Одновременные выпуски: локализация локализованных файлов в один пакет требует одновременного выпуска всех ресурсов в этом пакете, а не возможность выпуска каждой локализации отдельно. Кроме того, для любого обновления для любой локализации требуется новая версия всего пакета.
Тем не менее, он также имеет несколько преимуществ:
- Простота. Потребители пакета получают все поддерживаемые языки в одной установке, а не устанавливать каждый язык отдельно. Один пакет также проще найти на nuget.org.
- Связанные версии: так как все сборки ресурсов находятся в одном пакете вместе с основной сборкой, они все имеют одинаковый номер версии и не рискуют быть ошибочно отделёнными.
Локализованные спутниковые пакеты
Аналогично тому, как .NET Framework поддерживает вспомогательные сборки, этот метод разделяет локализованные ресурсы и XML-файлы IntelliSense на вспомогательные пакеты.
Для этого основной пакет использует соглашение {identifier}.{version}.nupkg об именовании и содержит сборку для языка по умолчанию (например, en-US). Например, ContosoUtilities.1.0.0.nupkg будет содержать следующую структуру:
lib
└───net40
ContosoUtilities.dll
ContosoUtilities.xml
Затем в спутниковой сборке используется соглашение об именовании {identifier}.{language}.{version}.nupkg, например ContosoUtilities.de.1.0.0.nupkg. Идентификатор должен точно соответствовать идентификатору основного пакета.
Так как это отдельный пакет, он имеет собственный .nuspec файл, содержащий локализованные метаданные. Помните, что язык в .nuspec поле должен соответствовать языку, используемому в имени файла.
Вспомогательные сборки также должны объявлять точную версию основного пакета как зависимость, используя нотацию версий [] (см. раздел "Управление версиями пакетов"). Например, ContosoUtilities.de.1.0.0.nupkg должен объявить зависимость от ContosoUtilities.1.0.0.nupkg, используя нотацию [1.0.0]. Вспомогательный пакет, конечно, может иметь другой номер версии, чем основной пакет.
Затем структура спутникового пакета должна включать сборку ресурсов и XML-файл IntelliSense в вложенную папку, которая соответствует названию файла пакета {language}.
lib
└───net40
└───de
ContosoUtilities.resources.dll
ContosoUtilities.xml
Примечание. Если не требуется определенная субкультура ja-JP , всегда используйте идентификатор языка более высокого уровня, например ja.
В спутниковой сборке NuGet распознает только те файлы в папке, которая совпадает с {language} в имени файла. Все остальные игнорируются.
Когда выполняются все эти соглашения, NuGet распознает пакет как вспомогательный пакет и установит локализованные файлы в папку основного пакета lib , как если бы они были первоначально упакованы. Удаление вспомогательного пакета приведет к удалению файлов из той же папки.
Вы создадите дополнительные сателлитные сборки таким же образом для каждого поддерживаемого языка. Например, изучите набор пакетов MVC ASP.NET:
- Microsoft.AspNet.Mvc (основной английский язык)
- Microsoft.AspNet.Mvc.de (немецкий)
- Microsoft.AspNet.Mvc.ja (японский)
- Microsoft.AspNet.Mvc.zh-Hans (китайский (упрощённый))
- Microsoft.AspNet.Mvc.zh-Hant (китайский (традиционный))
Сводка обязательных соглашений
- Основной пакет должен быть назван
{identifier}.{version}.nupkg - Спутниковый пакет должен быть назван
{identifier}.{language}.{version}.nupkg - Спутниковый пакет
.nuspecдолжен указать свой язык, чтобы он соответствовал имени файла. - Вспомогательный пакет должен объявить зависимость от точной версии основного пакета, используя нотацию [] в файле
.nuspec. Диапазоны не поддерживаются. - Спутниковый пакет должен поместить файлы в папку
lib\[{framework}\]{language}, которая точно соответствует{language}в имени файла.
Преимущества и недостатки (спутниковые пакеты)
Использование спутниковых пакетов имеет несколько преимуществ:
- Размер пакета: общий объем основного пакета сведен к минимуму, и потребители несут только затраты на каждый язык, который они хотят использовать.
-
Отдельные метаданные: каждый сателлитный пакет имеет собственный
.nuspecфайл и, таким образом, собственные локализованные метаданные. Это позволяет некоторым потребителям проще находить пакеты, выполняя поиск nuget.org с локализованными терминами. - Отсоединяемые выпуски: сателлитные сборки можно выпускать постепенно, а не все сразу, позволяя распределить усилия по локализации.
Однако спутниковые пакеты имеют собственный набор недостатков:
- Загромождения. Вместо одного пакета у вас есть множество пакетов, которые могут привести к загромождениям результатов поиска по nuget.org и длинному списку ссылок в проекте Visual Studio.
- Строгие соглашения. Спутниковые пакеты должны точно соответствовать соглашениям, иначе локализованные версии не будут правильно обработаны.
- Управление версиями. Каждый вспомогательный пакет должен иметь точную зависимость версии от основного пакета. Это означает, что обновление основного пакета может потребовать обновления всех вспомогательных пакетов, даже если ресурсы не изменились.