Export to json
This commit is contained in:
parent
52a0d6e3f2
commit
44ee6ec8a5
5
Cargo.lock
generated
5
Cargo.lock
generated
@ -2418,6 +2418,7 @@ dependencies = [
|
||||
"clap",
|
||||
"icu_locid",
|
||||
"serde 1.0.218",
|
||||
"serde_json",
|
||||
"tempfile",
|
||||
"thiserror 2.0.11",
|
||||
"toml",
|
||||
@ -3915,9 +3916,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "serde_json"
|
||||
version = "1.0.136"
|
||||
version = "1.0.139"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "336a0c23cf42a38d9eaa7cd22c7040d04e1228a19a933890805ffd00a16437d2"
|
||||
checksum = "44f86c3acccc9c65b153fe1b85a3be07fe5515274ec9f0653b4a0875731c72a6"
|
||||
dependencies = [
|
||||
"itoa",
|
||||
"memchr",
|
||||
|
@ -8,6 +8,7 @@ chrono = { version = "0.4.39", features = ["serde"] }
|
||||
clap = { version = "4.5.30", features = ["derive"] }
|
||||
icu_locid = { version = "1.5.0", features = ["serde"] }
|
||||
serde = { version = "1.0.218", features = ["derive"] }
|
||||
serde_json = "1.0.139"
|
||||
tempfile = "3.17.1"
|
||||
thiserror = "2.0.11"
|
||||
toml = "0.8.20"
|
||||
|
1
l10n-db/output.json
Normal file
1
l10n-db/output.json
Normal file
@ -0,0 +1 @@
|
||||
{"SaveSettings":"Save Settings","Welcome":"Welcome to FitnessTrax"}
|
@ -7,7 +7,7 @@ use std::{
|
||||
use clap::{Parser, Subcommand};
|
||||
|
||||
use icu_locid::{langid, LanguageIdentifier};
|
||||
use l10n_db::{self, read_file, Bundle, Editor, ReadError};
|
||||
use l10n_db::{self, export_file, read_file, Bundle, Editor, ReadError};
|
||||
use serde::Deserialize;
|
||||
|
||||
#[derive(Parser)]
|
||||
@ -35,7 +35,7 @@ enum Commands {
|
||||
#[arg(short, long)]
|
||||
format: String,
|
||||
#[arg(short, long)]
|
||||
locale: String,
|
||||
locale: Option<String>,
|
||||
},
|
||||
}
|
||||
|
||||
@ -74,7 +74,10 @@ fn main() {
|
||||
println!("{}", key);
|
||||
}
|
||||
}
|
||||
Some(Commands::Export { .. }) => todo!(),
|
||||
Some(Commands::Export { format, locale }) => {
|
||||
let locale = locale.as_ref().map(|l| l.clone().parse::<LanguageIdentifier>().unwrap()).unwrap_or(langid!("en"));
|
||||
export_file(&bundle, locale, &PathBuf::from("output.json")).unwrap();
|
||||
},
|
||||
None => {}
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
use std::{collections::HashMap, fs::File, io::Write, path::PathBuf};
|
||||
|
||||
use crate::Message;
|
||||
use crate::{Message, WriteError};
|
||||
|
||||
pub struct Bundle {
|
||||
path: PathBuf,
|
||||
|
22
l10n-db/src/js_format.rs
Normal file
22
l10n-db/src/js_format.rs
Normal file
@ -0,0 +1,22 @@
|
||||
use std::{collections::BTreeMap, fs::File, io::Write, path::Path};
|
||||
|
||||
use icu_locid::LanguageIdentifier;
|
||||
|
||||
use crate::{Bundle, WriteError};
|
||||
|
||||
pub fn export_file(bundle: &Bundle, locale: LanguageIdentifier, path: &Path) -> Result<(), WriteError> {
|
||||
let mut file = File::create(path).unwrap();
|
||||
export_fh(bundle, locale, &mut file)
|
||||
}
|
||||
|
||||
pub fn export_fh(bundle: &Bundle, locale: LanguageIdentifier, fh: &mut File) -> Result<(), WriteError> {
|
||||
let messages = bundle.message_iter().map(|(key, message)| {
|
||||
let content = message.variant(&locale).unwrap().content().to_owned();
|
||||
(key.to_owned(), content)
|
||||
}).collect::<Vec<(String, String)>>();
|
||||
|
||||
let messages: BTreeMap<String, String> = messages.into_iter().collect();
|
||||
fh.write(serde_json::to_string(&messages).unwrap().as_bytes()).unwrap();
|
||||
|
||||
Ok(())
|
||||
}
|
@ -4,6 +4,9 @@ pub use bundle::Bundle;
|
||||
mod editor;
|
||||
pub use editor::Editor;
|
||||
|
||||
mod js_format;
|
||||
pub use js_format::{export_file, export_fh};
|
||||
|
||||
mod types;
|
||||
pub use types::{Message, Variant};
|
||||
|
||||
|
@ -36,6 +36,10 @@ impl Message {
|
||||
&self.description
|
||||
}
|
||||
|
||||
pub fn variant(&self, locale: &LanguageIdentifier) -> Option<&Variant> {
|
||||
self.variants.get(locale)
|
||||
}
|
||||
|
||||
pub fn variant_mut(&mut self, locale: LanguageIdentifier) -> &mut Variant {
|
||||
self.variants.entry(locale.clone()).or_insert(Variant {
|
||||
locale,
|
||||
|
@ -29,3 +29,9 @@ pub fn read_fh(file: &File) -> Result<Vec<u8>, ReadError> {
|
||||
reader.read_to_end(&mut content).map_err(|err| ReadError::Unhandled(err.kind()))?;
|
||||
Ok(content)
|
||||
}
|
||||
|
||||
#[derive(Debug, Error)]
|
||||
pub enum WriteError {
|
||||
#[error("unhandled write error")]
|
||||
Unhandled(ErrorKind),
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user