From a8a61cf03f8ae9a623ab2129b056bac625b049a6 Mon Sep 17 00:00:00 2001 From: Savanni D'Gerinel Date: Mon, 24 Feb 2025 09:44:44 -0500 Subject: [PATCH] Fill out the xliff exporter --- l10n-db/i18n/TimeDistance.toml | 7 +++++ l10n-db/src/formats/xliff.rs | 47 +++++++++++++++++++++++++--------- 2 files changed, 42 insertions(+), 12 deletions(-) create mode 100644 l10n-db/i18n/TimeDistance.toml diff --git a/l10n-db/i18n/TimeDistance.toml b/l10n-db/i18n/TimeDistance.toml new file mode 100644 index 0000000..f13ee13 --- /dev/null +++ b/l10n-db/i18n/TimeDistance.toml @@ -0,0 +1,7 @@ +key = "TimeDistance" +description = "A summary of a workout or many workouts that involve a time and a distance" + +[variants.en] +locale = "en" +content = "{distance} of {activity} in {hours, plural, =1 {{hours} hour}, other {{hours} hours} and {minutes, plural, =1 {{minutes} minute} other {{minutes} minutes}}" +modified = "2025-02-24T14:09:17.361641899Z" diff --git a/l10n-db/src/formats/xliff.rs b/l10n-db/src/formats/xliff.rs index 9563e52..075971b 100644 --- a/l10n-db/src/formats/xliff.rs +++ b/l10n-db/src/formats/xliff.rs @@ -19,16 +19,24 @@ pub fn export_fh( locale: LanguageIdentifier, fh: &mut File, ) -> Result<(), WriteError> { - let output = io::stdout(); let mut writer = EmitterConfig::new() .perform_indent(true) - .create_writer(output); + .create_writer(fh); - writer.write(XmlEvent::start_element("xliff")).unwrap(); - writer.write(XmlEvent::start_element("file")).unwrap(); + writer + .write( + XmlEvent::start_element("xliff") + .attr("xmlns", "urn:oasis:names:tc:xliff:document:2.0") + .attr("version", "2.0") + .attr("srcLang", &format!("{}", locale)), + ) + .unwrap(); + writer + .write(XmlEvent::start_element("file").attr("id", "main")) + .unwrap(); for (key, message) in bundle.message_iter() { - write_message(&mut writer, message, &locale); + write_message(&mut writer, key, message, &locale); } writer.write(XmlEvent::end_element()).unwrap(); @@ -36,13 +44,28 @@ pub fn export_fh( Ok(()) } -fn write_message(writer: &mut EventWriter, message: &Message, locale: &LanguageIdentifier) -where +fn write_message( + writer: &mut EventWriter, + key: &str, + message: &Message, + locale: &LanguageIdentifier, +) where T: std::io::Write, { - writer.write(XmlEvent::start_element("unit")).unwrap(); - writer.write(XmlEvent::start_element("segment")).unwrap(); - writer.write(XmlEvent::characters(message.variant(locale).unwrap().content())).unwrap(); - writer.write(XmlEvent::end_element()).unwrap(); - writer.write(XmlEvent::end_element()).unwrap(); + [ + XmlEvent::start_element("unit").attr("id", key).into(), + XmlEvent::start_element("notes").into(), + XmlEvent::start_element("note").into(), + XmlEvent::characters(message.description()).into(), + XmlEvent::end_element().into(), + XmlEvent::end_element().into(), + XmlEvent::start_element("segment").into(), + XmlEvent::start_element("source").into(), + XmlEvent::characters(message.variant(locale).unwrap().content()).into(), + XmlEvent::end_element().into(), + XmlEvent::end_element().into(), + XmlEvent::end_element().into(), + ] + .into_iter() + .for_each(|elem: XmlEvent| writer.write(elem).unwrap()); }