Added string pluralization support#102
Merged
marcprux merged 4 commits intoskiptools:mainfrom Mar 14, 2026
Merged
Conversation
5 tasks
Member
|
Could we get some tests in https://github.com/skiptools/skip-foundation/blob/main/Tests/SkipFoundationTests/Foundation/LocaleTests.swift? |
Contributor
Author
Yes, I’ve added some test cases to verify the parsing and formatting of .stringsdict files 👍🏻 |
5 tasks
Member
|
This is a great feature! Thanks very much! |
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.
This PR adds string pluralization support by reading out all
.stringsdictfiles inBundle.swiftand converting their contents into ICU MessageFormat strings withinPropertyListSerialization.swift. These strings are then stored in the existinglocalizedTablesmapping, allowingString.localizedStringWithFormatto leverage the native MessageFormat on Android, which ensures that plural rules are resolved correctly according to the user's locale.To try it out, you can check out the updated
LocalizationPlaygroundin Skip Showcase.Related PR:
Notes & Limitations:
LocalizationPlayground.swift), these may not be correctly applied if the underlying system locale is set to a language like English, which only supports "one" and "other". However, since users typically have their devices set to their native locale, and this behavior is consistent with Apple's documentation for localizedStringWithFormat, I believe this limitation is negligible in practice.localizedStringWithFormat, it is because as far as I understood it, constructors likeString(format:locale:arguments:)are not supported in Skip since it does not wrap Kotlin's primitive types (see Skip Docs). Therefore, I made the decision to use thelocalizedStringWithFormatfunction instead to be able to archive the pluralization support.Thank you for contributing to the Skip project! Please use this space to describe your change and add any labels (bug, enhancement, documentation, etc.) to help categorize your contribution.
Please review the contribution guide at https://skip.dev/docs/contributing/ for advice and guidance on making high-quality PRs.
Skip Pull Request Checklist:
swift test=> I used AI assistance while creating the ICU conversion. I manually verified the changes using Skip Showcase and my own app, and at least all of my *.stringsdict files functioned as expected on both platforms.