Skip to content

feat(nsis): add Vietnamese language support for installer.#15218

Merged
Legend-Master merged 11 commits into
tauri-apps:devfrom
TanNhatCMS:patch-1
Apr 29, 2026
Merged

feat(nsis): add Vietnamese language support for installer.#15218
Legend-Master merged 11 commits into
tauri-apps:devfrom
TanNhatCMS:patch-1

Conversation

@TanNhatCMS

@TanNhatCMS TanNhatCMS commented Apr 10, 2026

Copy link
Copy Markdown
Contributor

This pull request adds support for the Vietnamese language to the Windows NSIS installer in the tauri-bundler crate. The main changes include the addition of a Vietnamese translation file with relevant installer strings and updating the language data loader to recognize Norwegian.

Vietnamese language support:

  • Added a new Vietnamese translation file (Vietnamese.nsh) with installer strings for various installation and maintenance scenarios.
  • Updated the get_lang_data function in mod.rs to include and recognize the Vietnamese language file.

@TanNhatCMS
TanNhatCMS requested a review from a team as a code owner April 10, 2026 08:20
@Legend-Master

Copy link
Copy Markdown
Contributor

Hey, thanks for contributing. You'll need also need to add this to crates/tauri-bundler/src/bundle/windows/nsis/mod.rs get_lang_data for this to work, and the file should have an extension of .nsh

@TanNhatCMS

Copy link
Copy Markdown
Contributor Author

@Legend-Master

Hey, thanks for the guidance — I’ve followed your instructions.

I added the language entry to get_lang_data in crates/tauri-bundler/src/bundle/windows/nsis/mod.rs and made sure the file is using the .nsh extension and placed in the correct directory.

Everything is wired up now on my side. Could you help take a quick look and review if this is the correct approach or if anything should be adjusted?

@Legend-Master Legend-Master left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We'll also need a change file

https://github.com/tauri-apps/tauri/blob/dev/.changes/README.md

Also, have you tested the code?

Comment thread crates/tauri-bundler/src/bundle/windows/nsis/languages/Vietnamese.nsh Outdated
@github-actions

github-actions Bot commented Apr 18, 2026

Copy link
Copy Markdown
Contributor

Package Changes Through 91432b0

There are 11 changes which include tauri with minor, @tauri-apps/api with minor, tauri-build with minor, tauri-macos-sign with patch, tauri-bundler with minor, @tauri-apps/cli with minor, tauri-cli with minor, tauri-runtime with minor, tauri-runtime-wry with minor, tauri-utils with minor, tauri-plugin with minor

Planned Package Versions

The following package releases are the planned based on the context of changes in this pull request.

package current next
@tauri-apps/api 2.10.1 2.11.0
tauri-utils 2.8.3 2.9.0
tauri-macos-sign 2.3.3 2.3.4
tauri-bundler 2.8.1 2.9.0
tauri-runtime 2.10.1 2.11.0
tauri-runtime-wry 2.10.1 2.11.0
tauri-codegen 2.5.5 2.5.6
tauri-macros 2.5.5 2.5.6
tauri-plugin 2.5.4 2.6.0
tauri-build 2.5.6 2.6.0
tauri 2.10.3 2.11.0
@tauri-apps/cli 2.10.1 2.11.0
tauri-cli 2.10.1 2.11.0

Add another change file through the GitHub UI by following this link.


Read about change files or the docs at github.com/jbolda/covector

@TanNhatCMS

Copy link
Copy Markdown
Contributor Author

There are 11 changes which include tauri with minor, @tauri-apps/api with minor, tauri-macos-sign with patch, tauri-build with minor, tauri-bundler with minor, @tauri-apps/cli with minor, tauri-cli with minor, tauri-runtime with minor, tauri-runtime-wry with minor, tauri-utils with minor, tauri-plugin with minor

Planned Package Versions
The following package releases are the planned based on the context of changes in this pull request.

I have made the changes according to your instructions.
I haven't tested the code yet because I only copied the existing English language file and changed the content to Vietnamese.

Added support for the Vietnamese language in the project.

@Legend-Master Legend-Master left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code looks good, could you give it a manual test before we merge it?

Comment thread .changes/change-pr-15218.md Outdated
@TanNhatCMS TanNhatCMS changed the title feat: add languages Vietnamese feat(nsis): add Vietnamese language support for installer. Apr 29, 2026
@TanNhatCMS

