Skip to content

Add Korean localization support#5267

Open
hellosunghyun wants to merge 2 commits intoRanchero-Software:mainfrom
hellosunghyun:codex/add-korean-localization
Open

Add Korean localization support#5267
hellosunghyun wants to merge 2 commits intoRanchero-Software:mainfrom
hellosunghyun:codex/add-korean-localization

Conversation

@hellosunghyun
Copy link
Copy Markdown

@hellosunghyun hellosunghyun commented Apr 19, 2026

Summary

  • add Korean localization resources for the macOS and iOS apps, share extensions, widget, Safari extension, and intents
  • register ko as a supported localization in the Xcode project and populate the shared string catalogs
  • localize remaining hard-coded English UI strings in account, settings, search, and share flows so the new locale is actually reachable
  • refine the iOS Starred label to match the Korean terminology used elsewhere in the app after manual QA

Why

NetNewsWire already had localization plumbing in place, but the app shipped only with English UI resources. This change adds a first Korean translation pass across the app targets and closes a handful of hard-coded English strings that would otherwise bypass localization.

Validation

  • xcodebuild -project NetNewsWire.xcodeproj -scheme NetNewsWire -destination "platform=macOS,arch=arm64" build CODE_SIGNING_ALLOWED=NO
  • xcodebuild -project NetNewsWire.xcodeproj -scheme NetNewsWire-iOS -destination 'platform=iOS Simulator,id=8A7BCEDF-9115-4F24-AEEB-CECA80D86ED3' build CODE_SIGNING_ALLOWED=NO
  • plutil -lint on the generated ko.lproj/*.strings files, plus the updated iOS/Resources/ko.lproj/Localizable.strings
  • manual Korean-locale QA on macOS for the launch dialog, main window, Preferences > General, Preferences > Accounts, and the add-account sheet
  • manual Korean-locale QA on iOS simulator for the Smart Feeds screen and first-launch notification prompt

Notes

  • I did not use the earlier local macOS test run as a final gate because xcodebuild test completed the suites but then hung during teardown on this machine

@hellosunghyun hellosunghyun marked this pull request as ready for review April 19, 2026 12:51
Copilot AI review requested due to automatic review settings April 19, 2026 12:51
@hellosunghyun hellosunghyun changed the title [codex] Add Korean localization support Add Korean localization support Apr 19, 2026
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds first-pass Korean (ko) localization across NetNewsWire’s Apple platform targets and replaces remaining hard-coded English UI strings so the Korean locale is fully reachable.

Changes:

  • Added ko.lproj resources for iOS/macOS apps plus share extensions, widget, Safari extension, and intents.
  • Registered ko as a supported region in the Xcode project and populated shared string catalogs (.strings / .xcstrings).
  • Replaced remaining hard-coded English strings in several iOS/macOS UI flows with localized lookups.

Reviewed changes

Copilot reviewed 42 out of 42 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
iOS/ko.lproj/Main.strings Adds Korean storyboard string table for iOS Main storyboard.
iOS/ShareExtension/ko.lproj/Localizable.strings Adds Korean strings for iOS share extension UI.
iOS/ShareExtension/ko.lproj/InfoPlist.strings Adds Korean Info.plist display strings for iOS share extension.
iOS/ShareExtension/ShareViewController.swift Replaces hard-coded share extension strings with NSLocalizedString.
iOS/Settings/SettingsViewController.swift Localizes error titles/messages used in OPML import/export flows.
iOS/Settings/AboutView.swift Switches previously verbatim SwiftUI text to localized Text keys.
iOS/Settings/AboutCreditView.swift Makes contributor section headers localizable via LocalizedStringKey.
iOS/Settings/AboutContributor.swift Localizes the “and many more” contributor label.
iOS/Resources/ko.lproj/Localizable.strings Adds Korean app-wide Localizable.strings entries for iOS.
iOS/Resources/ko.lproj/InfoPlist.strings Adds Korean iOS app Info.plist strings (privacy + display strings).
iOS/IntentsExtension/ko.lproj/Localizable.strings Adds Korean string(s) for iOS intents extension.
iOS/IntentsExtension/ko.lproj/InfoPlist.strings Adds Korean Info.plist display strings for iOS intents extension.
iOS/Inspector/AccountInspectorViewController.swift Localizes sync-content footer string.
iOS/Article/ArticleSearchBar.swift Localizes key command title and accessibility labels for search UI.
iOS/Account/ReaderAPIAccountViewController.swift Localizes show/hide password buttons and error title.
iOS/Account/NewsBlurAccountViewController.swift Localizes show/hide password buttons and error title.
iOS/Account/FeedbinAccountViewController.swift Localizes show/hide password buttons.
Widget/ko.lproj/InfoPlist.strings Adds Korean widget Info.plist strings.
Widget/Resources/Localizable.xcstrings Adds Korean localizations for widget strings.
Shared/DefaultAccountNames.xcstrings Adds Korean device-variant default account names.
NetNewsWire.xcodeproj/project.pbxproj Registers ko region and wires localized resources into the project.
Mac/ko.lproj/UnifiedWindow.strings Adds Korean strings for macOS unified window nib/xib.
Mac/ko.lproj/RenameSheet.strings Adds Korean strings for macOS rename sheet nib/xib.
Mac/ko.lproj/Preferences.strings Adds Korean strings for macOS Preferences UI.
Mac/ko.lproj/Main.strings Adds Korean strings for macOS Main storyboard/menu resources.
Mac/ko.lproj/AddFolderSheet.strings Adds Korean strings for macOS add-folder sheet.
Mac/ko.lproj/AddFeedSheet.strings Adds Korean strings for macOS add-feed sheet.
Mac/ko.lproj/AddFeedFromListSheet.strings Adds Korean strings for macOS add-feed-from-list sheet.
Mac/ShareExtension/ko.lproj/ShareViewController.strings Adds Korean strings for macOS share extension UI file.
Mac/ShareExtension/ko.lproj/Localizable.strings Adds Korean localized strings used by macOS share extension.
Mac/ShareExtension/ko.lproj/InfoPlist.strings Adds Korean Info.plist strings for macOS share extension.
Mac/ShareExtension/ShareViewController.swift Localizes “Folders” popup menu title.
Mac/SafariExtension/ko.lproj/SafariExtensionViewController.strings Adds Korean strings for Safari extension UI.
Mac/SafariExtension/ko.lproj/InfoPlist.strings Adds Korean Info.plist strings for Safari extension.
Mac/Resources/ko.lproj/Localizable.strings Adds Korean app-wide Localizable.strings entries for macOS.
Mac/Resources/ko.lproj/InfoPlist.strings Adds Korean macOS app Info.plist strings.
Mac/Preferences/Accounts/AddAccountsView.swift Localizes macOS add-account sheet SwiftUI strings.
Mac/Preferences/Accounts/AccountsPreferencesViewController.swift Fixes account-delete alert localization to use formatted strings.
Mac/Preferences/Accounts/AccountsDetailView.swift Localizes macOS account detail labels/help text.
Mac/MainWindow/Timeline/TimelineViewController.swift Localizes swipe action titles (Read/Unread, Star/Unstar).
Mac/MainWindow/AddFeed/FolderTreeMenu.swift Localizes add-feed folder popup menu title.
Intents/ko.lproj/Intents.strings Adds Korean strings for Siri intent definition resources.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +50 to +52
/* Delete Theme Message */
"Are you sure you want to delete the theme “%@”?." = "테마 “%@”을 삭제하시겠습니까?.";

