translations #1
This commit is contained in:
		
							parent
							
								
									5fa660037e
								
							
						
					
					
						commit
						07c02052fd
					
				
							
								
								
									
										198
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										198
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							@ -222,6 +222,12 @@ dependencies = [
 | 
			
		||||
 "phf_codegen",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "chunky-vec"
 | 
			
		||||
version = "0.1.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "bb7bdea464ae038f09197b82430b921c53619fc8d2bcaf7b151013b3ca008017"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "cookie"
 | 
			
		||||
version = "0.18.0"
 | 
			
		||||
@ -369,12 +375,32 @@ dependencies = [
 | 
			
		||||
 "crypto-common",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "displaydoc"
 | 
			
		||||
version = "0.2.4"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "syn",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "either"
 | 
			
		||||
version = "1.9.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "elsa"
 | 
			
		||||
version = "1.9.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "714f766f3556b44e7e4776ad133fcc3445a489517c25c704ace411bb14790194"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "stable_deref_trait",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "encoding_rs"
 | 
			
		||||
version = "0.8.33"
 | 
			
		||||
@ -441,6 +467,69 @@ dependencies = [
 | 
			
		||||
 "windows-sys",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "fluent-bundle"
 | 
			
		||||
version = "0.15.2"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "e242c601dec9711505f6d5bbff5bedd4b61b2469f2e8bb8e57ee7c9747a87ffd"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "fluent-langneg",
 | 
			
		||||
 "fluent-syntax",
 | 
			
		||||
 "intl-memoizer",
 | 
			
		||||
 "intl_pluralrules",
 | 
			
		||||
 "rustc-hash",
 | 
			
		||||
 "self_cell 0.10.3",
 | 
			
		||||
 "smallvec",
 | 
			
		||||
 "unic-langid",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "fluent-fallback"
 | 
			
		||||
version = "0.7.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "08fdcccdeb6c01cb085f2bb3420506e6c67f025cee5db047529838c673a7d82b"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "async-trait",
 | 
			
		||||
 "chunky-vec",
 | 
			
		||||
 "fluent-bundle",
 | 
			
		||||
 "futures",
 | 
			
		||||
 "once_cell",
 | 
			
		||||
 "rustc-hash",
 | 
			
		||||
 "unic-langid",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "fluent-langneg"
 | 
			
		||||
version = "0.13.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "2c4ad0989667548f06ccd0e306ed56b61bd4d35458d54df5ec7587c0e8ed5e94"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "unic-langid",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "fluent-resmgr"
 | 
			
		||||
version = "0.0.6"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "f7144b87452708dd3217fdb41aefb74cf261fde09cd055ee2e1f4634b5beb380"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "elsa",
 | 
			
		||||
 "fluent-bundle",
 | 
			
		||||
 "fluent-fallback",
 | 
			
		||||
 "futures",
 | 
			
		||||
 "rustc-hash",
 | 
			
		||||
 "unic-langid",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "fluent-syntax"
 | 
			
		||||
version = "0.11.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "c0abed97648395c902868fee9026de96483933faa54ea3b40d652f7dfe61ca78"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "thiserror",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "fnv"
 | 
			
		||||
version = "1.0.7"
 | 
			
		||||
@ -488,6 +577,7 @@ checksum = "da0290714b38af9b4a7b094b8a37086d1b4e61f2df9122c3cad2577669145335"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "futures-channel",
 | 
			
		||||
 "futures-core",
 | 
			
		||||
 "futures-executor",
 | 
			
		||||
 "futures-io",
 | 
			
		||||
 "futures-sink",
 | 
			
		||||
 "futures-task",
 | 
			
		||||
@ -510,12 +600,34 @@ version = "0.3.29"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "futures-executor"
 | 
			
		||||
version = "0.3.29"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "0f4fb8693db0cf099eadcca0efe2a5a22e4550f98ed16aba6c48700da29597bc"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "futures-core",
 | 
			
		||||
 "futures-task",
 | 
			
		||||
 "futures-util",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "futures-io"
 | 
			
		||||
version = "0.3.29"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "futures-macro"
 | 
			
		||||
version = "0.3.29"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "syn",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "futures-sink"
 | 
			
		||||
version = "0.3.29"
 | 
			
		||||
@ -537,6 +649,7 @@ dependencies = [
 | 
			
		||||
 "futures-channel",
 | 
			
		||||
 "futures-core",
 | 
			
		||||
 "futures-io",
 | 
			
		||||
 "futures-macro",
 | 
			
		||||
 "futures-sink",
 | 
			
		||||
 "futures-task",
 | 
			
		||||
 "memchr",
 | 
			
		||||
@ -818,6 +931,25 @@ dependencies = [
 | 
			
		||||
 "libc",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "intl-memoizer"
 | 
			
		||||
version = "0.5.1"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "c310433e4a310918d6ed9243542a6b83ec1183df95dff8f23f87bb88a264a66f"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "type-map",
 | 
			
		||||
 "unic-langid",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "intl_pluralrules"
 | 
			
		||||
version = "7.0.2"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "078ea7b7c29a2b4df841a7f6ac8775ff6074020c6776d48491ce2268e068f972"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "unic-langid",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "ipnet"
 | 
			
		||||
version = "2.9.0"
 | 
			
		||||
@ -1152,6 +1284,8 @@ version = "0.1.0"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "chrono",
 | 
			
		||||
 "fern",
 | 
			
		||||
 "fluent-bundle",
 | 
			
		||||
 "fluent-resmgr",
 | 
			
		||||
 "log",
 | 
			
		||||
 "ovlach_data",
 | 
			
		||||
 "reqwest",
 | 
			
		||||
@ -1161,6 +1295,7 @@ dependencies = [
 | 
			
		||||
 "serde_yaml",
 | 
			
		||||
 "sha256",
 | 
			
		||||
 "tokio",
 | 
			
		||||
 "unic-langid",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
@ -1619,6 +1754,12 @@ version = "0.1.23"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "rustc-hash"
 | 
			
		||||
version = "1.1.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "rustix"
 | 
			
		||||
version = "0.38.25"
 | 
			
		||||
@ -1697,6 +1838,21 @@ dependencies = [
 | 
			
		||||
 "libc",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "self_cell"
 | 
			
		||||
version = "0.10.3"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "e14e4d63b804dc0c7ec4a1e52bcb63f02c7ac94476755aa579edac21e01f915d"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "self_cell 1.0.2",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "self_cell"
 | 
			
		||||
version = "1.0.2"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "e388332cd64eb80cd595a00941baf513caffae8dce9cfd0467fc9c66397dade6"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "serde"
 | 
			
		||||
version = "1.0.193"
 | 
			
		||||
@ -1870,6 +2026,12 @@ dependencies = [
 | 
			
		||||
 "memchr",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "stable_deref_trait"
 | 
			
		||||
version = "1.2.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "state"
 | 
			
		||||
version = "0.6.0"
 | 
			
		||||
@ -2005,6 +2167,15 @@ dependencies = [
 | 
			
		||||
 "time-core",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "tinystr"
 | 
			
		||||
version = "0.7.5"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "83c02bf3c538ab32ba913408224323915f4ef9a6d61c0e85d493f355921c0ece"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "displaydoc",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "tinyvec"
 | 
			
		||||
version = "1.6.0"
 | 
			
		||||
@ -2192,6 +2363,15 @@ version = "0.2.4"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "type-map"
 | 
			
		||||
version = "0.4.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "b6d3364c5e96cb2ad1603037ab253ddd34d7fb72a58bdddf4b7350760fc69a46"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "rustc-hash",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "typenum"
 | 
			
		||||
version = "1.17.0"
 | 
			
		||||
@ -2244,6 +2424,24 @@ version = "0.9.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "unic-langid"
 | 
			
		||||
version = "0.9.1"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "398f9ad7239db44fd0f80fe068d12ff22d78354080332a5077dc6f52f14dcf2f"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "unic-langid-impl",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "unic-langid-impl"
 | 
			
		||||
version = "0.9.1"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "e35bfd2f2b8796545b55d7d3fd3e89a0613f68a0d1c8bc28cb7ff96b411a35ff"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "tinystr",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "unic-segment"
 | 
			
		||||
version = "0.9.0"
 | 
			
		||||
 | 
			
		||||
@ -17,3 +17,6 @@ tokio = { version = "1", features = ["full"] }
 | 
			
		||||
ovlach_data = { git = "https://glpat-Ju_qUN9Yh8qa5rEnd6T7:glpat-Ju_qUN9Yh8qa5rEnd6T7@gitlab.nanobyte.cz/ondrej/ov-site-api-data.git", branch = "add_missing_fields"}
 | 
			
		||||
chrono = "0.4.31"
 | 
			
		||||
sha256 = "1.4.0"
 | 
			
		||||
fluent-bundle = "0.15.2"
 | 
			
		||||
fluent-resmgr = "0.0.6"
 | 
			
		||||
unic-langid = "0.9.1"
 | 
			
		||||
							
								
								
									
										17
									
								
								resources/cs-CZ/ovlach_frontend
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								resources/cs-CZ/ovlach_frontend
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,17 @@
 | 
			
		||||
devops-enginner-web-developer = DevOPS engineer/Backend web developer(TODO do API)
 | 
			
		||||
download-cv = Stáhnout životopis
 | 
			
		||||
hire-me = Kontakt
 | 
			
		||||
about-me = O mě
 | 
			
		||||
professional-skills = Jazyky a technologie
 | 
			
		||||
work-experience = Zaměstnání
 | 
			
		||||
contact = Kontakt
 | 
			
		||||
bio = Základní udaje
 | 
			
		||||
education = Vzdělání
 | 
			
		||||
title-about = O mě
 | 
			
		||||
title-skills = Technologie
 | 
			
		||||
title-experience = Zaměstnání
 | 
			
		||||
title-education = Vzdělání
 | 
			
		||||
title-contact = Kontakt
 | 
			
		||||
age = Věk
 | 
			
		||||
email = E-mail
 | 
			
		||||
phone = Telefon
 | 
			
		||||
							
								
								
									
										17
									
								
								resources/en-US/ovlach_frontend
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								resources/en-US/ovlach_frontend
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,17 @@
 | 
			
		||||
devops-enginner-web-developer = DevOPS engineer/Backend web developer
 | 
			
		||||
download-cv = Download CV
 | 
			
		||||
hire-me = Hire me 
 | 
			
		||||
about-me = About me
 | 
			
		||||
professional-skills = Professional Skills
 | 
			
		||||
education = Education
 | 
			
		||||
work-experience = Work experience
 | 
			
		||||
contact = Contact
 | 
			
		||||
bio = Bio
 | 
			
		||||
title-about = About
 | 
			
		||||
title-skills = Skills
 | 
			
		||||
title-experience = Experience
 | 
			
		||||
title-education = Education
 | 
			
		||||
title-contact = Contact
 | 
			
		||||
age = Age
 | 
			
		||||
email = Email
 | 
			
		||||
phone = Phone
 | 
			
		||||
@ -22,12 +22,13 @@ pub struct CVBackendConfig {
 | 
			
		||||
    cv_backend_path: String,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
pub fn rocket_builder() -> Rocket<Build> {  
 | 
			
		||||
    let rocket =  rocket::build();
 | 
			
		||||
    //let figment = rocket.figment();
 | 
			
		||||
      // extract the entire config any `Deserialize` value
 | 
			
		||||
    //let config: PresentationConfig = figment.extract().expect("config");
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    rocket.attach(
 | 
			
		||||
        Template::try_custom(|engines| {
 | 
			
		||||
            engines.tera.register_filter("static", static_filter);
 | 
			
		||||
 | 
			
		||||
@ -11,7 +11,7 @@ struct RootPage {
 | 
			
		||||
    static_host: String,
 | 
			
		||||
    cv: CV,
 | 
			
		||||
    download_cv_url: String,
 | 
			
		||||
    lang: I18n,
 | 
			
		||||
    lang: String,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[get("/")]
 | 
			
		||||
@ -21,6 +21,7 @@ pub async fn index(presentation_config: &State<PresentationConfig>, cv_config: &
 | 
			
		||||
            static_host: presentation_config.static_route.clone(),
 | 
			
		||||
            cv,
 | 
			
		||||
            download_cv_url: "FIXME!".to_string(),
 | 
			
		||||
            lang: "en".to_string(),
 | 
			
		||||
        },
 | 
			
		||||
        Err(e) => {
 | 
			
		||||
            error!("Can't fetch CV data from backend {:?}", e);
 | 
			
		||||
 | 
			
		||||
@ -1,10 +1,13 @@
 | 
			
		||||
use std::collections::HashMap;
 | 
			
		||||
use std::{collections::HashMap, str::FromStr};
 | 
			
		||||
 | 
			
		||||
use chrono::{Utc, Datelike};
 | 
			
		||||
use log::error;
 | 
			
		||||
use rocket_dyn_templates::tera::{Value, Error};
 | 
			
		||||
use ovlach_data::cv::chrono::from_string;
 | 
			
		||||
use sha256::{digest, try_digest};
 | 
			
		||||
use fluent_resmgr::resource_manager::ResourceManager;
 | 
			
		||||
use tokio::sync::broadcast::error;
 | 
			
		||||
use unic_langid::LanguageIdentifier;
 | 
			
		||||
 | 
			
		||||
// TODO: tenhle modul je trochu prasacky..
 | 
			
		||||
 | 
			
		||||
@ -20,7 +23,33 @@ pub fn translate_filter(
 | 
			
		||||
    value: &Value,
 | 
			
		||||
    args: &HashMap<String, rocket_dyn_templates::tera::Value>
 | 
			
		||||
) -> Result<Value, Error> {
 | 
			
		||||
    return Ok(rocket_dyn_templates::tera::Value::String(format!("{}", value.as_str().unwrap()))); // TODO: fix-me here!
 | 
			
		||||
    let mgr = ResourceManager::new("./resources/{locale}/{res_id}".into());
 | 
			
		||||
    let locales = vec![LanguageIdentifier::from_str("en-US").unwrap()];
 | 
			
		||||
    let val_id = vec![value.as_str().unwrap().to_string()];
 | 
			
		||||
    let val = value.as_str().unwrap().to_string();
 | 
			
		||||
    
 | 
			
		||||
    let bundle = mgr.get_bundle(locales, vec!["ovlach_frontend".to_string()]);
 | 
			
		||||
 | 
			
		||||
    let mut errors = vec![];
 | 
			
		||||
 | 
			
		||||
    match bundle.get_message(&val) {
 | 
			
		||||
        Some(msg) => {
 | 
			
		||||
            match msg.value() {
 | 
			
		||||
                Some(pattern) => {
 | 
			
		||||
                    let output = bundle.format_pattern(pattern, None, &mut errors);
 | 
			
		||||
                    return Ok(rocket_dyn_templates::tera::Value::String(output.clone().to_string()))
 | 
			
		||||
                },
 | 
			
		||||
                None => {
 | 
			
		||||
                    error!("Can't translate message: {}", val);
 | 
			
		||||
                    return Ok(rocket_dyn_templates::tera::Value::String(format!("{}", val)));
 | 
			
		||||
                },
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        None =>  {
 | 
			
		||||
            error!("Can't translate message: {}", val);
 | 
			
		||||
            return Ok(rocket_dyn_templates::tera::Value::String(format!("{}", val)));
 | 
			
		||||
        },
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub fn lang_entity(
 | 
			
		||||
 | 
			
		||||
@ -32,15 +32,15 @@
 | 
			
		||||
          <div class="site-nav">
 | 
			
		||||
            <nav role="navigation">
 | 
			
		||||
              <ul class="nav justify-content-center">
 | 
			
		||||
                <li class="nav-item"><a class="nav-link" href="#about" title="About"><span class="menu-title">About</span></a>
 | 
			
		||||
                <li class="nav-item"><a class="nav-link" href="#about" title="About"><span class="menu-title">{{ "title-about" | translate(lang=lang) }}</span></a>
 | 
			
		||||
                </li>
 | 
			
		||||
                <li class="nav-item"><a class="nav-link" href="#skills" title="Skills"><span class="menu-title">Skills</span></a>
 | 
			
		||||
                <li class="nav-item"><a class="nav-link" href="#skills" title="Skills"><span class="menu-title">{{ "title-skills" | translate(lang=lang) }}</span></a>
 | 
			
		||||
                </li>
 | 
			
		||||
                <li class="nav-item"><a class="nav-link" href="#experience" title="Experience"><span class="menu-title">Experience</span></a>
 | 
			
		||||
                <li class="nav-item"><a class="nav-link" href="#experience" title="Experience"><span class="menu-title">{{ "title-experience" | translate(lang=lang) }}</span></a>
 | 
			
		||||
                </li>
 | 
			
		||||
                <li class="nav-item"><a class="nav-link" href="#education" title="Education"><span class="menu-title">Education</span></a>
 | 
			
		||||
                <li class="nav-item"><a class="nav-link" href="#education" title="Education"><span class="menu-title">{{ "title-education" | translate(lang=lang) }}</span></a>
 | 
			
		||||
                </li>
 | 
			
		||||
                <li class="nav-item"><a class="nav-link" href="#contact" title="Contact"><span class="menu-title">Contact</span></a>
 | 
			
		||||
                <li class="nav-item"><a class="nav-link" href="#contact" title="Contact"><span class="menu-title">{{ "title-contact" | translate(lang=lang) }}</span></a>
 | 
			
		||||
                </li>
 | 
			
		||||
              </ul>
 | 
			
		||||
            </nav>
 | 
			
		||||
 | 
			
		||||
@ -14,7 +14,7 @@
 | 
			
		||||
          <div class="header-bio mt-3">
 | 
			
		||||
            <div data-aos="zoom-in" data-aos-delay="0">
 | 
			
		||||
              <h2 class="h1"> {{ cv.person.name }} {{ cv.person.surname }} </h2>
 | 
			
		||||
              <p>{{ "DevOPS engineer/backend web developer" | translate(lang=lang) }}</p>
 | 
			
		||||
              <p>{{ "devops-enginner-web-developer" | translate(lang=lang) }}</p>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="header-social mb-3 d-print-none" data-aos="zoom-in" data-aos-delay="200">
 | 
			
		||||
              <nav role="navigation">
 | 
			
		||||
@ -50,8 +50,8 @@
 | 
			
		||||
              </nav>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="d-print-none">
 | 
			
		||||
              <a class="btn btn-outline-light btn-lg shadow-sm mt-1 me-3" href="{{ download_cv_url }}" data-aos="fade-right" data-aos-delay="700">{{ "Download CV" | translate(lang=lang) }}</a>
 | 
			
		||||
              <a class="btn btn-info btn-lg shadow-sm mt-1" href="#contact" data-aos="fade-left" data-aos-delay="700"> {{ "Hire me" | translate(lang=lang) }} </a></div>
 | 
			
		||||
              <a class="btn btn-outline-light btn-lg shadow-sm mt-1 me-3" href="{{ download_cv_url }}" data-aos="fade-right" data-aos-delay="700">{{ "download-cv" | translate(lang=lang) }}</a>
 | 
			
		||||
              <a class="btn btn-info btn-lg shadow-sm mt-1" href="#contact" data-aos="fade-left" data-aos-delay="700"> {{ "hire-me" | translate(lang=lang) }} </a></div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
@ -62,33 +62,33 @@
 | 
			
		||||
  <div class="about-section">
 | 
			
		||||
    <div class="row">
 | 
			
		||||
      <div class="col-md-6">
 | 
			
		||||
        <h2 class="h2 fw-light mb-4">{{ "About Me" | translate(lang=lang) }} </h2>
 | 
			
		||||
        <h2 class="h2 fw-light mb-4">{{ "about-me" | translate(lang=lang) }} </h2>
 | 
			
		||||
        <p>{{ cv.person.about | lang_entity }}</p>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="col-md-5 offset-lg-1">
 | 
			
		||||
        <div class="row mt-2">
 | 
			
		||||
          <h2 class="h2 fw-light mb-4">Bio</h2>
 | 
			
		||||
          <h2 class="h2 fw-light mb-4">{{ "bio" | translate(lang=lang) }}</h2>
 | 
			
		||||
          <div class="col-sm-5">
 | 
			
		||||
            <div class="pb-2 fw-bolder"><i class="far fa-calendar-alt pe-2 text-muted" style="width:24px;opacity:0.85;"></i> Age</div>
 | 
			
		||||
            <div class="pb-2 fw-bolder"><i class="far fa-calendar-alt pe-2 text-muted" style="width:24px;opacity:0.85;"></i> {{ "age" | translate(lang=lang) }}</div>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="col-sm-7">
 | 
			
		||||
            <div class="pb-2">{{ cv.person.birthday | calculate_age }}</div>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="col-sm-5">
 | 
			
		||||
            <div class="pb-2 fw-bolder"><i class="far fa-envelope pe-2 text-muted" style="width:24px;opacity:0.85;"></i> Email</div>
 | 
			
		||||
            <div class="pb-2 fw-bolder"><i class="far fa-envelope pe-2 text-muted" style="width:24px;opacity:0.85;"></i> {{"email" | translate(lang=lang) }}</div>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="col-sm-7">
 | 
			
		||||
            <div class="pb-2"> {{ cv.person.email }} </div>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="col-sm-5">
 | 
			
		||||
            <div class="pb-2 fw-bolder"><i class="fas fa-phone pe-2 text-muted" style="width:24px;opacity:0.85;"></i> Phone</div>
 | 
			
		||||
            <div class="pb-2 fw-bolder"><i class="fas fa-phone pe-2 text-muted" style="width:24px;opacity:0.85;"></i> {{ "phone" | translate(lang=lang) }}</div>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="col-sm-7">
 | 
			
		||||
            <div class="pb-2">+ {{cv.person.phone | insert_space_every(times=3) }}</div>
 | 
			
		||||
          </div>
 | 
			
		||||
          {% if cv.person.address %}
 | 
			
		||||
            <div class="col-sm-5">
 | 
			
		||||
              <div class="pb-2 fw-bolder"><i class="fas fa-map-marker-alt pe-2 text-muted" style="width:24px;opacity:0.85;"></i> Address</div>
 | 
			
		||||
              <div class="pb-2 fw-bolder"><i class="fas fa-map-marker-alt pe-2 text-muted" style="width:24px;opacity:0.85;"></i> {{"address" | translate(lang=lang) }}</div>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="col-sm-7">
 | 
			
		||||
              <div class="pb-2">{{ cv.person.address }} </div>
 | 
			
		||||
@ -101,7 +101,7 @@
 | 
			
		||||
</div>
 | 
			
		||||
<div class="shadow-1-strong bg-white my-5 p-5" id="skills">
 | 
			
		||||
  <div class="skills-section">
 | 
			
		||||
    <h2 class="h2 fw-light mb-4">{{ "Professional Skills" | translate(lang=lang) }}</h2>
 | 
			
		||||
    <h2 class="h2 fw-light mb-4">{{ "professional-skills" | translate(lang=lang) }}</h2>
 | 
			
		||||
    <div class="row">
 | 
			
		||||
      <div class="col-md-6">
 | 
			
		||||
        {% set arr_cnt = cv.skills | length %}
 | 
			
		||||
@ -139,7 +139,7 @@
 | 
			
		||||
 | 
			
		||||
<div class="shadow-1-strong bg-white my-5 p-5" id="experience">
 | 
			
		||||
  <div class="work-experience-section">
 | 
			
		||||
    <h2 class="h2 fw-light mb-4">{{ "Professional Skills" | translate(lang=lang) }}</h2>
 | 
			
		||||
    <h2 class="h2 fw-light mb-4">{{ "work-experience" | translate(lang=lang) }}</h2>
 | 
			
		||||
    <div class="timeline">
 | 
			
		||||
      {% for job in cv.jobs %}
 | 
			
		||||
        <div class="timeline-card timeline-card-info" data-aos="fade-in" data-aos-delay="{{ loop.index * 100 }}">
 | 
			
		||||
@ -157,7 +157,7 @@
 | 
			
		||||
</div>
 | 
			
		||||
<div class="shadow-1-strong bg-white my-5 p-5" id="education">
 | 
			
		||||
<div class="education-section">
 | 
			
		||||
  <h2 class="h2 fw-light mb-4">{{ "Education " | translate(lang=lang) }}</h2>
 | 
			
		||||
  <h2 class="h2 fw-light mb-4">{{ "education" | translate(lang=lang) }}</h2>
 | 
			
		||||
  <div class="timeline">
 | 
			
		||||
    {% for education in cv.education %}
 | 
			
		||||
    <div class="timeline-card timeline-card-success" data-aos="fade-in" data-aos-delay="0">
 | 
			
		||||
@ -184,7 +184,7 @@
 | 
			
		||||
</div>
 | 
			
		||||
<div class="shadow-1-strong bg-white my-5 p-5" id="contact">
 | 
			
		||||
  <div class="contant-section">
 | 
			
		||||
    <h2 class="h2 fw-light text mb-4">Contact</h2>
 | 
			
		||||
    <h2 class="h2 fw-light text mb-4">{{ "contact" | translate(lang=lang) }}</h2>
 | 
			
		||||
    <div class="row mb-4">
 | 
			
		||||
      <div class="col-md-5" data-aos="fade-left" data-aos-delay="200">
 | 
			
		||||
        <div class="d-print-none">
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user