Skip to content
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

i18n: add missing Arabic translation file #21651

Open
wants to merge 6 commits into
base: main
Choose a base branch
from

Conversation

KHAWARIZMIX
Copy link

  • Translated all keys in the following language JSON files to Arabic: Ghost, Portal, Search, Signup- Form, and Comments.
  • Ensured consistency and accuracy for improved user experience
  • Verified language integration and formatting for consistency

This commit provides the Arabic translation for all relevant UI components in Ghost CMS, filling a previously missing language option.

Got some code for us? Awesome 🎊!

Please include a description of your change & check your PR against this list, thanks!

  • There's a clear use-case for this code change, explained below
  • Commit message has a short title & references relevant issues
  • The build will pass (run yarn test:all and yarn lint)

We appreciate your contribution!

- Translated all keys in the following language JSON files to Arabic: Ghost, Portal, Search, Signup-	Form, and Comments.
- Ensured consistency and accuracy for improved user experience 
- Verified language integration and formatting for consistency

This commit provides the Arabic translation for all relevant UI components in Ghost CMS, filling a previously missing language option.
"Head of Marketing at Acme, Inc": "رئيس التسويق في شركة أكمي",
"Hide": "إخفاء",
"Hide comment": "إخفاء التعليق",
"Jamie Larson": "جيمي لارسون",
Copy link
Contributor

Choose a reason for hiding this comment

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

the original translation for "Jamie Larson" is better, as it is intended to be a generic name, not a literal transliteration.

@cathysarisky
Copy link
Contributor

Hello, and thank you for this submission. Although your post says you're adding a missing file, these appear to all be changes to existing translations. @mostafty and @almrx and @KSAART , I would be grateful if you would review these translations and reach consensus on what the best wording is.

@mostafty
Copy link
Contributor

Okay, I deserve that. My translation is generally better but like most Arabs I didn't distinguish between أ إ and ا. I instead used ا in all cases. he got that right and better.

Other than that this version has some mistakes that will end up looking laughable like using singular instead of plural. some translation ignore the cultural context.

My educated guess is that this was a machine translation and that explain the correct grammar while ignoring the context.

I'm not very good with Git but if someone guides me I can merge both and give you the best of both worlds. @cathysarisky , can you help me here? should I do another pull request after merging both in my local repo. or what's the best way to resolve the conflict?

@cathysarisky
Copy link
Contributor

Let's see if @KHAWARIZMIX responds. If K's unresponsive, you could certainly put in a new PR and this one could be closed without merging. But perhaps K will respond (and we should give them a couple days as a courtesy) and you can collaborate. :)

@KHAWARIZMIX
Copy link
Author

Hello, thank you for your kind response!
To be honest, I had already pushed my translation to the repository a few days ago, as I noticed there wasn’t a complete Arabic translation available at the time. However, since it was my first time contributing, I forgot to create a pull request until today.

I deeply appreciate the efforts of all contributors, especially the Arabic translators. I didn’t attempt to merge my translation because I thought it was better than anyone else’s work, but simply because I wasn’t aware that others were already contributing.

I’m not here to compete or challenge others. My goal is to offer my help to the community that I admire and want to support.

@cathysarisky
Copy link
Contributor

@KHAWARIZMIX , thanks for the reply and for explaining what happened! If you and the other Arabic speakers can work together to agree on a 'best' set of translations, that'd be great. I don't have anything to add here. :)

@cathysarisky
Copy link
Contributor

Hello - checking in here! What can I do to help move these translations forward?

@KHAWARIZMIX
Copy link
Author

Hello, I hope the conflicts have been fixed as expected!

