Version 7.2.1#157
Conversation
📝 WalkthroughWalkthroughAdds history filtering/session lifecycle APIs to device/simulator Swift interfaces, reorders XCFramework slices, bumps version to 7.2.1, introduces a new UI color token, and adds Base and localized strings for All/Open/Closed/Unread (with counts), updating code-signing metadata. ChangesHistory filtering APIs and UI strings
Possibly related PRs
|
There was a problem hiding this comment.
Actionable comments posted: 12
Note
Due to the large number of review comments, Critical, Major severity comments were prioritized as inline comments.
🧹 Nitpick comments (2)
KustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/ro.lproj/Localizable.strings (1)
111-117: 🏗️ Heavy liftUse plural rules for Romanian count labels.
Line 111, Line 113, Line 115, and Line 117 use one
%dform each; Romanian typically needs plural categories, so forms like(... 1)can read incorrectly. PreferLocalizable.stringsdictpluralization for these keys and keep.stringsas fallback labels.#!/bin/bash # Verify whether plural rules are already implemented for these keys. # Expected: either stringsdict entries exist for these keys, or this confirms the gap. fd -i "Localizable.stringsdict" . # Find all localized count keys currently defined in .strings files rg -n --iglob "*.strings" '"com\.kustomer\.(All|Open|Closed|Unread) \(%d\)"' # If stringsdict files exist, inspect whether these keys are pluralized there rg -n --iglob "*.stringsdict" 'com\.kustomer\.(All|Open|Closed|Unread)'🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@KustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/ro.lproj/Localizable.strings` around lines 111 - 117, The Romanian .strings keys that include counts ("com.kustomer.All (%d)", "com.kustomer.Open (%d)", "com.kustomer.Closed (%d)", "com.kustomer.Unread (%d)") need proper pluralization via a Localizable.stringsdict rather than a single %d form; add a Localizable.stringsdict entry for each base key ("com.kustomer.All", "com.kustomer.Open", "com.kustomer.Closed", "com.kustomer.Unread") that defines Romanian plural categories (one, few, other) with appropriate localized templates (e.g., "%d element" / "%d elemente" variants), and leave the existing .strings entries as simple fallbacks without the %d variants or with a neutral fallback label.KustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/eu.lproj/Localizable.strings (1)
110-117: ⚡ Quick winConsider using .stringsdict for count-dependent strings.
The current implementation uses a single plural form for count-dependent strings (e.g., "Irekiak (%d)" for all counts). In Basque, grammatical forms differ between singular and plural, so "Irekiak (1)" (plural form) may be grammatically incorrect when the count is 1, where "Irekia (1)" (singular) would be more appropriate.
iOS supports
.stringsdictfiles to define language-specific plural rules (one, other, etc.) that automatically select the correct form based on the count. This would improve localization quality across all supported languages.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@KustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/eu.lproj/Localizable.strings` around lines 110 - 117, The Basque localization uses fixed "%d" keys like "com.kustomer.Open (%d)", "com.kustomer.Closed (%d)", "com.kustomer.All (%d)", and "com.kustomer.Unread (%d)" which forces a single plural form; replace these with a Localizable.stringsdict and move the count-dependent keys into that .stringsdict using ICU plural rules (define "one" and "other" forms) so that functions reading keys like "com.kustomer.Open" (with a count parameter) resolve to "Irekia (1)" for one and "Irekiak (%d)" for other; update any code that formats these keys to use the plural-aware key names (e.g., use the same base keys without hardcoded "(%d)") so iOS pluralization chooses the correct Basque form.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: e4e53f0f-48d5-460b-9637-24227263e58f
📒 Files selected for processing (250)
KustomerChat.podspecKustomerChat.xcframework/Info.plistKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Assets.carKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Info.plistKustomerChat.xcframework/ios-arm64/KustomerChat.framework/KustomerChatKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Modules/KustomerChat.swiftmodule/arm64-apple-ios.private.swiftinterfaceKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Modules/KustomerChat.swiftmodule/arm64-apple-ios.swiftdocKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Modules/KustomerChat.swiftmodule/arm64-apple-ios.swiftinterfaceKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/Base.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/af.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/am.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/ar.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/az.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/be.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/bg.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/bn.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/bs.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/ca.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/ceb.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/co.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/cs.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/cy.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/da.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/de.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/el.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/en.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/eo.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/es.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/et.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/eu.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/fa.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/fi.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/fr.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/fy.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/ga.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/gd.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/gl.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/gu.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/ha.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/haw.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/he.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/hi.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/hmn.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/hr.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/ht.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/hu.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/hy.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/id.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/ig.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/is.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/it.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/iw.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/ja.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/jw.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/ka.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/kk.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/km.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/kn.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/ko.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/ku.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/ky.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/la.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/lb.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/lo.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/lt.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/lv.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/mg.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/mi.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/mk.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/ml.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/mn.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/mr.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/ms.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/mt.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/my.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/ne.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/nl.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/no.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/ny.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/or.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/pa.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/pl.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/ps.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/pt.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/ro.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/ru.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/rw.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/sd.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/si.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/sk.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/sl.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/sm.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/sn.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/so.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/sq.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/sr.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/st.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/su.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/sv.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/sw.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/ta.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/te.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/tg.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/th.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/tk.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/tl.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/tr.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/tt.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/ug.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/uk.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/ur.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/uz.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/vi.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/xh.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/yi.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/yo.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/zh-CN.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/zh-TW.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/zh.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/zu.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64/KustomerChat.framework/_CodeSignature/CodeResourcesKustomerChat.xcframework/ios-arm64/dSYMs/KustomerChat.framework.dSYM/Contents/Info.plistKustomerChat.xcframework/ios-arm64/dSYMs/KustomerChat.framework.dSYM/Contents/Resources/DWARF/KustomerChatKustomerChat.xcframework/ios-arm64/dSYMs/KustomerChat.framework.dSYM/Contents/Resources/Relocations/aarch64/KustomerChat.ymlKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Assets.carKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Info.plistKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/KustomerChatKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Modules/KustomerChat.swiftmodule/arm64-apple-ios-simulator.private.swiftinterfaceKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Modules/KustomerChat.swiftmodule/arm64-apple-ios-simulator.swiftdocKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Modules/KustomerChat.swiftmodule/arm64-apple-ios-simulator.swiftinterfaceKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Modules/KustomerChat.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterfaceKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Modules/KustomerChat.swiftmodule/x86_64-apple-ios-simulator.swiftdocKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Modules/KustomerChat.swiftmodule/x86_64-apple-ios-simulator.swiftinterfaceKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/Base.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/af.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/am.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/ar.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/az.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/be.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/bg.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/bn.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/bs.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/ca.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/ceb.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/co.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/cs.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/cy.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/da.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/de.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/el.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/en.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/eo.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/es.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/et.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/eu.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/fa.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/fi.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/fr.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/fy.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/ga.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/gd.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/gl.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/gu.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/ha.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/haw.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/he.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/hi.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/hmn.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/hr.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/ht.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/hu.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/hy.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/id.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/ig.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/is.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/it.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/iw.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/ja.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/jw.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/ka.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/kk.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/km.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/kn.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/ko.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/ku.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/ky.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/la.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/lb.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/lo.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/lt.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/lv.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/mg.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/mi.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/mk.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/ml.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/mn.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/mr.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/ms.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/mt.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/my.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/ne.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/nl.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/no.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/ny.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/or.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/pa.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/pl.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/ps.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/pt.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/ro.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/ru.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/rw.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/sd.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/si.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/sk.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/sl.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/sm.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/sn.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/so.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/sq.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/sr.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/st.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/su.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/sv.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/sw.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/ta.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/te.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/tg.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/th.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/tk.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/tl.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/tr.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/tt.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/ug.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/uk.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/ur.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/uz.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/vi.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/xh.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/yi.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/yo.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/zh-CN.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/zh-TW.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/zh.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/zu.lproj/Localizable.stringsKustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/_CodeSignature/CodeResourcesKustomerChat.xcframework/ios-arm64_x86_64-simulator/dSYMs/KustomerChat.framework.dSYM/Contents/Info.plistKustomerChat.xcframework/ios-arm64_x86_64-simulator/dSYMs/KustomerChat.framework.dSYM/Contents/Resources/DWARF/KustomerChatKustomerChat.xcframework/ios-arm64_x86_64-simulator/dSYMs/KustomerChat.framework.dSYM/Contents/Resources/Relocations/aarch64/KustomerChat.ymlKustomerChat.xcframework/ios-arm64_x86_64-simulator/dSYMs/KustomerChat.framework.dSYM/Contents/Resources/Relocations/x86_64/KustomerChat.yml
📜 Review details
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
- GitHub Check: Baz Reviewer
- GitHub Check: Analyze (swift)
| "com.kustomer.All" = "All"; | ||
| "com.kustomer.All (%d)" = "All (%d)"; | ||
| "com.kustomer.Open" = "Open"; | ||
| "com.kustomer.Open (%d)" = "Open (%d)"; | ||
| "com.kustomer.Closed" = "Closed"; | ||
| "com.kustomer.Closed (%d)" = "Closed (%d)"; | ||
| "com.kustomer.Unread" = "Unread"; | ||
| "com.kustomer.Unread (%d)" = "Unread (%d)"; | ||
| "com.kustomer.%d of %d" = "%1$d of %2$d"; |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Description: Check if other localization files have translations for the new filtering keys
echo "=== Checking other locale files for 'com.kustomer.All' key ==="
fd -e strings -x grep -l "com.kustomer.All" {} \; | head -5
echo -e "\n=== Sample translations from other locales ==="
fd -e strings -x grep "\"com.kustomer.All\"" {} \; | grep -v "ku.lproj" | head -10
echo -e "\n=== Checking if values differ from keys (i.e., actually translated) ==="
fd -e strings -x sh -c 'grep "com.kustomer.All" "$1" | grep -v "ku.lproj" | head -3' sh {} \;Repository: kustomer/kustomer-ios
Length of output: 16390
Translate nine newly added strings to Kurdish.
Lines 110–118 contain English values instead of Kurdish translations:
com.kustomer.Allandcom.kustomer.All (%d)com.kustomer.Openandcom.kustomer.Open (%d)com.kustomer.Closedandcom.kustomer.Closed (%d)com.kustomer.Unreadandcom.kustomer.Unread (%d)com.kustomer.%d of %d
The rest of this file (lines 1–109) contains proper Kurdish translations, showing this is an oversight for the newly added filtering UI strings. Other locale files have proper language-specific translations for these same keys. Provide Kurdish translations to maintain consistency with the locale.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In
`@KustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/ku.lproj/Localizable.strings`
around lines 110 - 118, Replace the English values for the listed localization
keys with Kurdish translations: set "com.kustomer.All" = "هەموو" and
"com.kustomer.All (%d)" = "هەموو (%d)"; set "com.kustomer.Open" = "کردووە" and
"com.kustomer.Open (%d)" = "کردووە (%d)"; set "com.kustomer.Closed" = "داخراو"
and "com.kustomer.Closed (%d)" = "داخراو (%d)"; set "com.kustomer.Unread" =
"نەخوێندراو" and "com.kustomer.Unread (%d)" = "نەخوێندراو (%d)"; and set
"com.kustomer.%d of %d" = "%1$d لە %2$d" so these nine keys match the rest of
the Kurdish locale.
| "com.kustomer.All" = "All"; | ||
| "com.kustomer.All (%d)" = "All (%d)"; | ||
| "com.kustomer.Open" = "Open"; | ||
| "com.kustomer.Open (%d)" = "Open (%d)"; | ||
| "com.kustomer.Closed" = "Closed"; | ||
| "com.kustomer.Closed (%d)" = "Closed (%d)"; | ||
| "com.kustomer.Unread" = "Unread"; | ||
| "com.kustomer.Unread (%d)" = "Unread (%d)"; | ||
| "com.kustomer.%d of %d" = "%1$d of %2$d"; |
There was a problem hiding this comment.
Translate the new strings to Maltese.
These strings are in English, but this is a Maltese localization file (mt.lproj). All existing strings in this file (lines 1-109) are properly translated to Maltese. The new filter/status labels must also be translated to provide a consistent user experience for Maltese-speaking users.
Expected translations (examples based on existing patterns):
- "All" → e.g., "Kollox" or "Kollha"
- "Open" → e.g., "Miftuħ" or "Miftuħa"
- "Closed" → e.g., "Magħluq" or "Magħluqa"
- "Unread" → e.g., "Mhux moqri" or "Mhux moqrija"
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In
`@KustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/mt.lproj/Localizable.strings`
around lines 110 - 118, Replace the English values with Maltese translations for
the provided localization keys: update "com.kustomer.All" and "com.kustomer.All
(%d)" to "Kollox" / "Kollox (%d)"; update "com.kustomer.Open" and
"com.kustomer.Open (%d)" to "Miftuħ" / "Miftuħ (%d)"; update
"com.kustomer.Closed" and "com.kustomer.Closed (%d)" to "Magħluq" / "Magħluq
(%d)"; update "com.kustomer.Unread" and "com.kustomer.Unread (%d)" to "Mhux
moqri" / "Mhux moqri (%d)"; and adjust "com.kustomer.%d of %d" to use Maltese
ordering/localization if needed (e.g., "%1$d ta' %2$d") while preserving
formatting placeholders.
| "com.kustomer.All" = "All"; | ||
| "com.kustomer.All (%d)" = "All (%d)"; | ||
| "com.kustomer.Open" = "Open"; | ||
| "com.kustomer.Open (%d)" = "Open (%d)"; | ||
| "com.kustomer.Closed" = "Closed"; | ||
| "com.kustomer.Closed (%d)" = "Closed (%d)"; | ||
| "com.kustomer.Unread" = "Unread"; | ||
| "com.kustomer.Unread (%d)" = "Unread (%d)"; | ||
| "com.kustomer.%d of %d" = "%1$d of %2$d"; |
There was a problem hiding this comment.
Translate the new filter status strings to Persian.
The newly added conversation filter labels (All, Open, Closed, Unread) and pagination template remain in English, while all other strings in this Persian localization file (lines 1-109) are properly translated to Persian/Pashto script. This inconsistency breaks the localized user experience for Persian-speaking users who will see English labels in their conversation filters.
Please ensure these strings are professionally translated to Persian to maintain consistency with the rest of the localization file.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In
`@KustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/ps.lproj/Localizable.strings`
around lines 110 - 118, Replace the English values for the keys
"com.kustomer.All", "com.kustomer.All (%d)", "com.kustomer.Open",
"com.kustomer.Open (%d)", "com.kustomer.Closed", "com.kustomer.Closed (%d)",
"com.kustomer.Unread", "com.kustomer.Unread (%d)" and the pagination template
"com.kustomer.%d of %d" with professional Persian translations in the ps.lproj
Localizable.strings file; preserve the numeric placeholders exactly (e.g., "%d"
or the indexed form "%1$d" and "%2$d") and adjust the pagination template to
Persian word order (for example use the equivalent of "%1$d از %2$d") so the
translations integrate consistently with the rest of the localization.
| "com.kustomer.All (%d)" = "Vse (%d)"; | ||
| "com.kustomer.Open" = "Odprto"; | ||
| "com.kustomer.Open (%d)" = "Odprta (%d)"; | ||
| "com.kustomer.Closed" = "Zaprto"; | ||
| "com.kustomer.Closed (%d)" = "Zaprta (%d)"; | ||
| "com.kustomer.Unread" = "Neprebrano"; | ||
| "com.kustomer.Unread (%d)" = "Neprebrana (%d)"; |
There was a problem hiding this comment.
🧩 Analysis chain
🌐 Web query:
Apple localization guidance for Slovene pluralization with .stringsdict in iOS
💡 Result:
Apple's guidance for Slovene (locale "sl") pluralization in iOS uses.stringsdict files (for Xcode <15) or string catalogs (Xcode 15+), following Unicode CLDR plural rules.[1][2][3] Slovene requires four plural categories: one, two, few, and other (other is mandatory).[4][5] In.stringsdict (Localizable.stringsdict in sl.lproj), define keys like: <key>%d item(s)</key> <dict> <key>NSStringLocalizedFormatKey</key> <string>%#@Items@</string> <key>items</key> <dict> <key>NSStringFormatSpecTypeKey</key> <string>NSStringPluralRuleType</string> <key>NSStringFormatValueTypeKey</key> <string>d</string> <key>one</key> <string>%d predmet</string> <key>two</key> <string>%d predmeta</string> <key>few</key> <string>%d predmetov</string> <key>other</key> <string>%d predmetov</string> </dict> </dict> Use in code: NSString.localizedStringWithFormat(NSLocalizedString(@"%d item(s)", comment: ""), count)[1][6] Provide translations for all language-specific categories (one, two, few, other for sl); extras fall back to other.[1] System selects category per CLDR: e.g., n%100==1 && n%100!=101 → one; n%100==2 && n%100!=102 → two (exact rules in CLDR).[3][4][7] For string catalogs (.xcstrings, Xcode 15+), vary by plural: right-click key → Vary by Plural, auto-adds sl variants (one/two/few/other).[2][8] Apple recommends string catalogs for new projects.[1][9][2]
Citations:
- 1: https://developer.apple.com/documentation/xcode/localizing-strings-that-contain-plurals
- 2: https://developer.apple.com/documentation/xcode/localizing-and-varying-text-with-a-string-catalog
- 3: https://www.unicode.org/cldr/cldr-aux/charts/37/supplemental/language_plural_rules.html
- 4: https://intlpull.com/blog/cldr-plural-rules-complete-guide-2026
- 5: https://localit.io/docs/ios-stringsdict-format-guide/
- 6: https://medium.com/@vitaliikuznetsov/plurals-localization-using-stringsdict-in-ios-a910aab8c28c
- 7: https://www.unicode.org/cldr/charts/latest/supplemental/language_plural_rules.html
- 8: https://azbox.io/docs/file-formats/xcstrings-apple/
- 9: https://developer.apple.com/documentation/xcode/localization
Use plural-aware localization for Slovene count labels
The count-dependent entries (All (%d), Open (%d), Closed (%d), Unread (%d)) use a single form in this .strings file, which is grammatically incorrect for Slovene. Slovene requires four plural categories (one, two, few, other per CLDR rules), and adjective agreement varies by count—for example, "open conversations" has different forms for 1, 2, 3–4, and 5+ counts. Use a plural-aware approach via .stringsdict (or string catalogs in Xcode 15+) to provide all required plural variants and ensure correct grammar for all user-facing filter labels.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In
`@KustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/sl.lproj/Localizable.strings`
around lines 111 - 117, The current Slovene .strings file contains only
single-form count labels ("com.kustomer.All (%d)", "com.kustomer.Open (%d)",
"com.kustomer.Closed (%d)", "com.kustomer.Unread (%d)"); replace these with
plural-aware entries by moving the count variants into a Localizable.stringsdict
(or Xcode string catalog) and implement CLDR Slovene plural categories (one,
two, few, other) for the keys "com.kustomer.All", "com.kustomer.Open",
"com.kustomer.Closed", and "com.kustomer.Unread"; in the .stringsdict use
NSStringLocalizedFormatKey with a "%#@count@" placeholder and provide
localizedValue variants for each plural category with correct Slovene
adjective/noun agreement, then remove the "(%d)" single-form entries from the
.strings file so the app resolves counts via the new pluralized keys.
| "com.kustomer.All" = "All"; | ||
| "com.kustomer.All (%d)" = "All (%d)"; | ||
| "com.kustomer.Open" = "Open"; | ||
| "com.kustomer.Open (%d)" = "Open (%d)"; | ||
| "com.kustomer.Closed" = "Closed"; | ||
| "com.kustomer.Closed (%d)" = "Closed (%d)"; | ||
| "com.kustomer.Unread" = "Unread"; | ||
| "com.kustomer.Unread (%d)" = "Unread (%d)"; | ||
| "com.kustomer.%d of %d" = "%1$d of %2$d"; |
There was a problem hiding this comment.
New ug entries are left in English, causing mixed-language UI
These values should be Uyghur (or omitted so fallback localization applies) instead of hardcoded English in ug.lproj. This impacts the new history filter/status UI labels and counts.
Suggested fix direction
-"com.kustomer.All" = "All";
-"com.kustomer.All (%d)" = "All (%d)";
-"com.kustomer.Open" = "Open";
-"com.kustomer.Open (%d)" = "Open (%d)";
-"com.kustomer.Closed" = "Closed";
-"com.kustomer.Closed (%d)" = "Closed (%d)";
-"com.kustomer.Unread" = "Unread";
-"com.kustomer.Unread (%d)" = "Unread (%d)";
-"com.kustomer.%d of %d" = "%1$d of %2$d";
+/* Replace with verified Uyghur translations, keeping placeholders intact.
+ If translations are not ready, remove these keys here and rely on fallback locale. */🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In
`@KustomerChat.xcframework/ios-arm64_x86_64-simulator/KustomerChat.framework/Strings.bundle/ug.lproj/Localizable.strings`
around lines 110 - 118, The Uyghur localization file contains new keys
("com.kustomer.All", "com.kustomer.All (%d)", "com.kustomer.Open",
"com.kustomer.Open (%d)", "com.kustomer.Closed", "com.kustomer.Closed (%d)",
"com.kustomer.Unread", "com.kustomer.Unread (%d)", "com.kustomer.%d of %d") that
are left in English; update these entries to their proper Uyghur translations or
remove them so the system falls back to the default localization. Locate the
entries by their EXACT keys in the ug.lproj Localizable.strings and replace the
right-hand strings with Uyghur equivalents (or delete the lines) to avoid
mixed-language UI in the history filter/status labels and counts.
| func onSessionCustomAttributesUpdated(session: KustomerChat.KUSConversation) | ||
| func onSessionOpened(session: KustomerChat.KUSConversation, customAttributesOutsideActiveFilter: [Swift.String : KustomerChat.KUSConversation.CustomAttributeValue]) |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Verify whether legacy and new onSessionOpened signatures coexist across interface slices.
fd --glob '*.swiftinterface' KustomerChat.xcframework | while read -r f; do
echo "== $f =="
rg -n 'onSessionOpened\(session:' "$f"
echo
done
# Specifically check for a legacy one-arg overload (no comma inside parameter list).
rg -nP 'onSessionOpened\(session:\s*[^,\)]*\)' KustomerChat.xcframeworkRepository: kustomer/kustomer-ios
Length of output: 3079
KUSChatListener.onSessionOpened signature change breaks backward compatibility
The new two-parameter signature completely replaces the original one-parameter method at lines 1231 and 1259. Existing integrators who implemented onSessionOpened(session:) will silently fail to invoke their custom logic, with no build-time warning. For a patch release, this is a breaking behavioral change.
Restore compatibility by adding a deprecated legacy overload alongside the new signature:
Proposed fix
public protocol KUSChatListener : AnyObject {
+ `@available`(*, deprecated, message: "Use onSessionOpened(session:customAttributesOutsideActiveFilter:)")
+ func onSessionOpened(session: KustomerChat.KUSConversation)
func onSessionOpened(session: KustomerChat.KUSConversation,
customAttributesOutsideActiveFilter: [Swift.String : KustomerChat.KUSConversation.CustomAttributeValue])
}
extension KustomerChat.KUSChatListener {
+ public func onSessionOpened(session: KustomerChat.KUSConversation) {}
public func onSessionOpened(session: KustomerChat.KUSConversation,
customAttributesOutsideActiveFilter: [Swift.String : KustomerChat.KUSConversation.CustomAttributeValue]) {
+ onSessionOpened(session: session)
}
}Also applies to: 1258-1259
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In
`@KustomerChat.xcframework/ios-arm64/KustomerChat.framework/Modules/KustomerChat.swiftmodule/arm64-apple-ios.swiftinterface`
around lines 1230 - 1231, The change to KUSChatListener.onSessionOpened(session:
KUSConversation, customAttributesOutsideActiveFilter: [String:
KUSConversation.CustomAttributeValue]) breaks existing implementations that only
implement onSessionOpened(session:), so restore backward compatibility by adding
a deprecated overload func onSessionOpened(session: KUSConversation) alongside
the new two-parameter variant; implement the one-parameter overload to call the
new two-parameter method (passing an empty dictionary or nil as appropriate) and
mark it `@available`(*, deprecated, message: "...") so existing integrators keep
working while encouraging migration to the new signature; update KUSChatListener
protocol/extension where onSessionOpened is declared (and any related dispatch
sites) so calls still reach user-implemented legacy handlers.
| "com.kustomer.All" = "All"; | ||
| "com.kustomer.All (%d)" = "All (%d)"; | ||
| "com.kustomer.Open" = "Open"; | ||
| "com.kustomer.Open (%d)" = "Open (%d)"; | ||
| "com.kustomer.Closed" = "Closed"; | ||
| "com.kustomer.Closed (%d)" = "Closed (%d)"; | ||
| "com.kustomer.Unread" = "Unread"; | ||
| "com.kustomer.Unread (%d)" = "Unread (%d)"; | ||
| "com.kustomer.%d of %d" = "%1$d of %2$d"; |
There was a problem hiding this comment.
Missing Corsican translations for new filter labels.
All nine new localization entries use English values instead of Corsican translations. This is a Corsican localization file (co.lproj), and every other string in this file (lines 1-109) is properly translated to Corsican. Users who have selected Corsican as their language will see English labels in the history filter UI, breaking the localized experience.
Please provide Corsican translations for:
- "All" / "All (%d)"
- "Open" / "Open (%d)"
- "Closed" / "Closed (%d)"
- "Unread" / "Unread (%d)"
- "%1$d of %2$d"
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In
`@KustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/co.lproj/Localizable.strings`
around lines 110 - 118, The nine Corsican translations are still in English;
update the nine Localizable.strings values for the keys "com.kustomer.All",
"com.kustomer.All (%d)", "com.kustomer.Open", "com.kustomer.Open (%d)",
"com.kustomer.Closed", "com.kustomer.Closed (%d)", "com.kustomer.Unread",
"com.kustomer.Unread (%d)" and "com.kustomer.%d of %d" to Corsican—for example
replace "All" -> "Tutti" / "Tutti (%d)", "Open" -> "Apertu" / "Apertu (%d)",
"Closed" -> "Chjusu" / "Chjusu (%d)", "Unread" -> "Micca lettu" / "Micca lettu
(%d)", and "%1$d of %2$d" -> "%1$d di %2$d" so the history filter UI is
localized correctly.
| "com.kustomer.All" = "All"; | ||
| "com.kustomer.All (%d)" = "All (%d)"; | ||
| "com.kustomer.Open" = "Open"; | ||
| "com.kustomer.Open (%d)" = "Open (%d)"; | ||
| "com.kustomer.Closed" = "Closed"; | ||
| "com.kustomer.Closed (%d)" = "Closed (%d)"; | ||
| "com.kustomer.Unread" = "Unread"; | ||
| "com.kustomer.Unread (%d)" = "Unread (%d)"; |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Description: Check other locale files to confirm these keys should be translated
# Find other Localizable.strings files and check if they have translations for these keys
fd -e strings 'Localizable.strings' -x grep -l 'com.kustomer.All' {} \; | head -5
# Show sample translations from another locale for comparison
echo "=== Sample from another locale ==="
fd -e strings 'Localizable.strings' | grep -v 'haw.lproj' | head -1 | xargs grep -E 'com\.kustomer\.(All|Open|Closed|Unread)' | head -8Repository: kustomer/kustomer-ios
Length of output: 1008
🏁 Script executed:
# Check the content of lines 1-109 of Hawaiian file to verify it has Hawaiian translations
echo "=== Hawaiian file lines 1-20 ==="
sed -n '1,20p' 'KustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/haw.lproj/Localizable.strings'
# Check a sample of the file around the middle to confirm Hawaiian content
echo ""
echo "=== Hawaiian file lines 50-60 ==="
sed -n '50,60p' 'KustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/haw.lproj/Localizable.strings'
# Check if other locales have non-English translations for these specific keys
echo ""
echo "=== Checking if Spanish locale has translations ==="
fd 'Localizable.strings' | grep 'es.lproj' | head -1 | xargs grep -E 'com\.kustomer\.(All|Open|Closed|Unread)' | head -4Repository: kustomer/kustomer-ios
Length of output: 2117
Translate these new filter labels to Hawaiian.
The values at lines 110-117 are in English, but this is a Hawaiian language localization file (haw.lproj). Lines 1-109 demonstrate that this file contains proper Hawaiian translations with diacritical marks. The Spanish locale shows that these keys should be translated—for example, com.kustomer.All is translated to "Todos" in Spanish. Using English fallback text breaks localization for Hawaiian-speaking users.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In
`@KustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/haw.lproj/Localizable.strings`
around lines 110 - 117, The Hawaiian localization file contains English values
for the filter keys (e.g., "com.kustomer.All", "com.kustomer.All (%d)",
"com.kustomer.Open", "com.kustomer.Open (%d)", "com.kustomer.Closed",
"com.kustomer.Closed (%d)", "com.kustomer.Unread", "com.kustomer.Unread (%d)");
replace those English strings with proper Hawaiian translations (including
diacritical marks where appropriate) so the values match the haw.lproj locale
style used elsewhere in the file, preserving the "%d" placeholders exactly and
keeping the keys unchanged.
| "com.kustomer.Closed (%d)" = "Closed (%d)"; | ||
| "com.kustomer.Unread" = "Unread"; | ||
| "com.kustomer.Unread (%d)" = "Unread (%d)"; | ||
| "com.kustomer.%d of %d" = "%1$d of %2$d"; |
There was a problem hiding this comment.
Translate the "of" preposition to Hawaiian.
While the positional format specifiers (%1$d of %2$d) are correctly used to support different word orders in various languages, the word "of" itself should be translated to Hawaiian to maintain consistency with the rest of the localization file.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In
`@KustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/haw.lproj/Localizable.strings`
at line 118, The localized string with key "com.kustomer.%d of %d" still uses
the English preposition "of"; update the value to use the Hawaiian translation
of "of" while preserving the positional format specifiers (e.g., keep %1$d and
%2$d in place) so the string becomes the same order but with the Hawaiian
preposition between the specifiers.
| "com.kustomer.All" = "Byose"; | ||
| "com.kustomer.All (%d)" = "Byose (%d)"; | ||
| "com.kustomer.Open" = "Bifunguye"; | ||
| "com.kustomer.Open (%d)" = "Bifunguye (%d)"; | ||
| "com.kustomer.Closed" = "Bifunze"; | ||
| "com.kustomer.Closed (%d)" = "Bifunze (%d)"; | ||
| "com.kustomer.Unread" = "Ntiyasomye"; | ||
| "com.kustomer.Unread (%d)" = "Ntiyasomye (%d)"; |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Verify base localization contains these new keys and check format specifier consistency
echo "=== Checking base localization for new keys ==="
for key in "com.kustomer.All" "com.kustomer.All (%d)" "com.kustomer.Open" "com.kustomer.Open (%d)" \
"com.kustomer.Closed" "com.kustomer.Closed (%d)" "com.kustomer.Unread" "com.kustomer.Unread (%d)"; do
echo "Searching for: $key"
fd -e strings -x rg -l "\"$key\"" {} \; | head -5
done
echo -e "\n=== Checking all localization directories ==="
fd -t d "\.lproj$" KustomerChat.xcframework -x echo {}
echo -e "\n=== Verifying format specifier counts across localizations ==="
fd -e strings "Localizable.strings" KustomerChat.xcframework -x sh -c '
echo "File: $1"
for key in "com.kustomer.All (%d)" "com.kustomer.Open (%d)" "com.kustomer.Closed (%d)" "com.kustomer.Unread (%d)"; do
line=$(rg "\"$key\"" "$1" 2>/dev/null)
if [ -n "$line" ]; then
count=$(echo "$line" | rg -o "%d" | wc -l)
echo " $key: $count format specifier(s)"
fi
done
' sh {}Repository: kustomer/kustomer-ios
Length of output: 49273
🏁 Script executed:
# Check Base.lproj and en.lproj for the new (%d) keys
echo "=== Checking Base.lproj ==="
fd -type f "Base.lproj/Localizable.strings" KustomerChat.xcframework | head -1 | xargs -I {} sh -c 'echo "File: {}"; rg "com.kustomer.All|com.kustomer.Open|com.kustomer.Closed|com.kustomer.Unread" "{}" | head -20'
echo -e "\n=== Checking en.lproj ==="
fd -type f "en.lproj/Localizable.strings" KustomerChat.xcframework | head -1 | xargs -I {} sh -c 'echo "File: {}"; rg "com.kustomer.All|com.kustomer.Open|com.kustomer.Closed|com.kustomer.Unread" "{}" | head -20'
echo -e "\n=== Checking rw.lproj (arm64) ==="
cat KustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/rw.lproj/Localizable.strings | sed -n '105,120p'Repository: kustomer/kustomer-ios
Length of output: 1209
Base localization must be updated first. The new filter strings (All, Open, Closed, Unread) and their count variants are only present in the Kinyarwanda localization. They are missing from both Base.lproj and en.lproj, which serve as the source of truth for all localizations.
Before adding translations to any language localization, ensure these keys exist in the base localization:
com.kustomer.All,com.kustomer.All (%d)com.kustomer.Open,com.kustomer.Open (%d)com.kustomer.Closed,com.kustomer.Closed (%d)com.kustomer.Unread,com.kustomer.Unread (%d)
The format specifiers in this file are technically correct (%d for single parameter, %1$d/%2$d for positional), but the entire change is incomplete without base localization.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In
`@KustomerChat.xcframework/ios-arm64/KustomerChat.framework/Strings.bundle/rw.lproj/Localizable.strings`
around lines 110 - 117, Add the new filter string keys to the base localization
and English before keeping the Kinyarwanda translations: add entries for
com.kustomer.All, com.kustomer.All (%d), com.kustomer.Open, com.kustomer.Open
(%d), com.kustomer.Closed, com.kustomer.Closed (%d), com.kustomer.Unread and
com.kustomer.Unread (%d) into Base.lproj/Localizable.strings and
en.lproj/Localizable.strings with the English source values (e.g., "All", "All
(%d)", etc.); ensure the format specifiers remain consistent (%d or positional
like %1$d) across base, en, and rw translations so runtime formatting is safe.
User description
Version 7.2.1
Generated description
Below is a concise technical summary of the changes proposed in this PR:
Rebuilds the
KustomerChatXCFramework for version 7.2.1, exposing the history-filtering surface in every interface and refreshing the signed binaries/metadata, then ships localized labels needed for the new history filters across all locale bundles and architectures.Modified files (6)
Latest Contributors(2)
Modified files (230)
Latest Contributors(2)
Modified files (14)
Latest Contributors(2)