diff options
Diffstat (limited to 'android')
20 files changed, 70 insertions, 40 deletions
diff --git a/android/src/main/res/values-da/strings.xml b/android/src/main/res/values-da/strings.xml index 6db7260fdb..0059da65bc 100644 --- a/android/src/main/res/values-da/strings.xml +++ b/android/src/main/res/values-da/strings.xml @@ -115,7 +115,6 @@ <string name="update_available">OPDATERING TILGÆNGELIG</string> <string name="update_available_footer">Opdatering tilgængelig, download den for at forblive sikker.</string> <string name="user_email_hint">Din e-mail (valgfrit)</string> - <string name="user_message_hint">Beskriv dit problem</string> <string name="view_logs">Se app-logfiler</string> <string name="virtual_adapter_problem">Fejl ved virtuel adapter</string> <string name="voucher_already_used">Kuponkode er allerede brugt.</string> diff --git a/android/src/main/res/values-de/strings.xml b/android/src/main/res/values-de/strings.xml index 6015649ed6..59c81e727a 100644 --- a/android/src/main/res/values-de/strings.xml +++ b/android/src/main/res/values-de/strings.xml @@ -115,7 +115,6 @@ <string name="update_available">UPDATE VERFÜGBAR</string> <string name="update_available_footer">Update verfügbar, laden Sie es herunter, um sicher zu bleiben.</string> <string name="user_email_hint">Ihre E-Mail-Adresse (optional)</string> - <string name="user_message_hint">Beschreiben Sie Ihr Problem</string> <string name="view_logs">App-Protokolle anzeigen</string> <string name="virtual_adapter_problem">Virtueller Adapterfehler</string> <string name="voucher_already_used">Der Gutscheincode wurde bereits verwendet.</string> diff --git a/android/src/main/res/values-es/strings.xml b/android/src/main/res/values-es/strings.xml index 2ed781167c..2fddea62c5 100644 --- a/android/src/main/res/values-es/strings.xml +++ b/android/src/main/res/values-es/strings.xml @@ -115,7 +115,6 @@ <string name="update_available">ACTUALIZACIÓN DISPONIBLE</string> <string name="update_available_footer">Actualización disponible, descárguela para garantizar su seguridad.</string> <string name="user_email_hint">Su correo electrónico (opcional)</string> - <string name="user_message_hint">Describa el problema</string> <string name="view_logs">Ver registros de la aplicación</string> <string name="virtual_adapter_problem">Error del adaptador virtual</string> <string name="voucher_already_used">El código del cupón ya se ha usado.</string> diff --git a/android/src/main/res/values-fi/strings.xml b/android/src/main/res/values-fi/strings.xml index 191f4ef592..a0a89b5050 100644 --- a/android/src/main/res/values-fi/strings.xml +++ b/android/src/main/res/values-fi/strings.xml @@ -115,7 +115,6 @@ <string name="update_available">PÄIVITYS SAATAVILLA</string> <string name="update_available_footer">Päivitys saatavilla. Lataa se pysyäksesi turvassa.</string> <string name="user_email_hint">Sähköpostisi (valinnainen)</string> - <string name="user_message_hint">Kuvaile ongelmaasi</string> <string name="view_logs">Tarkastele sovelluslokeja</string> <string name="virtual_adapter_problem">Virtuaalisovittimen virhe</string> <string name="voucher_already_used">Kuponkikoodi on jo käytetty.</string> diff --git a/android/src/main/res/values-fr/strings.xml b/android/src/main/res/values-fr/strings.xml index 7ec7f702dd..7e7a3613b6 100644 --- a/android/src/main/res/values-fr/strings.xml +++ b/android/src/main/res/values-fr/strings.xml @@ -115,7 +115,6 @@ <string name="update_available">MISE À JOUR DISPONIBLE</string> <string name="update_available_footer">Mise à jour disponible. Téléchargez-la pour rester en sécurité.</string> <string name="user_email_hint">Votre e-mail (facultatif)</string> - <string name="user_message_hint">Décrivez votre problème</string> <string name="view_logs">Afficher les journaux de l\'application</string> <string name="virtual_adapter_problem">Erreur d\'adaptateur virtuel</string> <string name="voucher_already_used">Le code du bon a déjà été utilisé.</string> diff --git a/android/src/main/res/values-it/strings.xml b/android/src/main/res/values-it/strings.xml index fc866906e3..16a734ae73 100644 --- a/android/src/main/res/values-it/strings.xml +++ b/android/src/main/res/values-it/strings.xml @@ -115,7 +115,6 @@ <string name="update_available">AGGIORNAMENTO DISPONIBILE</string> <string name="update_available_footer">Aggiornamento disponibile; scarica per rimanere protetto.</string> <string name="user_email_hint">La tua e-mail (opzionale)</string> - <string name="user_message_hint">Descrivi il tuo problema</string> <string name="view_logs">Visualizza registri app</string> <string name="virtual_adapter_problem">Errore scheda virtuale</string> <string name="voucher_already_used">Il codice voucher è già stato utilizzato.</string> diff --git a/android/src/main/res/values-ja/strings.xml b/android/src/main/res/values-ja/strings.xml index 325f967527..e10cec9c2c 100644 --- a/android/src/main/res/values-ja/strings.xml +++ b/android/src/main/res/values-ja/strings.xml @@ -115,7 +115,6 @@ <string name="update_available">アップデート可</string> <string name="update_available_footer">アップデートできます。ダウンロードしてセキュリティを維持してください。</string> <string name="user_email_hint">あなたのメールアドレス(任意)</string> - <string name="user_message_hint">問題の内容をご説明ください</string> <string name="view_logs">アプリのログを表示</string> <string name="virtual_adapter_problem">仮想アダプタエラー</string> <string name="voucher_already_used">バウチャーコードはすでに使用されています。</string> diff --git a/android/src/main/res/values-ko/strings.xml b/android/src/main/res/values-ko/strings.xml index 3b763027c3..b2c3bb1cca 100644 --- a/android/src/main/res/values-ko/strings.xml +++ b/android/src/main/res/values-ko/strings.xml @@ -115,7 +115,6 @@ <string name="update_available">업데이트 사용 가능</string> <string name="update_available_footer">업데이트 사용 가능, 안전을 유지하기 위해 다운로드하세요.</string> <string name="user_email_hint">이메일(선택 사항)</string> - <string name="user_message_hint">문제 설명</string> <string name="view_logs">앱 로그 보기</string> <string name="virtual_adapter_problem">가상 어댑터 오류</string> <string name="voucher_already_used">이미 사용된 바우처 코드입니다.</string> diff --git a/android/src/main/res/values-nb/strings.xml b/android/src/main/res/values-nb/strings.xml index ecbf34198e..dc154a4cd0 100644 --- a/android/src/main/res/values-nb/strings.xml +++ b/android/src/main/res/values-nb/strings.xml @@ -54,7 +54,7 @@ <string name="failed_to_create_account">Kunne ikke opprette konto</string> <string name="failed_to_generate_key">Generering av en nøkkel mislyktes</string> <string name="failed_to_send">Kunne ikke sende</string> - <string name="failed_to_send_details">Du må gå tilbake til hovedskjermen til appen og trykke på \\\"Koble fra\\\" før du kan prøve på nytt. Men det er ingen grunn til bekymring, informasjonen du har skrevet i skjemaet blir ikke borte.</string> + <string name="failed_to_send_details">Du må gå tilbake til hovedskjermen til appen og trykke på \"Koble fra\" før du kan prøve på nytt. Men det er ingen grunn til bekymring, informasjonen du har skrevet i skjemaet blir ikke borte.</string> <string name="faqs_and_guides">Ofte stilte spørsmål og veiledninger</string> <string name="faqs_and_guides_url">https://mullvad.net/nb/help/tag/mullvad-app/</string> <string name="foreground_notification_channel_description">Viser gjeldende VPN-tunnelstatus</string> @@ -115,7 +115,6 @@ <string name="update_available">OPPDATERING TILGJENGELIG</string> <string name="update_available_footer">Oppdatering tilgjengelig. Last ned for å oppdatere sikkerheten.</string> <string name="user_email_hint">E-post (valgfritt)</string> - <string name="user_message_hint">Beskriv problemet</string> <string name="view_logs">Se applogger</string> <string name="virtual_adapter_problem">Virtuell adapterfeil</string> <string name="voucher_already_used">Kupongkoden er allerede brukt.</string> diff --git a/android/src/main/res/values-nl/strings.xml b/android/src/main/res/values-nl/strings.xml index 6082f4fe3c..7d6979492d 100644 --- a/android/src/main/res/values-nl/strings.xml +++ b/android/src/main/res/values-nl/strings.xml @@ -115,7 +115,6 @@ <string name="update_available">UPDATE BESCHIKBAAR</string> <string name="update_available_footer">Update beschikbaar, download deze voor optimale beveiliging.</string> <string name="user_email_hint">Uw e-mailadres (optioneel)</string> - <string name="user_message_hint">Beschrijf het probleem</string> <string name="view_logs">Applogboeken weergeven</string> <string name="virtual_adapter_problem">Fout virtuele adapter</string> <string name="voucher_already_used">Vouchercode is al gebruikt.</string> diff --git a/android/src/main/res/values-pl/strings.xml b/android/src/main/res/values-pl/strings.xml index 90f162ddab..3e825a1e76 100644 --- a/android/src/main/res/values-pl/strings.xml +++ b/android/src/main/res/values-pl/strings.xml @@ -115,7 +115,6 @@ <string name="update_available">DOSTĘPNA JEST AKTUALIZACJA</string> <string name="update_available_footer">Dostępna jest aktualizacja. Aby zachować bezpieczeństwo, pobierz ją.</string> <string name="user_email_hint">Twój adres e-mail (opcjonalnie)</string> - <string name="user_message_hint">Opisz problem</string> <string name="view_logs">Wyświetl dzienniki aplikacji</string> <string name="virtual_adapter_problem">Błąd wirtualnej karty sieciowej</string> <string name="voucher_already_used">Kod z tego kuponu został już użyty.</string> diff --git a/android/src/main/res/values-pt/strings.xml b/android/src/main/res/values-pt/strings.xml index c16581d7ed..d05decf3b0 100644 --- a/android/src/main/res/values-pt/strings.xml +++ b/android/src/main/res/values-pt/strings.xml @@ -115,7 +115,6 @@ <string name="update_available">ESTÁ DISPONÍVEL UMA ATUALIZAÇÃO</string> <string name="update_available_footer">Atualização disponível, transfira-a para ficar seguro.</string> <string name="user_email_hint">O seu email (opcional)</string> - <string name="user_message_hint">Descreva o seu problema</string> <string name="view_logs">Ver os registos da app</string> <string name="virtual_adapter_problem">Erro de adaptador virtual</string> <string name="voucher_already_used">O código do voucher já foi utilizado.</string> diff --git a/android/src/main/res/values-ru/strings.xml b/android/src/main/res/values-ru/strings.xml index ede1419eed..1a6d884150 100644 --- a/android/src/main/res/values-ru/strings.xml +++ b/android/src/main/res/values-ru/strings.xml @@ -115,7 +115,6 @@ <string name="update_available">ЕСТЬ ОБНОВЛЕНИЕ</string> <string name="update_available_footer">Есть обновление. Чтобы оставаться в безопасности, обновитесь.</string> <string name="user_email_hint">Ваша электронная почта (необязательно)</string> - <string name="user_message_hint">Опишите проблему</string> <string name="view_logs">Открыть журналы</string> <string name="virtual_adapter_problem">Ошибка виртуального адаптера</string> <string name="voucher_already_used">Этот код ваучера уже использовался.</string> diff --git a/android/src/main/res/values-sv/strings.xml b/android/src/main/res/values-sv/strings.xml index 443bb5dd22..55a5110215 100644 --- a/android/src/main/res/values-sv/strings.xml +++ b/android/src/main/res/values-sv/strings.xml @@ -115,7 +115,6 @@ <string name="update_available">UPPDATERING TILLGÄNGLIG</string> <string name="update_available_footer">Uppdatering tillgänglig. Ladda ned för att vara säker.</string> <string name="user_email_hint">Din e-postadress (valfritt)</string> - <string name="user_message_hint">Beskriv ditt problem</string> <string name="view_logs">Visa appens loggar</string> <string name="virtual_adapter_problem">Fel med virtuell adapter</string> <string name="voucher_already_used">Kupongkoden har redan använts.</string> diff --git a/android/src/main/res/values-th/strings.xml b/android/src/main/res/values-th/strings.xml index 11f3de5cd9..e6e474296b 100644 --- a/android/src/main/res/values-th/strings.xml +++ b/android/src/main/res/values-th/strings.xml @@ -115,7 +115,6 @@ <string name="update_available">มีการอัปเดตให้ใช้งาน</string> <string name="update_available_footer">มีการอัปเดตให้ใช้งาน ดาวน์โหลดเพื่อยกระดับความปลอดภัย</string> <string name="user_email_hint">อีเมลของคุณ (ไม่บังคับ)</string> - <string name="user_message_hint">ระบุปัญหาของคุณ</string> <string name="view_logs">ดูบันทึกของแอป</string> <string name="virtual_adapter_problem">ข้อผิดพลาดของอะแดปเตอร์เสมือน</string> <string name="voucher_already_used">รหัสบัตรกำนัลถูกใช้ไปแล้ว</string> diff --git a/android/src/main/res/values-tr/strings.xml b/android/src/main/res/values-tr/strings.xml index c637161fab..cff14469b0 100644 --- a/android/src/main/res/values-tr/strings.xml +++ b/android/src/main/res/values-tr/strings.xml @@ -115,7 +115,6 @@ <string name="update_available">GÜNCELLEME MEVCUT</string> <string name="update_available_footer">Güncelleme mevcut, güvende olmak için indirin.</string> <string name="user_email_hint">E-posta adresiniz (isteğe bağlı)</string> - <string name="user_message_hint">Sorununuzu açıklayın</string> <string name="view_logs">Uygulama kayıtlarını görüntüle</string> <string name="virtual_adapter_problem">Sanal adaptör hatası</string> <string name="voucher_already_used">Kupon kodu zaten kullanılmış.</string> diff --git a/android/src/main/res/values-zh-rCN/strings.xml b/android/src/main/res/values-zh-rCN/strings.xml index f7868310d9..1054b2db6a 100644 --- a/android/src/main/res/values-zh-rCN/strings.xml +++ b/android/src/main/res/values-zh-rCN/strings.xml @@ -111,7 +111,6 @@ <string name="update_available">有可用更新</string> <string name="update_available_footer">有可用更新,请下载以保持安全。</string> <string name="user_email_hint">您的电子邮件(可选)</string> - <string name="user_message_hint">描述您的问题</string> <string name="view_logs">查看应用日志</string> <string name="virtual_adapter_problem">虚拟适配器错误</string> <string name="voucher_already_used">该优惠券码已被使用。</string> diff --git a/android/src/main/res/values-zh-rTW/strings.xml b/android/src/main/res/values-zh-rTW/strings.xml index a8046d5d75..2c8fd4a72d 100644 --- a/android/src/main/res/values-zh-rTW/strings.xml +++ b/android/src/main/res/values-zh-rTW/strings.xml @@ -115,7 +115,6 @@ <string name="update_available">可用的更新</string> <string name="update_available_footer">更新可用,請下載以保持安全。</string> <string name="user_email_hint">您的電子郵件 (選填)</string> - <string name="user_message_hint">描述您的問題</string> <string name="view_logs">檢視應用程式日誌</string> <string name="virtual_adapter_problem">虛擬配接器錯誤</string> <string name="voucher_already_used">此憑證兌換碼已有人用過。</string> diff --git a/android/translations-converter/src/gettext.rs b/android/translations-converter/src/gettext.rs index 8af2c5ca06..c496775ee2 100644 --- a/android/translations-converter/src/gettext.rs +++ b/android/translations-converter/src/gettext.rs @@ -2,9 +2,11 @@ use lazy_static::lazy_static; use regex::Regex; use std::{ collections::BTreeMap, + fmt::{self, Display, Formatter}, fs::{File, OpenOptions}, io::{self, BufRead, BufReader, BufWriter, Write}, mem, + ops::Deref, path::Path, }; @@ -34,20 +36,24 @@ pub enum PluralForm { /// A message entry in a gettext translation file. #[derive(Clone, Debug)] pub struct MsgEntry { - pub id: String, + pub id: MsgString, pub value: MsgValue, } /// A message string or plural set in a gettext translation file. #[derive(Clone, Debug)] pub enum MsgValue { - Invariant(String), + Invariant(MsgString), Plural { - plural_id: String, - values: Vec<String>, + plural_id: MsgString, + values: Vec<MsgString>, }, } +/// A message string in a gettext translation file. +#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)] +pub struct MsgString(String); + /// A helper macro to match a string to various prefix and suffix combinations. macro_rules! match_str { ( @@ -117,7 +123,7 @@ impl Translation { } ["msgstr \"", translation, "\""] => { if let Some(id) = current_id.take() { - let value = MsgValue::from(normalize(translation)); + let value = MsgValue::Invariant(normalize(translation)); parsing_header = id.is_empty() && translation.is_empty(); @@ -217,9 +223,36 @@ impl PluralForm { } } +impl From<String> for MsgString { + fn from(string: String) -> Self { + MsgString(string) + } +} + +impl From<&str> for MsgString { + fn from(string: &str) -> Self { + string.to_owned().into() + } +} + +impl Display for MsgString { + /// Write the ID message string with proper escaping. + fn fmt(&self, formatter: &mut Formatter) -> fmt::Result { + self.0.replace(r#"""#, r#"\""#).fmt(formatter) + } +} + +impl Deref for MsgString { + type Target = str; + + fn deref(&self) -> &Self::Target { + self.0.as_str() + } +} + impl From<String> for MsgValue { fn from(string: String) -> Self { - MsgValue::Invariant(string) + MsgValue::Invariant(string.into()) } } @@ -234,19 +267,22 @@ pub fn append_to_template( .write(true) .append(true) .open(file_path)?; + let mut sorted_entries: Vec<_> = entries.collect(); let mut writer = BufWriter::new(file); - for entry in entries { + sorted_entries.sort_by(|first, second| first.id.cmp(&second.id)); + + for entry in sorted_entries { writeln!(writer)?; - writeln!(writer, "msgid {:?}", entry.id)?; + writeln!(writer, r#"msgid "{}""#, entry.id)?; match entry.value { - MsgValue::Invariant(value) => writeln!(writer, "msgstr {:?}", value)?, + MsgValue::Invariant(value) => writeln!(writer, r#"msgstr "{}""#, value)?, MsgValue::Plural { plural_id, values } => { - writeln!(writer, "msgid_plural {:?}", plural_id)?; + writeln!(writer, r#"msgid_plural "{}""#, plural_id)?; for (index, value) in values.into_iter().enumerate() { - writeln!(writer, "msgstr[{}] {:?}", index, value)?; + writeln!(writer, r#"msgstr[{}] "{}""#, index, value)?; } } } @@ -266,7 +302,7 @@ fn parse_line<'l>(line: &'l str, prefix: &str, suffix: &str) -> Option<&'l str> } } -fn normalize(string: &str) -> String { +fn normalize(string: &str) -> MsgString { // Use a single common apostrophe character let string = APOSTROPHE_VARIATION.replace_all(&string, "'"); // Mark where parameters are positioned, removing the parameter name @@ -274,5 +310,5 @@ fn normalize(string: &str) -> String { // Remove escaped double-quotes let string = ESCAPED_DOUBLE_QUOTES.replace_all(&string, r#"""#); - string.into_owned() + string.into_owned().into() } diff --git a/android/translations-converter/src/main.rs b/android/translations-converter/src/main.rs index 5188a40ef2..d755913243 100644 --- a/android/translations-converter/src/main.rs +++ b/android/translations-converter/src/main.rs @@ -133,8 +133,8 @@ fn main() { for message in template { match message.value { - gettext::MsgValue::Invariant(_) => missing_translations.remove(&message.id), - gettext::MsgValue::Plural { .. } => missing_plurals.remove(&message.id), + gettext::MsgValue::Invariant(_) => missing_translations.remove(&*message.id), + gettext::MsgValue::Plural { .. } => missing_plurals.remove(&*message.id), }; } @@ -147,7 +147,7 @@ fn main() { .into_iter() .inspect(|(missing_translation, id)| println!(" {}: {}", id, missing_translation)) .map(|(id, _)| gettext::MsgEntry { - id, + id: id.into(), value: String::new().into(), }), ) @@ -179,20 +179,30 @@ fn main() { .iter() .position(|plural| plural.quantity == android::PluralQuantity::One) .expect("Missing singular variant to use as msgid"); - let id = plural.items.remove(singular_position).string.to_string(); + let id = plural + .items + .remove(singular_position) + .string + .to_string() + .into(); let other_position = plural .items .iter() .position(|plural| plural.quantity == android::PluralQuantity::Other) .expect("Missing other variant to use as msgid_plural"); - let plural_id = plural.items.remove(other_position).string.to_string(); + let plural_id = plural + .items + .remove(other_position) + .string + .to_string() + .into(); gettext::MsgEntry { id, value: gettext::MsgValue::Plural { plural_id, - values: vec!["".to_owned(), "".to_owned()], + values: vec!["".into(), "".into()], }, } }), @@ -253,7 +263,7 @@ fn generate_translations( for translation in translations { match translation.value { gettext::MsgValue::Invariant(translation_value) => { - if let Some(android_key) = known_strings.remove(&translation.id) { + if let Some(android_key) = known_strings.remove(&*translation.id) { localized_strings.push(android::StringResource::new( android_key, &translation_value, @@ -261,7 +271,9 @@ fn generate_translations( } } gettext::MsgValue::Plural { values, .. } => { - if let Some(android_key) = known_plurals.remove(&translation.id) { + if let Some(android_key) = known_plurals.remove(&*translation.id) { + let values = values.into_iter().map(|message| message.to_string()); + localized_plurals.push(android::PluralResource::new( android_key, plural_quantities.clone().zip(values), |
