# Contributing to QCalc Thank you for your interest in contributing to QCalc! ## Translation Guide Translations other than Korean, English, and Japanese were generated by AI. We welcome corrections and improvements. ### Translation File Locations | Location | Description | | --------------------------------------- | ----------------------------------------------------- | | `src/i18n/messages/{lang}Messages.yml` | Global shared messages | | `src/i18n/errors/{lang}Errors.yml` | Error messages | | `src/i18n/components/*.yml` | External component messages (multi-language per file) | | `src/content/pages/AboutPage-{lang}.md` | About page content | | `src/content/tips/{lang}/*.md` | Tips documents | | `*.vue` files with `` blocks | Component-local messages (multi-language per block) | > `{lang}` = language code: `ko`, `en`, `ja`, `zh`, `hi`, `de`, `es`, `fr`, `pt`, `ru` ### Fixing an Existing Translation 1. Find the text you want to fix: ```bash grep -r "wrong text" src/ --include="*.yml" --include="*.vue" --include="*.md" ``` 2. Edit the file and submit a PR. ### Adding a New Language See [DEVELOP.md](DEVELOP.md) for the development setup, then: 1. Add the language to `src/i18n/languages.ts` 2. Create `src/i18n/messages/{lang}Messages.yml` (copy from `enMessages.yml`) 3. Create `src/i18n/errors/{lang}Errors.yml` (copy from `enErrors.yml`) 4. Add the language section to each `` block in `.vue` files 5. Add the language section to each `.yml` file in `src/i18n/components/` 6. Create `src/content/pages/AboutPage-{lang}.md` 7. Create `src/content/pages/HelpPage-{lang}.md` 8. Create `src/content/tips/{lang}/` directory with tip files 9. Wire the new language into every loader: `src/pages/HelpPage.vue`, `src/pages/AboutPage.vue`, `src/components/dialogs/ShowTips.vue`, and `src/components/dialogs/VersionChangelogDialog.vue` (a missing import silently falls back to English) ## Accessibility QCalc strives to be accessible to all users. When contributing, please keep the following in mind: - Add `aria-label` to all interactive elements (buttons, toggles, selects) - Use `aria-live="polite"` for dynamically updated content (record lists, status messages). **Exception — calculation results on desktop Linux**: Orca cannot see web live regions inside the Tauri app, so result announcements must go through the Rust `announce_a11y` command (AT-SPI announcement event); keep the DOM live region as the cross-platform fallback - Use `role="dialog"` and `aria-label` on all dialog components - Use `role="alertdialog"` for confirmation dialogs - Ensure keyboard navigation works — avoid breaking existing shortcut bindings - Respect `prefers-reduced-motion` — avoid adding animations without the media query guard ## Bug Reports & Feature Requests Please use [GitHub Issues](https://github.com/from104/qcalc/issues). ## Contact Kihyun Seo