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

feat: enabling i18n feature for smaller screens #3556

Open
wants to merge 17 commits into
base: master
Choose a base branch
from

Conversation

devilkiller-ag
Copy link
Member

@devilkiller-ag devilkiller-ag commented Jan 8, 2025

Description
This PR enables the i18n feature for smaller screens. Additionally, the following changes have been made:

  • Change locale names from short forms to full names; Ex.: 'en' -> 'english' , 'de' -> 'deutsch' (as per discussion in fix: i18n for smaller screen #3113)
  • Language Icon has been added in the Language dropdown
  • Story for Language Icon has been added

Related issue(s)
Resolves #2708

Summary by CodeRabbit

Release Notes

  • New Features

    • Added language selection functionality to the mobile navigation menu.
    • Introduced a new language icon for improved visual navigation.
  • Improvements

    • Enhanced language selector component with icon integration.
    • Updated layout and styling of components for better visual presentation.
    • Improved the structure of the icon gallery with the addition of the new IconLanguage.
  • Documentation

    • Refined translation and localization guidelines.
    • Updated file paths and configuration references for better clarity, including the renaming of the configuration file.
    • Improved the table of contents for better readability.

Copy link
Contributor

coderabbitai bot commented Jan 8, 2025

Walkthrough

This pull request introduces a comprehensive enhancement to the internationalization (i18n) feature for the AsyncAPI website, focusing on enabling language selection across different screen sizes. The changes include adding a new IconLanguage component, updating the mobile navigation menu, modifying the language selection component, and refining the translation documentation. The implementation ensures consistent language selection functionality for both desktop and mobile interfaces.

Changes

File Change Summary
components/icons/Icons.mdx Added IconLanguage import and included in icon gallery
components/icons/Language.tsx Created new React component for language icon
components/languageSelector/LanguageSelect.tsx Integrated IconLanguage and updated layout
components/navigation/MobileNavMenu.tsx Added language selection section with dynamic language options
components/navigation/NavBar.tsx Updated getUniqueLangs() and MobileNavMenu component
next-i18next.config.js Removed empty line in configuration
ADDING_TRANSLATIONS.md Updated documentation for translation process

Assessment against linked issues

Objective Addressed Explanation
Enable i18n for smaller screens [#2708]
Add language selection to mobile navigation

Suggested labels

ready-to-merge, autoupdate

Suggested reviewers

  • derberg
  • magicmatatjahu
  • akshatnema
  • anshgoyalevil
  • Mayaleeeee
  • sambhavgupta0705

Poem

🐰 A Rabbit's Ode to Language Delight 🌐

With icons dancing, languages take flight,
Mobile screens now speak with pure delight,
From English to French, a world so bright,
Our code leaps forward with linguistic might!
Translation magic, oh what a sight! 🚀


Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 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.

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

netlify bot commented Jan 8, 2025

Deploy Preview for asyncapi-website ready!

Built without sensitive environment variables

Name Link
🔨 Latest commit b9a7d0d
🔍 Latest deploy log https://app.netlify.com/sites/asyncapi-website/deploys/679f6104745370000870ae2f
😎 Deploy Preview https://deploy-preview-3556--asyncapi-website.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify site configuration.

@devilkiller-ag devilkiller-ag self-assigned this Jan 8, 2025
Copy link

codecov bot commented Jan 8, 2025

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 100.00%. Comparing base (8993195) to head (b9a7d0d).

Additional details and impacted files
@@            Coverage Diff            @@
##            master     #3556   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files           20        20           
  Lines          732       732           
=========================================
  Hits           732       732           

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

Copy link
Contributor

@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: 1

🔭 Outside diff range comments (1)
utils/getStatic.ts (1)

Line range hint 32-36: Improve type safety and error handling

The function uses loose typing and could benefit from better error handling.

-export async function getI18nProps(ctx: any, ns = ['common']) {
+interface I18nContext {
+  params?: {
+    lang?: string;
+  };
+}
+
+export async function getI18nProps(ctx: I18nContext, ns = ['common']) {
   const locale = ctx?.params?.lang ? ctx.params.lang : 'english';
+  
+  if (!i18nextConfig.i18n.locales.includes(locale)) {
+    console.warn(`Invalid locale: ${locale}, falling back to english`);
+    return serverSideTranslations('english', ns);
+  }
+
   const props = {
     ...(await serverSideTranslations(locale, ns))
   };
🧹 Nitpick comments (7)
next-i18next.config.js (2)

3-4: Consider using standard ISO 639-1 language codes

Using full language names ('english', 'deutsch') instead of standard ISO 639-1 codes ('en', 'de') deviates from web standards. This could impact:

  • SEO optimization
  • Browser language detection
  • Accessibility tools
  • Integration with third-party i18n tools

Consider keeping ISO codes internally while displaying full names in the UI.

🧰 Tools
🪛 eslint

[error] 3-3: Delete ··

(prettier/prettier)


[error] 4-4: Replace ······defaultLocale· with ····defaultLocale

(prettier/prettier)


3-9: Fix formatting issues

There are inconsistent indentation and spacing issues in the configuration.

 module.exports = {
   i18n: {
-    locales: ['english', 'deutsch'],
-    defaultLocale : 'english',
-    namespaces: ['landing-page', 'common', 'tools'],
-    defaultNamespace: 'landing-page',
-    react: { useSuspense: false },// this line
-  },
+     locales: ['english', 'deutsch'],
+     defaultLocale: 'english',
+     namespaces: ['landing-page', 'common', 'tools'],
+     defaultNamespace: 'landing-page',
+     react: { useSuspense: false }
+   }
 };
🧰 Tools
🪛 eslint

[error] 3-3: Delete ··

(prettier/prettier)


[error] 4-4: Replace ······defaultLocale· with ····defaultLocale

(prettier/prettier)


[error] 5-5: Delete ··

(prettier/prettier)


[error] 6-6: Delete ··

(prettier/prettier)


[error] 7-7: Replace ··react:·{·useSuspense:·false·}, with react:·{·useSuspense:·false·}·

(prettier/prettier)


[error] 8-8: Replace ··}, with }

(prettier/prettier)

utils/i18n.ts (1)

20-21: Enhance type safety for language identifiers

Consider using TypeScript enums or const assertions for better type safety and autocompletion.

-export const languages = ['english', 'deutsch'];
-export const defaultLanguage = 'english';
+export const languages = ['english', 'deutsch'] as const;
+export type SupportedLanguage = typeof languages[number];
+export const defaultLanguage: SupportedLanguage = 'english';
components/icons/Language.tsx (2)

4-6: Enhance component documentation

The JSDoc comment could be more descriptive about the component's purpose and usage.

 /**
- * @description Icons for asyncapi website
+ * @description Language icon component used in the language selector
+ * @param {Object} props - Component props
+ * @param {string} [props.className=''] - Additional CSS classes to apply
+ * @returns {JSX.Element} Language icon SVG
  */

7-23: Add accessibility attributes to SVG

The SVG icon should include ARIA attributes for better accessibility.

-export default function IconLanguage({ className = '' }) {
+export default function IconLanguage({ className = '' }: { className?: string }) {
   return (
     <svg
       xmlns='http://www.w3.org/2000/svg'
       fill='none'
       viewBox='0 0 24 24'
       strokeWidth={1.5}
       stroke='currentColor'
+      role="img"
+      aria-label="Language selector"
       className={`size-5 ${className}`}
     >
components/languageSelector/LanguageSelect.tsx (1)

16-35: LGTM! Well-structured language selector implementation.

The changes effectively integrate the language icon while maintaining accessibility and proper spacing. The use of relative positioning and flex layout ensures proper alignment.

A minor suggestion to enhance accessibility:

-        <select
+        <select
+          aria-label="Select language"
           data-testid='Select-form'
components/navigation/NavBar.tsx (1)

236-236: Reduce duplication in language name formatting.

The language name capitalization logic is repeated in multiple places. Consider extracting it to a utility function.

+ // Add to utils/i18n.ts
+ export const formatLanguageName = (lang: string): string => 
+   lang ? lang.charAt(0).toUpperCase() + lang.slice(1) : 'English';

- selected={i18n.language ? i18n.language.charAt(0).toUpperCase() + i18n.language.slice(1) : 'English'}
+ selected={formatLanguageName(i18n.language)}

- currentLanguage={i18n.language ? i18n.language.charAt(0).toUpperCase() + i18n.language.slice(1) : 'English'}
+ currentLanguage={formatLanguageName(i18n.language)}

Also applies to: 254-254

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 4d002ce and eec0f74.

📒 Files selected for processing (8)
  • components/icons/Icons.mdx (2 hunks)
  • components/icons/Language.tsx (1 hunks)
  • components/languageSelector/LanguageSelect.tsx (2 hunks)
  • components/navigation/MobileNavMenu.tsx (4 hunks)
  • components/navigation/NavBar.tsx (5 hunks)
  • next-i18next.config.js (1 hunks)
  • utils/getStatic.ts (1 hunks)
  • utils/i18n.ts (1 hunks)
🧰 Additional context used
🪛 eslint
next-i18next.config.js

[error] 3-3: Delete ··

(prettier/prettier)


[error] 4-4: Replace ······defaultLocale· with ····defaultLocale

(prettier/prettier)


[error] 5-5: Delete ··

(prettier/prettier)


[error] 6-6: Delete ··

(prettier/prettier)


[error] 7-7: Replace ··react:·{·useSuspense:·false·}, with react:·{·useSuspense:·false·}·

(prettier/prettier)


[error] 8-8: Replace ··}, with }

(prettier/prettier)

🔇 Additional comments (4)
utils/i18n.ts (1)

8-17: Validate path consistency

The i18nPaths contain relative URLs. Consider:

  • Validating paths against your router configuration
  • Using path constants to prevent typos
  • Adding comments for path purpose
components/navigation/MobileNavMenu.tsx (1)

23-25: LGTM! Well-typed props interface.

The props interface clearly defines the required types for language handling.

components/navigation/NavBar.tsx (1)

Line range hint 46-62: LGTM! Clear documentation and implementation of getUniqueLangs.

The function properly handles language name capitalization and provides a sensible default.

components/icons/Icons.mdx (1)

33-33: LGTM! Proper integration of language icon.

The IconLanguage component is correctly imported and documented in the icon gallery, following the established pattern.

Also applies to: 240-242

Comment on lines +139 to +161
<div className='space-y-2 px-5 py-2' onClick={() => showMenu('language')}>
<div className='grid gap-4'>
<div>
<h4 className='mb-4 flex justify-between font-medium text-gray-800'>
<a className='flex cursor-pointer items-center gap-x-2'>
Language <IconLanguage />
</a>
<NavItemDropdown />
</h4>
{open === 'language' &&
uniqueLangs.map((lang) => (
<button
key={lang.key}
onClick={() => changeLanguage(lang.value.toLowerCase(), true)}
className={`mb-4 ml-2 block w-full rounded-lg py-1 text-start text-sm font-medium leading-6 text-gray-700 transition duration-150 ease-in-out hover:bg-gray-50 ${currentLanguage.toLowerCase() === lang.text.toLowerCase() ? 'text-secondary-500' : ''}`}
data-testid='MobileNav-language-item'
>
{lang.text}
</button>
))}
</div>
</div>
</div>
Copy link
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Improve accessibility of the language selection menu.

The current implementation has two potential accessibility issues:

  1. Using a div with onClick instead of a button for the language menu trigger
  2. Missing ARIA attributes for the expandable menu

Consider this improvement:

-          <div className='space-y-2 px-5 py-2' onClick={() => showMenu('language')}>
+          <div className='space-y-2 px-5 py-2'>
+            <button
+              onClick={() => showMenu('language')}
+              aria-expanded={open === 'language'}
+              aria-controls="language-menu"
+              className="w-full text-left"
+            >
               <div className='grid gap-4'>
                 <div>
                   <h4 className='mb-4 flex justify-between font-medium text-gray-800'>
                     <a className='flex cursor-pointer items-center gap-x-2'>
                       Language <IconLanguage />
                     </a>
                     <NavItemDropdown />
                   </h4>
-                  {open === 'language' &&
+                  <div
+                    id="language-menu"
+                    role="menu"
+                    className={open === 'language' ? 'block' : 'hidden'}
+                  >
                     uniqueLangs.map((lang) => (
                       <button
                         key={lang.key}
                         onClick={() => changeLanguage(lang.value.toLowerCase(), true)}
+                        role="menuitem"
                         className={`mb-4 ml-2 block w-full rounded-lg py-1 text-start text-sm font-medium leading-6 text-gray-700 transition duration-150 ease-in-out hover:bg-gray-50 ${
                           currentLanguage.toLowerCase() === lang.text.toLowerCase() ? 'text-secondary-500' : ''
                         }`}
                         data-testid='MobileNav-language-item'
                       >
                         {lang.text}
                       </button>
-                    ))}
+                    )}
+                  </div>
                 </div>
               </div>
+            </button>
           </div>

Committable suggestion skipped: line range outside the PR's diff.

Copy link
Contributor

@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: 1

🧹 Nitpick comments (6)
ADDING_TRANSLATIONS.md (4)

Line range hint 21-30: Update directory structure examples for consistency

The directory structure examples show the correct full language names (deutsch, english), but there's an inconsistency in the ellipsis notation. The JSON files list ends with both ┗ 📜tools.json and ┗ 📜....json.

 📦locales
  ┣ 📂deutsch
  ┃ ┣ 📜common.json
  ┃ ┣ 📜landing-page.json
- ┃ ┗ 📜tools.json
- ┃ ┗ 📜....json
+ ┃ ┣ 📜tools.json
+ ┃ ┗ 📜....json
🧰 Tools
🪛 Markdownlint (0.37.0)

19-19: null
Fenced code blocks should have a language specified

(MD040, fenced-code-language)


134-135: Improve clarity in routing configuration instructions

The instructions for configuring i18n routing could be clearer:

  1. The phrase "exact same" is redundant
  2. The example immediately jumps to newsletter page without proper context
-  - Make sure to add the exact same `href` to the `utils/i18n.ts` in the respective locales which support that `href`.
+  - Add the corresponding `href` to the `utils/i18n.ts` file for each supported locale.

-  For example, if you want to translate the `pages/newsletter.tsx` page, so that if someone visits `asyncapi.com/deutsch/newsletter`, it shows the page in the `German` locale.
+  For example, to translate the `pages/newsletter.tsx` page and make it accessible at `asyncapi.com/deutsch/newsletter` in German:

Also applies to: 137-139

🧰 Tools
🪛 LanguageTool

[style] ~135-~135: ‘exact same’ might be wordy. Consider a shorter alternative.
Context: ...ng referenced. - Make sure to add the exact same href to the utils/i18n.ts in the re...

(EN_WORDINESS_PREMIUM_EXACT_SAME)

🪛 Markdownlint (0.37.0)

134-134: Expected: 0; Actual: 2
Unordered list indentation

(MD007, ul-indent)


135-135: Expected: 0; Actual: 2
Unordered list indentation

(MD007, ul-indent)


244-246: Fix grammatical error in locale description

There's a grammatical error in the description of existing locales.

-There exist a few locales like `english` (English) and `deutsch` (German) which have available localizations present.
+There exists a few locales like `english` (English) and `deutsch` (German) which have available localizations.
🧰 Tools
🪛 LanguageTool

[grammar] ~244-~244: Did you mean “exists”?
Context: ... people from all over the world. There exist a few locales like english (English) ...

(THERE_VBP_A_NN)


134-135: Fix Markdown formatting inconsistencies

The document contains inconsistent list indentation levels. According to Markdownlint:

  • Unordered lists should have consistent indentation (0 spaces expected, 2 spaces found)
  • Some sections use emphasis (**Note**) where headings would be more appropriate

Consider using a Markdown linter to automatically fix these formatting issues.

Also applies to: 249-252, 255-256, 260-260

🧰 Tools
🪛 LanguageTool

[style] ~135-~135: ‘exact same’ might be wordy. Consider a shorter alternative.
Context: ...ng referenced. - Make sure to add the exact same href to the utils/i18n.ts in the re...

(EN_WORDINESS_PREMIUM_EXACT_SAME)

🪛 Markdownlint (0.37.0)

134-134: Expected: 0; Actual: 2
Unordered list indentation

(MD007, ul-indent)


135-135: Expected: 0; Actual: 2
Unordered list indentation

(MD007, ul-indent)

components/navigation/NavBar.tsx (2)

46-46: Consider improving language name handling.

The language name transformation has a few areas for improvement:

  1. The hard-coded "English" string should use i18n for consistency
  2. The capitalization logic is duplicated across the component
  3. Missing validation against supported languages list

Consider extracting the language transformation logic into a utility function:

+ const transformLanguageName = (lang: string): string => {
+   const i18nKey = `languages.${lang.toLowerCase()}`;
+   const translatedName = t(i18nKey);
+   return translatedName.charAt(0).toUpperCase() + translatedName.slice(1);
+ };

  const getUniqueLangs = (): string[] => {
    // ... existing path handling ...
    const uniqueLangs = Object.keys(i18nPaths)
      .filter((lang) => i18nPaths[lang].includes(pathnameWithoutLocale))
-     .map((lang) => lang.charAt(0).toUpperCase() + lang.slice(1));
+     .filter((lang) => languages.includes(lang.toLowerCase()))
+     .map(transformLanguageName);

-   return uniqueLangs.length === 0 ? ['English'] : uniqueLangs;
+   return uniqueLangs.length === 0 ? [transformLanguageName(defaultLanguage)] : uniqueLangs;
  };

Also applies to: 59-62


236-236: Consolidate language name transformation logic.

The capitalization logic is duplicated here. This should use the same utility function suggested for getUniqueLangs.

- selected={i18n.language ? i18n.language.charAt(0).toUpperCase() + i18n.language.slice(1) : 'English'}
+ selected={transformLanguageName(i18n.language || defaultLanguage)}
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between eec0f74 and 616595b.

📒 Files selected for processing (2)
  • ADDING_TRANSLATIONS.md (10 hunks)
  • components/navigation/NavBar.tsx (6 hunks)
🧰 Additional context used
🪛 LanguageTool
ADDING_TRANSLATIONS.md

[style] ~135-~135: ‘exact same’ might be wordy. Consider a shorter alternative.
Context: ...ng referenced. - Make sure to add the exact same href to the utils/i18n.ts in the re...

(EN_WORDINESS_PREMIUM_EXACT_SAME)


[grammar] ~244-~244: Did you mean “exists”?
Context: ... people from all over the world. There exist a few locales like english (English) ...

(THERE_VBP_A_NN)


[style] ~250-~250: You have already used this phrasing in nearby sentences. Consider replacing it to add variety to your writing.
Context: ... folder with the name of the locale you want to introduce. - Create new JSON files ...

(REP_WANT_TO_VB)


[style] ~251-~251: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...f the locale you want to introduce. - Create new JSON files with the same name as ...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)

🪛 Markdownlint (0.37.0)
ADDING_TRANSLATIONS.md

134-134: Expected: 0; Actual: 2
Unordered list indentation

(MD007, ul-indent)


135-135: Expected: 0; Actual: 2
Unordered list indentation

(MD007, ul-indent)


139-139: Expected: 0; Actual: 2
Unordered list indentation

(MD007, ul-indent)


170-170: Expected: 0; Actual: 2
Unordered list indentation

(MD007, ul-indent)


249-249: Expected: 0; Actual: 2
Unordered list indentation

(MD007, ul-indent)


250-250: Expected: 0; Actual: 2
Unordered list indentation

(MD007, ul-indent)


251-251: Expected: 0; Actual: 2
Unordered list indentation

(MD007, ul-indent)


252-252: Expected: 0; Actual: 2
Unordered list indentation

(MD007, ul-indent)


255-255: Expected: 0; Actual: 2
Unordered list indentation

(MD007, ul-indent)


256-256: Expected: 0; Actual: 2
Unordered list indentation

(MD007, ul-indent)


260-260: Expected: 0; Actual: 2
Unordered list indentation

(MD007, ul-indent)


295-295: Expected: 0; Actual: 1
Unordered list indentation

(MD007, ul-indent)


248-248: null
Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


254-254: null
Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)

🔇 Additional comments (3)
ADDING_TRANSLATIONS.md (1)

Line range hint 297-312: LGTM: i18n paths configuration example

The i18n paths configuration example correctly demonstrates how to add routes for a new locale while maintaining consistency with existing patterns.

🧰 Tools
🪛 LanguageTool

[grammar] ~244-~244: Did you mean “exists”?
Context: ... people from all over the world. There exist a few locales like english (English) ...

(THERE_VBP_A_NN)


[style] ~250-~250: You have already used this phrasing in nearby sentences. Consider replacing it to add variety to your writing.
Context: ... folder with the name of the locale you want to introduce. - Create new JSON files ...

(REP_WANT_TO_VB)


[style] ~251-~251: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...f the locale you want to introduce. - Create new JSON files with the same name as ...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)

🪛 Markdownlint (0.37.0)

249-249: Expected: 0; Actual: 2
Unordered list indentation

(MD007, ul-indent)


250-250: Expected: 0; Actual: 2
Unordered list indentation

(MD007, ul-indent)


251-251: Expected: 0; Actual: 2
Unordered list indentation

(MD007, ul-indent)


252-252: Expected: 0; Actual: 2
Unordered list indentation

(MD007, ul-indent)


255-255: Expected: 0; Actual: 2
Unordered list indentation

(MD007, ul-indent)


256-256: Expected: 0; Actual: 2
Unordered list indentation

(MD007, ul-indent)


260-260: Expected: 0; Actual: 2
Unordered list indentation

(MD007, ul-indent)


295-295: Expected: 0; Actual: 1
Unordered list indentation

(MD007, ul-indent)


248-248: null
Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


254-254: null
Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)

components/navigation/NavBar.tsx (2)

150-150: LGTM! Layout improvements enhance responsiveness.

The spacing and alignment changes improve the UI in both mobile and desktop views.

Also applies to: 181-181


250-257: Verify mobile menu behavior during language switch.

The mobile menu integration looks good, but there are two considerations:

  1. The currentLanguage transformation should use the suggested utility function
  2. Verify that the mobile menu state is properly reset after language switch
  <MobileNavMenu
    onClickClose={() => setMobileMenuOpen(false)}
    uniqueLangs={uniqueLangs}
-   currentLanguage={i18n.language ? i18n.language.charAt(0).toUpperCase() + i18n.language.slice(1) : 'English'}
+   currentLanguage={transformLanguageName(i18n.language || defaultLanguage)}
    changeLanguage={changeLanguage}
  />
✅ Verification successful

Mobile menu behavior during language switch is properly implemented.

The mobile menu automatically closes after language switch because:

  • The menu state is reset via useEffect hook when the path changes
  • Language changes trigger path updates through router navigation
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check if mobile menu state is properly handled during language switch

# Search for mobile menu state handling in MobileNavMenu
rg -A 5 "MobileNavMenu.*onClickClose" --type tsx

# Check for any useEffect hooks handling language changes
rg "useEffect.*i18n\.language" --type tsx

Length of output: 150


Script:

#!/bin/bash
# Search for mobile menu implementation and language-related effects
# Using broader file type matching

# Check mobile menu implementation
rg -t ts -t tsx -A 5 "MobileNavMenu.*onClickClose"

# Look for language change handlers
rg -t ts -t tsx "useEffect.*language"

# Search for mobile menu state management
rg -t ts -t tsx "setMobileMenuOpen"

# Check MobileNavMenu component implementation
fd -e ts -e tsx -x grep -l "MobileNavMenu" {} \; | xargs cat

Length of output: 17009

Comment on lines 255 to 289
- Navigate to the `next-i18next.config.js` file in the root of the project folder.
- Add the name of the newly added `locale` to the `languages` array.

**3. Configure i18n routing**
After adding a new internationalized page, ensure it is being served on the website when someone visits.
- Make sure to add the same `href` to the `lib/i18nPaths.js` in the respective locales supporting that `href`.
- Make sure to add the same `href` to the `utils/i18n.ts` in the respective locales supporting that `href`.

If you have added the 'fr' locale and translated the 'tools/cli' page, clicking 'Tools -> CLI' in the navigation menu will redirect the user to 'asyncapi.com/fr/tools/cli'.
If you have added the 'french' locale and translated the 'tools/cli' page, clicking 'Tools -> CLI' in the navigation menu will redirect the user to 'asyncapi.com/french/tools/cli'.

`locales` folder structure
```diff
locales
de
deutsch
┃ ┣ common.json
┃ ┣ landing-page.json
┃ ┗ tools.json
en
english
┃ ┣ common.json
┃ ┣ landing-page.json
┃ ┗ tools.json
+ ┗ fr
+ ┗ french
+ ┃ ┣ common.json
+ ┃ ┣ landing-page.json
+ ┃ ┗ tools.json
```

- Change the `next-i18next-static-site.config.js` config.
- Change the `next-i18next.config.js` config.

`next-i18next-static-site.config.js`
`next-i18next.config.js`
```diff
module.exports = {
i18n: {
- languages: ["en", "de"],
+ languages: ["en", "de", "fr"],
defaultLanguage: "en",
- languages: ["english", "deutsch"],
+ languages: ["english", "deutsch", "french"],
defaultLanguage: "english",
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Codebase verification

Documentation inconsistency confirmed

The documentation refers to two different configuration files:

  • next-i18next-static-site.config.js (incorrect reference)
  • next-i18next.config.js (actual file)

The correct configuration file name is next-i18next.config.js, as verified in the repository. The reference to next-i18next-static-site.config.js should be updated to maintain consistency.

🔗 Analysis chain

Verify configuration file references

The documentation refers to next-i18next.config.js, but earlier sections mention next-i18next-static-site.config.js. This inconsistency needs to be addressed.

Let's verify the correct configuration file name:

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check which configuration file exists in the repository
fd -e js -E 'node_modules' 'next-i18next.*config'

Length of output: 72


Script:

#!/bin/bash
# Search for any mentions of the static site config file
rg "next-i18next-static-site\.config"

Length of output: 159

🧰 Tools
🪛 Markdownlint (0.37.0)

255-255: Expected: 0; Actual: 2
Unordered list indentation

(MD007, ul-indent)


256-256: Expected: 0; Actual: 2
Unordered list indentation

(MD007, ul-indent)


260-260: Expected: 0; Actual: 2
Unordered list indentation

(MD007, ul-indent)

@aeworxet
Copy link
Contributor

aeworxet commented Jan 9, 2025

@asyncapi/bounty_team

@asyncapi-bot asyncapi-bot added the bounty AsyncAPI Bounty program related label label Jan 9, 2025
Copy link
Member

Choose a reason for hiding this comment

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

IMHO, we should keep it as de and en. I haven't encountered a website using full names in URLs.

The dropdown should have full names like Deutsch but the URLs should still point to /de or /en and not the full /deutsch

Copy link
Member Author

Choose a reason for hiding this comment

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

@sambhavgupta0705 suggested this change in the #3113. But I can revert this change.

components/icons/Language.tsx Outdated Show resolved Hide resolved
Copy link
Member

Choose a reason for hiding this comment

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

Please revert the changes related to en -> english here and in i18n config file since URLs should be having smaller prefix

Copy link
Member Author

Choose a reason for hiding this comment

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

Okay I will do that!

@anshgoyalevil
Copy link
Member

The design-related changes looks good

@devilkiller-ag
Copy link
Member Author

@anshgoyalevil Do I need to fix the Lighthouse Failing errors in this PR due to the image and CSS part:
image

@anshgoyalevil
Copy link
Member

Yes, If the regression is caused by this PR (but I don't think it is). Otherwise, you can ignore it and solve (if willing) it in another PR.

Copy link
Contributor

@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: 0

🧹 Nitpick comments (2)
components/icons/Language.tsx (2)

4-6: Enhance JSDoc documentation with props description.

Add @param and @returns tags to document the component's interface.

 /**
  * @description Language Icon for language selector component
+ * @param {Object} props - Component props
+ * @param {string} [props.className=''] - Additional CSS classes to apply
+ * @returns {JSX.Element} Language icon SVG
  */

7-7: Add TypeScript type definitions.

Since this is a TypeScript file, add proper type definitions for the component props.

-export default function IconLanguage({ className = '' }) {
+interface IconLanguageProps {
+  className?: string;
+}
+
+export default function IconLanguage({ className = '' }: IconLanguageProps) {
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 616595b and 3c64066.

📒 Files selected for processing (1)
  • components/icons/Language.tsx (1 hunks)
🔇 Additional comments (2)
components/icons/Language.tsx (2)

3-3: Consider removing eslint-disable comment.

The max-len disable comment might be unnecessary if the SVG path can be formatted across multiple lines.

Let's check if other icon components use similar eslint-disable comments:


9-23: SVG implementation looks good!

The SVG implementation follows best practices:

  • Uses currentColor for dynamic color inheritance
  • Allows className customization
  • Maintains consistent stroke width
  • Uses appropriate viewBox dimensions

Note: The size-5 class suggests Tailwind CSS usage. Ensure this utility class is available in your Tailwind configuration.

Let's verify the Tailwind configuration:

✅ Verification successful

Tailwind size utility verification successful

The size-5 utility class is valid and follows the project's established patterns. Tailwind CSS is properly configured in the project, and similar size utilities are consistently used across 40+ components.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check Tailwind configuration for size utilities
rg -l "size-" "tailwind.config.*"

Length of output: 91


Script:

#!/bin/bash
# Check for Tailwind dependencies and configuration
echo "=== Package.json check ==="
fd -t f "package.json" --exec cat {} \; | grep -i "tailwind"

echo -e "\n=== Searching for Tailwind config files ==="
fd -t f "(tailwind|postcss)\.config\." --hidden

echo -e "\n=== Checking size utility usage ==="
rg "size-[0-9]" -l

Length of output: 1996

@devilkiller-ag
Copy link
Member Author

@anshgoyalevil I have reverted the changes related to en -> english and de -> deustch

Copy link
Contributor

@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: 3

🧹 Nitpick comments (3)
components/languageSelector/LanguageSelect.tsx (1)

16-34: Enhance accessibility of the language selector.

While the visual layout with the icon looks good, let's improve accessibility:

  1. Add aria-label to the select element
  2. Add aria-hidden to the icon since it's decorative
         <IconLanguage className='pointer-events-none absolute left-3 text-gray-600' />
         <select
           data-testid='Select-form'
+          aria-label='Select language'
           onChange={(ev) => onChange(ev.target.value)}
           className={twMerge(
             `form-select h-full px-10 pr-7 inline-flex justify-center rounded-md border border-gray-300 shadow-sm py-2 bg-white text-sm font-medium text-gray-700 hover:bg-gray-50 focus:border-gray-500 focus:outline-none focus:ring-0 focus:ring-black ${className}`
           )}
           value={selected}
         >
next-i18next.config.js (1)

9-9: Remove unnecessary empty line.

The empty line after the i18n configuration object is unnecessary and should be removed to maintain consistent formatting.

    i18n: {
      locales: ['en', 'de'],
      defaultLocale : 'en',
      namespaces: ['landing-page', 'common', 'tools'],
      defaultNamespace: 'landing-page',
      react: { useSuspense: false },// this line
    },
-
  };
🧰 Tools
🪛 ESLint

[error] 9-10: Delete ⏎··

(prettier/prettier)

ADDING_TRANSLATIONS.md (1)

134-135: Improve wording in the documentation.

The phrase "exact same" is wordy. Consider simplifying the instruction.

-  - Make sure to add the exact same `href` to the `utils/i18n.ts` in the respective locales which support that `href`.
+  - Add the matching `href` to the `utils/i18n.ts` in the respective locales which support that `href`.
🧰 Tools
🪛 LanguageTool

[style] ~135-~135: ‘exact same’ might be wordy. Consider a shorter alternative.
Context: ...ng referenced. - Make sure to add the exact same href to the utils/i18n.ts in the re...

(EN_WORDINESS_PREMIUM_EXACT_SAME)

🪛 markdownlint-cli2 (0.17.2)

134-134: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


135-135: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 3c64066 and ecf4f1a.

📒 Files selected for processing (5)
  • ADDING_TRANSLATIONS.md (8 hunks)
  • components/languageSelector/LanguageSelect.tsx (2 hunks)
  • components/navigation/MobileNavMenu.tsx (4 hunks)
  • components/navigation/NavBar.tsx (4 hunks)
  • next-i18next.config.js (1 hunks)
🧰 Additional context used
🪛 LanguageTool
ADDING_TRANSLATIONS.md

[style] ~135-~135: ‘exact same’ might be wordy. Consider a shorter alternative.
Context: ...ng referenced. - Make sure to add the exact same href to the utils/i18n.ts in the re...

(EN_WORDINESS_PREMIUM_EXACT_SAME)

🪛 markdownlint-cli2 (0.17.2)
ADDING_TRANSLATIONS.md

134-134: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


135-135: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


170-170: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


255-255: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


256-256: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


260-260: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


295-295: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)

🪛 ESLint
components/navigation/MobileNavMenu.tsx

[error] 33-33: Delete ·

(prettier/prettier)

components/languageSelector/LanguageSelect.tsx

[error] 14-14: Delete ·

(prettier/prettier)

next-i18next.config.js

[error] 9-10: Delete ⏎··

(prettier/prettier)

🪛 GitHub Actions: PR testing - if Node project
components/navigation/MobileNavMenu.tsx

[error] 33-33: Delete whitespace (prettier/prettier)

components/languageSelector/LanguageSelect.tsx

[error] 14-14: Delete whitespace (prettier/prettier)

🔇 Additional comments (4)
components/navigation/MobileNavMenu.tsx (1)

139-161: Improve accessibility of the language selection menu.

The current implementation has accessibility issues that need to be addressed.

components/navigation/NavBar.tsx (1)

46-46: LGTM!

The changes look good:

  1. JSDoc accurately reflects the function behavior
  2. Layout spacing improvements enhance visual hierarchy
  3. Language-related props are correctly passed to MobileNavMenu

Also applies to: 150-150, 181-181, 250-257

next-i18next.config.js (1)

Line range hint 2-7: Verify locale codes are using short forms.

The configuration correctly uses short locale codes ('en', 'de') which aligns with the URL requirements. This is the correct approach as confirmed in the past review comments.

Let's verify the locale codes usage across the codebase:

✅ Verification successful

Short locale codes are consistently used throughout the codebase

The verification confirms that only short locale codes ('en', 'de') are used consistently across all i18n configurations and implementations. No instances of full language names or non-standard locale codes were found.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for any inconsistent locale code usage
# Search for full locale names that should be using short codes
rg -i "defaultLocale.*(?:english|deutsch)" --type ts --type js
rg -i "locales.*(?:english|deutsch)" --type ts --type js

Length of output: 123


Script:

#!/bin/bash
# Search for locale-related configurations and potential inconsistencies
echo "=== Searching for locale configurations ==="
rg -i "locale.*=.*['\"].*['\"]" --type ts --type js

echo -e "\n=== Checking for language codes longer than 2 characters ==="
rg -i "locale.*=.*['\"][a-zA-Z]{3,}['\"]" --type ts --type js

echo -e "\n=== Looking for i18n usage patterns ==="
rg "useTranslation|i18n\..*locale" --type ts --type js

Length of output: 3134

🧰 Tools
🪛 ESLint

[error] 6-6: Delete ··

(prettier/prettier)


[error] 7-7: Replace ··react:·{·useSuspense:·false·}, with react:·{·useSuspense:·false·}·

(prettier/prettier)


[error] 8-8: Replace ··}, with }

(prettier/prettier)


[error] 9-10: Delete ⏎··

(prettier/prettier)

ADDING_TRANSLATIONS.md (1)

255-256: Update configuration file reference.

The documentation refers to next-i18next.config.js which is correct, but this needs to be consistently used throughout the document.

🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

255-255: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


256-256: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)

@@ -10,21 +11,27 @@ import type { SelectProps } from '../form/Select';
* @param {Array} [props.options=[]] - An array of options for the select dropdown.
* @param {string} props.selected - The currently selected option value.
*/
export default function LanguageSelect({ className = '', onChange = () => {}, options = [], selected }: SelectProps) {
export default function LanguageSelect({ className = '', onChange = () => { }, options = [], selected }: SelectProps) {
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Fix formatting issue.

Remove the extra space after the opening curly brace to resolve the prettier error.

-export default function LanguageSelect({ className = '', onChange = () => { }, options = [], selected }: SelectProps) {
+export default function LanguageSelect({ className = '', onChange = () => {}, options = [], selected }: SelectProps) {
📝 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
export default function LanguageSelect({ className = '', onChange = () => { }, options = [], selected }: SelectProps) {
export default function LanguageSelect({ className = '', onChange = () => {}, options = [], selected }: SelectProps) {
🧰 Tools
🪛 ESLint

[error] 14-14: Delete ·

(prettier/prettier)

🪛 GitHub Actions: PR testing - if Node project

[error] 14-14: Delete whitespace (prettier/prettier)

Comment on lines +283 to 293
`next-i18next.config.js`
```diff
module.exports = {
i18n: {
- languages: ["en", "de"],
+ languages: ["en", "de", "fr"],
defaultLanguage: "en",
defaultLanguage: "english",
namespaces: ["landing-page", "common", "tools"],
defaultNamespace: "landing-page",
},
};
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Revert locale names to short forms in examples.

Based on the past review comments, we should use short locale codes instead of full names in the examples.

module.exports = {
    i18n: {
-       languages: ["en", "de", "fr"],
+       locales: ["en", "de", "fr"],
-       defaultLanguage: "english",
+       defaultLocale: "en",
        namespaces: ["landing-page", "common", "tools"],
        defaultNamespace: "landing-page",
    },
};
📝 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
`next-i18next.config.js`
```diff
module.exports = {
i18n: {
- languages: ["en", "de"],
+ languages: ["en", "de", "fr"],
defaultLanguage: "en",
defaultLanguage: "english",
namespaces: ["landing-page", "common", "tools"],
defaultNamespace: "landing-page",
},
};
module.exports = {
i18n: {
locales: ["en", "de", "fr"],
defaultLocale: "en",
namespaces: ["landing-page", "common", "tools"],
defaultNamespace: "landing-page",
},
};

ADDING_TRANSLATIONS.md Show resolved Hide resolved

If you have added the 'fr' locale and translated the 'tools/cli' page, clicking 'Tools -> CLI' in the navigation menu will redirect the user to 'asyncapi.com/fr/tools/cli'.
If you have added the 'french' locale and translated the 'tools/cli' page, clicking 'Tools -> CLI' in the navigation menu will redirect the user to 'asyncapi.com/french/tools/cli'.
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
If you have added the 'french' locale and translated the 'tools/cli' page, clicking 'Tools -> CLI' in the navigation menu will redirect the user to 'asyncapi.com/french/tools/cli'.
If you have added the 'fr' locale and translated the 'tools/cli' page, clicking 'Tools -> CLI' in the navigation menu will redirect the user to 'asyncapi.com/fr/tools/cli'.

```diff
module.exports = {
i18n: {
- languages: ["en", "de"],
+ languages: ["en", "de", "fr"],
defaultLanguage: "en",
defaultLanguage: "english",
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
defaultLanguage: "english",
defaultLanguage: "en",

@anshgoyalevil
Copy link
Member

My point was to keep full-language names here while keeping the initials (like en) to URLs.

image

Copy link
Contributor

@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: 0

♻️ Duplicate comments (1)
ADDING_TRANSLATIONS.md (1)

283-294: ⚠️ Potential issue

i18n Config: French Locale Addition
The configuration now includes fr in the languages array, which is appropriate for expanding supported locales. However, the defaultLanguage remains set to "english". Given previous guidance to use short locale codes for URLs, please update defaultLanguage to "en".

🧹 Nitpick comments (2)
ADDING_TRANSLATIONS.md (2)

134-137: Routing Instructions Revision
The instructions now advise:
• Replacing the next/link component with LinkComponent from components/link.tsx
• Ensuring that an identical href is added to utils/i18n.ts for the supported locales

Suggestion: Consider replacing the phrase "exact same" with "identical" for conciseness. Also, verify that the bullet list indentation conforms with markdown guidelines.

🧰 Tools
🪛 LanguageTool

[style] ~135-~135: ‘exact same’ might be wordy. Consider a shorter alternative.
Context: ...ng referenced. - Make sure to add the exact same href to the utils/i18n.ts in the re...

(EN_WORDINESS_PREMIUM_EXACT_SAME)

🪛 markdownlint-cli2 (0.17.2)

134-134: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


135-135: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


1-315: Markdown Formatting Note
Multiple unordered list indentation warnings (MD007) have been flagged by static analysis (e.g., at lines 134, 135, 170, 255-256, 260, and 295). Consider reviewing and adjusting these indentations to ensure consistency with markdown style guidelines.

🧰 Tools
🪛 LanguageTool

[style] ~135-~135: ‘exact same’ might be wordy. Consider a shorter alternative.
Context: ...ng referenced. - Make sure to add the exact same href to the utils/i18n.ts in the re...

(EN_WORDINESS_PREMIUM_EXACT_SAME)


[grammar] ~244-~244: Did you mean “exists”?
Context: ... people from all over the world. There exist a few locales like en (English) and `...

(THERE_VBP_A_NN)


[style] ~250-~250: You have already used this phrasing in nearby sentences. Consider replacing it to add variety to your writing.
Context: ... folder with the name of the locale you want to introduce. - Create new JSON files ...

(REP_WANT_TO_VB)


[style] ~251-~251: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...f the locale you want to introduce. - Create new JSON files with the same name as ...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)

🪛 markdownlint-cli2 (0.17.2)

19-19: Fenced code blocks should have a language specified
null

(MD040, fenced-code-language)


99-99: Emphasis used instead of a heading
null

(MD036, no-emphasis-as-heading)


100-100: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


101-101: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


102-102: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


104-104: Emphasis used instead of a heading
null

(MD036, no-emphasis-as-heading)


105-105: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


106-106: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


108-108: Emphasis used instead of a heading
null

(MD036, no-emphasis-as-heading)


109-109: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


110-110: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


130-130: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


130-130: Link fragments should be valid
null

(MD051, link-fragments)


134-134: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


135-135: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


139-139: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


170-170: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


218-218: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


248-248: Emphasis used instead of a heading
null

(MD036, no-emphasis-as-heading)


249-249: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


250-250: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


251-251: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


252-252: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


254-254: Emphasis used instead of a heading
null

(MD036, no-emphasis-as-heading)


255-255: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


256-256: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


260-260: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


295-295: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ecf4f1a and b9a7d0d.

📒 Files selected for processing (4)
  • ADDING_TRANSLATIONS.md (9 hunks)
  • components/languageSelector/LanguageSelect.tsx (2 hunks)
  • components/navigation/MobileNavMenu.tsx (4 hunks)
  • pages/community/index.tsx (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • pages/community/index.tsx
🚧 Files skipped from review as they are similar to previous changes (2)
  • components/languageSelector/LanguageSelect.tsx
  • components/navigation/MobileNavMenu.tsx
🧰 Additional context used
🪛 LanguageTool
ADDING_TRANSLATIONS.md

[style] ~135-~135: ‘exact same’ might be wordy. Consider a shorter alternative.
Context: ...ng referenced. - Make sure to add the exact same href to the utils/i18n.ts in the re...

(EN_WORDINESS_PREMIUM_EXACT_SAME)

🪛 markdownlint-cli2 (0.17.2)
ADDING_TRANSLATIONS.md

134-134: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


135-135: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


170-170: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


255-255: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


256-256: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


260-260: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


295-295: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)

⏰ Context from checks skipped due to timeout of 180000ms (3)
  • GitHub Check: Redirect rules - asyncapi-website
  • GitHub Check: Header rules - asyncapi-website
  • GitHub Check: Pages changed - asyncapi-website
🔇 Additional comments (9)
ADDING_TRANSLATIONS.md (9)

6-9: TOC Update: New Sections Added
The updated Table of Contents now includes the added sections for "Improving existing translations," "Adding translations to a partially localized page," "Adding translations to a new page," and "Adding a new locale." This update improves navigation within the document.


48-48: Updated Import Instruction
The documentation now instructs to import the useTranslation hook from utils/i18n, which is consistent with the refactored file structure.


56-75: ICSFileButton Example Update
The diff example for ICSFileButton.js correctly:
• Updates the import to use ../../utils/i18n
• Replaces the literal button text with a translation key (icsFileBtn)
• Introduces the use of the translation function (t()) from useTranslation
This encourages proper internationalization practices in component development.


79-82: English Locale Update
Adding the "icsFileBtn": "Download ICS File" key in en/common.json ensures that the English translation for the button is available for i18n.


86-89: German Locale Update
The addition of "icsFileBtn": "ICS-Datei herunterladen" in de/common.json completes the localized mapping for the button in German.


143-154: Locales Directory Update
The diff shows new additions of newsletter.json in both the de and en locale folders. This change aligns the directory structure with the new newsletter page translations.


159-168: i18n Config Update: Newsletter Namespace
Including the newsletter namespace in the namespaces array of the i18n configuration is implemented correctly. Ensure that any components relying on this namespace are updated accordingly.


182-216: Newsletter Page i18n Integration
The updated newsletter.tsx example properly:
• Imports i18n utilities (getAllLanguageSlugs, getLanguage, and useTranslation)
• Uses the useTranslation hook with the 'newsletter' namespace
• Implements static site functions (getStaticPaths and getStaticProps)
This mirrors the approach used elsewhere in the project and supports full i18n integration for the newsletter page.


297-312: i18n Routing Update for French
The diff for utils/i18n.ts correctly adds a French path (/tools/cli) under the fr key, aligning with the updated i18n configuration.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bounty AsyncAPI Bounty program related label
Projects
Status: In Progress
Development

Successfully merging this pull request may close these issues.

Enabling i18n feature for smaller screens
5 participants