TanNhatCMS commented Apr 29, 2026

Copy link
Copy Markdown
Contributor Author

Code looks good, could you give it a manual test before we merge it?

Thank you for the guidance. I have consulted PR #14824 and followed the instructions. I am now downloading the branch to my machine to run tests and will update the results later.

@TanNhatCMS

Copy link
Copy Markdown
Contributor Author

There were a few failed test cases, but I wasn't the one causing the problem.

test results on my machine:

PS D:\source\tauri> cargo test
   Compiling bench_helloworld v0.1.0 (D:\source\tauri\bench\tests\helloworld\src-tauri)
   Compiling bench_cpu_intensive v0.1.0 (D:\source\tauri\bench\tests\cpu_intensive\src-tauri)
   Compiling tauri-file-associations-demo v0.1.0 (D:\source\tauri\examples\file-associations\src-tauri)
   Compiling bench_files_transfer v0.1.0 (D:\source\tauri\bench\tests\files_transfer\src-tauri)
   Compiling tauri v2.10.3 (D:\source\tauri\crates\tauri)
    Finished `test` profile [unoptimized + debuginfo] target(s) in 29.42s
     Running unittests src\lib.rs (target\debug\deps\acl_tests-d9cc4773b25bc5bd.exe)

running 1 test
test tests::resolve_acl ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.22s

     Running unittests src\lib.rs (target\debug\deps\api_lib-a26365910653d7c8.exe)

running 1 test
[2026-04-29][04:48:42][api_lib][INFO] got response: Ok(PingResponse { value: Some("test") })
test tests::run_app ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.01s

     Running unittests src\main.rs (target\debug\deps\api-56880afde1ec4a79.exe)

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

     Running unittests src\main.rs (target\debug\deps\bench_cpu_intensive-b34686a62d8ecb2e.exe)

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

     Running unittests src\main.rs (target\debug\deps\bench_files_transfer-ec5f426372c2efc5.exe)

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

     Running unittests src\main.rs (target\debug\deps\bench_helloworld-8af281aaa20b5006.exe)

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

     Running unittests src\main.rs (target\debug\deps\resources-6c672111d7bd3aba.exe)

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

     Running unittests src\main.rs (target\debug\deps\restart-b8047b53c636f643.exe)

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

     Running tests\restart.rs (target\debug\deps\restart-b234857dea5985ea.exe)

running 1 test
test restart_symlinks ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.45s

     Running unittests src\lib.rs (target\debug\deps\tauri-3adb604467054dec.exe)

running 54 tests
test app::tests::is_send_sync ... ok
test error::tests::error_is_send_sync ... ok
test async_runtime::tests::runtime_block_on ... ok
test async_runtime::tests::handle_block_on ... ok
test async_runtime::tests::handle_spawn ... ok
test async_runtime::tests::runtime_spawn ... ok
test async_runtime::tests::handle_abort ... ok
test event::tests::test_illegal_event_name ... ok
test ipc::authority::tests::denied_command_takes_precendence ... ok
test ipc::authority::tests::remote_context_denied ... ok
test ipc::authority::tests::webview_glob_pattern_matches ... ok
test ipc::authority::tests::window_glob_pattern_matches ... ok
test ipc::format_callback::test::qc_format_res ... ok
test ipc::format_callback::test::qc_format_raw_res ... ok
test ipc::format_callback::test::qc_formatting ... ok
test ipc::format_callback::test::qc_formatting_raw ... ok
test ipc::format_callback::test::test_serialize_js_raw ... ok
test ipc::format_callback::test::test_serialize_js ... ok
test ipc::protocol::tests::parse_invoke_request ... ok
test ipc::authority::tests::remote_domain_matches ... ok
test ipc::authority::tests::resolve_access_message ... ok
test ipc::protocol::tests::parse_invoke_request_isolation ... ok
test ipc::tests::deserialize_invoke_response_body ... ok
test manager::test::check_get_url ... ok
test manager::tests::string_replace_with_callback ... ok
test ipc::authority::tests::remote_domain_glob_pattern_matches ... ok
test manager::webview::tests::local_network_url ... ok
test path::plugin::tests::basename ... ok
test path::plugin::tests::join ... ok
test scope::fs::tests::push_pattern_generated_paths ... ok
test state::tests::drop_inners_on_drop ... ok
test state::tests::dst_set_get ... ok
test state::tests::get_panics - should panic ... ok
test scope::fs::tests::path_is_escaped ... ok
test state::tests::set_get_remote ... ok
test state::tests::simple_set_get ... ok
test state::tests::simple_set_get_unmanage ... ok
test state::tests::test_no_drop_on_set ... ok
test state::tests::two_put_get ... ok
test state::tests::many_puts_only_one_succeeds ... ok
test event::listener::test::listeners_check_fn ... ok
test tests::aliased_features_exist ... ok
test tests::features_are_documented ... ok
test tray::tests::tray_event_json_serialization ... ok
test webview::tests::webview_is_send_sync ... ok
test window::tests::window_is_send_sync ... ok
test z85::tests::encode ... ok
test event::listener::test::listeners_check_key ... ok
test test_utils::check_spawn_task ... ok
test test::tests::run_app ... ok
test scope::fs::tests::windows_root_paths ... ok
test event::listener::test::check_on_event ... ok
test manager::test::emit ... ok
test manager::test::emit_to ... ok

