From f367df2225eb810b50f9ec3618c2449779850b05 Mon Sep 17 00:00:00 2001 From: Terry Yiu <963907+tyiu@users.noreply.github.com> Date: Thu, 16 Mar 2023 22:55:54 -0400 Subject: [PATCH] Fix localization issues, and export and import translations --- damus.xcodeproj/project.pbxproj | 35 +- damus/Models/Mentions.swift | 4 +- damus/Util/LocalizationUtil.swift | 6 + damus/Views/ActionBar/EventDetailBar.swift | 12 +- damus/Views/ActionBar/ShareAction.swift | 14 +- damus/Views/ConfigView.swift | 2 +- damus/Views/Events/EventMenu.swift | 4 +- damus/Views/Events/ReplyDescription.swift | 2 +- damus/Views/Events/TextEvent.swift | 2 +- .../Views/Notifications/EventGroupView.swift | 14 +- damus/Views/ProfileView.swift | 12 +- damus/ar.lproj/Localizable.strings | Bin 71842 -> 71852 bytes damus/de.lproj/Localizable.stringsdict | 16 + .../Localized Contents/en-US.xliff | 64 +++- .../damus/en-US.lproj/Localizable.strings | Bin 72950 -> 75528 bytes damus/fr-CA.lproj/InfoPlist.strings | Bin 0 -> 810 bytes damus/fr-CA.lproj/Localizable.strings | Bin 0 -> 75910 bytes damus/fr-CA.lproj/Localizable.stringsdict | 330 ++++++++++++++++++ damus/fr-FR.lproj/Localizable.strings | Bin 75962 -> 75952 bytes .../InfoPlist.strings | Bin .../Localizable.strings | Bin .../Localizable.stringsdict | 0 damus/pl-PL.lproj/Localizable.stringsdict | 16 +- .../InfoPlist.strings | Bin .../Localizable.strings | Bin 73886 -> 73880 bytes .../Localizable.stringsdict | 0 transifex.yml | 238 ++++++++++++- 27 files changed, 715 insertions(+), 56 deletions(-) create mode 100644 damus/fr-CA.lproj/InfoPlist.strings create mode 100644 damus/fr-CA.lproj/Localizable.strings create mode 100644 damus/fr-CA.lproj/Localizable.stringsdict rename damus/{hu_HU.lproj => hu-HU.lproj}/InfoPlist.strings (100%) rename damus/{hu_HU.lproj => hu-HU.lproj}/Localizable.strings (100%) rename damus/{hu_HU.lproj => hu-HU.lproj}/Localizable.stringsdict (100%) rename damus/{sv_SE.lproj => sv-SE.lproj}/InfoPlist.strings (100%) rename damus/{sv_SE.lproj => sv-SE.lproj}/Localizable.strings (99%) rename damus/{sv_SE.lproj => sv-SE.lproj}/Localizable.stringsdict (100%) diff --git a/damus.xcodeproj/project.pbxproj b/damus.xcodeproj/project.pbxproj index 17fb281f..87935026 100644 --- a/damus.xcodeproj/project.pbxproj +++ b/damus.xcodeproj/project.pbxproj @@ -308,9 +308,6 @@ 3A66D927299472FA008B44F4 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/InfoPlist.strings; sourceTree = ""; }; 3A66D928299472FA008B44F4 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; 3A66D929299472FA008B44F4 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = ja; path = ja.lproj/Localizable.stringsdict; sourceTree = ""; }; - 3A7D373429C2056500449FD0 /* hu_HU */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu_HU; path = hu_HU.lproj/InfoPlist.strings; sourceTree = ""; }; - 3A7D373529C2056500449FD0 /* hu_HU */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = hu_HU; path = hu_HU.lproj/Localizable.stringsdict; sourceTree = ""; }; - 3A7D373629C2056500449FD0 /* hu_HU */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu_HU; path = hu_HU.lproj/Localizable.strings; sourceTree = ""; }; 3A827A18299FC69D00C4D171 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/InfoPlist.strings; sourceTree = ""; }; 3A827A19299FC69D00C4D171 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = ""; }; 3A827A1A299FC69D00C4D171 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = ru; path = ru.lproj/Localizable.stringsdict; sourceTree = ""; }; @@ -348,12 +345,18 @@ 3ACB685B297633BC00C46468 /* es-419 */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-419"; path = "es-419.lproj/InfoPlist.strings"; sourceTree = ""; }; 3ACB685E297633BC00C46468 /* es-419 */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-419"; path = "es-419.lproj/Localizable.strings"; sourceTree = ""; }; 3ACBCB77295FE5C70037388A /* TimeAgoTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimeAgoTests.swift; sourceTree = ""; }; + 3AD14EB529C40F38009D2D9C /* hu-HU */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "hu-HU"; path = "hu-HU.lproj/Localizable.stringsdict"; sourceTree = ""; }; + 3AD14EB629C40F38009D2D9C /* hu-HU */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "hu-HU"; path = "hu-HU.lproj/InfoPlist.strings"; sourceTree = ""; }; + 3AD14EB729C40F38009D2D9C /* hu-HU */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "hu-HU"; path = "hu-HU.lproj/Localizable.strings"; sourceTree = ""; }; + 3AD14EB829C40F3F009D2D9C /* sv-SE */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "sv-SE"; path = "sv-SE.lproj/Localizable.stringsdict"; sourceTree = ""; }; + 3AD14EB929C40F3F009D2D9C /* sv-SE */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "sv-SE"; path = "sv-SE.lproj/InfoPlist.strings"; sourceTree = ""; }; + 3AD14EBA29C40F3F009D2D9C /* sv-SE */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "sv-SE"; path = "sv-SE.lproj/Localizable.strings"; sourceTree = ""; }; + 3AD14EBB29C40F47009D2D9C /* fr-CA */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "fr-CA"; path = "fr-CA.lproj/InfoPlist.strings"; sourceTree = ""; }; + 3AD14EBC29C40F47009D2D9C /* fr-CA */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "fr-CA"; path = "fr-CA.lproj/Localizable.stringsdict"; sourceTree = ""; }; + 3AD14EBD29C40F47009D2D9C /* fr-CA */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "fr-CA"; path = "fr-CA.lproj/Localizable.strings"; sourceTree = ""; }; 3AD5662B29BD2F5300BF77C5 /* fa */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fa; path = fa.lproj/InfoPlist.strings; sourceTree = ""; }; 3AD5662C29BD2F5300BF77C5 /* fa */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = fa; path = fa.lproj/Localizable.stringsdict; sourceTree = ""; }; 3AD5662D29BD2F5300BF77C5 /* fa */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fa; path = fa.lproj/Localizable.strings; sourceTree = ""; }; - 3AD5662E29C0DA4000BF77C5 /* sv_SE */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv_SE; path = sv_SE.lproj/InfoPlist.strings; sourceTree = ""; }; - 3AD5662F29C0DA4000BF77C5 /* sv_SE */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv_SE; path = sv_SE.lproj/Localizable.strings; sourceTree = ""; }; - 3AD5663029C0DA4000BF77C5 /* sv_SE */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = sv_SE; path = sv_SE.lproj/Localizable.stringsdict; sourceTree = ""; }; 3AD5663129C0DA4B00BF77C5 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/Localizable.strings; sourceTree = ""; }; 3AD5663229C0DA4B00BF77C5 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = ko; path = ko.lproj/Localizable.stringsdict; sourceTree = ""; }; 3AD5663329C0DA4B00BF77C5 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/InfoPlist.strings; sourceTree = ""; }; @@ -1308,9 +1311,10 @@ uk, bg, fa, - sv_SE, ko, - hu_HU, + "hu-HU", + "sv-SE", + "fr-CA", ); mainGroup = 4CE6DEDA27F7A08100C66700; packageReferences = ( @@ -1658,9 +1662,10 @@ 3AA5E70429B682B3002701ED /* uk */, 3AA5E70729B9E84A002701ED /* bg */, 3AD5662C29BD2F5300BF77C5 /* fa */, - 3AD5663029C0DA4000BF77C5 /* sv_SE */, 3AD5663229C0DA4B00BF77C5 /* ko */, - 3A7D373529C2056500449FD0 /* hu_HU */, + 3AD14EB529C40F38009D2D9C /* hu-HU */, + 3AD14EB829C40F3F009D2D9C /* sv-SE */, + 3AD14EBC29C40F47009D2D9C /* fr-CA */, ); name = Localizable.stringsdict; sourceTree = ""; @@ -1689,9 +1694,10 @@ 3AA5E70329B682AD002701ED /* uk */, 3AA5E70529B9E83E002701ED /* bg */, 3AD5662B29BD2F5300BF77C5 /* fa */, - 3AD5662E29C0DA4000BF77C5 /* sv_SE */, 3AD5663329C0DA4B00BF77C5 /* ko */, - 3A7D373429C2056500449FD0 /* hu_HU */, + 3AD14EB629C40F38009D2D9C /* hu-HU */, + 3AD14EB929C40F3F009D2D9C /* sv-SE */, + 3AD14EBB29C40F47009D2D9C /* fr-CA */, ); name = InfoPlist.strings; sourceTree = ""; @@ -1721,9 +1727,10 @@ 3AA5E70229B682A5002701ED /* uk */, 3AA5E70629B9E844002701ED /* bg */, 3AD5662D29BD2F5300BF77C5 /* fa */, - 3AD5662F29C0DA4000BF77C5 /* sv_SE */, 3AD5663129C0DA4B00BF77C5 /* ko */, - 3A7D373629C2056500449FD0 /* hu_HU */, + 3AD14EB729C40F38009D2D9C /* hu-HU */, + 3AD14EBA29C40F3F009D2D9C /* sv-SE */, + 3AD14EBD29C40F47009D2D9C /* fr-CA */, ); name = Localizable.strings; sourceTree = ""; diff --git a/damus/Models/Mentions.swift b/damus/Models/Mentions.swift index fb408840..226f888f 100644 --- a/damus/Models/Mentions.swift +++ b/damus/Models/Mentions.swift @@ -274,8 +274,8 @@ func format_msats(_ msat: Int64, locale: Locale = Locale.current) -> String { let sats = NSNumber(value: (Double(msat) / 1000.0)) let formattedSats = numberFormatter.string(from: sats) ?? sats.stringValue - let bundle = bundleForLocale(locale: locale) - return String(format: bundle.localizedString(forKey: "sats_count", value: nil, table: nil), locale: locale, sats.decimalValue as NSDecimalNumber, formattedSats) + let format = localizedStringFormat(key: "sats_count", locale: locale) + return String(format: format, locale: locale, sats.decimalValue as NSDecimalNumber, formattedSats) } func convert_invoice_block(_ b: invoice_block) -> Block? { diff --git a/damus/Util/LocalizationUtil.swift b/damus/Util/LocalizationUtil.swift index 7e2aa938..b0fdad15 100644 --- a/damus/Util/LocalizationUtil.swift +++ b/damus/Util/LocalizationUtil.swift @@ -15,3 +15,9 @@ func bundleForLocale(locale: Locale?) -> Bundle { let path = Bundle.main.path(forResource: locale!.identifier, ofType: "lproj") return path != nil ? (Bundle(path: path!) ?? Bundle.main) : Bundle.main } + +func localizedStringFormat(key: String, locale: Locale?) -> String { + let bundle = bundleForLocale(locale: locale) + let fallback = bundleForLocale(locale: Locale(identifier: "en-US")).localizedString(forKey: key, value: nil, table: nil) + return bundle.localizedString(forKey: key, value: fallback, table: nil) +} diff --git a/damus/Views/ActionBar/EventDetailBar.swift b/damus/Views/ActionBar/EventDetailBar.swift index 799f0925..2d69f76b 100644 --- a/damus/Views/ActionBar/EventDetailBar.swift +++ b/damus/Views/ActionBar/EventDetailBar.swift @@ -53,18 +53,18 @@ struct EventDetailBar: View { } func repostsCountString(_ count: Int, locale: Locale = Locale.current) -> String { - let bundle = bundleForLocale(locale: locale) - return String(format: bundle.localizedString(forKey: "reposts_count", value: nil, table: nil), locale: locale, count) + let format = localizedStringFormat(key: "reposts_count", locale: locale) + return String(format: format, locale: locale, count) } func reactionsCountString(_ count: Int, locale: Locale = Locale.current) -> String { - let bundle = bundleForLocale(locale: locale) - return String(format: bundle.localizedString(forKey: "reactions_count", value: nil, table: nil), locale: locale, count) + let format = localizedStringFormat(key: "reactions_count", locale: locale) + return String(format: format, locale: locale, count) } func zapsCountString(_ count: Int, locale: Locale = Locale.current) -> String { - let bundle = bundleForLocale(locale: locale) - return String(format: bundle.localizedString(forKey: "zaps_count", value: nil, table: nil), locale: locale, count) + let format = localizedStringFormat(key: "zaps_count", locale: locale) + return String(format: format, locale: locale, count) } struct EventDetailBar_Previews: PreviewProvider { diff --git a/damus/Views/ActionBar/ShareAction.swift b/damus/Views/ActionBar/ShareAction.swift index 4e4cf13c..e4e76262 100644 --- a/damus/Views/ActionBar/ShareAction.swift +++ b/damus/Views/ActionBar/ShareAction.swift @@ -32,7 +32,7 @@ struct ShareAction: View { let col = colorScheme == .light ? Color("DamusMediumGrey") : Color("DamusWhite") VStack { - Text("Share Note") + Text("Share Note", comment: "Title text to indicate that the buttons below are meant to be used to share a note with others.") .padding() .font(.system(size: 17, weight: .bold)) @@ -40,7 +40,7 @@ struct ShareAction: View { HStack(alignment: .top, spacing: 25) { - ShareActionButton(img: "link", txt: "Copy Link", comment: "Button to copy link to note", col: col) { + ShareActionButton(img: "link", text: NSLocalizedString("Copy Link", comment: "Button to copy link to note"), col: col) { show_share_action = false UIPasteboard.general.string = "https://damus.io/" + (bech32_note_id(event.id) ?? event.id) } @@ -48,18 +48,18 @@ struct ShareAction: View { let bookmarkImg = isBookmarked ? "bookmark.slash" : "bookmark" let bookmarkTxt = isBookmarked ? "Remove\nBookmark" : "Bookmark" let boomarkCol = isBookmarked ? Color(.red) : col - ShareActionButton(img: bookmarkImg, txt: bookmarkTxt, comment: "Button to bookmark to note", col: boomarkCol) { + ShareActionButton(img: bookmarkImg, text: NSLocalizedString(bookmarkTxt, comment: "Button to bookmark to note"), col: boomarkCol) { show_share_action = false self.bookmarks.updateBookmark(event) isBookmarked = self.bookmarks.isBookmarked(event) } - ShareActionButton(img: "globe", txt: "Broadcast", comment: "Button to broadcast note to all your relays", col: col) { + ShareActionButton(img: "globe", text: NSLocalizedString("Broadcast", comment: "Button to broadcast note to all your relays"), col: col) { show_share_action = false NotificationCenter.default.post(name: .broadcast_event, object: event) } - ShareActionButton(img: "square.and.arrow.up", txt: "Share Via...", comment: "Button to present iOS share sheet", col: col) { + ShareActionButton(img: "square.and.arrow.up", text: NSLocalizedString("Share Via...", comment: "Button to present iOS share sheet"), col: col) { show_share_action = false show_share_sheet = true } @@ -87,7 +87,7 @@ struct ShareAction: View { } } -func ShareActionButton(img: String, txt: String, comment: String, col: Color, action: @escaping () -> ()) -> some View { +func ShareActionButton(img: String, text: String, col: Color, action: @escaping () -> ()) -> some View { Button(action: action) { VStack() { Image(systemName: img) @@ -99,7 +99,7 @@ func ShareActionButton(img: String, txt: String, comment: String, col: Color, ac .frame(width: 55.0, height: 55.0) } .frame(height: 25) - Text(NSLocalizedString(txt, comment: comment)) + Text(verbatim: text) .foregroundColor(col) .font(.footnote) .multilineTextAlignment(.center) diff --git a/damus/Views/ConfigView.swift b/damus/Views/ConfigView.swift index 459c8c62..5daeab99 100644 --- a/damus/Views/ConfigView.swift +++ b/damus/Views/ConfigView.swift @@ -213,7 +213,7 @@ struct ConfigView: View { clear_kingfisher_cache() } - Picker(NSLocalizedString("Select image uplodaer", comment: "Prompt selection of user's image uplodaer"), + Picker(NSLocalizedString("Select image uploader", comment: "Prompt selection of user's image uploader"), selection: $settings.default_image_uploader) { ForEach(ImageUploader.allCases, id: \.self) { uploader in Text(uploader.model.displayName) diff --git a/damus/Views/Events/EventMenu.swift b/damus/Views/Events/EventMenu.swift index 3f9bc101..47bcb21a 100644 --- a/damus/Views/Events/EventMenu.swift +++ b/damus/Views/Events/EventMenu.swift @@ -18,11 +18,11 @@ struct EventMenuContext: View { var body: some View { HStack { Menu { - + MenuItems(event: event, keypair: keypair, target_pubkey: target_pubkey, bookmarks: bookmarks) } label: { - Label(NSLocalizedString("", comment: "Context menu"), systemImage: "ellipsis") + Label("", systemImage: "ellipsis") .foregroundColor(Color.gray) } } diff --git a/damus/Views/Events/ReplyDescription.swift b/damus/Views/Events/ReplyDescription.swift index b92eda50..2fa89db7 100644 --- a/damus/Views/Events/ReplyDescription.swift +++ b/damus/Views/Events/ReplyDescription.swift @@ -49,7 +49,7 @@ func reply_desc(profiles: Profiles, event: NostrEvent, locale: Locale = Locale.c if othersCount == 0 { return String(format: NSLocalizedString("Replying to %@ & %@", bundle: bundle, comment: "Label to indicate that the user is replying to 2 users."), locale: locale, uniqueNames[0], uniqueNames[1]) } else { - return String(format: bundle.localizedString(forKey: "replying_to_two_and_others", value: nil, table: nil), locale: locale, othersCount, uniqueNames[0], uniqueNames[1]) + return String(format: localizedStringFormat(key: "replying_to_two_and_others", locale: locale), locale: locale, othersCount, uniqueNames[0], uniqueNames[1]) } } diff --git a/damus/Views/Events/TextEvent.swift b/damus/Views/Events/TextEvent.swift index e6d8bc91..13e8c442 100644 --- a/damus/Views/Events/TextEvent.swift +++ b/damus/Views/Events/TextEvent.swift @@ -40,7 +40,7 @@ struct TextEvent: View { let pk = is_anon ? "anon" : pubkey EventProfileName(pubkey: pk, profile: profile, damus: damus, show_friend_confirmed: true, size: .normal) - Text("⋅") + Text(verbatim: "⋅") .font(.footnote) .foregroundColor(.gray) Text(verbatim: "\(format_relative_time(event.created_at))") diff --git a/damus/Views/Notifications/EventGroupView.swift b/damus/Views/Notifications/EventGroupView.swift index b445eeb6..b750daaf 100644 --- a/damus/Views/Notifications/EventGroupView.swift +++ b/damus/Views/Notifications/EventGroupView.swift @@ -121,28 +121,30 @@ func event_group_author_name(profiles: Profiles, ind: Int, group: EventGroupType "zapped_your_profile_3" - returned when 3 or more zaps occurred to the current user's profile */ func reacting_to_text(profiles: Profiles, our_pubkey: String, group: EventGroupType, ev: NostrEvent?, locale: Locale? = nil) -> String { + if group.events.count == 0 { + return "??" + } + let verb = reacting_to_verb(group: group) let reacting_to = determine_reacting_to(our_pubkey: our_pubkey, ev: ev) let localization_key = "\(verb)_\(reacting_to)_\(min(group.events.count, 3))" - let bundle = bundleForLocale(locale: locale) + let format = localizedStringFormat(key: localization_key, locale: locale) switch group.events.count { - case 0: - return "??" case 1: let display_name = event_group_author_name(profiles: profiles, ind: 0, group: group) - return String(format: bundle.localizedString(forKey: localization_key, value: bundleForLocale(locale: Locale(identifier: "en-US")).localizedString(forKey: localization_key, value: nil, table: nil), table: nil), locale: locale, display_name) + return String(format: format, locale: locale, display_name) case 2: let alice_name = event_group_author_name(profiles: profiles, ind: 0, group: group) let bob_name = event_group_author_name(profiles: profiles, ind: 1, group: group) - return String(format: bundle.localizedString(forKey: localization_key, value: bundleForLocale(locale: Locale(identifier: "en-US")).localizedString(forKey: localization_key, value: nil, table: nil), table: nil), locale: locale, alice_name, bob_name) + return String(format: format, locale: locale, alice_name, bob_name) default: let alice_name = event_group_author_name(profiles: profiles, ind: 0, group: group) let count = group.events.count - 1 - return String(format: bundle.localizedString(forKey: localization_key, value: bundleForLocale(locale: Locale(identifier: "en-US")).localizedString(forKey: localization_key, value: nil, table: nil), table: nil), locale: locale, count, alice_name) + return String(format: format, locale: locale, count, alice_name) } } diff --git a/damus/Views/ProfileView.swift b/damus/Views/ProfileView.swift index 84fc66fb..e2b9c2ba 100644 --- a/damus/Views/ProfileView.swift +++ b/damus/Views/ProfileView.swift @@ -50,18 +50,18 @@ func follow_btn_enabled_state(_ fs: FollowState) -> Bool { } func followersCountString(_ count: Int, locale: Locale = Locale.current) -> String { - let bundle = bundleForLocale(locale: locale) - return String(format: bundle.localizedString(forKey: "followers_count", value: nil, table: nil), locale: locale, count) + let format = localizedStringFormat(key: "followers_count", locale: locale) + return String(format: format, locale: locale, count) } func followingCountString(_ count: Int, locale: Locale = Locale.current) -> String { - let bundle = bundleForLocale(locale: locale) - return String(format: bundle.localizedString(forKey: "following_count", value: nil, table: nil), locale: locale, count) + let format = localizedStringFormat(key: "following_count", locale: locale) + return String(format: format, locale: locale, count) } func relaysCountString(_ count: Int, locale: Locale = Locale.current) -> String { - let bundle = bundleForLocale(locale: locale) - return String(format: bundle.localizedString(forKey: "relays_count", value: nil, table: nil), locale: locale, count) + let format = localizedStringFormat(key: "relays_count", locale: locale) + return String(format: format, locale: locale, count) } struct EditButton: View { diff --git a/damus/ar.lproj/Localizable.strings b/damus/ar.lproj/Localizable.strings index faa0e584d8022051f7681301bead6deaa75887c8..c1a584bd9fbd5f9067ea02221b7cbb315c6f59a3 100644 GIT binary patch delta 24 gcmZ3qk!8(BmJRQ2bGouQvFWq9vMFqSdwZ)50Dc|`+5i9m delta 14 WcmZ3pk!8_FmJRQ2Z~k$6iwyuhUkIoG diff --git a/damus/de.lproj/Localizable.stringsdict b/damus/de.lproj/Localizable.stringsdict index 72dafec3..76fa5ccf 100644 --- a/damus/de.lproj/Localizable.stringsdict +++ b/damus/de.lproj/Localizable.stringsdict @@ -34,6 +34,22 @@ Follower + following_count + + NSStringLocalizedFormatKey + %#@FOLLOWING@ + FOLLOWING + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + d + one + Folge ich + other + Folge ich + + reacted_tagged_in_3 NSStringLocalizedFormatKey diff --git a/damus/en-US.xcloc/Localized Contents/en-US.xliff b/damus/en-US.xcloc/Localized Contents/en-US.xliff index d66a41dc..950c0381 100644 --- a/damus/en-US.xcloc/Localized Contents/en-US.xliff +++ b/damus/en-US.xcloc/Localized Contents/en-US.xliff @@ -159,6 +159,11 @@ Sentence composed of 2 variables to describe how many people are following a use All Label for filter for all notifications. + + Always show images + Always show images + Setting to always show and never blur images + Anonymous Anonymous @@ -255,12 +260,14 @@ Sentence composed of 2 variables to describe how many people are following a use Broadcast Broadcast - Context menu option for broadcasting the user's note to all of the user's connected relay servers. + Button to broadcast note to all your relays + Context menu option for broadcasting the user's note to all of the user's connected relay servers. Cancel Cancel Alert button to cancel out of alert for blocking a user. + Button to cancel a repost. Button to cancel out of alert that creates a new mutelist. Button to cancel out of posting a note. Button to cancel out of reposting a post. @@ -329,6 +336,11 @@ Sentence composed of 2 variables to describe how many people are following a use Copy LNURL Context menu option for copying a user's Lightning URL. + + Copy Link + Copy Link + Button to copy link to note + Copy Note ID Copy Note ID @@ -583,6 +595,11 @@ Sentence composed of 2 variables to describe how many people are following a use Images Section title for images configuration. + + Invalid Tip Address + Invalid Tip Address + Title of alerting as invalid tip address. + Invalid key Invalid key @@ -676,6 +693,11 @@ Sentence composed of 2 variables to describe how many people are following a use Mentions Label for filter for seeing mention notifications (replies, etc). + + Miscellaneous + Miscellaneous + Section header for miscellaneous user configuration + Muun Muun @@ -706,6 +728,16 @@ Sentence composed of 2 variables to describe how many people are following a use No zaps are sent, only a lightning payment. Description of non-zap type where sats are sent to the user's wallet as a regular Lightning payment, not as a zap. + + NostrBuild + NostrBuild + Dropdown option label for system default for NostrBuild image uploader. + + + NostrImg + NostrImg + Dropdown option label for system default for NostrImg image uploader. + Note contains "nsec1" private key. Are you sure? Note contains "nsec1" private key. Are you sure? @@ -726,6 +758,11 @@ Sentence composed of 2 variables to describe how many people are following a use Nudity or explicit content Button for user to report that the account or content has nudity or explicit content. + + Ok + Ok + Button to dismiss the alert. + Only you can see this message and who sent it. Only you can see this message and who sent it. @@ -998,6 +1035,11 @@ Picker option to indicate that a zap should be sent privately and not identify t Select default wallet Prompt selection of user's default wallet + + Select image uploader + Select image uploader + Prompt selection of user's image uploader + Send a message to start the conversation... Send a message to start the conversation... @@ -1026,6 +1068,16 @@ Picker option to indicate that a zap should be sent privately and not identify t Button to share an image. Button to share the link to a profile. + + Share Note + Share Note + Title text to indicate that the buttons below are meant to be used to share a note with others. + + + Share Via... + Share Via... + Button to present iOS share sheet + Show Show @@ -1078,6 +1130,11 @@ Picker option to indicate that a zap should be sent privately and not identify t Thanks! Button to close out of alert that informs that the action to block a user was successful. + + The address should either begin with LNURL or should look like an email address. + The address should either begin with LNURL or should look like an email address. + Giving the description of the alert message. + They are impersonating someone They are impersonating someone @@ -1283,6 +1340,11 @@ YOU WILL NO LONGER BE ABLE TO LOG INTO DAMUS USING THIS ACCOUNT KEY. Zap Type Header text to indicate that the picker below it is to choose the type of zap to send. + + Zap Vibration + Zap Vibration + Setting to enable vibration on zap + Zapping... Zapping... diff --git a/damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings b/damus/en-US.xcloc/Source Contents/damus/en-US.lproj/Localizable.strings index 074e150ddb5c1fbf4c790f74b0eeceb1a9821ea5..bfb2e2231e4d43cad36f8b8aafc143bfea80acc0 100644 GIT binary patch delta 1579 zcmcIkPe_wt7=K60*&MnxmrgULrl#WD!J@Jd{MzDr)_CofWJo&{C zbb3K&tr}4;^rB2OXRx&)T?z3rD4fLFL7eiYtZKC3x`}M|e3KU*gYf1PSFndggf6ud zTgE|4#4?O11``=j)9FUl(K4*b@xTK!LLx{jtxf7&>(LyxMyI;;G{0=r1)v`h3YB(S zbWVxM0Ij-G=a}0?AIc2$<5iY=++F0L108#5rbl0%gpWh9NyQO3AH<2_Vt7Ne(pExm zr;K|#`37n;t=*_f-PB_@e;ZK`BUL`mt-Xp!7~LTVhmj*^!}&1soFlv89W@}=o2th1 z8Rb&YW{^=!@2u%5cicvQZspUr+m+RAZ~;gWz!^C4!!c*EQ84K`1Zpt;U9Yjwg?rk% z&EhGq+Zdz2WA#aA6)FBXWXnCclcS1+qlD;oP9#UoyC2J{%2FrCjk}ebK#`@7;EVyK#cDG}o!K&k8=~ zCucg{P&c$Z!Y;p5K{7~?$zD!#%UXK+IZHk9>5$Ic3iT1Jn z&35f+E%M(yuLF(fX{n~xv?T_BRYET(&#EuJOgQ+ZZrb`%bLBkp4dzB+Ao*qV00ci^ w3CI+Ap8zcsUoF&_bzCqAk!RMDcah0pCuy-+Yy5SN#z+&R2cPv>H8Z>Z0pZL?=3g%~*pZBI*lhHv%3$(>J6ziXlo@w00{}eWJ#qj5 diff --git a/damus/fr-CA.lproj/InfoPlist.strings b/damus/fr-CA.lproj/InfoPlist.strings new file mode 100644 index 0000000000000000000000000000000000000000..025bd7ade787118f2699eeee5a7ca654adf66357 GIT binary patch literal 810 zcmaiy-Acni6olv6r&w|$6toW@UQ|OtkWvsIASPN1F$v}ed|NN=OQ_%3q}_%Fda>D@ z-JLlzv-|fu*Gx`#YE>vxu2-r|Th*$l5`9q@%pZPdrnxQ@>0ZkbCLSSH!}$p8EhAFw zS6Wyj-M}!_^?a98-fWV0txxoH?4@4+6&jYlGItNCae78eqK$VI^Q}2+s7ejr63>og zdbcY*9q@(@*lA?&y&%^{@9-C%_YLlpzM)4>FI(x8uc%sdIIlL<54xPb8Fm+rleu=x z)!=Xk^Kqh6&e!xW=~#k$r2h-pgkd+k;I8eq_j;^baOd!PKAFHjX79NJ+cej4Rw@2U zlx1|a49s_UIhMiYNiH1-Q(YZgT4k&4ux?!TdK=b_*|DCm+ws5gN$mUCZ0IfL`?pc+ HddT-5-DQld literal 0 HcmV?d00001 diff --git a/damus/fr-CA.lproj/Localizable.strings b/damus/fr-CA.lproj/Localizable.strings new file mode 100644 index 0000000000000000000000000000000000000000..f50a6296a1e01f96fb4605464e27158e640a8b3a GIT binary patch literal 75910 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 + + + + collapsed_event_view_other_notes + + NSStringLocalizedFormatKey + %#@NOTES@ + NOTES + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + d + one + ... %d autre note ... + many + ... %d autres notes ... + other + ... %d autres notes ... + + + followers_count + + NSStringLocalizedFormatKey + %#@FOLLOWERS@ + FOLLOWERS + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + d + one + Abonné + many + Abonnés + other + Abonnés + + + following_count + + NSStringLocalizedFormatKey + %#@FOLLOWING@ + FOLLOWING + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + d + one + Abonnement + many + Abonnements + other + Abonnements + + + reacted_tagged_in_3 + + NSStringLocalizedFormatKey + %#@REACTED@ + REACTED + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + d + one + %2$@ et %1$d autre ont réagi à une note dans laquelle vous apparaissez + many + %2$@ et %1$d autres ont réagi à une note dans laquelle vous apparaissez + other + %2$@ et %1$d autres ont réagi à une note dans laquelle vous apparaissez + + + reacted_your_post_3 + + NSStringLocalizedFormatKey + %#@REACTED@ + REACTED + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + d + one + %2$@ et %1$d autre ont réagi à votre note + many + %2$@ et %1$d autres ont réagi à votre note + other + %2$@ et %1$d autres ont réagi à votre note + + + reacted_your_profile_3 + + NSStringLocalizedFormatKey + %#@REACTED@ + REACTED + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + d + one + %2$@ et %1$d autre ont réagi à votre profil + many + %2$@ et %1$d autres ont réagi à votre profil + other + %2$@ et %1$d autres ont réagi à votre profil + + + reactions_count + + NSStringLocalizedFormatKey + %#@REACTIONS@ + REACTIONS + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + d + one + Réaction + many + Réactions + other + Réactions + + + relays_count + + NSStringLocalizedFormatKey + %#@RELAYS@ + RELAYS + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + d + one + Relai + many + Relais + other + Relais + + + replying_to_two_and_others + + NSStringLocalizedFormatKey + %#@OTHERS@ + OTHERS + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + d + one + Réponse à %2$@, %3$@ & %1$d autre + many + Réponse à %2$@, %3$@ & %1$d autres + other + Réponse à %2$@, %3$@ & %1$d autres + + + reposted_tagged_in_3 + + NSStringLocalizedFormatKey + %#@REPOSTED@ + REPOSTED + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + d + one + %2$@ et %1$d autre ont cité une note dans laquelle vous apparaissez + many + %2$@ et %1$d autres ont cité une note dans laquelle vous apparaissez + other + %2$@ et %1$d autres ont republié une note dans laquelle vous apparaissez + + + reposted_your_post_3 + + NSStringLocalizedFormatKey + %#@REPOSTED@ + REPOSTED + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + d + one + %2$@ et %1$d autre ont cité votre note + many + %2$@ et %1$d autres ont cité votre note + other + %2$@ et %1$d autres ont republié votre note + + + reposted_your_profile_3 + + NSStringLocalizedFormatKey + %#@REPOSTED@ + REPOSTED + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + d + one + %2$@ et %1$d autre ont republié votre profile + many + %2$@ et %1$d autres ont republié votre profile + other + %2$@ et %1$d autres ont republié votre profile + + + reposts_count + + NSStringLocalizedFormatKey + %#@REPOSTS@ + REPOSTS + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + d + one + Republication + many + Republications + other + Republications + + + sats_count + + NSStringLocalizedFormatKey + %1$#@SATS@ + SATS + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + @ + one + %2$@ sat + many + %2$@ sats + other + %2$@ sats + + + zapped_tagged_in_3 + + NSStringLocalizedFormatKey + %#@ZAPPED@ + ZAPPED + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + d + one + %2$@ et %1$d autre ont zappé une note dans laquelle vous apparaissez + many + %2$@ et %1$d autres ont zappé une note dans laquelle vous apparaissez + other + %2$@ et %1$d autres ont zappé une note dans laquelle vous apparaissez + + + zapped_your_post_3 + + NSStringLocalizedFormatKey + %#@ZAPPED@ + ZAPPED + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + d + one + %2$@ et %1$d autre ont zappé votre note + many + %2$@ et %1$d autres ont zappé votre note + other + %2$@ et %1$d autres ont zappé votre note + + + zapped_your_profile_3 + + NSStringLocalizedFormatKey + %#@ZAPPED@ + ZAPPED + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + d + one + %2$@ et %1$d autre ont zappé votre profile + many + %2$@ et %1$d autres ont zappé votre profile + other + %2$@ et %1$d autres ont zappé votre profile + + + zaps_count + + NSStringLocalizedFormatKey + %#@ZAPS@ + ZAPS + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + d + one + Zap + many + Zaps + other + Zaps + + + + diff --git a/damus/fr-FR.lproj/Localizable.strings b/damus/fr-FR.lproj/Localizable.strings index d749ef8a4cbc3ce1f9160da7c6a710a216d86026..8f39846267b1edc1033886533deb4638109ae5de 100644 GIT binary patch delta 49 zcmdmWk!8b0mWC~iN7&_q84?*X8H&NUm?4#+ia~+Fg~64<2Z%!$T(`evXFRI_0Cc(y AUH||9 delta 59 zcmdmRk!9CKmWC~iN7ywT847@~l%bL#m7$73fuR`4E&|fQ4517GKp4c}$>7W2$`G{u JF+1Z~1pxRg4;%mh diff --git a/damus/hu_HU.lproj/InfoPlist.strings b/damus/hu-HU.lproj/InfoPlist.strings similarity index 100% rename from damus/hu_HU.lproj/InfoPlist.strings rename to damus/hu-HU.lproj/InfoPlist.strings diff --git a/damus/hu_HU.lproj/Localizable.strings b/damus/hu-HU.lproj/Localizable.strings similarity index 100% rename from damus/hu_HU.lproj/Localizable.strings rename to damus/hu-HU.lproj/Localizable.strings diff --git a/damus/hu_HU.lproj/Localizable.stringsdict b/damus/hu-HU.lproj/Localizable.stringsdict similarity index 100% rename from damus/hu_HU.lproj/Localizable.stringsdict rename to damus/hu-HU.lproj/Localizable.stringsdict diff --git a/damus/pl-PL.lproj/Localizable.stringsdict b/damus/pl-PL.lproj/Localizable.stringsdict index 7bb9555b..01f4fb66 100644 --- a/damus/pl-PL.lproj/Localizable.stringsdict +++ b/damus/pl-PL.lproj/Localizable.stringsdict @@ -15,9 +15,9 @@ one ... %d inna notatka ... few - ... %d other notes ... + ... %d innych notatek ... many - ... %d other notes ... + ... %d innych notatek ... other ... %d inne notatki ... @@ -155,11 +155,11 @@ one Przekaźnik few - Relays + Przekaźniki many - Relays - other Przekaźników + other + Przekaźniki replying_to_two_and_others @@ -355,11 +355,11 @@ one Zap few - Zaps + Zapy many - Zaps - other Zapów + other + Zapy diff --git a/damus/sv_SE.lproj/InfoPlist.strings b/damus/sv-SE.lproj/InfoPlist.strings similarity index 100% rename from damus/sv_SE.lproj/InfoPlist.strings rename to damus/sv-SE.lproj/InfoPlist.strings diff --git a/damus/sv_SE.lproj/Localizable.strings b/damus/sv-SE.lproj/Localizable.strings similarity index 99% rename from damus/sv_SE.lproj/Localizable.strings rename to damus/sv-SE.lproj/Localizable.strings index 0287302a7736eeefa534501e6cdd94490a99a335..b295dfd734426bfde70236b8b9a10ccf8e05e258 100644 GIT binary patch delta 80 zcmV-W0I&a^!33DW1hBF{lX!^^liGw1mw+AtShFNRx(5a10B!(elcA9nla4?jvm8iJ mX_FSyAd}vCBD1!!fC7_jq70K<2o95=G%AyDl@7Cnv>I$hs37eC delta 96 zcmbPnkY(OMmJOTixm_5F7%~}>8L}CQCp)@iZ`N|y#?GD%5t=-AqWI(q4hoy4JOVO# xeHflFqywP>Ln%YS^oNp+!jm`rQfc#=jSWnbvo?xNUSOiNxnPS%4gek*B31wZ diff --git a/damus/sv_SE.lproj/Localizable.stringsdict b/damus/sv-SE.lproj/Localizable.stringsdict similarity index 100% rename from damus/sv_SE.lproj/Localizable.stringsdict rename to damus/sv-SE.lproj/Localizable.stringsdict diff --git a/transifex.yml b/transifex.yml index f109a5ca..72c89586 100644 --- a/transifex.yml +++ b/transifex.yml @@ -15,16 +15,252 @@ git: translation_files_expression: 'damus/.lproj/' settings: + # Mapping of most of the supported locale codes in Transifex to the locale code format that Xcode expects. + # Locale codes that are the identical between Transifex and Xcode do not need to be listed. language_mapping: en_US: en-US + aa_DJ: aa-DJ + af_ZA: af-ZA + am_ET: am-ET + ar_AA: ar-AA + ar_AE: ar-AE + ar_DZ: ar-DZ + ar_EG: ar-EG + ar_IQ: ar-IQ + ar_JO: ar-JO + ar_LB: ar-LB + ar_SA: ar-SA + ar_SD: ar-SD + ar_SY: ar-SY + as_IN: as-IN + ast_ES: ast-ES + az_AZ: az-AZ + az_IR: az-IR + be_BY: be-BY + bem_ZM: bem-ZM + bg_BG: bg-BG + bg_US: bg-US + bn_BD: bn-BD + bn_IN: bn-IN + bo_CN: bo-CN + bqi_IR: bqi-IR + br_FR: br-FR + bs_BA: bs-BA + bs_BA-SRP: bs-BA-SRP + ca_ES: ca-ES + cs_CZ: cs-CZ + cy_GB: cy-GB + da_DK: da-DK + de_AT: de-AT + de_CH: de-CH + de_DE: de-DE + dz_BT: dz-BT + el_CY: el-CY + el_DE: el-DE el_GR: el-GR + en_AE: en-AE + en_AL: en-AL + en_AT: en-AT + en_AU: en-AU + en_BA: en-BA + en_BA-SRP: en-BA-SRP + en_BD: en-BD + en_BE: en-BE + en_BG: en-BG + en_BH: en-BH + en_BR: en-BR + en_CA: en-CA + en_CH: en-CH + en_CL: en-CL + en_CO: en-CO + en_CY: en-CY + en_CZ: en-CZ + en_DE: en-DE + en_DK: en-DK + en_EC: en-EC + en_EG: en-EG + en_ES: en-ES + en_FI: en-FI + en_FJ: en-FJ + en_FR: en-FR + en_GB: en-GB + en_GH: en-GH + en_GR: en-GR + en_HK: en-HK + en_HR: en-HR + en_HU: en-HU + en_IE: en-IE + en_IN: en-IN + en_IT: en-IT + en_JP: en-JP + en_KR: en-KR + en_KW: en-KW + en_LK: en-LK + en_MX: en-MX + en_MY: en-MY + en_NG: en-NG + en_NL: en-NL + en_NO: en-NO + en_NZ: en-NZ + en_PE: en-PE + en_PG: en-PG + en_PH: en-PH + en_PK: en-PK + en_PL: en-PL + en_PR: en-PR + en_PT: en-PT + en_QA: en-QA + en_RO: en-RO + en_RS: en-RS + en_SA: en-SA + en_SE: en-SE + en_SG: en-SG + en_SI: en-SI + en_SK: en-SK + en_TT: en-TT + en_UG: en-UG + en_ZA: en-ZA + en_ZM: en-ZM + en_ee: en-ee + en_lt: en-lt + en_lv: en-lv es_419: es-419 + es_AR: es-AR + es_BO: es-BO + es_CL: es-CL + es_CO: es-CO + es_CR: es-CR + es_CU: es-CU + es_DO: es-DO + es_EC: es-EC + es_ES: es-ES + es_GT: es-GT + es_HN: es-HN + es_MX: es-MX + es_NI: es-NI + es_PA: es-PA + es_PE: es-PE + es_PR: es-PR + es_PY: es-PY + es_SA: es-SA + es_SV: es-SV + es_US: es-US + es_UY: es-UY + es_VE: es-VE + et_EE: et-EE + eu_ES: eu-ES + fa_AF: fa-AF + fa_IR: fa-IR + ff_SN: ff-SN + fi_FI: fi-FI + fil_PH: fil-PH + fo_FO: fo-FO + fr_BE: fr-BE + fr_CA: fr-CA + fr_CH: fr-CH + fr_CI: fr-CI + fr_CM: fr-CM fr_FR: fr-FR + fr_GA: fr-GA + fr_LU: fr-LU + fy_NL: fy-NL + ga_IE: ga-IE + gl_ES: gl-ES + gu_IN: gu-IN + gug_PY: gug-PY + he_IL: he-IL + hi_IN: hi-IN + hr_BA: hr-BA + hr_BA-SRP: hr-BA-SRP + hr_HR: hr-HR + ht_HT: ht-HT + hu_HU: hu-HU + hu_RO: hu-RO + hu_SK: hu-SK + hy_AM: hy-AM + hy_RU: hy-RU + hye_RU: hye-RU + id_ID: id-ID + is_IS: is-IS + it_CH: it-CH it_IT: it-IT + ja_JP: ja-JP + ka_GE: ka-GE + kk_KZ: kk-KZ + km_KH: km-KH + kn_IN: kn-IN + ko_KR: ko-KR + ks_IN: ks-IN + ku_IQ: ku-IQ + lg_UG: lg-UG + lo_LA: lo-LA + loz_ZM: loz-ZM + lt_LT: lt-LT lv_LV: lv-LV + mhr_RU: mhr-RU + mk_MK: mk-MK + ml_IN: ml-IN + mn_MN: mn-MN + mr_IN: mr-IN + ms_BN: ms-BN + ms_MY: ms-MY + mt_MT: mt-MT + my_MM: my-MM + nb_NO: nb-NO + ne_NP: ne-NP + nl_BE: nl-BE + nl_NL: nl-NL + nn_NO: nn-NO + no_NO: no-NO + or_IN: or-IN + pa_IN: pa-IN + pa_PK: pa-PK pl_PL: pl-PL + ps_AF: ps-AF + pt_AO: pt-AO + pt_BR: pt-BR + pt_MZ: pt-MZ pt_PT: pt-PT + qu_EC: qu-EC + ro_MD: ro-MD + ro_RO: ro-RO + ru_RU: ru-RU + ru_UA: ru-UA + ru_ee: ru-ee + ru_lt: ru-lt + ru_lv: ru-lv + si_LK: si-LK + sk_SK: sk-SK + sl_SI: sl-SI + sq_AL: sq-AL + sr_BA-SRP: sr-BA-SRP + sr_ME: sr-ME + sr_RS: sr-RS + st_ZA: st-ZA + sv_FI: sv-FI + sv_SE: sv-SE + sw_CD: sw-CD + sw_KE: sw-KE + sw_TZ: sw-TZ + sw_UG: sw-UG + ta_IN: ta-IN + ta_LK: ta-LK + te_IN: te-IN + tg_TJ: tg-TJ + th_TH: th-TH + tk_TM: tk-TM + tl_PH: tl-PH + tr_CY: tr-CY + tr_DE: tr-DE tr_TR: tr-TR + uk_UA: uk-UA + ur_PK: ur-PK + uz_UZ: uz-UZ + vi_VN: vi-VN + wo_SN: wo-SN + yue_CN: yue-CN zh_CN: zh-CN zh_HK: zh-HK - zh_TW: zh-TW \ No newline at end of file + zh_SG: zh-SG + zh_TW: zh-TW + zu_ZA: zu-ZA