{
"{{amount}} characters left": "{{amount}} حرف متبقي",
"{{amount}} comments": "{{amount}} تعليقات",
"{{amount}} characters left": "الحروف المتبقية: {{amount}}",
Copy link
Contributor

Choose a reason for hiding this comment

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

You have lost the { and } around this file. These are required for the i18next to understand your work. Please correct.

@cathysarisky
Copy link
Contributor

Bumping this - @mostafty and @almrx and @KSAART , if one of you has time to provide feedback on the updated version of these translations, I would appreciate it!

Copy link

coderabbitai bot commented Jan 27, 2025

Walkthrough

The pull request involves comprehensive updates to Arabic localization files across multiple JSON files in the Ghost project. The changes focus on improving translation accuracy, grammatical correctness, and clarity for various user interface elements. Modifications span across comments, email confirmations, newsletter subscriptions, search functionality, and signup forms. The updates include refining existing translations, adding new phrases, correcting verb forms, and ensuring more natural language usage in Arabic.

Changes

File Changes
ghost/i18n/locales/ar/comments.json - Added time-related translations (days, months, weeks, years ago)
- Added new phrases for comment interactions
- Refined existing translations for better readability
ghost/i18n/locales/ar/ghost.json - Updated email confirmation and signup translations
- Corrected spelling and grammatical errors
- Added new translations for signup and subscription processes
ghost/i18n/locales/ar/newsletter.json - Updated terms like "complimentary" and "free"
- Improved translations for subscription-related phrases
- Refined sentence structures
ghost/i18n/locales/ar/portal.json - Corrected variable placements
- Improved readability of error messages
- Updated membership and subscription-related translations
ghost/i18n/locales/ar/search.json - Updated terms like "Authors" and "Posts"
- Refined search-related translations
- Improved search instruction phrasing
ghost/i18n/locales/ar/signup-form.json - Updated email-related translations
- Improved clarity of signup instructions
- Refined error message translations

🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR. (Beta)
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link

@coderabbitai coderabbitai bot left a 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

🔭 Outside diff range comments (1)
ghost/i18n/locales/ar/portal.json (1)

Line range hint 172-179: Fix RTL formatting and punctuation placement.

The period placement and number formatting need adjustment for proper RTL display:

-"Too many attempts try again in {{number}} days.": ".أيام{{number}} محاولات متعددة جدًا، حاول مرة أخرى بعد ",
+"Too many attempts try again in {{number}} days.": "محاولات متعددة جدًا، حاول مرة أخرى بعد {{number}} أيام.",
🧹 Nitpick comments (3)
ghost/i18n/locales/ar/portal.json (3)

2-7: Consider revising placeholder positions for better Arabic readability.

The translations are technically correct, but some phrases could be more natural in Arabic by adjusting the word order. For example:

-"{{amount}} off for first {{number}} months.": "{{amount}} خصم لمدة {{number}} أشهر الأولى.",
+"{{amount}} off for first {{number}} months.": "خصم {{amount}} لمدة {{number}} أشهر الأولى.",

70-81: Improve error message clarity and consistency.

The error messages use passive voice ("لم يتمكن من") which makes them longer and less direct. Consider using active voice for more natural Arabic translations:

-"Failed to cancel subscription, please try again": "لم يتمكن من إلغاء الاشتراك، الرجاء المحاولة مرة أخرى",
+"Failed to cancel subscription, please try again": "فشل إلغاء الاشتراك، الرجاء المحاولة مرة أخرى",

201-213: Enhance subscription message tone and formality.

Consider using more formal and engaging Arabic phrases for subscription-related messages:

-"You currently have a free membership, upgrade to a paid subscription for full access.": "لديك حالياً عضوية مجانية، قم بالترقية إلى اشتراك مدفوع للحصول على الوصول الكامل.",
+"You currently have a free membership, upgrade to a paid subscription for full access.": "لديك حالياً عضوية مجانية. للحصول على كامل المميزات، يمكنك الترقية إلى العضوية المدفوعة.",
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 3e2658b and aaab951.

📒 Files selected for processing (6)
  • ghost/i18n/locales/ar/comments.json (1 hunks)
  • ghost/i18n/locales/ar/ghost.json (1 hunks)
  • ghost/i18n/locales/ar/newsletter.json (1 hunks)
  • ghost/i18n/locales/ar/portal.json (2 hunks)
  • ghost/i18n/locales/ar/search.json (1 hunks)
  • ghost/i18n/locales/ar/signup-form.json (1 hunks)
🧰 Additional context used
🪛 Biome (1.9.4)
ghost/i18n/locales/ar/comments.json

[error] 1-1: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 1-2: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 2-2: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 2-2: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 2-2: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 2-3: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 3-3: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 3-3: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 3-3: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 3-4: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 4-4: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 4-5: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 5-5: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 5-5: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 5-5: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 5-6: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 6-6: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 6-6: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 6-6: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 6-7: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 7-7: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 7-8: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 8-8: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 8-8: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 8-8: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 8-9: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 9-9: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 9-9: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 9-9: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 9-10: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 10-10: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 10-10: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 10-10: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 10-11: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 11-11: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 11-12: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 12-12: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 12-13: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 13-13: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 13-13: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 13-13: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 13-13: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 13-13: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 13-13: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 13-13: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 13-13: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 13-13: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 13-15: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 15-15: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 15-18: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 18-18: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 18-18: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 18-18: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 18-18: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 18-18: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 18-18: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 18-18: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 18-18: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 18-18: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 18-19: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 19-19: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 19-19: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 19-19: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 19-19: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 19-19: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 19-19: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 19-19: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 19-19: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 19-19: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 19-22: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 22-22: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 22-25: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 25-25: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 25-28: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 28-28: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 28-29: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 29-29: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 29-29: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 29-29: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 29-29: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 29-29: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 29-30: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 30-30: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 30-31: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 31-31: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 31-32: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 32-32: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 32-32: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 32-32: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 32-32: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 32-32: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 33-33: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 33-33: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 33-33: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 33-33: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 33-33: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 33-33: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 34-34: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 34-34: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 34-35: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 35-35: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 35-35: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 35-35: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 35-35: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 35-35: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 35-35: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 35-35: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 36-36: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 36-36: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 36-37: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 37-37: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 37-37: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 37-37: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 37-38: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 38-38: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 38-39: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 39-39: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 39-39: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 39-39: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 39-40: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 40-40: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 40-41: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 41-41: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 41-41: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 41-41: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 41-42: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 42-42: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 42-42: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 42-42: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 42-44: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 44-44: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 44-44: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 44-45: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 45-45: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 45-45: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 46-46: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 46-46: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 46-48: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 48-48: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 48-48: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 48-48: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 48-48: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 48-48: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 49-49: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 49-49: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 49-50: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 50-50: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 50-50: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 50-50: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 50-51: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 51-51: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 51-51: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 51-52: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 52-52: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 52-52: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 52-53: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 53-53: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 53-53: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 53-53: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 53-53: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 53-53: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 53-54: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 54-54: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 54-54: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 54-54: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 54-54: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 54-54: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 54-54: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 54-54: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 54-54: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 54-54: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 54-55: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 55-55: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 55-55: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 55-55: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 56-56: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 56-56: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 56-57: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 57-57: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 58-58: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 58-58: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 58-59: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 59-59: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 59-59: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 59-59: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 59-61: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 61-61: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 61-61: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 61-61: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 61-62: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 62-62: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 62-62: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 62-62: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 62-63: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 63-63: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 63-64: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 64-64: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 64-65: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 65-65: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 65-66: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 66-66: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 66-67: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 67-67: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 67-67: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 67-67: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 67-68: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 68-68: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 68-68: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 68-68: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 68-69: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 69-69: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 69-70: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 70-70: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 70-72: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 72-72: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 72-72: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 72-72: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 72-73: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 73-73: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 73-73: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 73-73: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 73-74: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 74-74: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 74-74: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 74-74: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 74-75: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 75-75: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 75-75: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 75-75: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 75-75: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 75-75: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 75-75: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 75-76: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 76-76: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 76-76: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 76-76: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 76-76: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 76-77: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 77-77: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 77-77: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 77-77: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 77-78: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 78-78: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 78-79: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 79-79: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 79-80: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 80-80: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 80-80: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 80-80: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 80-80: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 80-80: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 80-80: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 80-80: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 80-80: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 80-80: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 80-80: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 80-80: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)

