diff --git a/.github/workflows/i18n.yml b/.github/workflows/i18n.yml index c7806facf..bbaffbce4 100644 --- a/.github/workflows/i18n.yml +++ b/.github/workflows/i18n.yml @@ -55,7 +55,7 @@ jobs: with: token: ${{ secrets.GH_PAT }} commit-message: "feat(i18n): update translations" - title: "๐ Auto-update translations" + title: "feat(i18n): update translations" body: | ## Summary Automated translation updates triggered by changes to documentation. @@ -76,8 +76,10 @@ jobs: ## Testing This PR includes automated translations for modified English documentation content: - ๐ช๐ธ Spanish (es) translations - - ๐ซ๐ท French (fr) translations + - ๐ซ๐ท French (fr) translations - ๐จ๐ณ Chinese (zh) translations + - ๐ฏ๐ต Japanese (ja) translations + - ๐ฉ๐ช German (de) translations **What reviewers should focus on:** - Verify translated content accuracy and context @@ -137,15 +139,21 @@ jobs: es_count=$(find content/docs/es -name "*.mdx" 2>/dev/null | wc -l || echo 0) fr_count=$(find content/docs/fr -name "*.mdx" 2>/dev/null | wc -l || echo 0) zh_count=$(find content/docs/zh -name "*.mdx" 2>/dev/null | wc -l || echo 0) + ja_count=$(find content/docs/ja -name "*.mdx" 2>/dev/null | wc -l || echo 0) + de_count=$(find content/docs/de -name "*.mdx" 2>/dev/null | wc -l || echo 0) es_percentage=$((es_count * 100 / en_count)) fr_percentage=$((fr_count * 100 / en_count)) zh_percentage=$((zh_count * 100 / en_count)) + ja_percentage=$((ja_count * 100 / en_count)) + de_percentage=$((de_count * 100 / en_count)) echo "### Coverage Statistics" >> $GITHUB_STEP_SUMMARY echo "- **๐ฌ๐ง English**: $en_count files (source)" >> $GITHUB_STEP_SUMMARY echo "- **๐ช๐ธ Spanish**: $es_count/$en_count files ($es_percentage%)" >> $GITHUB_STEP_SUMMARY echo "- **๐ซ๐ท French**: $fr_count/$en_count files ($fr_percentage%)" >> $GITHUB_STEP_SUMMARY echo "- **๐จ๐ณ Chinese**: $zh_count/$en_count files ($zh_percentage%)" >> $GITHUB_STEP_SUMMARY + echo "- **๐ฏ๐ต Japanese**: $ja_count/$en_count files ($ja_percentage%)" >> $GITHUB_STEP_SUMMARY + echo "- **๐ฉ๐ช German**: $de_count/$en_count files ($de_percentage%)" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "๐ **Auto-translation PR**: Check for new pull request with updated translations" >> $GITHUB_STEP_SUMMARY \ No newline at end of file diff --git a/apps/docs/components/ui/language-dropdown.tsx b/apps/docs/components/ui/language-dropdown.tsx index 8067c96f5..0a474a491 100644 --- a/apps/docs/components/ui/language-dropdown.tsx +++ b/apps/docs/components/ui/language-dropdown.tsx @@ -2,12 +2,14 @@ import { useEffect, useState } from 'react' import { Check, ChevronDown } from 'lucide-react' -import { useParams, usePathname } from 'next/navigation' +import { useParams, usePathname, useRouter } from 'next/navigation' const languages = { en: { name: 'English', flag: '๐บ๐ธ' }, es: { name: 'Espaรฑol', flag: '๐ช๐ธ' }, fr: { name: 'Franรงais', flag: '๐ซ๐ท' }, + de: { name: 'Deutsch', flag: '๐ฉ๐ช' }, + ja: { name: 'ๆฅๆฌ่ช', flag: '๐ฏ๐ต' }, zh: { name: '็ฎไฝไธญๆ', flag: '๐จ๐ณ' }, } @@ -15,6 +17,7 @@ export function LanguageDropdown() { const [isOpen, setIsOpen] = useState(false) const pathname = usePathname() const params = useParams() + const router = useRouter() const [currentLang, setCurrentLang] = useState(() => { const langFromParams = params?.lang as string @@ -56,9 +59,18 @@ export function LanguageDropdown() { newPath = `/${locale}${segments.length > 0 ? `/${segments.join('/')}` : '/introduction'}` } - window.location.href = newPath + router.push(newPath) } + useEffect(() => { + if (!isOpen) return + const onKey = (e: KeyboardEvent) => { + if (e.key === 'Escape') setIsOpen(false) + } + window.addEventListener('keydown', onKey) + return () => window.removeEventListener('keydown', onKey) + }, [isOpen]) + return (