test result: ok. 54 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 20.23s

     Running unittests src\lib.rs (target\debug\deps\tauri_build-6fbde59ecf0b0882.exe)

running 5 tests
test manifest::tests::array_diff ... ok
test tests::version_uses_numeric_build_metadata ... ok
test tests::version_ignores_build_metadata_that_does_not_fit_in_u16 ... ok
test tests::version_ignores_non_numeric_composite_build_metadata ... ok
test tests::version_ignores_non_numeric_build_metadata ... ok

test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

     Running unittests src\lib.rs (target\debug\deps\tauri_bundler-da8376cbd932826f.exe)

running 13 tests
test bundle::windows::msi::tests::converts_version_to_wix ... ok
test bundle::windows::msi::tests::validates_wix_version ... ok
test bundle::platform::tests::parse_rust_cfg ... ok
test bundle::category::tests::category_from_string_did_you_mean ... ok
test bundle::category::tests::category_from_string_totally_wrong ... ok
test utils::http_utils::tests::test_generate_mirror_url_no_env_var ... ok
test bundle::category::tests::category_from_string_ok ... ok
test utils::tests::resource_relative_paths ... ok
test utils::fs_utils::tests::create_file_with_parent_dirs ... ok
test utils::tests::retina_icon_paths ... ok
test utils::http_utils::tests::test_generate_mirror_url_non_github_url ... ok
test bundle::category::tests::ls_application_category_type_round_trip ... ok
test utils::http_utils::tests::test_generate_mirror_url_correctly ... ok

test result: ok. 13 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s

     Running unittests src\lib.rs (target\debug\deps\tauri_cli-d09ae80a7fbb5dae.exe)

