At MyGet, we live and breath a culture of componentization, and we are very happy to see package authors adopting and sharing these practices within their organizations. One of these practices is the usage of NuGet's localized NuGet packages feature. The adoption of localized satellite packages is a good indicator of package author maturity. Using a better practice should be rewarding and free of friction. One of our Dear Users provided us with great feedback on how he leveraged MyGet to release localized packages by pushing them upstream. However, some unnecessary friction was involved, which had to be removed.
Localized NuGet Packages
As a NuGet package author, you can provide a localized experience for your libraries. The NuGet client has supported the creation of localized satellite packages since version 1.8.
For those unfamiliar with the concept, here's a basic package graph demonstrating the idea:
- Meta package, installing My.Framework and all localized satellite packages
- Depends on: all satellite packages (My.Framework.Core.nl, My.Framework.Core.fr, My.Framework.Core.el, ...)
- Package containing an actual framework library (e.g. in lib/net45/My.Framework.Core.dll)
- No dependencies for the sake of the demo (your libraries most likely have dependencies :))
- 3 localized satellite packages for the My.Framework.Core package
- Depends on the actual framework package being localized: My.Framework.Core.1.0.0-alpha0001.nupkg
- Only contains localization resources (e.g. lib/net45/nl/My.Framework.Core.resources.dll, lib/net45/nl/My.Framework.Core.xml)
Or visualized in a graph, here's the dependency tree:
To facilitate discovery of these satellite packages, we added a convenient Localization tab on the package details page if localized satellite packages are detected.
Releasing localized NuGet packages
Ideally, releasing a package that has localized satellite packages from MyGet to another feed, should be a click of a button away, publishing the entire package-set at once. Optionally, one might also want to adjust the prerelease tag and release notes of this package set, either per package individually, or for all at once.
The Push Upstream feature (also check our docs) has been upgraded to now also detect package dependencies and localized satellite packages!
This means that, as in the above sample scenario, you can now publish the entire localized package-set in one go by pushing the My.Framework meta package upstream.
In addition, you can also edit (or simply remove!) the prerelease tag and/or release notes for each package individually, or for all of them at once!
Simply click the edit button next to one of the packages, modify the fields, and click the water-drop icon to apply the changes to all other packages in the dialog.
Of course, you can still exclude individual packages from this list if you want to by clicking the button next to the respective package.
We love this kind of feedback and hope you find this change useful, so keep the feedback coming!