🔇 Additional comments (6)
ghost/i18n/locales/ar/search.json (1)

2-7: Translations look good and use more standardized terminology!

The Arabic translations have been improved with more formal and widely accepted terms:

  • "Authors" translation changed from "الكتّاب" to "المؤلفون" which is more formal
  • Search instruction uses better word order and clearer terms
ghost/i18n/locales/ar/signup-form.json (1)

2-8: Well-structured and clear translations for the signup flow!

The translations effectively convey:

  • Clear error messages
  • Proper guidance for email verification
  • Consistent formal tone throughout
ghost/i18n/locales/ar/newsletter.json (1)

4-23: Excellent improvements to subscription-related terminology!

The translations show significant improvements:

  • Better terminology for subscription states
  • Clearer date-related messages
  • Consistent use of formal Arabic
ghost/i18n/locales/ar/ghost.json (1)

3-33: Comprehensive and security-conscious translations!

The translations effectively handle:

  • Security-related messages
  • Email verification flows
  • Authentication states
  • Welcome messages
ghost/i18n/locales/ar/comments.json (2)

38-38: Revert the transliteration of "Jamie Larson".

As noted in previous reviews, example names should not be transliterated as they are intended to be generic placeholders.

🧰 Tools
🪛 Biome (1.9.4)

