diff --git a/Cargo.lock b/Cargo.lock index 23b0f5f5..a5eef68e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4895,6 +4895,16 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "sys-locale" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea0b9eefabb91675082b41eb94c3ecd91af7656caee3fb4961a07c0ec8c7ca6f" +dependencies = [ + "libc", + "windows-sys 0.45.0", +] + [[package]] name = "system-deps" version = "6.0.4" @@ -5271,6 +5281,7 @@ dependencies = [ "os_info", "serde", "serde_json", + "sys-locale", "tauri", "thiserror", ] diff --git a/plugins/os/Cargo.toml b/plugins/os/Cargo.toml index 3dfc669c..5db78b58 100644 --- a/plugins/os/Cargo.toml +++ b/plugins/os/Cargo.toml @@ -12,3 +12,4 @@ tauri = { workspace = true } log = { workspace = true } thiserror = { workspace = true } os_info = "3" +sys-locale = "0.3" diff --git a/plugins/os/guest-js/index.ts b/plugins/os/guest-js/index.ts index 9bac01cc..b35813c9 100644 --- a/plugins/os/guest-js/index.ts +++ b/plugins/os/guest-js/index.ts @@ -127,5 +127,22 @@ async function tempdir(): Promise { return window.__TAURI_INVOKE__("plugin:os|tempdir"); } -export { EOL, platform, version, type, arch, tempdir }; +/** + * Returns a String with a `BCP-47` language tag inside. If the locale couldn’t be obtained, `null` is returned instead. + * @example + * ```typescript + * import { locale } from '@tauri-apps/plugin-os'; + * const locale = await locale(); + * if (locale) { + * // use the locale string here + * } + * ``` + * + * @since 2.0.0 + */ +async function locale(): Promise { + return window.__TAURI_INVOKE__("plugin:os|locale"); +} + +export { EOL, platform, version, type, arch, tempdir, locale }; export type { Platform, OsType, Arch }; diff --git a/plugins/os/src/api-iife.js b/plugins/os/src/api-iife.js index 8223ce89..3e754051 100644 --- a/plugins/os/src/api-iife.js +++ b/plugins/os/src/api-iife.js @@ -1 +1 @@ -if("__TAURI__"in window){var __TAURI_OS__=function(n){"use strict";const _=navigator.appVersion.includes("Win")?"\r\n":"\n";return n.EOL=_,n.arch=async function(){return window.__TAURI_INVOKE__("plugin:os|arch")},n.platform=async function(){return window.__TAURI_INVOKE__("plugin:os|platform")},n.tempdir=async function(){return window.__TAURI_INVOKE__("plugin:os|tempdir")},n.type=async function(){return window.__TAURI_INVOKE__("plugin:os|kind")},n.version=async function(){return window.__TAURI_INVOKE__("plugin:os|version")},n}({});Object.defineProperty(window.__TAURI__,"os",{value:__TAURI_OS__})} +if("__TAURI__"in window){var __TAURI_OS__=function(n){"use strict";const _=navigator.appVersion.includes("Win")?"\r\n":"\n";return n.EOL=_,n.arch=async function(){return window.__TAURI_INVOKE__("plugin:os|arch")},n.locale=async function(){return window.__TAURI_INVOKE__("plugin:os|locale")},n.platform=async function(){return window.__TAURI_INVOKE__("plugin:os|platform")},n.tempdir=async function(){return window.__TAURI_INVOKE__("plugin:os|tempdir")},n.type=async function(){return window.__TAURI_INVOKE__("plugin:os|kind")},n.version=async function(){return window.__TAURI_INVOKE__("plugin:os|version")},n}({});Object.defineProperty(window.__TAURI__,"os",{value:__TAURI_OS__})} diff --git a/plugins/os/src/commands.rs b/plugins/os/src/commands.rs index 314d10df..668fa82a 100644 --- a/plugins/os/src/commands.rs +++ b/plugins/os/src/commands.rs @@ -28,3 +28,8 @@ pub fn arch() -> &'static str { pub fn tempdir() -> PathBuf { crate::tempdir() } + +#[tauri::command] +pub fn locale() -> Option { + crate::locale() +} diff --git a/plugins/os/src/lib.rs b/plugins/os/src/lib.rs index 488107a4..4060c679 100644 --- a/plugins/os/src/lib.rs +++ b/plugins/os/src/lib.rs @@ -68,6 +68,11 @@ pub fn tempdir() -> PathBuf { std::env::temp_dir() } +/// Returns the locale with the `BCP-47` language tag. If the locale couldn’t be obtained, `None` is returned instead. +pub fn locale() -> Option { + sys_locale::get_locale() +} + pub fn init() -> TauriPlugin { Builder::new("os") .js_init_script(include_str!("api-iife.js").to_string()) @@ -76,7 +81,8 @@ pub fn init() -> TauriPlugin { commands::version, commands::kind, commands::arch, - commands::tempdir + commands::tempdir, + commands::locale ]) .build() }