running 46 tests
test helpers::config::tests::merge_patches ... ok
test interface::rust::tests::parse_cargo_option ... ok
test interface::rust::manifest::tests::inject_features_table ... ok
test interface::rust::manifest::tests::inject_features_string ... ok
test interface::rust::manifest::tests::inject_features_inline_table ... ok
test interface::rust::manifest::tests::inject_features_target ... ok
test interface::rust::tests::parse_profile_from_opts ... ok
test migrate::migrations::v1::config::test::migrate_csp_existing_connect_src_array ... ok
test migrate::migrations::v1::config::test::migrate_csp_existing_connect_src_string ... ok
test migrate::migrations::v1::config::test::can_migrate_cli_template_config ... ok
test migrate::migrations::v1::config::test::can_migrate_default_config ... ok
test migrate::migrations::v1::config::test::migrate_csp_object ... ok
test migrate::migrations::v1::config::test::can_migrate_api_example_config ... ok
test migrate::migrations::v1::config::test::migrate_dangerous_use_http_scheme ... ok
test migrate::migrations::v1::config::test::migrate_invalid_url_dev_path ... ok
test migrate::migrations::v1::config::test::migrate_updater_pubkey ... ok
test migrate::migrations::v1::config::test::migrate_full ... ok
test migrate::migrations::v1::config::test::migrate_webview_fixed_runtime_path ... ok
test migrate::migrations::v1::config::test::skips_migrating_updater ... ok
test migrate::migrations::v1::config::test::migrate_updater_target ... ok
test migrate::migrations::v1::frontend::partial_loader::svelte::test::test_parse_svelte ... ok
test migrate::migrations::v1::frontend::partial_loader::svelte::test::test_parse_svelte_ts_with_generic ... ok
test migrate::migrations::v1::frontend::partial_loader::vue::test::test_brace_with_regex_in_template_literal ... ok
test migrate::migrations::v1::frontend::partial_loader::vue::test::test_build_vue_with_escape_string ... ok
test migrate::migrations::v1::frontend::partial_loader::vue::test::test_build_vue_with_ts_flag_1 ... ok
test migrate::migrations::v1::frontend::partial_loader::vue::test::test_build_vue_with_ts_flag_2 ... ok
test migrate::migrations::v1::frontend::partial_loader::vue::test::test_build_vue_with_ts_flag_3 ... ok
test migrate::migrations::v1::frontend::partial_loader::vue::test::test_build_vue_with_tsx_flag ... ok
test migrate::migrations::v1::frontend::partial_loader::vue::test::test_multi_level_template_literal ... ok
test migrate::migrations::v1::frontend::partial_loader::vue::test::test_multiple_scripts ... ok
test migrate::migrations::v1::frontend::partial_loader::vue::test::test_no_script ... ok
test migrate::migrations::v1::frontend::partial_loader::vue::test::test_parse_vue_one_line ... ok
test migrate::migrations::v1::frontend::partial_loader::vue::test::test_syntax_error ... ok
test migrate::migrations::v1::frontend::partial_loader::vue::test::test_unicode ... ok
test migrate::migrations::v1::frontend::tests::migrates_svelte ... ok
test migrate::migrations::v1::frontend::tests::migrates_js ... ok
test migrate::migrations::v1::frontend::tests::migrates_vue ... ok
test migrate::migrations::v1::manifest::tests::migrate_add_crate_types ... ok
test migrate::migrations::v1::manifest::tests::migrate_str ... ok
test migrate::migrations::v1::manifest::tests::migrate_inline_table ... ok
test migrate::migrations::v1::manifest::tests::migrate_table ... ok
test tests::help_output_includes_build ... ok
test tests::verify_cli ... ok
test interface::rust::tests::parse_target_dir_from_opts ... ok
test helpers::updater_signature::tests::empty_password_is_valid ... ok
test helpers::updater_signature::tests::generate_empty_password_keys_and_use ... ok

test result: ok. 46 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 10.14s

     Running unittests src\main.rs (target\debug\deps\cargo_tauri-db326c58d68219ac.exe)

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

     Running unittests src\lib.rs (target\debug\deps\tauri_cli_node-0460394f566a21b8.exe)

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

     Running unittests src\lib.rs (target\debug\deps\tauri_codegen-363955f0566de951.exe)

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

     Running unittests src\main.rs (target\debug\deps\tauri_driver-5d008cd35847c652.exe)

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

     Running unittests src\main.rs (target\debug\deps\tauri_file_associations_demo-a0bd64b55b2a43de.exe)

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

     Running unittests src\lib.rs (target\debug\deps\tauri_macos_sign-58dca52ed0646772.exe)

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

     Running unittests src\lib.rs (target\debug\deps\tauri_macros-ec6c8911f7e9add2.exe)

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

     Running unittests src\lib.rs (target\debug\deps\tauri_plugin-33b1fb78098fa09b.exe)

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

     Running unittests src\lib.rs (target\debug\deps\tauri_plugin_sample-f471aff474cbeb16.exe)

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

     Running unittests src\lib.rs (target\debug\deps\tauri_runtime-ed0c02d992ae9d5a.exe)

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

     Running unittests src\lib.rs (target\debug\deps\tauri_runtime_wry-8ab02c35c3c98794.exe)

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

     Running unittests src\main.rs (target\debug\deps\tauri_schema_generator-449d54c5a0212c85.exe)

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

     Running unittests src\lib.rs (target\debug\deps\tauri_schema_worker-61e83ea556f23f38.exe)

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

     Running unittests src\lib.rs (target\debug\deps\tauri_utils-89b12d7ed364ff9d.exe)

running 43 tests
test acl::identifier::tests::format ... ok
test acl::identifier::tests::max_len_fits_in_u8 ... ok
test acl::identifier::tests::base ... ok
test acl::identifier::tests::prefix ... ok
test acl::capability::tests::permission_entry_de ... ok
test acl::resolved::tests::resolves_permissions_from_other_plugins ... ok
test acl::capability::tests::capability_file_de ... ok
test config::test::parse_hex_color ... ok
test config::test::test_defaults ... ok
test config::test::test_runner_config_default ... ok
test config::test::test_runner_config_equality ... ok
test config::test::test_runner_config_from_str ... ok
test config::test::test_runner_config_from_str_parse ... ok
test config::test::test_runner_config_from_string ... ok
test config::test::test_runner_config_in_build_config ... ok
test config::test::test_runner_config_in_build_config_object ... ok
test config::test::test_runner_config_in_full_config ... ok
test config::test::test_runner_config_object_format_full ... ok
test config::test::test_runner_config_object_format_minimal ... ok
test config::test::test_runner_config_string_format ... ok
test config::test::test_runner_config_untagged_serialization ... ok
test config::test::window_config_default_same_as_deserialize ... ok
test config_v1::test::test_defaults ... ok
test html2::tests::append_script_to_head_test ... ok
test html2::tests::csp ... ok
test html2::tests::inject_nonce_respects_disabled_modification ... ok
test html2::tests::inject_nonce_skips_existing ... ok
test html2::tests::inject_nonce_to_scripts ... ok
test html2::tests::inject_nonce_to_styles ... ok
test html2::tests::normalize_script_for_csp_test ... ok
test html2::tests::parse_and_serialize_roundtrips ... ok
test mime_type::tests::should_parse_mimetype_from_uri ... ok
test pattern::isolation::test::create_keys ... ok
test platform::tests::resolve_resource_dir ... ok
test html2::tests::inline_isolation_replaces_src_with_content ... ok
test acl::tests::url_pattern_path_wildcard ... ok
test acl::tests::url_pattern_scheme_wildcard ... ok
test resources::tests::resource_paths_errors ... ok
test acl::tests::url_pattern_domain_wildcard ... ok
test resources::tests::resource_paths_iter_map_allow_walk ... ok
test resources::tests::resource_paths_iter_map_no_walk ... ok
test resources::tests::resource_paths_iter_slice_allow_walk ... ok
test resources::tests::resource_paths_iter_slice_no_walk ... ok

test result: ok. 43 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.11s

     Running unittests src\build_benchmark_jsons.rs (target\debug\deps\build_benchmark_jsons-484254b567f2b09a.exe)

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

     Running unittests src\run_benchmark.rs (target\debug\deps\run_benchmark-5114fbabdf845a1c.exe)

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

   Doc-tests acl_tests

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

   Doc-tests api_lib

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

   Doc-tests tauri