[error] 37-38: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 38-38: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 38-39: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


3-10: Well-structured time-related translations!

The translations for time periods (days, months, years, etc.) are clear and follow proper Arabic grammar rules for pluralization.

Also applies to: 45-50

🧰 Tools
🪛 Biome (1.9.4)

[error] 3-3: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 3-3: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 3-3: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 3-4: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 4-4: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 4-5: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 5-5: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 5-5: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 5-5: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 5-6: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 6-6: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 6-6: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 6-6: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 6-7: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 7-7: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 7-8: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 8-8: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 8-8: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 8-8: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 8-9: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 9-9: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 9-9: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 9-9: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 9-10: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 10-10: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 10-10: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 10-10: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)

"{{amount}} hrs ago": "منذ {{amount}} ساعات",
"{{amount}} mins ago": "منذ {{amount}} دقيقة",
"{{amount}} more": "{{amount}} المزيد",
"{{amount}} characters left": "الحروف المتبقية: {{amount}}",
Copy link

@coderabbitai coderabbitai bot Jan 27, 2025

Choose a reason for hiding this comment

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

⚠️ Potential issue

Fix JSON structure: Missing opening curly brace.

The file is missing the opening curly brace { which is required for valid JSON structure.

Add the opening curly brace:

+{
     "{{amount}} characters left": "الحروف المتبقية: {{amount}}",
📝 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.

Suggested change
"{{amount}} characters left": "الحروف المتبقية: {{amount}}",
{
"{{amount}} characters left": "الحروف المتبقية: {{amount}}",
🧰 Tools
🪛 Biome (1.9.4)

[error] 1-1: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)


[error] 1-2: End of file expected

Use an array for a sequence of values: [1, 2]

(parse)

Copy link
Contributor

Choose a reason for hiding this comment

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

Good catch, @coderabbitai! The opening and closing braces are important in all json files that contain translation strings, in ghost/i18n/locales

Copy link

Choose a reason for hiding this comment

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

@cathysarisky Thank you for confirming! I'll remember this requirement for future reviews.

🐰 thoughtfully takes notes


✏️ Learnings added
Learnt from: cathysarisky
PR: TryGhost/Ghost#21651
File: ghost/i18n/locales/ar/comments.json:1-1
Timestamp: 2025-01-29T15:35:26.254Z
Learning: All JSON files containing translation strings in ghost/i18n/locales must include both opening and closing braces to maintain valid JSON structure.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.

"Account settings": "إعدادات الحساب",
"After a free trial ends, you will be charged the regular price for the tier you've chosen. You can always cancel before then.": ".بعد انتهاء فترة التجربة المجانية، سيتم خصم السعر العادي للفئة التي اخترتها. يمكنك دائمًا إلغاء الاشتراك قبل ذلك",
"Already a member?": "هل أنت عضو بالفعل؟",
"+1 (123) 456-7890": "",
Copy link

@coderabbitai coderabbitai bot Jan 27, 2025

Choose a reason for hiding this comment

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

⚠️ Potential issue

Add localized versions of placeholder content.

The following strings are missing Arabic translations:

  • Phone number format should use Arabic numerals: "+۹٦٦ ٥٥ ١٢٣ ٤٥٦٧"
  • Name should use an Arabic name: "محمد أحمد"
  • Email can remain in Latin characters as it's a technical requirement

Also applies to: 100-101

Copy link
Contributor

Choose a reason for hiding this comment

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

@coderabbitai, you can specifically ignore the phone number field localization.

Copy link

Choose a reason for hiding this comment

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

@cathysarisky Understood, I'll ignore phone number field localization in future reviews.


✏️ Learnings added
Learnt from: cathysarisky
PR: TryGhost/Ghost#21651
File: ghost/i18n/locales/ar/portal.json:13-13
Timestamp: 2025-01-29T15:36:04.048Z
Learning: Phone number field localization should be ignored in Ghost CMS UI reviews. These fields should retain their original format rather than being localized to Arabic or other scripts.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.


If you found this review helpful, would you consider giving us a shout-out on X?
Thank you for using CodeRabbit!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants