Add Korean (ko) translation for Android and iOS - #821
Open
maxbitcoiner wants to merge 10 commits into
Open
Conversation
Translate all 333 strings in important_strings.xml, the file ACINQ flags as the translation priority. Terminology follows existing conventions in the codebase: - Protocol/product names kept in Latin (swap, splice, BOLT, Tor, Electrum, LSP), matching the French translation's approach - liquidity -> 유동성, inbound liquidity -> 수신 유동성 - automated channel management -> 자동 채널 관리 - recovery phrase -> 복구 문구 All placeholders (%1$s, %2$s, %%), HTML markup (<b>, <a href>), newlines and escaped apostrophes are preserved. strings.xml is copied as-is for now and falls back to English until translated.
Complete the Android localization by translating the remaining 730 translatable strings in strings.xml. Following the guidelines: - Strings marked translatable="false" (45) are left untouched - The lorem ipsum placeholders (2) are left untouched - Protocol and brand names stay in English (Bolt11/Bolt12, Tor, Electrum, LNURL, Taproot), as do symbols and units - All %1$s/%2$s placeholders keep their numbering, %% is preserved, apostrophes are escaped, and <b>/<i>/<a href> markup is kept Android localization is now complete: 1063 strings across both files.
Register Korean in the Xcode project and translate the localized resources that live outside the string catalogs: - Add ko to knownRegions - Add ko.lproj/about.html and ko.lproj/liquidity.html, registered in the corresponding variant groups (HTML markup, links and <b> emphasis are preserved) - Translate InfoPlist.xcstrings (permission prompts); CFBundleName stays "Phoenix" The string catalogs themselves (Localizable/Currencies) are handled separately since they carry every language in a single file.
Translate 840 of the 1310 strings in the iOS string catalog. Terminology matches the Android translation: protocol and product names stay in English (swap, splice, BOLT, Tor, Electrum, LSP), liquidity is 유동성, automated channel management is 자동 채널 관리, and recovery phrase is 복구 문구. Format placeholders (%@, %1$@, %lld) keep their positional numbering as used by the English source. Remaining strings fall back to English until translated.
Translate the remaining 190 strings, bringing the iOS string catalog to full Korean coverage (1310 strings). Placeholders follow whatever the English source uses: positional (%1$@, %2$@) where the source is positional, plain %@ otherwise. Markdown emphasis and newlines are preserved.
Add Korean names for all 156 entries in the currency catalog. These appear in the fiat currency picker and are also used by its search field, so Korean names let users search in their own language. Includes the four exchange-rate descriptors (black/blue/free market, official rate) alongside the currency names.
Review all 2479 translated strings and apply 53 improvements:
- Fix meaning errors: "Bolt12 코드를 이름에 연결" reversed the direction
of the original ("link a code to a name"); "송금" narrowed the sense
of outgoing payment
- Drop literal English constructions: "~하는 유일한 방법은 ~것입니다",
"함께 작동하는", "충돌에 따라 이루어졌습니다"
- Fix grammar: "확인된 후까지" is not idiomatic Korean
- Follow Korean conventions: "&" reads as "및", warnings work better as
full sentences ("수수료율이 낮습니다!"), status labels take the
completed form ("브로드캐스트됨")
- Remove redundancy: "온체인 수수료를 충당하기 위한 비용", "기기의 설정"
Placeholders, HTML markup, newlines and escaping are unchanged.
A cross-platform audit found 49 English strings that had been given different Korean translations depending on where they appeared. Since Android and iOS share most of their wording, these now match. Notable fixes: - "Outgoing" was alternating between 발신 and 송신 across payment type labels; standardised on 발신 - Transaction/Total/Redeem/Support/Preimage/Mutual were translated differently on each platform - Swap-in/Swap capitalisation was inconsistent - Warnings and error messages now consistently use full sentences Link and Privacy intentionally keep separate translations: they appear in genuinely different contexts (URL label vs verb, policy link vs LNURL-auth explanation vs settings entry).
A second audit covering strings of any length (the earlier pass only looked at short labels) found 27 sentences that Android and iOS translated differently despite sharing the same English source. Also fixes one placeholder particle: %2$@를 becomes %2$@을(를), since the substituted value may end in either a vowel or a consonant. Only "Link" and "Privacy" still differ per platform, which is correct: they appear in different contexts (URL label vs verb; policy link vs LNURL-auth explanation vs settings entry).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds a Korean localization covering both apps.
Scope
values-ko/important_strings.xmlvalues-ko/strings.xmlLocalizable.xcstringsCurrencies.xcstringsInfoPlist.xcstringsko.lproj/about.html,ko.lproj/liquidity.htmlkois registered inknownRegionsand both HTML files are added to their variant groups.Following the guidelines
important_strings.xmlwas done first, as requestedtranslatable="false"(45) and the lorem ipsum placeholders are left untouched%1$s/%@/%lldkeep their numbering;%%is preserved<b>,<i>and<a href>markup is keptTerminology
Technical terms stay in English where a Korean rendering would be less clear than the original, which is also what the French translation does:
swap,splice,BOLT,Tor,Electrum,LSP,LNURL,Taproot,Preimage.Terms that are well established in Korean are translated: 비트코인 (bitcoin), 라이트닝 (Lightning), 온체인 (on-chain), 시드 (seed), 채널 (channel), 유동성 (liquidity), 자동 채널 관리 (automated channel management), 복구 문구 (recovery phrase).
Android and iOS share wording wherever they share an English string, so the two apps read the same.
Notes for reviewers
Translated with the UI context in hand: each key was matched against its usage in the Kotlin/Swift sources (screen, widget type, surrounding code) so that buttons read as buttons and error messages read as full sentences. Around 87% of strings could be traced to a call site; the rest were resolved from the key name and the developer comment.
I maintain the Korean translations for several Bitcoin projects on Transifex, so the terminology here is consistent with what Korean users already see elsewhere in the ecosystem:
Happy to adjust any wording you'd prefer differently.