advotracker: implement get_lang

* readin language environment and preset the strings

Signed-off-by: Ralf Zerres <ralf.zerres@networkx.de>
This commit is contained in:
2020-09-26 21:12:54 +02:00
parent 0c16237c6c
commit f87ab8ce08
3 changed files with 51 additions and 24 deletions

View File

@@ -5,7 +5,10 @@
* SPDX-License-Identifier: (0BSD or MIT)
*/
use dotenv::dotenv;
use serde::Deserialize;
use std::env;
use tracing::{info, trace};
use orbtk::prelude::*;
@@ -23,8 +26,25 @@ struct Environment {
rust_log: String,
}
/// Provides generic methods to handle states of datatypes (e.g. used in `PolicyCheckState`).
/// Provides generic methods to handle states of datatypes.
pub trait GlobalState {
/// Get the active language environment.
fn get_lang() -> String {
// get system environment
let mut lang = env::var("LANG").unwrap_or("C".to_string());
// testing environment: read from .env file
dotenv().ok();
match envy::from_env::<Environment>() {
Ok(environment) => {
if environment.test_lang != lang { lang = environment.test_lang; }
},
Err(e) => { info!(target: "advotracker", "{}", e) }
}
trace!(target: "advotracker", lang = ?lang);
lang
}
// /// Navigates to the given entity.
// fn navigate(&self, to: Entity, ctx: &mut Context<'_>) {
// if let Some(old_focused_element) = ctx.window().get::<Global>("global").focused_widget {
@@ -53,3 +73,9 @@ pub trait GlobalState {
.unwrap();
}
}
// #[cfg(test)]
// mod tests {
// #[test]
// assert_eq!(2 + 2, 4);
// }

View File

@@ -1,4 +1,3 @@
use dotenv::dotenv;
use locales::t;
use orbtk::{
prelude::*,
@@ -14,7 +13,7 @@ use orbtk::theme::DARK_THEME_RON;
use orbtk::theme::LIGHT_THEME_RON;
use serde::Deserialize;
use std::{env, process};
use std::process;
use std::collections::HashMap;
use std::time::{Duration, SystemTime};
use tracing::{error, info, trace};
@@ -134,23 +133,6 @@ impl PolicyCheckState {
TextBox::text_set(&mut ctx.widget(), String::from(""));
}
/// Get the active language environment.
pub fn get_lang() -> String {
// get system environment
let mut lang = env::var("LANG").unwrap_or("C".to_string());
// testing environment: read from .env file
dotenv().ok();
match envy::from_env::<Environment>() {
Ok(environment) => {
if environment.test_lang != lang { lang = environment.test_lang; }
},
Err(e) => { info!(target: "advotracker", "{}", e) }
}
trace!(target: "advotracker", lang = ?lang);
lang
}
/// Import policy numbers into hashmap
fn import_data(&mut self, ctx: &mut Context<'_>)
-> Result<(), Box<dyn std::error::Error>> {

View File

@@ -12,18 +12,19 @@
//extern crate lazy_static;
//use chrono::{Local, DateTime};
use dotenv::dotenv;
use locales::t;
use serde::Deserialize;
//use std::env;
use std::env;
//use std::process;
use tracing::{trace, Level};
use tracing::{info, trace, Level};
use orbtk::prelude::*;
// The Main view
use advotracker::{
widgets::main_view,
callbacks::policycheck_state::PolicyCheckState,
widgets::main_view,
};
mod parse_args;
@@ -33,6 +34,7 @@ mod parse_args;
/// this is primarily used in testing scenarios (eg. debugging)
#[derive(Debug, Deserialize)]
struct Environment {
lang: String,
test_lang: String,
rust_log: String,
}
@@ -40,6 +42,23 @@ struct Environment {
// German localization file.
static ADVOTRACKER_DE_DE: &str = include_str!("../resources/advotracker/advotracker_de_DE.ron");
/// Get the active language environment.
fn get_lang() -> String {
// get system environment
let mut lang = env::var("LANG").unwrap_or("C".to_string());
// testing environment: read from .env file
dotenv().ok();
match envy::from_env::<Environment>() {
Ok(environment) => {
if environment.test_lang != lang { lang = environment.test_lang; }
},
Err(e) => { info!(target: "advotracker", "{}", e) }
}
trace!(target: "advotracker", lang = ?lang);
lang
}
fn main() -> Result<(), Box<dyn std::error::Error>> {
use parse_args::parse_args;
use tracing_subscriber::fmt;
@@ -69,7 +88,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
tracing::subscriber::with_default(subscriber, || {
// get system environment
let lang = PolicyCheckState::get_lang();
let lang = get_lang();
let mut state = t!("state.started", lang);
let mut res = t!("parse.environment", lang);