diff --git a/docs/Building on Windows.md b/docs/Building on Windows.md index b03042224..c050db43e 100644 --- a/docs/Building on Windows.md +++ b/docs/Building on Windows.md @@ -38,6 +38,7 @@ package :msi do parameters { 'KeyThing' => 'ValueThing' } + localization 'da-dk' end ``` @@ -53,5 +54,6 @@ Some DSL methods available include: | :----------------: | ------------------------------------------------| | **`upgrade_code`** | The unique GUID for this package | | `parameters` | And arbirtary list of key-value pairs to render | +| `localization` | The language to display in the UI | For more information, please see the [`Packager::MSI` documentation](http://www.rubydoc.info/github/chef/omnibus/Omnibus/Packager/MSI). diff --git a/lib/omnibus/packagers/msi.rb b/lib/omnibus/packagers/msi.rb index 1263230e6..a79aa1bb9 100644 --- a/lib/omnibus/packagers/msi.rb +++ b/lib/omnibus/packagers/msi.rb @@ -248,6 +248,29 @@ def fast_msi(val = false) end expose :fast_msi + # + # Set or retrieve the localization. Take a look at + # this list[https://www.firegiant.com/wix/tutorial/user-interface/do-you-speak-english/] + # of valid localizations. + # + # @example + # localization 'de-de' + # + # @param [String] val + # the localization to set + # + # @return [String] + # the set localization + # + def localization(val = "en-us") + unless val.is_a?(String) + raise InvalidValue.new(:localization, "be a String") + end + + @localization ||= val + end + expose :localization + # # Discovers a path to a gem/file included in a gem under the install directory. # @@ -311,8 +334,8 @@ def resources_dir # @return [void] # def write_localization_file - render_template(resource_path("localization-en-us.wxl.erb"), - destination: "#{staging_dir}/localization-en-us.wxl", + render_template(resource_path("localization-#{localization}.wxl.erb"), + destination: "#{staging_dir}/localization-#{localization}.wxl", variables: { name: project.package_name, friendly_name: project.friendly_name, @@ -492,8 +515,8 @@ def light_command(out_file, is_bundle: false) -ext WixUIExtension -ext WixBalExtension #{wix_extension_switches(wix_light_extensions)} - -cultures:en-us - -loc "#{windows_safe_path(staging_dir, 'localization-en-us.wxl')}" + -cultures:#{localization} + -loc "#{windows_safe_path(staging_dir, "localization-#{localization}.wxl")}" bundle.wixobj -out "#{out_file}" EOH @@ -504,8 +527,8 @@ def light_command(out_file, is_bundle: false) #{wix_light_delay_validation} -ext WixUIExtension #{wix_extension_switches(wix_light_extensions)} - -cultures:en-us - -loc "#{windows_safe_path(staging_dir, 'localization-en-us.wxl')}" + -cultures:#{localization} + -loc "#{windows_safe_path(staging_dir, "localization-#{localization}.wxl")}" project-files.wixobj source.wixobj -out "#{out_file}" EOH diff --git a/spec/unit/packagers/msi_spec.rb b/spec/unit/packagers/msi_spec.rb index c2b9f1b77..ab0724671 100644 --- a/spec/unit/packagers/msi_spec.rb +++ b/spec/unit/packagers/msi_spec.rb @@ -90,6 +90,29 @@ module Omnibus end end + describe "#localization" do + it "is a DSL method" do + expect(subject).to have_exposed_method(:localization) + end + + it "defaults to String en-us" do + expect(subject.localization).to be_a(String) + expect(subject.localization).to eq("en-us") + end + + it "requires the value to be a String" do + expect do + subject.localization(Object.new) + end.to raise_error(InvalidValue) + end + + it "returns the given value" do + loc = "te-st" + subject.localization(loc) + expect(subject.localization).to eq(loc) + end + end + describe "#package_name" do before do allow(Config).to receive(:windows_arch).and_return(:foo_arch)