diff --git a/core/src/main.rs b/core/src/main.rs index fc6e430..306e9ca 100644 --- a/core/src/main.rs +++ b/core/src/main.rs @@ -64,7 +64,18 @@ fn main() -> Result<(), std::io::Error> { fn init() -> Result { let locale = { - let sys_locale = get_locale().unwrap_or("en-US".to_string()); + let sys_locale = { + // use terminal locale if available + if let Ok(locale) = env::var("LANG") { + locale + } else if let Ok(locale) = env::var("LC_ALL") { + locale + } else if let Ok(locale) = env::var("LC_MESSAGES") { + locale + } else { + get_locale().unwrap_or("en-US".to_string()) + } + }; if sys_locale.len() < 2 { "en-US".to_string() } else { diff --git a/module-request-ai/src/main.rs b/module-request-ai/src/main.rs index cef1a42..c321eba 100644 --- a/module-request-ai/src/main.rs +++ b/module-request-ai/src/main.rs @@ -14,6 +14,8 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . +use std::env; + use crate::requests::ai_suggestion; use sys_locale::get_locale; mod buffer; @@ -36,7 +38,18 @@ async fn main() -> Result<(), std::io::Error> { } let locale = { - let sys_locale = get_locale().unwrap_or("en-US".to_string()); + let sys_locale = { + // use terminal locale if available + if let Ok(locale) = env::var("LANG") { + locale + } else if let Ok(locale) = env::var("LC_ALL") { + locale + } else if let Ok(locale) = env::var("LC_MESSAGES") { + locale + } else { + get_locale().unwrap_or("en-US".to_string()) + } + }; if sys_locale.len() < 2 { "en-US".to_string() } else { @@ -60,7 +73,7 @@ async fn main() -> Result<(), std::io::Error> { if command.split_whitespace().count() == 1 { return Ok(()); } - ai_suggestion(&command, &error).await; + ai_suggestion(&command, &error, &locale).await; Ok(()) } diff --git a/module-request-ai/src/requests.rs b/module-request-ai/src/requests.rs index a9d5d55..5f3ff52 100644 --- a/module-request-ai/src/requests.rs +++ b/module-request-ai/src/requests.rs @@ -1,8 +1,6 @@ use askama::Template; use std::collections::HashMap; -use sys_locale::get_locale; - use futures_util::StreamExt; use serde::{Deserialize, Serialize}; @@ -56,7 +54,7 @@ struct AiPrompt<'a> { set_locale: &'a str, } -pub async fn ai_suggestion(last_command: &str, error_msg: &str) { +pub async fn ai_suggestion(last_command: &str, error_msg: &str, locale: &str) { let conf = match Conf::new() { Some(conf) => conf, None => { @@ -76,7 +74,7 @@ pub async fn ai_suggestion(last_command: &str, error_msg: &str) { let user_locale = { let locale = std::env::var("_PR_AI_LOCALE") - .unwrap_or_else(|_| get_locale().unwrap_or("en-us".to_string())); + .unwrap_or_else(|_| locale.to_string()); if locale.len() < 2 { "en-US".to_string() } else {