-
Notifications
You must be signed in to change notification settings - Fork 401
chore(localizations): add and refine arabic localization #6975
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
|
|
@syvixor is attempting to deploy a commit to the Clerk Production Team on Vercel. A member of the Team first needs to authorize it. |
WalkthroughReplaced many previously undefined localization keys in Changes
Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes
Poem
Pre-merge checks and finishing touches❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✨ Finishing touches
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 7
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (14)
packages/localizations/src/ar-SA.ts (14)
215-243: Fix inconsistent spelling of "اسم" (name).The word "اسم" (name) is spelled inconsistently throughout this section:
- Line 215-216: "الإسم" (with ال + إ)
- Line 219: "إسم المنظمة" (with إ)
- Line 227: "أسم المفتاح السري" (with أ - incorrect)
- Line 243: "إسم المنظمة" (with إ)
In Modern Standard Arabic, the correct spelling is "اسم" (without hamza on alif). When using the definite article, it becomes "الاسم" (not "الإسم").
Apply these corrections:
- formFieldInputPlaceholder__firstName: 'الإسم الأول', - formFieldInputPlaceholder__lastName: 'الإسم الأخير', + formFieldInputPlaceholder__firstName: 'الاسم الأول', + formFieldInputPlaceholder__lastName: 'الاسم الأخير',- formFieldInputPlaceholder__organizationName: 'إسم المنظمة', + formFieldInputPlaceholder__organizationName: 'اسم المنظمة',- formFieldLabel__apiKeyName: 'أسم المفتاح السري', + formFieldLabel__apiKeyName: 'اسم المفتاح السري',- formFieldLabel__organizationName: 'إسم المنظمة', + formFieldLabel__organizationName: 'اسم المنظمة',- formFieldLabel__username: 'إسم المستخدم', + formFieldLabel__username: 'اسم المستخدم',
346-346: Fix spelling: use "اختر".Line 346 uses "إختر" but should use "اختر" (without hamza on alif).
- selectDropdown__role: 'إختر دور', + selectDropdown__role: 'اختر دور',
429-429: Fix spelling: use "إضافة".Line 429 uses "أضافة" but the correct spelling is "إضافة" (with hamza on alif, not after alif).
- primaryButton: 'أضافة نطاق', + primaryButton: 'إضافة نطاق',
471-471: Fix spelling: use "اختر".Line 471 uses "أختر" but should use "اختر" (without hamza).
- subtitle: 'أختر كيف يمكن للمستخدمين في هذا النطاق تسجيل الدخول إلى المنظمة', + subtitle: 'اختر كيف يمكن للمستخدمين في هذا النطاق تسجيل الدخول إلى المنظمة',
1017-1017: Fix spelling: use "اختر".Line 1017 uses "أختر" but should use "اختر" (without hamza).
- formHint: 'أختر موفر خدمة لتوصيل حسابك', + formHint: 'اختر موفر خدمة لتوصيل حسابك',
1073-1073: Fix spelling: use "اختر" and "للإضافة".Line 1073 has two spelling errors:
- "أختر" should be "اختر"
- "للأضافة" should be "للإضافة"
- formHint: 'أختر طريقة للأضافة', + formHint: 'اختر طريقة للإضافة',
1085-1086: Fix spelling: use "لإضافة".Lines 1085-1086 use "لأضافة" but should use "لإضافة" (hamza on alif, not after).
- subtitle__availablePhoneNumbers: 'أختر رقم جوال لأضافة التحقق بخطوتين عن طريق الرسائل النصية', - subtitle__unavailablePhoneNumbers: 'لا يوجد رقم جوال لأضافة التحقق بخطوتين عن طريق الرسائل النصية', + subtitle__availablePhoneNumbers: 'اختر رقم جوال لإضافة التحقق بخطوتين عن طريق الرسائل النصية', + subtitle__unavailablePhoneNumbers: 'لا يوجد رقم جوال لإضافة التحقق بخطوتين عن طريق الرسائل النصية',
1092-1092: Fix spelling: use "إضافة".Line 1092 uses "أضافة" but should use "إضافة".
- title: 'أضافة التحقق عن طريق رمز الرسائل النصية', + title: 'إضافة التحقق عن طريق رمز الرسائل النصية',
1101-1103: Fix spelling: use "الاستعمال".Lines 1101-1103 use "أستعمال" which should be "الاستعمال" or "الاستعمال" (without hamza on alif when preceded by "ال").
- 'تأكد من تفعيل كلمات المرور المستندة إلى الوقت أو الأستعمال الواحد, ثم أكمل ربط حسابك', + 'تأكد من تفعيل كلمات المرور المستندة إلى الوقت أو الاستعمال الواحد، ثم أكمل ربط حسابك',- 'بدلا من ذلك, إذا كان المصدق الخاص بك يدعم روابط المدعومة من طرق المستندة إلى الوقت أو الأستعمال الواحد, يمكنك نسخ الرابط كله', + 'بدلاً من ذلك، إذا كان المصدق الخاص بك يدعم روابط المدعومة من طرق المستندة إلى الوقت أو الاستعمال الواحد، يمكنك نسخ الرابط كله',Note: Also corrected "بدلا" to "بدلاً" and changed comma to Arabic comma "،".
1161-1161: Fix spelling: use "ارفع".Line 1161 uses "أرفع" but should use "ارفع" (without hamza on alif).
- fileDropAreaHint: 'أرفع صورة بصيغة JPG, PNG, GIF أو WEBP أقل من 10 ميغابايت', + fileDropAreaHint: 'ارفع صورة بصيغة JPG, PNG, GIF أو WEBP أقل من 10 ميغابايت',
1189-1194: Fix spelling: use "احذف" and "إضافة".Lines 1189-1194 have spelling errors:
- Line 1189: "أحذف" should be "احذف"
- Line 1193: "أضافة" should be "إضافة"
- destructiveAction: 'أحذف البريد الإلكتروني', + destructiveAction: 'احذف البريد الإلكتروني',- primaryButton: 'أضافة عنوان إلكتروني', + primaryButton: 'إضافة عنوان إلكتروني',
1213-1213: Fix spelling: use "إضافة" with space.Line 1213 has "إضافةالتحقق" which should have a space: "إضافة التحقق".
- primaryButton: 'إضافةالتحقق بخطوتين', + primaryButton: 'إضافة التحقق بخطوتين',
864-864: Fix spelling: use "الأخيرة".Line 864 uses "الآخيرة" (the other) but should use "الأخيرة" (the last).
- identification_deletion_failed: 'لا يمكن حذف هويتك الآخيرة ', + identification_deletion_failed: 'لا يمكن حذف هويتك الأخيرة',Note: Also removed trailing space.
896-909: Fix spelling: use "استعمل" and "استخدم".Lines 896-909 contain multiple spelling errors with "استعمل" and "استخدم":
- "أستعمل" should be "استعمل"
- "أستخدم" should be "استخدم"
- allUppercase: 'أستعمل حروف كبيرة لبعض الحروف وليس كلها.', + allUppercase: 'استعمل حروف كبيرة لبعض الحروف وليس كلها.',- capitalization: 'أستعمل حروف كبيرة لأكثر من حرف غير الحرف الأول', + capitalization: 'استعمل حروف كبيرة لأكثر من حرف غير الحرف الأول',- longerKeyboardPattern: 'أستخدم أنماط أكثر وقم بتغيير أتجاه الكتابة في لوحة المفاتيح عدة مرات', + longerKeyboardPattern: 'استخدم أنماط أكثر وقم بتغيير اتجاه الكتابة في لوحة المفاتيح عدة مرات',Note: Line 902 also has "أتجاه" which should be "اتجاه".
🧹 Nitpick comments (1)
packages/localizations/src/ar-SA.ts (1)
1-1288: Consider systematic review of hamza placement in Arabic text.Throughout the file, there are consistent patterns of hamza placement errors that appear systematically. The most common issues are:
- "استعمل" (use): Frequently spelled as "إستعمل" or "أستعمل" - should be "استعمل"
- "اسم" (name): Frequently spelled as "إسم" or "أسم" - should be "اسم"
- "اختر" (choose): Frequently spelled as "إختر" or "أختر" - should be "اختر"
- "إضافة" (addition): Sometimes spelled as "أضافة" - should be "إضافة"
- "احتياطي" (backup): Sometimes spelled as "إحتياطي" - should be "احتياطي"
These spelling issues are minor and don't affect functionality, but correcting them would improve the linguistic quality of the Arabic localization and align it better with Modern Standard Arabic conventions.
Consider using a spell-checker or having a native Arabic speaker review the entire file to catch remaining instances of these patterns.
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Disabled knowledge base sources:
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (1)
packages/localizations/src/ar-SA.ts(17 hunks)
🧰 Additional context used
📓 Path-based instructions (7)
**/*.{js,jsx,ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
**/*.{js,jsx,ts,tsx}: All code must pass ESLint checks with the project's configuration
Follow established naming conventions (PascalCase for components, camelCase for variables)
Maintain comprehensive JSDoc comments for public APIs
Use dynamic imports for optional features
All public APIs must be documented with JSDoc
Provide meaningful error messages to developers
Include error recovery suggestions where applicable
Log errors appropriately for debugging
Lazy load components and features when possible
Implement proper caching strategies
Use efficient data structures and algorithms
Profile and optimize critical paths
Validate all inputs and sanitize outputs
Implement proper logging with different levels
Files:
packages/localizations/src/ar-SA.ts
**/*.{js,jsx,ts,tsx,json,css,scss,md,yaml,yml}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
Use Prettier for consistent code formatting
Files:
packages/localizations/src/ar-SA.ts
packages/**/*.{ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
TypeScript is required for all packages
Files:
packages/localizations/src/ar-SA.ts
packages/**/*.{ts,tsx,d.ts}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
Packages should export TypeScript types alongside runtime code
Files:
packages/localizations/src/ar-SA.ts
**/*.{ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
Use proper TypeScript error types
**/*.{ts,tsx}: Always define explicit return types for functions, especially public APIs
Use proper type annotations for variables and parameters where inference isn't clear
Avoidanytype - preferunknownwhen type is uncertain, then narrow with type guards
Useinterfacefor object shapes that might be extended
Usetypefor unions, primitives, and computed types
Preferreadonlyproperties for immutable data structures
Useprivatefor internal implementation details
Useprotectedfor inheritance hierarchies
Usepublicexplicitly for clarity in public APIs
Preferreadonlyfor properties that shouldn't change after construction
Prefer composition and interfaces over deep inheritance chains
Use mixins for shared behavior across unrelated classes
Implement dependency injection for loose coupling
Let TypeScript infer when types are obvious
Useconst assertionsfor literal types:as const
Usesatisfiesoperator for type checking without widening
Use mapped types for transforming object types
Use conditional types for type-level logic
Leverage template literal types for string manipulation
Use ES6 imports/exports consistently
Use default exports sparingly, prefer named exports
Use type-only imports:import type { ... } from ...
Noanytypes without justification
Proper error handling with typed errors
Consistent use ofreadonlyfor immutable data
Proper generic constraints
No unused type parameters
Proper use of utility types instead of manual type construction
Type-only imports where possible
Proper tree-shaking friendly exports
No circular dependencies
Efficient type computations (avoid deep recursion)
Files:
packages/localizations/src/ar-SA.ts
packages/localizations/**/*
📄 CodeRabbit inference engine (.cursor/rules/monorepo.mdc)
Localization files must be placed in 'packages/localizations/'.
Files:
packages/localizations/src/ar-SA.ts
**/*.{js,ts,tsx,jsx}
📄 CodeRabbit inference engine (.cursor/rules/monorepo.mdc)
Support multiple Clerk environment variables (CLERK_, NEXT_PUBLIC_CLERK_, etc.) for configuration.
Files:
packages/localizations/src/ar-SA.ts
⏰ 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: semgrep-cloud-platform/scan
- GitHub Check: semgrep-cloud-platform/scan
🔇 Additional comments (3)
packages/localizations/src/ar-SA.ts (3)
21-24: Verify verb form consistency.Lines 21-22 use "أنشأ" (created, past tense, he/it form) but line 24 uses "أنشأ مفتاحاً" (create a key, imperative). In Modern Standard Arabic, for consistency:
- Line 22 correctly uses "أنشأ في" (was created on) for past tense
- Line 24 uses "أنشأ" but in the context of a button label "Create key", the imperative form "أنشئ مفتاحاً" would be more grammatically correct
Consider reviewing whether line 24 should use the imperative form "أنشئ" for consistency with action button conventions.
52-70: LGTM! Proper interpolation and date formatting.The badge translations correctly use date interpolation with proper Arabic phrasing. The use of bullet separators (•) and date format specifiers like
{{ date | shortDate("en-US") }}is consistent and appropriate.
18-1288: LGTM! Interpolation variables are correctly used.The template interpolation syntax is used correctly throughout the file:
- Date formatting with filters:
{{date | shortDate('en-US')}}- Variable substitution:
{{identifier}},{{provider}},{{applicationName}}- Complex expressions with multiple filters work correctly
All interpolation patterns match the expected format and should render properly at runtime.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 12
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
packages/localizations/src/ar-SA.ts (1)
18-1288: Correct hamza usage in ar-SA.ts
Systematically replace hamza in basic nouns and form VIII/X verbs, e.g.:
• “إسم” → “اسم”
• “إستعمل” → “استعمل”
• “إختر” → “اختر”
• “إنضم” → “انضم”
• “الإحتياطي” → “الاحتياطي”
• “إرجع” → “ارجع”
• “إقتراح” → “اقتراح”
• “إنتهاء” → “انتهاء”
• “إملأ” → “املأ”
♻️ Duplicate comments (11)
packages/localizations/src/ar-SA.ts (11)
219-219: Fix spelling: use "اسم" instead of "إسم".Line 219 uses "إسم" but the correct spelling is "اسم" (without hamza on the alif).
- formFieldInputPlaceholder__organizationName: 'إسم المنظمة', + formFieldInputPlaceholder__organizationName: 'اسم المنظمة',This is the same type of issue already flagged in previous comments (e.g., lines 213, 250, 697, 700).
243-243: Fix spelling: use "اسم" instead of "إسم".Line 243 uses "إسم" but the correct spelling is "اسم" (without hamza on the alif).
- formFieldLabel__organizationName: 'إسم المنظمة', + formFieldLabel__organizationName: 'اسم المنظمة',This is the same issue already flagged multiple times in previous comments.
250-250: Fix spelling: use "اسم" instead of "إسم".Line 250 uses "إسم المستخدم" but should use "اسم المستخدم" (without hamza on the alif).
This issue was already flagged in previous comments for lines 213, 697, and 700.
253-253: Fix spelling: use "باسم" instead of "بإسم".Line 253 uses "بإسم" but the correct spelling is "باسم" (with the name of).
This was already flagged in a previous review comment.
268-269: Fix spelling: use "اختر" instead of "إختر".Lines 268-269 use "إختر" but the correct spelling in Modern Standard Arabic is "اختر" (without hamza on the alif). This verb follows the افتعل pattern (form VIII).
This was already flagged in previous review comments, and the user's claim about UI/UX conventions was refuted with web search evidence showing professional Arabic UIs use "اختر".
506-511: Fix spelling: use "استعمل" and "الاحتياطي".Lines 506-511 contain spelling errors that were already flagged in previous review comments.
The corrections needed are:
- "إستعمل" → "استعمل"
- "الإحتياطي" → "الاحتياطي"
573-579: Fix spelling: use "استعمل" and "الاحتياطي".Lines 573-579 contain the same spelling errors already flagged in previous review comments.
The verb "استعمل" and the adjective "الاحتياطي" should not have hamza on the alif as they follow the افتعل pattern (form VIII and form X).
597-597: Fix spelling: use "الاحتياطي".Line 597 uses "الإحتياطي" but should use "الاحتياطي" (without hamza on alif).
This was already flagged in a previous review comment.
696-700: Fix spelling: use "استعمل" and "اسم".Lines 696-700 contain spelling errors already flagged in previous review comments.
The corrections needed are:
- "إستعمل" → "استعمل" (multiple occurrences)
- "إسم المستخدم" → "اسم المستخدم"
745-745: Fix spelling: use "استعمل".Line 745 uses "إستعمل" but should use "استعمل" (without hamza on alif).
This was already flagged in a previous review comment.
704-707: Fix spelling: use "استعمل" consistently.Lines 704 and 706 use "إستعمل" but should use "استعمل" (form X imperative without hamza).
- actionLink: 'إستعمل طريقة أخرى', + actionLink: 'استعمل طريقة أخرى',- subtitle: 'إستعمل رقم هاتفك ليصلك رمز التحقق على {{provider}}', + subtitle: 'استعمل رقم هاتفك ليصلك رمز التحقق على {{provider}}',
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Disabled knowledge base sources:
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (1)
packages/localizations/src/ar-SA.ts(17 hunks)
🧰 Additional context used
📓 Path-based instructions (7)
**/*.{js,jsx,ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
**/*.{js,jsx,ts,tsx}: All code must pass ESLint checks with the project's configuration
Follow established naming conventions (PascalCase for components, camelCase for variables)
Maintain comprehensive JSDoc comments for public APIs
Use dynamic imports for optional features
All public APIs must be documented with JSDoc
Provide meaningful error messages to developers
Include error recovery suggestions where applicable
Log errors appropriately for debugging
Lazy load components and features when possible
Implement proper caching strategies
Use efficient data structures and algorithms
Profile and optimize critical paths
Validate all inputs and sanitize outputs
Implement proper logging with different levels
Files:
packages/localizations/src/ar-SA.ts
**/*.{js,jsx,ts,tsx,json,css,scss,md,yaml,yml}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
Use Prettier for consistent code formatting
Files:
packages/localizations/src/ar-SA.ts
packages/**/*.{ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
TypeScript is required for all packages
Files:
packages/localizations/src/ar-SA.ts
packages/**/*.{ts,tsx,d.ts}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
Packages should export TypeScript types alongside runtime code
Files:
packages/localizations/src/ar-SA.ts
**/*.{ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
Use proper TypeScript error types
**/*.{ts,tsx}: Always define explicit return types for functions, especially public APIs
Use proper type annotations for variables and parameters where inference isn't clear
Avoidanytype - preferunknownwhen type is uncertain, then narrow with type guards
Useinterfacefor object shapes that might be extended
Usetypefor unions, primitives, and computed types
Preferreadonlyproperties for immutable data structures
Useprivatefor internal implementation details
Useprotectedfor inheritance hierarchies
Usepublicexplicitly for clarity in public APIs
Preferreadonlyfor properties that shouldn't change after construction
Prefer composition and interfaces over deep inheritance chains
Use mixins for shared behavior across unrelated classes
Implement dependency injection for loose coupling
Let TypeScript infer when types are obvious
Useconst assertionsfor literal types:as const
Usesatisfiesoperator for type checking without widening
Use mapped types for transforming object types
Use conditional types for type-level logic
Leverage template literal types for string manipulation
Use ES6 imports/exports consistently
Use default exports sparingly, prefer named exports
Use type-only imports:import type { ... } from ...
Noanytypes without justification
Proper error handling with typed errors
Consistent use ofreadonlyfor immutable data
Proper generic constraints
No unused type parameters
Proper use of utility types instead of manual type construction
Type-only imports where possible
Proper tree-shaking friendly exports
No circular dependencies
Efficient type computations (avoid deep recursion)
Files:
packages/localizations/src/ar-SA.ts
packages/localizations/**/*
📄 CodeRabbit inference engine (.cursor/rules/monorepo.mdc)
Localization files must be placed in 'packages/localizations/'.
Files:
packages/localizations/src/ar-SA.ts
**/*.{js,ts,tsx,jsx}
📄 CodeRabbit inference engine (.cursor/rules/monorepo.mdc)
Support multiple Clerk environment variables (CLERK_, NEXT_PUBLIC_CLERK_, etc.) for configuration.
Files:
packages/localizations/src/ar-SA.ts
⏰ 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: semgrep-cloud-platform/scan
- GitHub Check: semgrep-cloud-platform/scan
🔇 Additional comments (1)
packages/localizations/src/ar-SA.ts (1)
607-607: Fix spelling: use "ارجع" instead of "إرجع".Line 607 uses "إرجع" but "رجع" (to return) follows the pattern where the imperative should be "ارجع" without hamza on the alif.
- subtitle: 'للمتابعة, قم بفتح رابط التحقق من نفس الجهاز والمتصفح الذي قمت بمحاولة تسجيل الدخول منه', + subtitle: 'للمتابعة، قم بفتح رابط التحقق من نفس الجهاز والمتصفح الذي قمت بمحاولة تسجيل الدخول منه',Note: Also fix the comma spacing (use Arabic comma "،" consistently).
Likely an incorrect or invalid review comment.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
packages/localizations/src/ar-SA.ts (1)
18-802: Overall localization quality is good with systematic spelling corrections needed.The Arabic translations are comprehensive and well-structured. However, there's a systematic pattern of incorrect hamza usage on the initial alif for form VIII (افتعل) and form X (استفعل) verbs throughout the file. Once these spelling corrections are applied consistently, the localization will fully comply with Modern Standard Arabic orthography standards used in professional UI translations.
The key patterns to remember:
- Form VIII verbs (اختار → اختر, انضم, انتهى, اقترح, etc.): no hamza on initial alif
- Form X verbs (استعمل, استخدم, etc.): no hamza on initial alif
- Basic nouns like "اسم" (name): never take hamza
Consider using a linting tool or checklist for Arabic MSA compliance to catch these patterns in future updates.
♻️ Duplicate comments (13)
packages/localizations/src/ar-SA.ts (13)
611-612: Fix spelling: use "ارجع" and "انتهت".Lines 611-612 contain spelling errors:
- "إرجع" should be "ارجع" (imperative without hamza)
- "إنتهت" should be "انتهت" (form VIII verb)
Apply this diff:
- subtitle: 'إرجع إلى علامة التبويب الرئيسية للمتابعة.', - title: 'إنتهت صلاحية رابط التحقق هذا.', + subtitle: 'ارجع إلى علامة التبويب الرئيسية للمتابعة.', + title: 'انتهت صلاحية رابط التحقق هذا.',
731-731: Fix spelling: use "املأ" instead of "إملأ".Line 731 uses "إملأ" but "ملأ" (to fill) has an imperative form "املأ" without hamza on the alif.
Apply this diff:
- title: 'إملأ الحقول المفقودة', + title: 'املأ الحقول المفقودة',
209-210: Fix spelling: use "اسم" instead of "إسم" and "الاحتياطي" instead of "الإحتياطي".The word "اسم" (name) is a basic noun that never takes hamza on the alif in MSA. Similarly, "الاحتياطي" (backup) follows the افتعل pattern (form VIII) and should not have hamza.
Apply these diffs:
- formFieldInputPlaceholder__apiKeyName: 'أدخل إسماً لمفتاحك السري', + formFieldInputPlaceholder__apiKeyName: 'أدخل اسماً لمفتاحك السري',- formFieldInputPlaceholder__backupCode: 'أدخل الرمز الإحتياطي', + formFieldInputPlaceholder__backupCode: 'أدخل الرمز الاحتياطي',- formFieldInputPlaceholder__emailAddress_username: 'إسم المستخدم أو عنوان البريد الإلكتروني', + formFieldInputPlaceholder__emailAddress_username: 'اسم المستخدم أو عنوان البريد الإلكتروني',- formFieldInputPlaceholder__firstName: 'الإسم الأول', - formFieldInputPlaceholder__lastName: 'الإسم الأخير', + formFieldInputPlaceholder__firstName: 'الاسم الأول', + formFieldInputPlaceholder__lastName: 'الاسم الأخير',- formFieldInputPlaceholder__organizationName: 'إسم المنظمة', + formFieldInputPlaceholder__organizationName: 'اسم المنظمة',- formFieldLabel__backupCode: 'الرمز الإحتياطي', + formFieldLabel__backupCode: 'الرمز الاحتياطي',- formFieldLabel__organizationName: 'إسم المنظمة', + formFieldLabel__organizationName: 'اسم المنظمة',- formFieldLabel__username: 'إسم المستخدم', + formFieldLabel__username: 'اسم المستخدم',Also applies to: 213-213, 216-217, 219-219, 228-228, 243-243, 250-250
225-226: Fix spelling: use "انتهاء" and "اسم".Lines 225-226 contain spelling errors:
- "إنتهاء" should be "انتهاء" (افتعل pattern, form VIII)
- "أسم" should be "اسم" (basic noun)
Apply this diff:
- formFieldLabel__apiKeyExpiration: 'إنتهاء الصلاحية', - formFieldLabel__apiKeyName: 'أسم المفتاح السري', + formFieldLabel__apiKeyExpiration: 'انتهاء الصلاحية', + formFieldLabel__apiKeyName: 'اسم المفتاح السري',
253-253: Fix spelling: use "باسم" instead of "بإسم".Line 253 uses "بإسم" but the correct spelling is "باسم" (with the name of). The preposition ب + اسم should not have hamza.
Apply this diff:
- title: 'تسجيل الدخول بإسم {{identifier}}', + title: 'تسجيل الدخول باسم {{identifier}}',
262-262: Fix spelling: use "انضمام" instead of "إنضمام".Line 262 uses "إنضمام" but "انضمام" (joining) follows the افتعل pattern (form VIII) and should not have hamza on the alif.
Apply this diff:
- action__invitationAccept: 'إنضمام', + action__invitationAccept: 'انضمام',
268-269: Fix spelling: use "اختر" instead of "إختر".Lines 268-269 use "إختر" but the correct spelling in Arabic is "اختر" (without hamza on the alif). This is the imperative form of the form VIII verb "اختار".
Apply this diff:
- title: 'إختر حسابًا', - titleWithoutPersonal: 'إختر منظمة', + title: 'اختر حسابًا', + titleWithoutPersonal: 'اختر منظمة',
276-276: Fix spelling: use "اقتراحات" instead of "إقتراحات".Line 276 uses "إقتراحات" but "اقتراح" follows the افتعل pattern (form VIII), so the plural "اقتراحات" should not have hamza on the alif.
Apply this diff:
- badge__automaticSuggestion: 'إقتراحات تلقائية', + badge__automaticSuggestion: 'اقتراحات تلقائية',
491-493: Fix spelling: use "انضمام" instead of "إنضمام".Lines 491 and 493 use "إنضمام" but "انضمام" follows the افتعل pattern (form VIII) and should not have hamza on the alif.
Apply this diff:
- action__invitationAccept: 'إنضمام', + action__invitationAccept: 'انضمام',- action__suggestionsAccept: 'طلب إنضمام', + action__suggestionsAccept: 'طلب انضمام',
506-511: Fix spelling: use "استعمل" and "الاحتياطي" consistently throughout.Multiple occurrences of "إستعمل" should be "استعمل" (form X imperative without hamza), and "الإحتياطي" should be "الاحتياطي" (form VIII without hamza). These patterns appear throughout the file at lines 506-511, 573-579, 664, 696-707, and 745.
Apply these diffs to fix all occurrences:
- blockButton__backupCode: 'إستعمل الرمز الإحتياطي', + blockButton__backupCode: 'استعمل الرمز الاحتياطي',- blockButton__totp: 'إستعمل تطبيق المصادقة', + blockButton__totp: 'استعمل تطبيق المصادقة',- blockButton__backupCode: 'إستعمل الرمز الإحتياطي', + blockButton__backupCode: 'استعمل الرمز الاحتياطي',- blockButton__totp: 'إستعمل تطبيق المصادقة', + blockButton__totp: 'استعمل تطبيق المصادقة',- actionLink: 'إستعمل طريقة أخرى', + actionLink: 'استعمل طريقة أخرى',- actionLink__use_email: 'إستعمل البريد الإلكتروني', - actionLink__use_email_username: 'إستعمل البريد الإلكتروني أو إسم المستخدم', - actionLink__use_passkey: 'إستعمل مفتاح المرور بدلاً من ذلك', - actionLink__use_phone: 'إستعمل رقم الهاتف', - actionLink__use_username: 'إستعمل إسم المستخدم', + actionLink__use_email: 'استعمل البريد الإلكتروني', + actionLink__use_email_username: 'استعمل البريد الإلكتروني أو اسم المستخدم', + actionLink__use_passkey: 'استعمل مفتاح المرور بدلاً من ذلك', + actionLink__use_phone: 'استعمل رقم الهاتف', + actionLink__use_username: 'استعمل اسم المستخدم',- actionLink: 'إستعمل طريقة أخرى', + actionLink: 'استعمل طريقة أخرى',- subtitle: 'إستعمل رقم هاتفك ليصلك رمز التحقق على {{provider}}', + subtitle: 'استعمل رقم هاتفك ليصلك رمز التحقق على {{provider}}',- formSubtitle: 'إستعمل رابط التحقق المرسل إلى بريدك الإلكتروني', + formSubtitle: 'استعمل رابط التحقق المرسل إلى بريدك الإلكتروني',Note: Line 697 also has "إسم المستخدم" which should be "اسم المستخدم" (already included in the diff above).
Also applies to: 573-579, 664-664, 696-707, 745-745
597-597: Fix spelling: use "الاحتياطي".Line 597 uses "الإحتياطي" but should use "الاحتياطي" (without hamza on alif).
Apply this diff:
- title: 'أدخل الرمز الإحتياطي', + title: 'أدخل الرمز الاحتياطي',
615-615: Fix spelling: use "ارجع" consistently.Multiple lines use "إرجع" but the correct imperative form is "ارجع" (without hamza on alif). This appears at lines 615, 635-636, and 757-758.
Apply these diffs:
- subtitle: 'إرجع إلى علامة التبويب الرئيسية للمتابعة.', + subtitle: 'ارجع إلى علامة التبويب الرئيسية للمتابعة.',- subtitle: 'ارجع إلى علامة التبويب الرئيسية للمتابعة', - subtitleNewTab: 'ارجع إلى علامة التبويب المفتوحة حديثًا للمتابعة', + subtitle: 'ارجع إلى علامة التبويب الرئيسية للمتابعة', + subtitleNewTab: 'ارجع إلى علامة التبويب المفتوحة حديثًا للمتابعة',- subtitle: 'إرجع إلى علامة التبويب المفتوحة حديثًا للمتابعة', - subtitleNewTab: 'إرجع إلى علامة التبويب السابقة للمتابعة', + subtitle: 'ارجع إلى علامة التبويب المفتوحة حديثًا للمتابعة', + subtitleNewTab: 'ارجع إلى علامة التبويب السابقة للمتابعة',Note: Line 635 already has the correct spelling "ارجع", so only lines 757-758 need correction in this group.
Also applies to: 618-618, 635-637, 757-758
695-695: Fix spelling: use "انضم" and "الانتظار".Line 695 uses "إنضم" and "الإنتظار" but both follow the افتعل pattern (form VIII) and should not have hamza on the alif.
Apply this diff:
- actionLink__join_waitlist: 'إنضم للائحة الإنتظار', + actionLink__join_waitlist: 'انضم للائحة الانتظار',
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Disabled knowledge base sources:
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (1)
packages/localizations/src/ar-SA.ts(16 hunks)
🧰 Additional context used
📓 Path-based instructions (7)
**/*.{js,jsx,ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
**/*.{js,jsx,ts,tsx}: All code must pass ESLint checks with the project's configuration
Follow established naming conventions (PascalCase for components, camelCase for variables)
Maintain comprehensive JSDoc comments for public APIs
Use dynamic imports for optional features
All public APIs must be documented with JSDoc
Provide meaningful error messages to developers
Include error recovery suggestions where applicable
Log errors appropriately for debugging
Lazy load components and features when possible
Implement proper caching strategies
Use efficient data structures and algorithms
Profile and optimize critical paths
Validate all inputs and sanitize outputs
Implement proper logging with different levels
Files:
packages/localizations/src/ar-SA.ts
**/*.{js,jsx,ts,tsx,json,css,scss,md,yaml,yml}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
Use Prettier for consistent code formatting
Files:
packages/localizations/src/ar-SA.ts
packages/**/*.{ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
TypeScript is required for all packages
Files:
packages/localizations/src/ar-SA.ts
packages/**/*.{ts,tsx,d.ts}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
Packages should export TypeScript types alongside runtime code
Files:
packages/localizations/src/ar-SA.ts
**/*.{ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
Use proper TypeScript error types
**/*.{ts,tsx}: Always define explicit return types for functions, especially public APIs
Use proper type annotations for variables and parameters where inference isn't clear
Avoidanytype - preferunknownwhen type is uncertain, then narrow with type guards
Useinterfacefor object shapes that might be extended
Usetypefor unions, primitives, and computed types
Preferreadonlyproperties for immutable data structures
Useprivatefor internal implementation details
Useprotectedfor inheritance hierarchies
Usepublicexplicitly for clarity in public APIs
Preferreadonlyfor properties that shouldn't change after construction
Prefer composition and interfaces over deep inheritance chains
Use mixins for shared behavior across unrelated classes
Implement dependency injection for loose coupling
Let TypeScript infer when types are obvious
Useconst assertionsfor literal types:as const
Usesatisfiesoperator for type checking without widening
Use mapped types for transforming object types
Use conditional types for type-level logic
Leverage template literal types for string manipulation
Use ES6 imports/exports consistently
Use default exports sparingly, prefer named exports
Use type-only imports:import type { ... } from ...
Noanytypes without justification
Proper error handling with typed errors
Consistent use ofreadonlyfor immutable data
Proper generic constraints
No unused type parameters
Proper use of utility types instead of manual type construction
Type-only imports where possible
Proper tree-shaking friendly exports
No circular dependencies
Efficient type computations (avoid deep recursion)
Files:
packages/localizations/src/ar-SA.ts
packages/localizations/**/*
📄 CodeRabbit inference engine (.cursor/rules/monorepo.mdc)
Localization files must be placed in 'packages/localizations/'.
Files:
packages/localizations/src/ar-SA.ts
**/*.{js,ts,tsx,jsx}
📄 CodeRabbit inference engine (.cursor/rules/monorepo.mdc)
Support multiple Clerk environment variables (CLERK_, NEXT_PUBLIC_CLERK_, etc.) for configuration.
Files:
packages/localizations/src/ar-SA.ts
⏰ 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: semgrep-cloud-platform/scan
- GitHub Check: semgrep-cloud-platform/scan
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 7
♻️ Duplicate comments (9)
packages/localizations/src/ar-SA.ts (9)
228-228: Fix spelling: use "الاحتياطي" instead of "الإحتياطي".Line 228 uses "الإحتياطي" but the correct spelling is "الاحتياطي" (following the افتعل pattern, form VIII, without hamza on the alif).
Apply this diff:
- formFieldLabel__backupCode: 'الرمز الإحتياطي', + formFieldLabel__backupCode: 'الرمز الاحتياطي',
253-253: Fix spelling: use "باسم" instead of "بإسم".Line 253 uses "بإسم" but the correct spelling is "باسم" (with the name of).
Apply this diff:
- title: 'تسجيل الدخول بإسم {{identifier}}', + title: 'تسجيل الدخول باسم {{identifier}}',
268-269: Fix spelling: use "اختر" instead of "إختر".Lines 268-269 use "إختر" but the correct Modern Standard Arabic spelling is "اختر" (without hamza on the alif), following the افتعل pattern for the imperative form.
Apply this diff:
- title: 'إختر حسابًا', - titleWithoutPersonal: 'إختر منظمة', + title: 'اختر حسابًا', + titleWithoutPersonal: 'اختر منظمة',Based on learnings: Previous review confirmed that professional Arabic UIs consistently use "اختر" following MSA orthographic rules.
506-506: Fix spelling: use "الاحتياطي" instead of "الإحتياطي".Line 506 uses "الإحتياطي" but the correct spelling is "الاحتياطي" (without hamza on the alif).
Apply this diff:
- blockButton__backupCode: 'استعمل الرمز الإحتياطي', + blockButton__backupCode: 'استعمل الرمز الاحتياطي',
573-573: Fix spelling: use "الاحتياطي" instead of "الإحتياطي".Line 573 uses "الإحتياطي" but the correct spelling is "الاحتياطي" (without hamza on the alif).
Apply this diff:
- blockButton__backupCode: 'استعمل الرمز الإحتياطي', + blockButton__backupCode: 'استعمل الرمز الاحتياطي',
597-597: Fix spelling: use "الاحتياطي" instead of "الإحتياطي".Line 597 uses "الإحتياطي" but the correct spelling is "الاحتياطي" (without hamza on the alif).
Apply this diff:
- title: 'أدخل الرمز الإحتياطي', + title: 'أدخل الرمز الاحتياطي',
695-695: Fix spelling: use "الانتظار" instead of "الإنتظار".Line 695 uses "الإنتظار" but the correct spelling is "الانتظار" (following the افتعل pattern, without hamza on the alif).
Apply this diff:
- actionLink__join_waitlist: 'انضم للائحة الإنتظار', + actionLink__join_waitlist: 'انضم للائحة الانتظار',
697-697: Fix spelling: use "اسم" instead of "إسم".Line 697 uses "إسم" but the correct spelling is "اسم" (without hamza on the alif).
Apply this diff:
- actionLink__use_email_username: 'استعمل البريد الإلكتروني أو إسم المستخدم', + actionLink__use_email_username: 'استعمل البريد الإلكتروني أو اسم المستخدم',
700-700: Fix spelling: use "اسم" instead of "إسم".Line 700 uses "إسم" but the correct spelling is "اسم" (without hamza on the alif).
Apply this diff:
- actionLink__use_username: 'استعمل إسم المستخدم', + actionLink__use_username: 'استعمل اسم المستخدم',
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Disabled knowledge base sources:
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (1)
packages/localizations/src/ar-SA.ts(16 hunks)
🧰 Additional context used
📓 Path-based instructions (7)
**/*.{js,jsx,ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
**/*.{js,jsx,ts,tsx}: All code must pass ESLint checks with the project's configuration
Follow established naming conventions (PascalCase for components, camelCase for variables)
Maintain comprehensive JSDoc comments for public APIs
Use dynamic imports for optional features
All public APIs must be documented with JSDoc
Provide meaningful error messages to developers
Include error recovery suggestions where applicable
Log errors appropriately for debugging
Lazy load components and features when possible
Implement proper caching strategies
Use efficient data structures and algorithms
Profile and optimize critical paths
Validate all inputs and sanitize outputs
Implement proper logging with different levels
Files:
packages/localizations/src/ar-SA.ts
**/*.{js,jsx,ts,tsx,json,css,scss,md,yaml,yml}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
Use Prettier for consistent code formatting
Files:
packages/localizations/src/ar-SA.ts
packages/**/*.{ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
TypeScript is required for all packages
Files:
packages/localizations/src/ar-SA.ts
packages/**/*.{ts,tsx,d.ts}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
Packages should export TypeScript types alongside runtime code
Files:
packages/localizations/src/ar-SA.ts
**/*.{ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
Use proper TypeScript error types
**/*.{ts,tsx}: Always define explicit return types for functions, especially public APIs
Use proper type annotations for variables and parameters where inference isn't clear
Avoidanytype - preferunknownwhen type is uncertain, then narrow with type guards
Useinterfacefor object shapes that might be extended
Usetypefor unions, primitives, and computed types
Preferreadonlyproperties for immutable data structures
Useprivatefor internal implementation details
Useprotectedfor inheritance hierarchies
Usepublicexplicitly for clarity in public APIs
Preferreadonlyfor properties that shouldn't change after construction
Prefer composition and interfaces over deep inheritance chains
Use mixins for shared behavior across unrelated classes
Implement dependency injection for loose coupling
Let TypeScript infer when types are obvious
Useconst assertionsfor literal types:as const
Usesatisfiesoperator for type checking without widening
Use mapped types for transforming object types
Use conditional types for type-level logic
Leverage template literal types for string manipulation
Use ES6 imports/exports consistently
Use default exports sparingly, prefer named exports
Use type-only imports:import type { ... } from ...
Noanytypes without justification
Proper error handling with typed errors
Consistent use ofreadonlyfor immutable data
Proper generic constraints
No unused type parameters
Proper use of utility types instead of manual type construction
Type-only imports where possible
Proper tree-shaking friendly exports
No circular dependencies
Efficient type computations (avoid deep recursion)
Files:
packages/localizations/src/ar-SA.ts
packages/localizations/**/*
📄 CodeRabbit inference engine (.cursor/rules/monorepo.mdc)
Localization files must be placed in 'packages/localizations/'.
Files:
packages/localizations/src/ar-SA.ts
**/*.{js,ts,tsx,jsx}
📄 CodeRabbit inference engine (.cursor/rules/monorepo.mdc)
Support multiple Clerk environment variables (CLERK_, NEXT_PUBLIC_CLERK_, etc.) for configuration.
Files:
packages/localizations/src/ar-SA.ts
⏰ 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: semgrep-cloud-platform/scan
- GitHub Check: semgrep-cloud-platform/scan
🔇 Additional comments (1)
packages/localizations/src/ar-SA.ts (1)
209-210: Fix spelling: use "اشرح" and "اختر" without hamza.Lines 209-210 use incorrect spellings with hamza on the alif.
Apply this diff:
- formFieldInputPlaceholder__apiKeyDescription: 'إشرح لما تود توليد هذا المفتاح', - formFieldInputPlaceholder__apiKeyExpirationDate: 'إختر تاريخاً', + formFieldInputPlaceholder__apiKeyDescription: 'اشرح لما تود توليد هذا المفتاح', + formFieldInputPlaceholder__apiKeyExpirationDate: 'اختر تاريخاً',Likely an incorrect or invalid review comment.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
packages/localizations/src/ar-SA.ts (1)
15-1288: Arabic localization additions look good overall, with spelling corrections needed.This PR successfully adds comprehensive Arabic translations across multiple sections including API keys, badges, organizations, sign-in/sign-up flows, and user profile elements. The translations are contextually appropriate and fill in previously undefined values.
However, several spelling issues related to incorrect hamza usage on alif need to be corrected to ensure full Modern Standard Arabic (MSA) compliance. These have been flagged in separate comments.
♻️ Duplicate comments (4)
packages/localizations/src/ar-SA.ts (4)
210-210: Fix spelling: use "الاحتياطي" instead of "الإحتياطي".The word "backup" (احتياطي) follows the افتعال pattern and should not have hamza on the alif. This spelling error appears in multiple locations throughout the file.
Apply these corrections:
- formFieldInputPlaceholder__backupCode: 'أدخل الرمز الإحتياطي', + formFieldInputPlaceholder__backupCode: 'أدخل الرمز الاحتياطي',- formFieldLabel__backupCode: 'الرمز الإحتياطي', + formFieldLabel__backupCode: 'الرمز الاحتياطي',- blockButton__backupCode: 'استعمل الرمز الإحتياطي', + blockButton__backupCode: 'استعمل الرمز الاحتياطي',- blockButton__backupCode: 'استعمل الرمز الإحتياطي', + blockButton__backupCode: 'استعمل الرمز الاحتياطي',- title: 'أدخل الرمز الإحتياطي', + title: 'أدخل الرمز الاحتياطي',Also applies to: 228-228, 506-506, 573-573, 597-597
253-253: Fix spelling: use "باسم" instead of "بإسم".The preposition "with the name of" should be written as "باسم" without hamza.
- title: 'تسجيل الدخول بإسم {{identifier}}', + title: 'تسجيل الدخول باسم {{identifier}}',
268-269: Fix spelling: use "اختر" instead of "إختر".The imperative form of "choose" (from the verb اختار, form VIII افتعل pattern) should be written as "اختر" without hamza on the alif, following Modern Standard Arabic orthography. This is the standard used in professional Arabic UI localization.
- title: 'إختر حسابًا', - titleWithoutPersonal: 'إختر منظمة', + title: 'اختر حسابًا', + titleWithoutPersonal: 'اختر منظمة',
697-697: Fix spelling: use "اسم المستخدم" instead of "إسم المستخدم".The word "name" (اسم) should not have hamza on the alif in Modern Standard Arabic.
- actionLink__use_email_username: 'استعمل البريد الإلكتروني أو إسم المستخدم', + actionLink__use_email_username: 'استعمل البريد الإلكتروني أو اسم المستخدم',- actionLink__use_username: 'استعمل إسم المستخدم', + actionLink__use_username: 'استعمل اسم المستخدم',Also applies to: 700-700
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Disabled knowledge base sources:
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (1)
packages/localizations/src/ar-SA.ts(15 hunks)
🧰 Additional context used
📓 Path-based instructions (7)
**/*.{js,jsx,ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
**/*.{js,jsx,ts,tsx}: All code must pass ESLint checks with the project's configuration
Follow established naming conventions (PascalCase for components, camelCase for variables)
Maintain comprehensive JSDoc comments for public APIs
Use dynamic imports for optional features
All public APIs must be documented with JSDoc
Provide meaningful error messages to developers
Include error recovery suggestions where applicable
Log errors appropriately for debugging
Lazy load components and features when possible
Implement proper caching strategies
Use efficient data structures and algorithms
Profile and optimize critical paths
Validate all inputs and sanitize outputs
Implement proper logging with different levels
Files:
packages/localizations/src/ar-SA.ts
**/*.{js,jsx,ts,tsx,json,css,scss,md,yaml,yml}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
Use Prettier for consistent code formatting
Files:
packages/localizations/src/ar-SA.ts
packages/**/*.{ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
TypeScript is required for all packages
Files:
packages/localizations/src/ar-SA.ts
packages/**/*.{ts,tsx,d.ts}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
Packages should export TypeScript types alongside runtime code
Files:
packages/localizations/src/ar-SA.ts
**/*.{ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
Use proper TypeScript error types
**/*.{ts,tsx}: Always define explicit return types for functions, especially public APIs
Use proper type annotations for variables and parameters where inference isn't clear
Avoidanytype - preferunknownwhen type is uncertain, then narrow with type guards
Useinterfacefor object shapes that might be extended
Usetypefor unions, primitives, and computed types
Preferreadonlyproperties for immutable data structures
Useprivatefor internal implementation details
Useprotectedfor inheritance hierarchies
Usepublicexplicitly for clarity in public APIs
Preferreadonlyfor properties that shouldn't change after construction
Prefer composition and interfaces over deep inheritance chains
Use mixins for shared behavior across unrelated classes
Implement dependency injection for loose coupling
Let TypeScript infer when types are obvious
Useconst assertionsfor literal types:as const
Usesatisfiesoperator for type checking without widening
Use mapped types for transforming object types
Use conditional types for type-level logic
Leverage template literal types for string manipulation
Use ES6 imports/exports consistently
Use default exports sparingly, prefer named exports
Use type-only imports:import type { ... } from ...
Noanytypes without justification
Proper error handling with typed errors
Consistent use ofreadonlyfor immutable data
Proper generic constraints
No unused type parameters
Proper use of utility types instead of manual type construction
Type-only imports where possible
Proper tree-shaking friendly exports
No circular dependencies
Efficient type computations (avoid deep recursion)
Files:
packages/localizations/src/ar-SA.ts
packages/localizations/**/*
📄 CodeRabbit inference engine (.cursor/rules/monorepo.mdc)
Localization files must be placed in 'packages/localizations/'.
Files:
packages/localizations/src/ar-SA.ts
**/*.{js,ts,tsx,jsx}
📄 CodeRabbit inference engine (.cursor/rules/monorepo.mdc)
Support multiple Clerk environment variables (CLERK_, NEXT_PUBLIC_CLERK_, etc.) for configuration.
Files:
packages/localizations/src/ar-SA.ts
⏰ 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: semgrep-cloud-platform/scan
- GitHub Check: semgrep-cloud-platform/scan
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 5
♻️ Duplicate comments (1)
packages/localizations/src/ar-SA.ts (1)
695-695: Fix “الانتظار” spelling.“الانتظار” without hamza.
- actionLink__join_waitlist: 'انضم للائحة الإنتظار', + actionLink__join_waitlist: 'انضم للائحة الانتظار',
🧹 Nitpick comments (10)
packages/localizations/src/ar-SA.ts (10)
52-70: Badge wording refinements for clarity.
- “الخطة” fits “plan” better than “العرض”.
- “يتجدد” is the idiomatic form.
- Prefer natural sentence order.
- badge__currentPlan: 'العرض الحالي', + badge__currentPlan: 'الخطة الحالية', @@ - badge__renewsAt: 'تجدد في {{ date | shortDate("en-US") }}', + badge__renewsAt: 'يتجدد في {{ date | shortDate("en-US") }}', @@ - badge__trialEndsAt: 'الفترة التجريبية تنتهي في {{ date | shortDate("en-US") }}', + badge__trialEndsAt: 'تنتهي الفترة التجريبية في {{ date | shortDate("en-US") }}', @@ - badge__upcomingPlan: 'القادم', + badge__upcomingPlan: 'الخطة القادمة',
241-242: Remove unintended double space.There are two spaces before “الرمز”.
- 'أدخل عنوان البريد الإلكتروني الخاص بالنطاق للحصول على الرمز والتحقق من النطاق', + 'أدخل عنوان البريد الإلكتروني الخاص بالنطاق للحصول على الرمز والتحقق من النطاق',
261-266: Action labels: use “قبول …” for clarity.These keys represent actions, so “قبول …” is clearer than nouns.
- action__invitationAccept: 'انضمام', - action__suggestionsAccept: 'طلب انضمام', + action__invitationAccept: 'قبول الدعوة', + action__suggestionsAccept: 'قبول الطلب',
353-357: Use imperative for the search action.“ابحث” (imperative) reads better than the noun “بحث” for an action button.
- action__search: 'بحث', + action__search: 'ابحث',
500-501: Pagination phrasing.If this key composes “Displaying X–Y of Z”, prefer a neutral noun “عرض”.
- paginationRowText__displaying: 'يتم عرض', + paginationRowText__displaying: 'عرض',Please confirm how this is concatenated at runtime to ensure the phrase reads naturally in Arabic.
504-511: Unify “كلمة المرور”.Use “كلمة المرور” consistently instead of “كلمة السر”.
- blockButton__password: 'تسجيل الدخول بكلمة السر الخاصة بك', + blockButton__password: 'تسجيل الدخول بكلمة المرور الخاصة بك',
644-646: Arabic comma and style.Use Arabic comma and simplify phrasing.
- subtitle_email: 'أولاً, قم بإدخال الرمز المرسل إلى البريد الإلكتروني الخاص بك', + subtitle_email: 'أولاً، أدخل الرمز المرسل إلى بريدك الإلكتروني', - subtitle_phone: 'أولاً, قم بإدخال الرمز المرسل إلى رقم الهاتف الخاص بك', + subtitle_phone: 'أولاً، أدخل الرمز المرسل إلى رقم هاتفك',
687-688: Natural phrasing and spelling.
- “جاري تسجيل الدخول” is idiomatic.
- “الانتظار” without hamza.
- Add tanween optionally.
- successMessage: 'تم تغيير كلمة المرور بنجاح. يتم تسجيل الدخول الرجاء الإنتظار قليلا.', + successMessage: 'تم تغيير كلمة المرور بنجاح. جاري تسجيل الدخول، الرجاء الانتظار قليلًا.',
705-707: Label word order.Make the noun phrase natural: “رقم هاتف {{provider}}”.
- label: '{{provider}} رقم الهاتف', + label: 'رقم هاتف {{provider}}',
1-1288: Fix Arabic typography and orthography
- Replace ASCII commas (
,) in Arabic strings with the Arabic comma (،).- Correct improper hamza usages (e.g. “إختر”→“اختر”, “أضافة”→“إضافة”).
- Remove double spaces within string literals.
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Disabled knowledge base sources:
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (1)
packages/localizations/src/ar-SA.ts(15 hunks)
🧰 Additional context used
📓 Path-based instructions (7)
**/*.{js,jsx,ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
**/*.{js,jsx,ts,tsx}: All code must pass ESLint checks with the project's configuration
Follow established naming conventions (PascalCase for components, camelCase for variables)
Maintain comprehensive JSDoc comments for public APIs
Use dynamic imports for optional features
All public APIs must be documented with JSDoc
Provide meaningful error messages to developers
Include error recovery suggestions where applicable
Log errors appropriately for debugging
Lazy load components and features when possible
Implement proper caching strategies
Use efficient data structures and algorithms
Profile and optimize critical paths
Validate all inputs and sanitize outputs
Implement proper logging with different levels
Files:
packages/localizations/src/ar-SA.ts
**/*.{js,jsx,ts,tsx,json,css,scss,md,yaml,yml}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
Use Prettier for consistent code formatting
Files:
packages/localizations/src/ar-SA.ts
packages/**/*.{ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
TypeScript is required for all packages
Files:
packages/localizations/src/ar-SA.ts
packages/**/*.{ts,tsx,d.ts}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
Packages should export TypeScript types alongside runtime code
Files:
packages/localizations/src/ar-SA.ts
**/*.{ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
Use proper TypeScript error types
**/*.{ts,tsx}: Always define explicit return types for functions, especially public APIs
Use proper type annotations for variables and parameters where inference isn't clear
Avoidanytype - preferunknownwhen type is uncertain, then narrow with type guards
Useinterfacefor object shapes that might be extended
Usetypefor unions, primitives, and computed types
Preferreadonlyproperties for immutable data structures
Useprivatefor internal implementation details
Useprotectedfor inheritance hierarchies
Usepublicexplicitly for clarity in public APIs
Preferreadonlyfor properties that shouldn't change after construction
Prefer composition and interfaces over deep inheritance chains
Use mixins for shared behavior across unrelated classes
Implement dependency injection for loose coupling
Let TypeScript infer when types are obvious
Useconst assertionsfor literal types:as const
Usesatisfiesoperator for type checking without widening
Use mapped types for transforming object types
Use conditional types for type-level logic
Leverage template literal types for string manipulation
Use ES6 imports/exports consistently
Use default exports sparingly, prefer named exports
Use type-only imports:import type { ... } from ...
Noanytypes without justification
Proper error handling with typed errors
Consistent use ofreadonlyfor immutable data
Proper generic constraints
No unused type parameters
Proper use of utility types instead of manual type construction
Type-only imports where possible
Proper tree-shaking friendly exports
No circular dependencies
Efficient type computations (avoid deep recursion)
Files:
packages/localizations/src/ar-SA.ts
packages/localizations/**/*
📄 CodeRabbit inference engine (.cursor/rules/monorepo.mdc)
Localization files must be placed in 'packages/localizations/'.
Files:
packages/localizations/src/ar-SA.ts
**/*.{js,ts,tsx,jsx}
📄 CodeRabbit inference engine (.cursor/rules/monorepo.mdc)
Support multiple Clerk environment variables (CLERK_, NEXT_PUBLIC_CLERK_, etc.) for configuration.
Files:
packages/localizations/src/ar-SA.ts
⏰ 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: semgrep-cloud-platform/scan
- GitHub Check: semgrep-cloud-platform/scan
🔇 Additional comments (1)
packages/localizations/src/ar-SA.ts (1)
20-67: Verify date/time filter locale
All date/time filters in packages/localizations/src/ar-SA.ts currently specify'en-US'(e.g. shortDate, longDate, timeString, numeric, weekday). For Arabic localization, switch to'ar'or'ar-SA'to use Arabic formatting/digits; keep'en-US'only if Western digits are required. Confirm the intended formatting and batch-adjust accordingly.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (4)
packages/localizations/src/ar-SA.ts (4)
456-458: Fix critical content issues: duplicate word, leftover English, stray quote, and wrong entity (“email” instead of “phone”).These affect user comprehension. Apply the following fixes.
- removeDomainSubtitle: 'حذف هذا النطاق من من النطاقات المعتمدة', + removeDomainSubtitle: 'حذف هذا النطاق من النطاقات المعتمدة', @@ - title: 'Update {{domain}}', + title: 'تحديث {{domain}}', @@ -signInEnterPasswordTitle: 'إدخل كلمة المرور', +signInEnterPasswordTitle: 'أدخل كلمة المرور', @@ - successMessage2: - 'احفظ هذه الرموز الاحتياطية وقم بتخزينها في مكان آمن." إذا فقدت إمكانية الوصول إلى جهاز المصادقة الخاص بك، فيمكنك استخدام الرموز الاحتياطية لتسجيل الدخول.', + successMessage2: + 'احفظ هذه الرموز الاحتياطية وقم بتخزينها في مكان آمن. إذا فقدت إمكانية الوصول إلى جهاز المصادقة الخاص بك، فيمكنك استخدام الرموز الاحتياطية لتسجيل الدخول.', @@ - removeResource: { - messageLine1: 'سيتم حذف هذا الإيميل من حسابك {{identifier}}', + removeResource: { + messageLine1: 'سيتم حذف رقم الجوال هذا من حسابك {{identifier}}',Also applies to: 478-479, 720-720, 1088-1093, 1145-1151
341-343: Correct hamza/imperative forms and spacing across UI strings.Use standard MSA forms: اختر/استخدم/إدارة/إضافة… and ensure proper spacing.
- selectDropdown__role: 'إختر دور', + selectDropdown__role: 'اختر دورًا', @@ - primaryButton: 'أدارة النطاقات الموثوقة', + primaryButton: 'إدارة النطاقات الموثوقة', @@ - primaryButton: 'أضافة نطاق', + primaryButton: 'إضافة نطاق', - subtitle: - 'السماح للمستخدمين للأنضمام للمنظمة بشكل تلقائي أو عن طريق دعوة للأنضمام على نطاق بريد إلكتروني تم التحقق منه', + subtitle: + 'السماح للمستخدمين بالانضمام إلى المنظمة تلقائيًا أو عبر دعوة للانضمام على نطاق بريد إلكتروني تم التحقق منه', @@ - subtitle: 'أختر كيف يمكن للمستخدمين في هذا النطاق تسجيل الدخول إلى المنظمة', + subtitle: 'اختر كيف يمكن للمستخدمين في هذا النطاق تسجيل الدخول إلى المنظمة', @@ - subtitle: 'قم بإختيار الحساب الذي تريد المتابعة به', - title: 'إختر حساب', + subtitle: 'اختر الحساب الذي تريد المتابعة به', + title: 'اختر حسابًا', @@ - title: 'أستخدام طريقة أخرى', + title: 'استخدام طريقة أخرى', @@ - formButtonReset: 'الغاء', + formButtonReset: 'إلغاء', @@ - formHint: 'أختر طريقة للأضافة', + formHint: 'اختر طريقة للإضافة', @@ - backButton: 'إستخدم الرقم الموجود', + backButton: 'استخدم الرقم الموجود', @@ - subtitle__availablePhoneNumbers: 'أختر رقم جوال لأضافة التحقق بخطوتين عن طريق الرسائل النصية', - subtitle__unavailablePhoneNumbers: 'لا يوجد رقم جوال لأضافة التحقق بخطوتين عن طريق الرسائل النصية', + subtitle__availablePhoneNumbers: 'اختر رقم جوال لإضافة التحقق بخطوتين عبر الرسائل النصية', + subtitle__unavailablePhoneNumbers: 'لا يوجد رقم جوال لإضافة التحقق بخطوتين عبر الرسائل النصية', @@ - title: 'أضافة التحقق عن طريق رمز الرسائل النصية', + title: 'إضافة التحقق عبر رمز الرسائل النصية', @@ - fileDropAreaHint: 'أرفع صورة بصيغة JPG, PNG, GIF أو WEBP أقل من 10 ميغابايت', + fileDropAreaHint: 'ارفع صورة بصيغة JPG, PNG, GIF أو WEBP أقل من 10 ميغابايت', @@ - primaryButton: 'إضافةالتحقق بخطوتين', + primaryButton: 'إضافة التحقق بخطوتين', @@ - messageLine1: 'سيتم حذف هذه المحفظة من حسابك{{identifier}}', + messageLine1: 'سيتم حذف هذه المحفظة من حسابك {{identifier}}', @@ - subtitle__availableWallets: 'أختر محفظة web3 لتوصيلها بحسابك', + subtitle__availableWallets: 'اختر محفظة web3 لتوصيلها بحسابك', @@ - successMessage: 'تمت إضافة المحفظة الى حسابك.', + successMessage: 'تمت إضافة المحفظة إلى حسابك.',Also applies to: 347-347, 368-368, 431-433, 471-472, 565-569, 588-588, 1071-1071, 1073-1073, 1077-1077, 1085-1086, 1093-1093, 1161-1161, 1211-1214, 1262-1262, 1267-1267, 1270-1270
838-848: Fix typos and translate leftover English in unstable__errors.These are error-facing strings; correctness matters.
- form_identifier_exists__email_address: 'تم إستخدام البريد الإلكتروني هذا. يرجى المحاولة مرة أخرى', - form_identifier_exists__phone_number: 'تم إستخدام رقم الهاتف هذا. يرجى المحاولة مرة أخرى', - form_identifier_exists__username: 'تم إستخدام اسم المستخدمد هذا. يرجى المحاولة مرة أخرى', + form_identifier_exists__email_address: 'تم استخدام هذا البريد الإلكتروني. يُرجى المحاولة مرة أخرى', + form_identifier_exists__phone_number: 'تم استخدام هذا الرقم. يُرجى المحاولة مرة أخرى', + form_identifier_exists__username: 'تم استخدام اسم المستخدم هذا. يُرجى المحاولة مرة أخرى', @@ - form_param_format_invalid__phone_number: 'Phone number must be in a valid international format', + form_param_format_invalid__phone_number: 'يجب أن يكون رقم الهاتف بصيغة دولية صحيحة', @@ - form_param_max_length_exceeded__first_name: 'الأسم الأول يجب الا يتجاوز 256 حرف', - form_param_max_length_exceeded__last_name: 'الأسم الأخير يجب الا يتجاوز 256 حرف', - form_param_max_length_exceeded__name: 'الأسم يجب الا يتجاوز 256 حرف', + form_param_max_length_exceeded__first_name: 'الاسم الأول يجب ألّا يتجاوز 256 حرفًا', + form_param_max_length_exceeded__last_name: 'الاسم الأخير يجب ألّا يتجاوز 256 حرفًا', + form_param_max_length_exceeded__name: 'الاسم يجب ألّا يتجاوز 256 حرفًا', @@ - form_password_pwned__sign_in: 'لا يمكن أستعمال كلمة السر هذه لانها غير أمنة, الرجاء اختيار كلمة مرور أخرى', + form_password_pwned__sign_in: 'لا يمكن استخدام كلمة المرور هذه لأنها غير آمنة، يُرجى اختيار كلمة مرور أخرى', @@ - identification_deletion_failed: 'لا يمكن حذف هويتك الآخيرة ', + identification_deletion_failed: 'لا يمكن حذف هويتك الأخيرة', @@ - allUppercase: 'أستعمل حروف كبيرة لبعض الحروف وليس كلها.', + allUppercase: 'استخدم حروفًا كبيرة لبعض الحروف وليس كلها.', @@ - longerKeyboardPattern: 'أستخدم أنماط أكثر وقم بتغيير أتجاه الكتابة في لوحة المفاتيح عدة مرات', + longerKeyboardPattern: 'استخدم أنماطًا أكثر وغيّر اتجاه الكتابة في لوحة المفاتيح عدة مرات', @@ - pwned: 'كلمة المرور الخاص بك تم أختراقها والكشف عنها في الأنترنت', + pwned: 'تم اختراق كلمة المرور الخاصة بك والكشف عنها على الإنترنت', @@ - wordByItself: 'من السهل تخميل الكلمات المنفردة', + wordByItself: 'من السهل تخمين الكلمات المنفردة',Also applies to: 858-861, 865-865, 896-896, 903-903, 919-919, 928-928, 845-845
1099-1116: TOTP/MFA copy fixes: spelling and clarity.Clean up incorrect words and hamza forms.
- infoText__unableToScan: 'قم بإعداد تسجيل دخول جديدة في تطبيق المصادقة وأدخل الرمز المقدم أدناه', + infoText__unableToScan: 'أعد إعداد تسجيل دخول جديد في تطبيق المصادقة وأدخل الرمز المقدم أدناه', @@ - 'تأكد من تفعيل كلمات المرور المستندة إلى الوقت أو الأستعمال الواحد, ثم أكمل ربط حسابك', + 'تأكد من تفعيل كلمات المرور المستندة إلى الوقت أو الاستعمال الواحد، ثم أكمل ربط حسابك', @@ - 'بدلا من ذلك, إذا كان المصدق الخاص بك يدعم روابط المدعومة من طرق المستندة إلى الوقت أو الأستعمال الواحد, يمكنك نسخ الرابط كله', + 'بدلًا من ذلك، إذا كان المصدِّق لديك يدعم الروابط المدعومة بالطرق المستندة إلى الوقت أو الاستعمال الواحد، فيمكنك نسخ الرابط كاملًا', @@ - messageLine1: 'رموز التحقق من برنامج المصادقة هذا ستكون غير ضروية عند تسجيل الدخول', + messageLine1: 'لن تكون رموز التحقق من برنامج المصادقة هذا ضرورية عند تسجيل الدخول', @@ - successMessage: 'تم أزالة طريقة التحقق بخطوتين من تطبيق المصادقة', + successMessage: 'تم إزالة طريقة التحقق بخطوتين من تطبيق المصادقة', @@ - 'تم تمكين التحقق بخطوتين اللآن. عند تسجيل الدخول سوف يطلب منك أدخال رمز التحقق من تطبيق المصادقة الخاص بك', + 'تم تمكين التحقق بخطوتين الآن. عند تسجيل الدخول سيُطلب منك إدخال رمز التحقق من تطبيق المصادقة الخاص بك', @@ - verifySubtitle: 'أدخل رمز التحقق المنشئ في تطبيق المصادقة', + verifySubtitle: 'أدخل رمز التحقق الذي أنشأه تطبيق المصادقة',
🧹 Nitpick comments (4)
packages/localizations/src/ar-SA.ts (4)
661-662: Arabic punctuation and clarity: use Arabic comma “،”, question mark “؟”, and clearer terms.Improves readability and consistency in Arabic UI.
- 'يؤدي استخدام مفتاح المرور الخاص بك إلى تأكيد هويتك. جهازك الخاص قد يقوم بسؤالك عن بصمة الإصبع, او معرف الوجة او كلمة مرور قفل الشاشة', + 'يؤدي استخدام مفتاح المرور الخاص بك إلى تأكيد هويتك. قد يطلب جهازك بصمة الإصبع، أو معرّف الوجه، أو كلمة مرور قفل الشاشة', @@ - buttonAbleToScan__nonPrimary: 'مسح رمز الQR بدلا من ذلك', - buttonUnableToScan__nonPrimary: 'لا يمكنك مسح رمز الQR?', - infoText__ableToScan: 'قم بإعداد طريقة تسجيل دخول جديدة في تطبيق المصادقة و قم بمسح كود الQR لربطه بحسابك', + buttonAbleToScan__nonPrimary: 'مسح رمز QR بدلًا من ذلك', + buttonUnableToScan__nonPrimary: 'لا يمكنك مسح رمز QR؟', + infoText__ableToScan: 'أعد إعداد طريقة تسجيل دخول جديدة في تطبيق المصادقة ثم امسح رمز QR لربطه بحسابك',Also applies to: 1096-1104
942-956: Consistency: prefer “كلمة المرور”, consistent section titles, and clearer enterprise note.Unify terminology and polish phrasing.
- successMessage: - 'رموز النسخ الأحتياطي مفعلة الآن. يمكنك أستعمال واحدة من هذه الرموز لتسجيل الدخول إلى حسابك, اذا فقدت الوصول إلى جهاز المصادقة الخاص بك. كل رمز يمكن أستعماله لمرة واحدة فقط.', + successMessage: + 'تم تفعيل رموز النسخ الاحتياطي. يمكنك استخدام أحد هذه الرموز لتسجيل الدخول إلى حسابك إذا فقدت الوصول إلى جهاز المصادقة الخاص بك. كل رمز يُستخدم مرة واحدة فقط.', @@ - headerTitle__security: 'الأمان', + headerTitle__security: 'الأمان', @@ - readonly: 'لا يمكن تعديل كلمة المرور لأنه لا يمكنك تسجيل الدخول إلى عن طريق حساب المؤسسة', + readonly: 'لا يمكن تعديل كلمة المرور لأن تسجيل الدخول متاح فقط عبر حساب المؤسسة.', @@ - title: 'كلمة المرور غير آمنة', + title: 'كلمة المرور غير آمنة',Also applies to: 1200-1201, 1137-1143, 669-670
13-16: Prefer the TypeScript “satisfies” operator for typed const objects.Keeps literal types while checking against LocalizationResource.
-import type { LocalizationResource } from '@clerk/types'; - -export const arSA: LocalizationResource = { +import type { LocalizationResource } from '@clerk/types'; + +export const arSA = { locale: 'ar-SA', // ... -} as const; +} as const satisfies LocalizationResource;As per coding guidelines.
Also applies to: 1286-1288
20-23: Formatting consistency: stick to single quotes and run Prettier.A few entries use double quotes; ensure Prettier formats consistently.
- Run Prettier on the file.
- Normalize quotes to the project standard. As per coding guidelines.
Also applies to: 52-59, 585-587
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Disabled knowledge base sources:
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (1)
packages/localizations/src/ar-SA.ts(15 hunks)
🧰 Additional context used
📓 Path-based instructions (7)
**/*.{js,jsx,ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
**/*.{js,jsx,ts,tsx}: All code must pass ESLint checks with the project's configuration
Follow established naming conventions (PascalCase for components, camelCase for variables)
Maintain comprehensive JSDoc comments for public APIs
Use dynamic imports for optional features
All public APIs must be documented with JSDoc
Provide meaningful error messages to developers
Include error recovery suggestions where applicable
Log errors appropriately for debugging
Lazy load components and features when possible
Implement proper caching strategies
Use efficient data structures and algorithms
Profile and optimize critical paths
Validate all inputs and sanitize outputs
Implement proper logging with different levels
Files:
packages/localizations/src/ar-SA.ts
**/*.{js,jsx,ts,tsx,json,css,scss,md,yaml,yml}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
Use Prettier for consistent code formatting
Files:
packages/localizations/src/ar-SA.ts
packages/**/*.{ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
TypeScript is required for all packages
Files:
packages/localizations/src/ar-SA.ts
packages/**/*.{ts,tsx,d.ts}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
Packages should export TypeScript types alongside runtime code
Files:
packages/localizations/src/ar-SA.ts
**/*.{ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
Use proper TypeScript error types
**/*.{ts,tsx}: Always define explicit return types for functions, especially public APIs
Use proper type annotations for variables and parameters where inference isn't clear
Avoidanytype - preferunknownwhen type is uncertain, then narrow with type guards
Useinterfacefor object shapes that might be extended
Usetypefor unions, primitives, and computed types
Preferreadonlyproperties for immutable data structures
Useprivatefor internal implementation details
Useprotectedfor inheritance hierarchies
Usepublicexplicitly for clarity in public APIs
Preferreadonlyfor properties that shouldn't change after construction
Prefer composition and interfaces over deep inheritance chains
Use mixins for shared behavior across unrelated classes
Implement dependency injection for loose coupling
Let TypeScript infer when types are obvious
Useconst assertionsfor literal types:as const
Usesatisfiesoperator for type checking without widening
Use mapped types for transforming object types
Use conditional types for type-level logic
Leverage template literal types for string manipulation
Use ES6 imports/exports consistently
Use default exports sparingly, prefer named exports
Use type-only imports:import type { ... } from ...
Noanytypes without justification
Proper error handling with typed errors
Consistent use ofreadonlyfor immutable data
Proper generic constraints
No unused type parameters
Proper use of utility types instead of manual type construction
Type-only imports where possible
Proper tree-shaking friendly exports
No circular dependencies
Efficient type computations (avoid deep recursion)
Files:
packages/localizations/src/ar-SA.ts
packages/localizations/**/*
📄 CodeRabbit inference engine (.cursor/rules/monorepo.mdc)
Localization files must be placed in 'packages/localizations/'.
Files:
packages/localizations/src/ar-SA.ts
**/*.{js,ts,tsx,jsx}
📄 CodeRabbit inference engine (.cursor/rules/monorepo.mdc)
Support multiple Clerk environment variables (CLERK_, NEXT_PUBLIC_CLERK_, etc.) for configuration.
Files:
packages/localizations/src/ar-SA.ts
⏰ 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: semgrep-cloud-platform/scan
- GitHub Check: semgrep-cloud-platform/scan
🔇 Additional comments (1)
packages/localizations/src/ar-SA.ts (1)
185-191: Confirm date/time formatting locale (“en-US”) is intentional for ar-SA.Many pipes use 'en-US' in time/date templates. If the product expects Arabic/Hijri numerals or Arabic month/day names, consider switching to 'ar-SA'.
If this is a cross-locale convention, ignore. Otherwise, update the pipe locale arguments accordingly.
Also applies to: 53-71, 20-23, 56-66, 186-190
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 6
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (8)
packages/localizations/src/ar-SA.ts (8)
339-342: Fix spelling: “الأنضمام” → “الانضمام”.createDomainPage: { subtitle: - 'أضف النطاق للتحقق. المستخدمين الذين لديهم عناوين بريد إلكتروني على هذا النطاق يمكنهم تسجيل الدخول إلى المنظمة بشكل تلقائي أو طلب الأنضمام.', + 'أضف النطاق للتحقق. المستخدمين الذين لديهم عناوين بريد إلكتروني على هذا النطاق يمكنهم تسجيل الدخول إلى المنظمة بشكل تلقائي أو طلب الانضمام.', title: 'إضافة نطاق', },
466-479: Orthography fixes: “أقتراح” → “اقتراح”, “وأختيار” → “واختيار”.calloutSuggestionCountLabel: 'هناك {{count}} أقتراح معلق مرسلة إلى المستخدمين', + // ^ - calloutSuggestionCountLabel: 'هناك {{count}} أقتراح معلق مرسلة إلى المستخدمين', + calloutSuggestionCountLabel: 'هناك {{count}} اقتراح معلق مرسل إلى المستخدمين', @@ - subtitle: 'هذا النطاق {{domain}} موثوق الآن. يمكنك المتابعة وأختيار وضع التسجيل.', + subtitle: 'هذا النطاق {{domain}} موثوق الآن. يمكنك المتابعة واختيار وضع التسجيل.',Note: Also corrected agreement “مرسلة” → “مرسل” with “اقتراح”. [Based on learnings]
407-421: Imperative “اكتب”: replace “أكتب” → “اكتب”.deleteOrganization: { - actionDescription: 'أكتب {{organizationName}} بالأسفل للمتابعة.', + actionDescription: 'اكتب {{organizationName}} بالأسفل للمتابعة.', @@ leaveOrganization: { - actionDescription: 'أكتب {{organizationName}} للمتابعة', + actionDescription: 'اكتب {{organizationName}} للمتابعة',deletePage: { - actionDescription: 'أكتب حذف حساب بالأسفل للمتابعة', + actionDescription: 'اكتب "حذف حساب" بالأسفل للمتابعة',Also applies to: 1029-1032
438-442: Add missing spaces before placeholders.Avoid concatenating Arabic text and template tokens.
removeDomainPage: { - messageLine1: 'سيتم حذف نطاق البريد الإلكتروني هذا{{domain}}.', + messageLine1: 'سيتم حذف نطاق البريد الإلكتروني هذا {{domain}}.', @@ web3WalletPage: { removeResource: { messageLine1: 'سيتم حذف هذه المحفظة من حسابك {{identifier}}', title: 'حذف محفظة web3', }, - successMessage: 'تم حذف هذه المحفظة من حسابك{{web3Wallet}}', + successMessage: 'تم حذف هذه المحفظة من حسابك {{web3Wallet}}',Also applies to: 1261-1266
1016-1018: Fix imperative: “أختر” → “اختر”.connectedAccountPage: { - formHint: 'أختر موفر خدمة لتوصيل حسابك', + formHint: 'اختر موفر خدمة لتوصيل حسابك',
1147-1151: Hamza in “باستخدام”: “بإستخدام” → “باستخدام”.phoneNumberPage: { removeResource: { messageLine1: 'سيتم حذف رقم الجوال هذا من حسابك {{identifier}}', - messageLine2: 'لن تتمكن من تسجيل الدخول بإستخدام رقم الجوال هذا', + messageLine2: 'لن تتمكن من تسجيل الدخول باستخدام رقم الجوال هذا',
1063-1065: Leftover English: translate verifyTitle.- verifyTitle: 'Verify email address', + verifyTitle: 'التحقق من عنوان البريد الإلكتروني',
910-914: Warnings: fix “الأستخدام/الأسم”.- common: 'كلمة السر هذه شائعة في الأستخدام', + common: 'كلمة المرور هذه شائعة في الاستخدام', @@ - namesByThemselves: 'من السهل تخمين الأسم الأول أو اللقب', + namesByThemselves: 'من السهل تخمين الاسم الأول أو اللقب',Also applies to: 916-919
🧹 Nitpick comments (2)
packages/localizations/src/ar-SA.ts (2)
1161-1163: Use Arabic comma “،” in lists.- fileDropAreaHint: 'ارفع صورة بصيغة JPG, PNG, GIF أو WEBP أقل من 10 ميغابايت', + fileDropAreaHint: 'ارفع صورة بصيغة JPG، PNG، GIF أو WEBP أقل من 10 ميغابايت',
20-23: Style consistency: prefer single-quoted outer strings (Prettier).Optional: unify these two lines to match surrounding single-quoted strings.
- createdAndExpirationStatus__expiresOn: - "تم الإنشاء في {{ createdDate | shortDate('ar-SA') }} • ينتهي في {{ expiresDate | longDate('ar-SA') }}", - createdAndExpirationStatus__never: "تم الإنشاء في {{ createdDate | shortDate('ar-SA') }} • صلاحية دائمة", + createdAndExpirationStatus__expiresOn: + 'تم الإنشاء في {{ createdDate | shortDate("ar-SA") }} • ينتهي في {{ expiresDate | longDate("ar-SA") }}', + createdAndExpirationStatus__never: + 'تم الإنشاء في {{ createdDate | shortDate("ar-SA") }} • صلاحية دائمة',Note: Keep inner quotes around ar-SA as double quotes for consistency with other entries.
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Disabled knowledge base sources:
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (1)
packages/localizations/src/ar-SA.ts(31 hunks)
🧰 Additional context used
📓 Path-based instructions (7)
**/*.{js,jsx,ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
**/*.{js,jsx,ts,tsx}: All code must pass ESLint checks with the project's configuration
Follow established naming conventions (PascalCase for components, camelCase for variables)
Maintain comprehensive JSDoc comments for public APIs
Use dynamic imports for optional features
All public APIs must be documented with JSDoc
Provide meaningful error messages to developers
Include error recovery suggestions where applicable
Log errors appropriately for debugging
Lazy load components and features when possible
Implement proper caching strategies
Use efficient data structures and algorithms
Profile and optimize critical paths
Validate all inputs and sanitize outputs
Implement proper logging with different levels
Files:
packages/localizations/src/ar-SA.ts
**/*.{js,jsx,ts,tsx,json,css,scss,md,yaml,yml}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
Use Prettier for consistent code formatting
Files:
packages/localizations/src/ar-SA.ts
packages/**/*.{ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
TypeScript is required for all packages
Files:
packages/localizations/src/ar-SA.ts
packages/**/*.{ts,tsx,d.ts}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
Packages should export TypeScript types alongside runtime code
Files:
packages/localizations/src/ar-SA.ts
**/*.{ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
Use proper TypeScript error types
**/*.{ts,tsx}: Always define explicit return types for functions, especially public APIs
Use proper type annotations for variables and parameters where inference isn't clear
Avoidanytype - preferunknownwhen type is uncertain, then narrow with type guards
Useinterfacefor object shapes that might be extended
Usetypefor unions, primitives, and computed types
Preferreadonlyproperties for immutable data structures
Useprivatefor internal implementation details
Useprotectedfor inheritance hierarchies
Usepublicexplicitly for clarity in public APIs
Preferreadonlyfor properties that shouldn't change after construction
Prefer composition and interfaces over deep inheritance chains
Use mixins for shared behavior across unrelated classes
Implement dependency injection for loose coupling
Let TypeScript infer when types are obvious
Useconst assertionsfor literal types:as const
Usesatisfiesoperator for type checking without widening
Use mapped types for transforming object types
Use conditional types for type-level logic
Leverage template literal types for string manipulation
Use ES6 imports/exports consistently
Use default exports sparingly, prefer named exports
Use type-only imports:import type { ... } from ...
Noanytypes without justification
Proper error handling with typed errors
Consistent use ofreadonlyfor immutable data
Proper generic constraints
No unused type parameters
Proper use of utility types instead of manual type construction
Type-only imports where possible
Proper tree-shaking friendly exports
No circular dependencies
Efficient type computations (avoid deep recursion)
Files:
packages/localizations/src/ar-SA.ts
packages/localizations/**/*
📄 CodeRabbit inference engine (.cursor/rules/monorepo.mdc)
Localization files must be placed in 'packages/localizations/'.
Files:
packages/localizations/src/ar-SA.ts
**/*.{js,ts,tsx,jsx}
📄 CodeRabbit inference engine (.cursor/rules/monorepo.mdc)
Support multiple Clerk environment variables (CLERK_, NEXT_PUBLIC_CLERK_, etc.) for configuration.
Files:
packages/localizations/src/ar-SA.ts
⏰ 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: semgrep-cloud-platform/scan
- GitHub Check: semgrep-cloud-platform/scan
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (1)
packages/localizations/src/ar-SA.ts (1)
577-577: Standardize password terminology: use "كلمة المرور" consistently.Line 577 uses "كلمة السر" (password) while most other occurrences in the file (e.g., lines 666, 720, etc.) use "كلمة المرور". For consistency and modern standard Arabic, prefer "كلمة المرور" throughout.
Apply this diff:
- blockButton__password: 'تسجيل الدخول بكلمة السر الخاصة بك', + blockButton__password: 'تسجيل الدخول بكلمة المرور الخاصة بك',
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Disabled knowledge base sources:
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (1)
packages/localizations/src/ar-SA.ts(34 hunks)
🧰 Additional context used
📓 Path-based instructions (7)
**/*.{js,jsx,ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
**/*.{js,jsx,ts,tsx}: All code must pass ESLint checks with the project's configuration
Follow established naming conventions (PascalCase for components, camelCase for variables)
Maintain comprehensive JSDoc comments for public APIs
Use dynamic imports for optional features
All public APIs must be documented with JSDoc
Provide meaningful error messages to developers
Include error recovery suggestions where applicable
Log errors appropriately for debugging
Lazy load components and features when possible
Implement proper caching strategies
Use efficient data structures and algorithms
Profile and optimize critical paths
Validate all inputs and sanitize outputs
Implement proper logging with different levels
Files:
packages/localizations/src/ar-SA.ts
**/*.{js,jsx,ts,tsx,json,css,scss,md,yaml,yml}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
Use Prettier for consistent code formatting
Files:
packages/localizations/src/ar-SA.ts
packages/**/*.{ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
TypeScript is required for all packages
Files:
packages/localizations/src/ar-SA.ts
packages/**/*.{ts,tsx,d.ts}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
Packages should export TypeScript types alongside runtime code
Files:
packages/localizations/src/ar-SA.ts
**/*.{ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
Use proper TypeScript error types
**/*.{ts,tsx}: Always define explicit return types for functions, especially public APIs
Use proper type annotations for variables and parameters where inference isn't clear
Avoidanytype - preferunknownwhen type is uncertain, then narrow with type guards
Useinterfacefor object shapes that might be extended
Usetypefor unions, primitives, and computed types
Preferreadonlyproperties for immutable data structures
Useprivatefor internal implementation details
Useprotectedfor inheritance hierarchies
Usepublicexplicitly for clarity in public APIs
Preferreadonlyfor properties that shouldn't change after construction
Prefer composition and interfaces over deep inheritance chains
Use mixins for shared behavior across unrelated classes
Implement dependency injection for loose coupling
Let TypeScript infer when types are obvious
Useconst assertionsfor literal types:as const
Usesatisfiesoperator for type checking without widening
Use mapped types for transforming object types
Use conditional types for type-level logic
Leverage template literal types for string manipulation
Use ES6 imports/exports consistently
Use default exports sparingly, prefer named exports
Use type-only imports:import type { ... } from ...
Noanytypes without justification
Proper error handling with typed errors
Consistent use ofreadonlyfor immutable data
Proper generic constraints
No unused type parameters
Proper use of utility types instead of manual type construction
Type-only imports where possible
Proper tree-shaking friendly exports
No circular dependencies
Efficient type computations (avoid deep recursion)
Files:
packages/localizations/src/ar-SA.ts
packages/localizations/**/*
📄 CodeRabbit inference engine (.cursor/rules/monorepo.mdc)
Localization files must be placed in 'packages/localizations/'.
Files:
packages/localizations/src/ar-SA.ts
**/*.{js,ts,tsx,jsx}
📄 CodeRabbit inference engine (.cursor/rules/monorepo.mdc)
Support multiple Clerk environment variables (CLERK_, NEXT_PUBLIC_CLERK_, etc.) for configuration.
Files:
packages/localizations/src/ar-SA.ts
🔇 Additional comments (1)
packages/localizations/src/ar-SA.ts (1)
18-1273: LGTM! Comprehensive Arabic localization with high quality translations.The translations are well-executed with:
- Correct Modern Standard Arabic grammar and spelling
- Proper use of definite articles, verb forms, and noun cases
- Appropriate date/time formatting with 'ar-SA' locale
- Correctly placed interpolation variables ({{identifier}}, {{applicationName}}, etc.)
- Natural, idiomatic phrasing suitable for UI/UX contexts
The previous spelling issues flagged in earlier reviews appear to have been addressed. The only minor inconsistency found is the password terminology noted separately.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 4
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
packages/localizations/src/ar-SA.ts (1)
417-422: Hamza fix: “متأكد”.Correct hamza in “متأكد”.
- actionDescription: 'اكتب {{organizationName}} للمتابعة', - messageLine1: 'هل أنت متاكد أنك تريد الخروج من المنظمة؟ سوف تفقد الصلاحيات لهذه المنظمة وجميع تطبيقاتها', + actionDescription: 'اكتب {{organizationName}} للمتابعة', + messageLine1: 'هل أنت متأكد أنك تريد الخروج من المنظمة؟ سوف تفقد الصلاحيات لهذه المنظمة وجميع تطبيقاتها',
🧹 Nitpick comments (3)
packages/localizations/src/ar-SA.ts (3)
491-494: Align action labels with organization list.Use the same phrasing as organizationList for clarity/consistency.
- action__invitationAccept: 'انضمام', + action__invitationAccept: 'قبول الدعوة', - action__manageOrganization: 'إدارة المنظمة', - action__suggestionsAccept: 'طلب انضمام', + action__manageOrganization: 'إدارة المنظمة', + action__suggestionsAccept: 'قبول الطلب',
1209-1212: Natural wording: “كإعداد افتراضي”.“تعيين كإعداد افتراضي” is clearer than “كأفتراضي”.
- actionLabel__setDefault: 'تعيين كأفتراضي', + actionLabel__setDefault: 'تعيين كإعداد افتراضي',
15-1288: Optional QA: fix residual orthography issues in packages/localizations/src/ar-SA.ts
- Incorrect hamza forms (e.g. “بإستخدام” → “باستخدام”, “اي” → “أي”)
- Remove spaces before “،”
- Replace ASCII commas with Arabic “،”
- Use “المنظمة” consistently (avoid mixing with “المؤسسة”)
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Disabled knowledge base sources:
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (1)
packages/localizations/src/ar-SA.ts(33 hunks)
🧰 Additional context used
📓 Path-based instructions (7)
**/*.{js,jsx,ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
**/*.{js,jsx,ts,tsx}: All code must pass ESLint checks with the project's configuration
Follow established naming conventions (PascalCase for components, camelCase for variables)
Maintain comprehensive JSDoc comments for public APIs
Use dynamic imports for optional features
All public APIs must be documented with JSDoc
Provide meaningful error messages to developers
Include error recovery suggestions where applicable
Log errors appropriately for debugging
Lazy load components and features when possible
Implement proper caching strategies
Use efficient data structures and algorithms
Profile and optimize critical paths
Validate all inputs and sanitize outputs
Implement proper logging with different levels
Files:
packages/localizations/src/ar-SA.ts
**/*.{js,jsx,ts,tsx,json,css,scss,md,yaml,yml}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
Use Prettier for consistent code formatting
Files:
packages/localizations/src/ar-SA.ts
packages/**/*.{ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
TypeScript is required for all packages
Files:
packages/localizations/src/ar-SA.ts
packages/**/*.{ts,tsx,d.ts}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
Packages should export TypeScript types alongside runtime code
Files:
packages/localizations/src/ar-SA.ts
**/*.{ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
Use proper TypeScript error types
**/*.{ts,tsx}: Always define explicit return types for functions, especially public APIs
Use proper type annotations for variables and parameters where inference isn't clear
Avoidanytype - preferunknownwhen type is uncertain, then narrow with type guards
Useinterfacefor object shapes that might be extended
Usetypefor unions, primitives, and computed types
Preferreadonlyproperties for immutable data structures
Useprivatefor internal implementation details
Useprotectedfor inheritance hierarchies
Usepublicexplicitly for clarity in public APIs
Preferreadonlyfor properties that shouldn't change after construction
Prefer composition and interfaces over deep inheritance chains
Use mixins for shared behavior across unrelated classes
Implement dependency injection for loose coupling
Let TypeScript infer when types are obvious
Useconst assertionsfor literal types:as const
Usesatisfiesoperator for type checking without widening
Use mapped types for transforming object types
Use conditional types for type-level logic
Leverage template literal types for string manipulation
Use ES6 imports/exports consistently
Use default exports sparingly, prefer named exports
Use type-only imports:import type { ... } from ...
Noanytypes without justification
Proper error handling with typed errors
Consistent use ofreadonlyfor immutable data
Proper generic constraints
No unused type parameters
Proper use of utility types instead of manual type construction
Type-only imports where possible
Proper tree-shaking friendly exports
No circular dependencies
Efficient type computations (avoid deep recursion)
Files:
packages/localizations/src/ar-SA.ts
packages/localizations/**/*
📄 CodeRabbit inference engine (.cursor/rules/monorepo.mdc)
Localization files must be placed in 'packages/localizations/'.
Files:
packages/localizations/src/ar-SA.ts
**/*.{js,ts,tsx,jsx}
📄 CodeRabbit inference engine (.cursor/rules/monorepo.mdc)
Support multiple Clerk environment variables (CLERK_, NEXT_PUBLIC_CLERK_, etc.) for configuration.
Files:
packages/localizations/src/ar-SA.ts
⏰ 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: semgrep-cloud-platform/scan
- GitHub Check: semgrep-cloud-platform/scan
🔇 Additional comments (2)
packages/localizations/src/ar-SA.ts (2)
18-49: Solid Arabic MSA localization pass.Consistent placeholders, date filters (ar‑SA), punctuation improvements, and unified terminology. No type or runtime issues.
Also applies to: 52-70, 178-191, 193-204, 207-233, 239-247, 253-258, 261-271, 273-279, 490-497, 563-604, 640-667, 683-689, 693-708, 714-721, 731-739, 941-956, 1017-1031, 1046-1065, 1071-1093, 1095-1116, 1137-1141, 1147-1156, 1161-1165, 1213-1225, 1262-1270
438-441: Term consistency: “المنظمة” vs “المؤسسة”.You mix “المنظمة” and “المؤسسة” across flows. If both are intended (org vs enterprise), fine; otherwise, unify.
Would you like me to normalize all occurrences to “المنظمة” for consistency?
Also applies to: 461-471, 1137-1139
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
packages/localizations/src/ar-SA.ts (1)
228-229: Fix terminology and spelling: use "التلقائية" and "الاحتياطي".Line 228 uses "الأوتماتكية" which is a non-standard transliteration. The proper Modern Standard Arabic term for "automatic" is "التلقائية" (used consistently elsewhere in this file, e.g., lines 276-277).
Line 229 uses "الأحتياطي" with hamza, but should be "الاحتياطي" without hamza (consistent with corrections made throughout the file in past reviews).
- formFieldLabel__automaticInvitations: 'تمكين الدعوة الأوتماتكية لهذا النطاق', - formFieldLabel__backupCode: 'الرمز الأحتياطي', + formFieldLabel__automaticInvitations: 'تمكين الدعوة التلقائية لهذا النطاق', + formFieldLabel__backupCode: 'الرمز الاحتياطي',
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Disabled knowledge base sources:
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (1)
packages/localizations/src/ar-SA.ts(34 hunks)
🧰 Additional context used
📓 Path-based instructions (7)
**/*.{js,jsx,ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
**/*.{js,jsx,ts,tsx}: All code must pass ESLint checks with the project's configuration
Follow established naming conventions (PascalCase for components, camelCase for variables)
Maintain comprehensive JSDoc comments for public APIs
Use dynamic imports for optional features
All public APIs must be documented with JSDoc
Provide meaningful error messages to developers
Include error recovery suggestions where applicable
Log errors appropriately for debugging
Lazy load components and features when possible
Implement proper caching strategies
Use efficient data structures and algorithms
Profile and optimize critical paths
Validate all inputs and sanitize outputs
Implement proper logging with different levels
Files:
packages/localizations/src/ar-SA.ts
**/*.{js,jsx,ts,tsx,json,css,scss,md,yaml,yml}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
Use Prettier for consistent code formatting
Files:
packages/localizations/src/ar-SA.ts
packages/**/*.{ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
TypeScript is required for all packages
Files:
packages/localizations/src/ar-SA.ts
packages/**/*.{ts,tsx,d.ts}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
Packages should export TypeScript types alongside runtime code
Files:
packages/localizations/src/ar-SA.ts
**/*.{ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
Use proper TypeScript error types
**/*.{ts,tsx}: Always define explicit return types for functions, especially public APIs
Use proper type annotations for variables and parameters where inference isn't clear
Avoidanytype - preferunknownwhen type is uncertain, then narrow with type guards
Useinterfacefor object shapes that might be extended
Usetypefor unions, primitives, and computed types
Preferreadonlyproperties for immutable data structures
Useprivatefor internal implementation details
Useprotectedfor inheritance hierarchies
Usepublicexplicitly for clarity in public APIs
Preferreadonlyfor properties that shouldn't change after construction
Prefer composition and interfaces over deep inheritance chains
Use mixins for shared behavior across unrelated classes
Implement dependency injection for loose coupling
Let TypeScript infer when types are obvious
Useconst assertionsfor literal types:as const
Usesatisfiesoperator for type checking without widening
Use mapped types for transforming object types
Use conditional types for type-level logic
Leverage template literal types for string manipulation
Use ES6 imports/exports consistently
Use default exports sparingly, prefer named exports
Use type-only imports:import type { ... } from ...
Noanytypes without justification
Proper error handling with typed errors
Consistent use ofreadonlyfor immutable data
Proper generic constraints
No unused type parameters
Proper use of utility types instead of manual type construction
Type-only imports where possible
Proper tree-shaking friendly exports
No circular dependencies
Efficient type computations (avoid deep recursion)
Files:
packages/localizations/src/ar-SA.ts
packages/localizations/**/*
📄 CodeRabbit inference engine (.cursor/rules/monorepo.mdc)
Localization files must be placed in 'packages/localizations/'.
Files:
packages/localizations/src/ar-SA.ts
**/*.{js,ts,tsx,jsx}
📄 CodeRabbit inference engine (.cursor/rules/monorepo.mdc)
Support multiple Clerk environment variables (CLERK_, NEXT_PUBLIC_CLERK_, etc.) for configuration.
Files:
packages/localizations/src/ar-SA.ts
⏰ 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: semgrep-cloud-platform/scan
- GitHub Check: semgrep-cloud-platform/scan
🔇 Additional comments (1)
packages/localizations/src/ar-SA.ts (1)
15-1297: Excellent localization work with comprehensive Arabic translations.This PR represents substantial effort in adding and refining Arabic translations across API keys, badges, organization flows, sign-in/up, form fields, error messages, and user profile sections. The translations use Modern Standard Arabic consistently and maintain proper terminology throughout most of the file.
The few remaining issues flagged above are minor spelling and terminology corrections that will polish the final result. Great work on this comprehensive localization enhancement!
| removeResource: { | ||
| messageLine1: 'رموز التحقق من برنامج المصادقة هذا ستكون غير ضروية عند تسجيل الدخول', | ||
| messageLine1: 'لن تكون رموز التحقق من برنامج المصادقة هذا ضرورية عند تسجيل الدخول', | ||
| messageLine2: 'قد لا يكون حسابك آمنا. هل أنك متأكد أنك تريد المتابعة؟', |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix grammar: "هل أنك" → "هل أنت".
The phrase uses "هل أنك متأكد" but the correct grammar requires the nominative case "هل أنت متأكد". This same error was corrected elsewhere in the file (see line 1090 which uses the correct form).
- messageLine2: 'قد لا يكون حسابك آمنا. هل أنك متأكد أنك تريد المتابعة؟',
+ messageLine2: 'قد لا يكون حسابك آمنًا. هل أنت متأكد أنك تريد المتابعة؟',🤖 Prompt for AI Agents
In packages/localizations/src/ar-SA.ts around line 1116, the Arabic string uses
the incorrect phrase "هل أنك متأكد" — change it to the grammatically correct "هل
أنت متأكد" so the messageLine2 becomes: قد لا يكون حسابك آمنا. هل أنت متأكد أنك
تريد المتابعة؟; update only that substring to match the correct nominative form
consistent with line 1090.
| removeResource: { | ||
| messageLine1: 'سيتم حذف هذه المحفظة من حسابك{{identifier}}', | ||
| messageLine1: 'سيتم حذف هذه المحفظة من حسابك {{identifier}}', | ||
| messageLine2: 'لن تتمكن من تسجيل الدخول إلى الحساب بإستخدام محفظة web3 هذه', |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix spelling: "بإستخدام" → "باستخدام".
Line 1272 uses "بإستخدام" with hamza on the alif, but the correct spelling is "باستخدام" without hamza, consistent with corrections made throughout this file in previous reviews.
- messageLine2: 'لن تتمكن من تسجيل الدخول إلى الحساب بإستخدام محفظة web3 هذه',
+ messageLine2: 'لن تتمكن من تسجيل الدخول إلى الحساب باستخدام محفظة web3 هذه',📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| messageLine2: 'لن تتمكن من تسجيل الدخول إلى الحساب بإستخدام محفظة web3 هذه', | |
| messageLine2: 'لن تتمكن من تسجيل الدخول إلى الحساب باستخدام محفظة web3 هذه', |
🤖 Prompt for AI Agents
In packages/localizations/src/ar-SA.ts around line 1272 the Arabic word
"بإستخدام" is misspelled with a hamza on the alif; replace it with the correct
spelling "باستخدام" so the string becomes 'لن تتمكن من تسجيل الدخول إلى الحساب
باستخدام محفظة web3 هذه', matching prior corrections in this file.
Description
This PR enhances the Arabic (ar-SA) localization across multiple sections.
It includes:
Checklist
pnpm testruns as expected.pnpm buildruns as expected.Type of change
Summary by CodeRabbit
New Features
Bug Fixes