running 87 tests
test crates\tauri\src\app.rs - app::App<R>::run (line 1324) - compile ... ok
test crates\tauri\src\app.rs - app::App<R>::run_return (line 1360) - compile ... ok
test crates\tauri\src\app.rs - app::App<R>::set_device_event_filter (line 1296) - compile ... ok
test crates\tauri\src\app.rs - app::App<R>::run_iteration (line 1421) - compile ... ok
test crates\tauri\src\app.rs - app::Builder (line 1463) - compile ... ok
test crates\tauri\src\app.rs - app::Builder<R>::device_event_filter (line 2196) - compile ... ok
test crates\tauri\src\app.rs - app::App<R>::listen (line 1204) ... ok
test crates\tauri\src\app.rs - app::App<R>::unlisten (line 1204) ... ok
test crates\tauri\src\app.rs - app::AppHandle<R>::listen (line 1205) ... ok
test crates\tauri\src\app.rs - app::AppHandle<R>::remove_plugin (line 526) ... ok
test crates\tauri\src\app.rs - app::AppHandle<R>::plugin (line 488) ... ok
test crates\tauri\src\app.rs - app::Builder<R>::append_invoke_initialization_script (line 1684) ... ok
test crates\tauri\src\app.rs - app::Builder<R>::manage (line 1853) - compile ... ok
test crates\tauri\src\app.rs - app::Builder<R>::enable_macos_default_menu (line 2004) ... ok
test crates\tauri\src\app.rs - app::AppHandle<R>::unlisten (line 1205) ... ok
test crates\tauri\src\app.rs - app::Builder<R>::manage (line 1888) - compile ... ok
test crates\tauri\src\app.rs - app::Builder<R>::invoke_handler (line 1616) ... ok
test crates\tauri\src\app.rs - app::Builder<R>::on_webview_event (line 2041) ... ok
test crates\tauri\src\app.rs - app::Builder<R>::on_window_event (line 2017) ... ok
test crates\tauri\src\app.rs - app::Builder<R>::on_tray_icon_event (line 1981) ... ok
test crates\tauri\src\app.rs - app::Builder<R>::register_asynchronous_uri_scheme_protocol (line 2132) ... ok
test crates\tauri\src\app.rs - app::Builder<R>::on_menu_event (line 1958) ... ok
test crates\tauri\src\app.rs - app::Builder<R>::register_uri_scheme_protocol (line 2071) ... ok
test crates\tauri\src\ipc\authority.rs - ipc::authority::CommandScope<T>::matches (line 553) ... ok
test crates\tauri\src\app.rs - app::Builder<R>::menu (line 1928) ... ok
test crates\tauri\src\lib.rs - Emitter::emit (line 937) ... ok
test crates\tauri\src\lib.rs - Emitter::emit_filter (line 1004) ... ok
test crates\tauri\src\ipc\authority.rs - ipc::authority::CommandScope<T>::matches (line 565) ... ok
test crates\tauri\src\lib.rs - Emitter::emit_to (line 962) ... ok
test crates\tauri\src\ipc\authority.rs - ipc::authority::ScopeObjectMatch (line 697) ... ok
test crates\tauri\src\ipc\channel.rs - ipc::channel::JavaScriptChannelId (line 103) ... ok
test crates\tauri\src\lib.rs - Manager::manage (line 618) - compile ... ok
test crates\tauri\src\async_runtime.rs - async_runtime::set (line 228) ... ok
test crates\tauri\src\lib.rs - Manager::manage (line 653) - compile ... ok
test crates\tauri\src\menu\builders\menu.rs - menu::builders::menu::MenuBuilder (line 15) - compile ... ok
test crates\tauri\src\app.rs - app::Builder<R>::plugin (line 1784) ... ok
test crates\tauri\src\path\mod.rs - path::PathResolver<R>::parse (line 277) - compile ... ok
test crates\tauri\src\path\mod.rs - path::PathResolver<R>::resolve (line 260) - compile ... ok
test crates\tauri\src\lib.rs - Listener::listen (line 828) ... ok
test crates\tauri\src\lib.rs - Listener::unlisten (line 864) ... ok
test crates\tauri\src\menu\builders\menu.rs - menu::builders::menu::SubmenuBuilder (line 86) - compile ... ok
test crates\tauri\src\lib.rs - Listener::listen_any (line 890) ... ok
test crates\tauri\src\plugin.rs - plugin::Builder (line 213) ... ok
test crates\tauri\src\plugin.rs - plugin::Builder (line 202) ... ok
test crates\tauri\src\lib.rs - Manager::add_capability (line 777) ... ok
test crates\tauri\src\path\mod.rs - path::SafePathBuf (line 33) ... ok
test crates\tauri\src\plugin.rs - plugin::Builder<R,C>::js_init_script (line 351) ... ok
test crates\tauri\src\plugin.rs - plugin::Builder<R,C>::invoke_handler (line 301) ... ok
test crates\tauri\src\plugin.rs - plugin::Builder<R,C>::on_drop (line 574) ... ok
test crates\tauri\src\plugin.rs - plugin::Builder<R,C>::on_event (line 542) ... ok
test crates\tauri\src\plugin.rs - plugin::Builder<R,C>::on_navigation (line 445) ... ok
test crates\tauri\src\plugin.rs - plugin::Builder<R,C>::on_page_load (line 470) ... ok
test crates\tauri\src\plugin.rs - plugin::Builder<R,C>::on_webview_ready (line 518) ... ok
test crates\tauri\src\plugin.rs - plugin::Builder<R,C>::on_window_ready (line 494) ... ok
test crates\tauri\src\process.rs - process::current_binary (line 36) - compile ... ok
test crates\tauri\src\process.rs - process::restart (line 65) - compile ... ok
test crates\tauri\src\plugin.rs - plugin::Builder<R,C>::register_asynchronous_uri_scheme_protocol (line 668) ... ok
test crates\tauri\src\plugin.rs - plugin::Builder<R,C>::setup (line 411) ... ok
test crates\tauri\src\plugin.rs - plugin::Builder<R,C>::register_uri_scheme_protocol (line 612) ... ok
test crates\tauri\src\webview\webview_window.rs - webview::webview_window::WebviewWindow<R>::is_devtools_open (line 2470) - compile ... ok
test crates\tauri\src\test\mod.rs - test::mock_builder (line 156) ... ok
test crates\tauri\src\webview\webview_window.rs - webview::webview_window::WebviewWindow<R>::close_devtools (line 2437) - compile ... ok
test crates\tauri\src\webview\mod.rs - webview::Webview<R>::resolve_command_scope (line 1409) ... ok
test crates\tauri\src\webview\webview_window.rs - webview::webview_window::WebviewWindow<R>::open_devtools (line 2411) - compile ... ok
test crates\tauri\src\webview\webview_window.rs - webview::webview_window::WebviewWindow<R>::resolve_command_scope (line 1535) ... ok
test crates\tauri\src\test\mod.rs - test::get_ipc_response (line 251) ... ok
test crates\tauri\src\webview\webview_window.rs - webview::webview_window::WebviewWindow<R>::set_effects (line 1997) - compile ... ok
test crates\tauri\src\test\mod.rs - test::assert_ipc_response (line 192) ... ok
test crates\tauri\src\webview\mod.rs - webview::Webview<R>::resolve_command_scope (line 1424) ... ok
test crates\tauri\src\test\mod.rs - test (line 13) ... ok
test crates\tauri\src\webview\webview_window.rs - webview::webview_window::WebviewWindow<R>::listen (line 2572) ... ok
test crates\tauri\src\webview\webview_window.rs - webview::webview_window::WebviewWindow<R>::resolve_command_scope (line 1550) ... ok
test crates\tauri\src\webview\webview_window.rs - webview::webview_window::WebviewWindow<R>::with_webview (line 2304) - compile ... ok
test crates\tauri\src\webview\webview_window.rs - webview::webview_window::WebviewWindowBuilder<'a,R,M>::from_config (line 122) ... ok
test crates\tauri\src\webview\webview_window.rs - webview::webview_window::WebviewWindowBuilder<'a,R,M>::from_config (line 134) ... ok
test crates\tauri\src\webview\webview_window.rs - webview::webview_window::WebviewWindow<R>::unlisten (line 2619) ... ok
test crates\tauri\src\webview\webview_window.rs - webview::webview_window::WebviewWindowBuilder<'a,R,M>::on_navigation (line 248) - compile ... ok
test crates\tauri\src\webview\webview_window.rs - webview::webview_window::WebviewWindowBuilder<'a,R,M>::on_new_window (line 278) - compile ... ok
test crates\tauri\src\webview\webview_window.rs - webview::webview_window::WebviewWindowBuilder<'a,R,M>::new (line 91) ... ok
test crates\tauri\src\webview\webview_window.rs - webview::webview_window::WebviewWindowBuilder<'a,R,M>::on_page_load (line 397) - compile ... ok
test crates\tauri\src\webview\webview_window.rs - webview::webview_window::WebviewWindowBuilder<'a,R,M>::on_web_resource_request (line 207) - compile ... ok
test crates\tauri\src\webview\webview_window.rs - webview::webview_window::WebviewWindowBuilder<'_,R,M>::initialization_script (line 922) ... ok
test crates\tauri\src\webview\webview_window.rs - webview::webview_window::WebviewWindowBuilder<'a,R,M>::new (line 76) ... ok
test crates\tauri\src\webview\webview_window.rs - webview::webview_window::WebviewWindowBuilder<'a,R,M>::on_menu_event (line 166) ... ok
test crates\tauri\src\webview\webview_window.rs - webview::webview_window::WebviewWindowBuilder<'_,R,M>::initialization_script_for_all_frames (line 964) ... ok
test crates\tauri\src\webview\webview_window.rs - webview::webview_window::WebviewWindowBuilder<'a,R,M>::new (line 65) ... ok
test crates\tauri\src\webview\webview_window.rs - webview::webview_window::WebviewWindow<R>::on_menu_event (line 1587) ... ok

test result: ok. 87 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 119.15s

   Doc-tests tauri_build

running 1 test
test crates\tauri-build\src\lib.rs - WindowsAttributes::app_manifest (line 328) - compile ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.08s

   Doc-tests tauri_bundler

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

   Doc-tests tauri_cli

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

   Doc-tests tauri_codegen

running 1 test
test crates\tauri-codegen\src\vendor\blake3_reference.rs - vendor::blake3_reference (line 20) ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 4.27s

   Doc-tests tauri_macos_sign

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

   Doc-tests tauri_macros

running 7 tests
test crates\tauri-macros\src\lib.rs - do_menu_item (line 107) ... ignored
test crates\tauri-macros\src\lib.rs - do_menu_item (line 111) ... ignored
test crates\tauri-macros\src\lib.rs - do_menu_item (line 116) ... ignored
test crates\tauri-macros\src\lib.rs - do_menu_item (line 122) ... ignored
test crates\tauri-macros\src\lib.rs - do_menu_item (line 129) ... ignored
test crates\tauri-macros\src\lib.rs - generate_handler (line 51) ... ignored
test crates\tauri-macros\src\lib.rs - include_image (line 169) ... ignored

test result: ok. 0 passed; 0 failed; 7 ignored; 0 measured; 0 filtered out; finished in 0.01s

   Doc-tests tauri_plugin

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

   Doc-tests tauri_plugin_sample

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

   Doc-tests tauri_runtime

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

   Doc-tests tauri_runtime_wry

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

   Doc-tests tauri_utils