Copy link

Copilot AI Apr 19, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The Korean value for the delete-theme confirmation string ends with an extra "?." sequence, which will be shown to users. Update the localized value to use normal punctuation (typically just a trailing question mark) and consider fixing the English source string/key so other locales don’t inherit the typo.

Copilot uses AI. Check for mistakes.
Comment on lines +576 to +579
/* Search smart feed title prefix */
"Search: " = "검색:";

/* See articles in Folder */
Copy link

Copilot AI Apr 19, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The Korean translation for the smart-feed title prefix "Search: " drops the trailing space. This prefix is concatenated with the query string in code, so the UI will render as "검색:query" without spacing. Preserve the trailing space in the localized value (or switch the code to a formatted string such as "Search: %@").

Copilot uses AI. Check for mistakes.
Comment on lines +502 to +508

/* Search smart feed title prefix */
"Search: " = "검색:";

/* Search */
"Search: %@" = "검색: %@";

Copy link

Copilot AI Apr 19, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The Korean translation for the smart-feed title prefix "Search: " drops the trailing space. This prefix is concatenated with the query string in code, so the UI will render as "검색:query" without spacing. Preserve the trailing space in the localized value (or use the existing formatted key "Search: %@" everywhere).

Copilot uses AI. Check for mistakes.
Comment on lines 176 to 190
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "This widget display unread articles."
}
},
"ko" : {
"stringUnit" : {
"state" : "translated",
"value" : "이 위젯은 읽지 않은 기사를 표시합니다."
}
}
}
}
Copy link

Copilot AI Apr 19, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is a grammatical error in the English source string: "This widget display unread articles." should be "This widget displays unread articles." Since xcstrings entries are edited in this PR, correcting it now avoids shipping the typo to English users.

Copilot uses AI. Check for mistakes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants