Thank you for your interest in contributing to MicYou! This guide covers how to build the app from source, add translations, and submit changes.
We welcome bug reports, feature requests, code contributions, and translations.
This project is built using Kotlin Multiplatform.
Android app (APK):
./gradlew :composeApp:assembleDebugDesktop application (run directly):
./gradlew :composeApp:runBuild packages for distribution:
Windows installer (NSIS):
./gradlew :composeApp:packageWindowsNsisWindows ZIP archive:
./gradlew :composeApp:packageWindowsZipLinux DEB package:
./gradlew :composeApp:packageDebLinux RPM package:
./gradlew :composeApp:packageRpmmacOS DMG package:
./gradlew :composeApp:packageDmgNo-JRE package:
./gradlew :composeApp:packageNoJreAllMicYou uses Compose Multiplatform Resources for localization. All user-facing strings are stored in strings.xml files. We welcome contributions to translate MicYou into your language!
To add a new language manually:
- Clone the repository:
git clone https://github.com/LanRhyme/MicYou.git
cd MicYou- Create a new
strings.xmlfile under the appropriatevalues-{locale}directory:
mkdir -p composeApp/src/commonMain/composeResources/values-xx
cp composeApp/src/commonMain/composeResources/values/strings.xml composeApp/src/commonMain/composeResources/values-xx/strings.xmlReplace xx with your language code (e.g., fr for French, es for Spanish, according to ISO 639-1 or other related standards like IETF BCP 47).
- Edit the new
strings.xmlfile and translate all string values while keeping the keys unchanged:
<resources>
<string name="appName">MicYou</string>
<string name="ipLabel">IP : </string>
<!-- ... -->
</resources>- Register the new language in Localization.kt:
Find the AppLanguage enum and add your language:
enum class AppLanguage(val label: String, val code: String) {
// ... existing languages ...
French("Français", "fr"), // Add this line
}// In @Composable context
Text(stringResource(Res.string.myKey))
// In suspend context
val text = getString(Res.string.myKey)
// With format args (%s, %d, %1$s for positional)
Text(stringResource(Res.string.myFormattedKey, arg1))To test your translation locally:
- Build and run the desktop app:
./gradlew :composeApp:run-
Go to Settings → Appearance → Language and select your new language
-
Check that all strings display correct text and that layouts don't clip or overflow
-
For Android app, build APK:
./gradlew :composeApp:assembleDebug- Base languages (must be kept in sync): English (
values/strings.xml) and Simplified Chinese (values-zh/strings.xml) - Location:
composeApp/src/commonMain/composeResources/values*/strings.xml - File format: Android strings.xml
- Currently supported: 6 locales including Chinese (Simplified, Traditional, Cantonese)
When you add or update translations, follow this order:
- Update both base language files first:
composeApp/src/commonMain/composeResources/values/strings.xml (English)
composeApp/src/commonMain/composeResources/values-zh/strings.xml (Simplified Chinese)
-
Update other locale files (
values-*/strings.xml) using the same key set. -
Run localization checks locally:
./gradlew checkLocalization- Install hooks once (recommended) so checks run automatically before each commit:
./gradlew installGitHooks- Commit changes only after
checkLocalizationpasses.
The pre-commit hook runs checkLocalization and blocks commits when key sets are inconsistent or values are empty.
Some languages have special variants:
values-zh/- Simplified Chinesevalues-zh-rTW/- Traditional Chinese (Taiwan)values-zh-rHK/- Cantonese (Hong Kong)values-zh-rSS/- Chinese Hard mode (Easter egg)values-ca/- Cat language (Easter egg)
Submit a pull request with your new or updated translation files.
Use Conventional Commits format for all PR titles:
feat(i18n): add fr (French) localizationfix: resolve audio crash on Android 14docs: update build instructions