running 2 tests
test crates\tauri-utils\src\config.rs - config::AppConfig::windows (line 3055) ... FAILED
test crates\tauri-utils\src\config.rs - config::WindowConfig::create (line 1928) ... FAILED

failures:

---- crates\tauri-utils\src\config.rs - config::AppConfig::windows (line 3055) stdout ----
Test executable failed (exit code: 0xc0000139).

---- crates\tauri-utils\src\config.rs - config::WindowConfig::create (line 1928) stdout ----
Test executable failed (exit code: 0xc0000139).


failures:
    crates\tauri-utils\src\config.rs - config::AppConfig::windows (line 3055)
    crates\tauri-utils\src\config.rs - config::WindowConfig::create (line 1928)

test result: FAILED. 0 passed; 2 failed; 0 ignored; 0 measured; 0 filtered out; finished in 10.00s

error: doctest failed, to rerun pass `-p tauri-utils --doc`

@TanNhatCMS

Copy link
Copy Markdown
Contributor Author

I created my own PR TanNhatCMS#1 to trigger tests on GitHub Actions, and everything seems fine except for some feedback from the AI ​​review, but that's beyond my ability to change in this PR.

@Legend-Master

Copy link
Copy Markdown
Contributor

Those are unrelated, just compile and generate a NSIS installer to verify it's translated would be fine

@TanNhatCMS

Copy link
Copy Markdown
Contributor Author

Those are unrelated, just compile and generate a NSIS installer to verify it's translated would be fine

I'm not sure how this is actually done in the Tauri project. In my Tauri project, I configured customLanguageFiles directly to the Vietnamese language file. After packaging the application, the NSIS installer worked and displayed Vietnamese; everything was fine.

@Legend-Master

Copy link
Copy Markdown
Contributor

To me, usually just using the API example, treat it like a normal Tauri app

https://github.com/tauri-apps/tauri/blob/dev/examples/api/README.md

@Legend-Master Legend-Master left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Works for me from manual testing, thanks!

@Legend-Master
Legend-Master merged commit be0e4bd into tauri-apps:dev Apr 29, 2026
13 checks passed
razein97 pushed a commit to razein97/tauri that referenced this pull request Apr 30, 2026
…s#15218)

* Create Vietnamese

* Add Vietnamese language support for NSIS bundler

* chore rename

* Merge branch 'dev' into patch-1

* Add Vietnamese language support for NSIS installer

* Merge branch 'dev' into patch-1

* Add Vietnamese language support

Added support for the Vietnamese language in the project.

* Update change-pr-15218.md

* Merge branch 'dev' into patch-1

* Added Vietnamese translations for the NSIS installer

* Merge branch 'dev' into patch-1
razein97 pushed a commit to razein97/tauri that referenced this pull request Apr 30, 2026
…s#15218)

* Create Vietnamese

* Add Vietnamese language support for NSIS bundler

* chore rename

* Merge branch 'dev' into patch-1

* Add Vietnamese language support for NSIS installer

* Merge branch 'dev' into patch-1

* Add Vietnamese language support

Added support for the Vietnamese language in the project.

* Update change-pr-15218.md

* Merge branch 'dev' into patch-1

* Added Vietnamese translations for the NSIS installer

* Merge branch 'dev' into patch-1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants