From bf74ebb7dbe8fe423e5a4372aca03e0dcc077d27 Mon Sep 17 00:00:00 2001 From: Adrian Heine Date: Thu, 28 Jun 2018 12:16:02 +0200 Subject: [PATCH] Make WordpressTranslation support different locales and versions --- src/symbols/wordpress/translation.rs | 44 ++++++++++++---------------- 1 file changed, 19 insertions(+), 25 deletions(-) diff --git a/src/symbols/wordpress/translation.rs b/src/symbols/wordpress/translation.rs index 443f237..930c450 100644 --- a/src/symbols/wordpress/translation.rs +++ b/src/symbols/wordpress/translation.rs @@ -5,55 +5,49 @@ use std::fmt; use std::fs::File as FsFile; use std::io; use std::io::Read; -use std::ops::Deref; use std::path::Path; use command_runner::CommandRunner; use symbols::{Action, OwnedSymbolAction, Symbol, SymbolAction, SymbolRunner}; use resources::Resource; -pub struct WordpressTranslation<'a, C, D, R> where C: Deref + fmt::Display, D: AsRef + fmt::Display, R: 'a + CommandRunner { +pub struct WordpressTranslation<'a, C, D, R> where C: AsRef + fmt::Display, D: AsRef + fmt::Display, R: 'a + CommandRunner { path: D, - language: C, + version: &'a str, + locale: C, command_runner: &'a R } -impl<'a, C, R> WordpressTranslation<'a, C, String, R> where C: Deref + fmt::Display, R: CommandRunner { - pub fn new + fmt::Display>(path: D, language: C, command_runner: &'a R) -> Self { +impl<'a, C, R> WordpressTranslation<'a, C, String, R> where C: AsRef + fmt::Display, R: CommandRunner { + pub fn new + fmt::Display>(path: D, version: &'a str, locale: C, command_runner: &'a R) -> Self { WordpressTranslation { path: Path::new(path.as_ref()).join("wp-content/languages").to_string_lossy().to_string(), - language: language, + version: version, + locale: locale, command_runner: command_runner } } } -/* -https://translate.wordpress.org/projects/wp/4.7.x/de/default/export-translations?format=po > /home/de_adrianheine_blog/WordPress/wp-content/languages/de_DE.po -https://translate.wordpress.org/projects/wp/4.7.x/de/default/export-translations?format=mo > /home/de_adrianheine_blog/WordPress/wp-content/languages/de_DE.mo - -https://translate.wordpress.org/projects/wp/4.7.x/cc/de/default/export-translations?format=po > /home/de_adrianheine_blog/WordPress/wp-content/languages/continents-cities-de_DE.po -https://translate.wordpress.org/projects/wp/4.7.x/cc/de/default/export-translations?format=mo > /home/de_adrianheine_blog/WordPress/wp-content/languages/continents-cities-de_DE.mo - -https://translate.wordpress.org/projects/wp/4.7.x/admin/de/default/export-translations?format=po > /home/de_adrianheine_blog/WordPress/wp-content/languages/admin-de_DE.po -https://translate.wordpress.org/projects/wp/4.7.x/admin/de/default/export-translations?format=mo > /home/de_adrianheine_blog/WordPress/wp-content/languages/admin-de_DE.mo - -https://translate.wordpress.org/projects/wp/4.7.x/admin/network/de/default/export-translations?format=po > /home/de_adrianheine_blog/WordPress/wp-content/languages/admin-network-de_DE.po -https://translate.wordpress.org/projects/wp/4.7.x/admin/network/de/default/export-translations?format=mo > /home/de_adrianheine_blog/WordPress/wp-content/languages/admin-network-de_DE.mo -*/ -impl<'a, C, D, R> WordpressTranslation<'a, C, D, R> where C: Deref + fmt::Display, D: AsRef + fmt::Display, R: CommandRunner { +impl<'a, C, D, R> WordpressTranslation<'a, C, D, R> where C: AsRef + fmt::Display, D: AsRef + fmt::Display, R: CommandRunner { fn get_pairs(&self) -> Vec<(String, String)> { + let version_x = self.version.trim_right_matches(|c: char| c.is_digit(10)).to_owned() + "x"; + let locale: &str = self.locale.as_ref(); + let path_locale = if locale == "de_DE" { "de".to_owned() } else { locale.to_lowercase().replace('_', "-") }; let mut res = vec![]; for &(in_slug, out_slug) in [("", ""), ("cc/", "continents-cities-"), ("admin/", "admin-"), ("admin/network/", "admin-network-")].into_iter() { for format in ["po", "mo"].into_iter() { - res.push((format!("https://translate.wordpress.org/projects/wp/4.7.x/{}{}/default/export-translations?format={}", in_slug, self.language, format), format!("{}/{}de_DE.{}", self.path, out_slug, format))) + res.push(( + format!("https://translate.wordpress.org/projects/wp/{}/{}{}/default/export-translations?format={}", version_x, in_slug, path_locale, format), + format!("{}/{}{}.{}", self.path, out_slug, self.locale, format) + )) } } res } } -impl<'a, C, D, R> Symbol for WordpressTranslation<'a, C, D, R> where C: Deref + fmt::Display, D: AsRef + fmt::Display, R: CommandRunner { +impl<'a, C, D, R> Symbol for WordpressTranslation<'a, C, D, R> where C: AsRef + fmt::Display, D: AsRef + fmt::Display, R: CommandRunner { fn target_reached(&self) -> Result> { let mut newest = String::new(); let match_date = Regex::new("(?m)^\"PO-Revision-Date: (.+)\\+0000\\\\n\"$").unwrap(); @@ -74,8 +68,8 @@ impl<'a, C, D, R> Symbol for WordpressTranslation<'a, C, D, R> where C: Deref Result<(), Box> { @@ -98,7 +92,7 @@ impl<'a, C, D, R> Symbol for WordpressTranslation<'a, C, D, R> where C: Deref fmt::Display for WordpressTranslation<'a, C, D, R> where C: Deref + fmt::Display, D: AsRef + fmt::Display, R: CommandRunner { +impl<'a, C, D, R> fmt::Display for WordpressTranslation<'a, C, D, R> where C: AsRef + fmt::Display, D: AsRef + fmt::Display, R: CommandRunner { fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error>{ write!(f, "WordpressTranslation {}", self.path) }