Files
opencode-mobile/app.json
Den baf73058fd feat(i18n): add i18n infrastructure + Simplified Chinese, localize Settings screen (refs #68) (#97)
- Add expo-localization, i18next, react-i18next (versions aligned with
  Expo 54 / RN 0.81)
- src/lib/i18n/locale-resolve.ts: pure locale-resolution helpers
  (system tag -> supported catalog, with en fallback), unit-tested via
  node --test with no RN imports
- src/lib/i18n/config.ts: i18next init wired to expo-localization
  device detection, en.json + zh-Hans.json catalogs
- Persist a locale preference (system | en | zh-Hans) in the settings
  zustand store, applied immediately via i18next.changeLanguage
- Wire I18nextProvider in app/_layout.tsx
- Localize the Settings screen (~28 strings) as the reference pattern
  for extracting user-facing strings, with a language picker row and
  reviewed Simplified Chinese translations

Other screens (session/[id], connection/*, index, chat components)
are deferred follow-up — issue #68 stays open for that work.

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 02:47:18 -07:00

91 lines
3.0 KiB
JSON

{
"expo": {
"name": "OpenCode",
"slug": "opencode-mobile",
"version": "0.4.7",
"orientation": "portrait",
"scheme": "opencode",
"userInterfaceStyle": "automatic",
"icon": "./assets/icon.png",
"splash": {
"image": "./assets/splash-icon.png",
"resizeMode": "contain",
"backgroundColor": "#0F172A"
},
"ios": {
"supportsTablet": true,
"bundleIdentifier": "cc.agentlabs.opencode",
"buildNumber": "1",
"entitlements": {
"aps-environment": "production"
},
"infoPlist": {
"NSFaceIDUsageDescription": "Use Face ID to unlock OpenCode and access your sessions securely.",
"NSSpeechRecognitionUsageDescription": "OpenCode uses speech recognition so you can dictate prompts to your AI coding agent hands-free.",
"NSMicrophoneUsageDescription": "OpenCode uses the microphone to capture your voice when using speech-to-text input.",
"NSPhotoLibraryUsageDescription": "OpenCode can attach images from your photo library to messages to your AI coding agent.",
"NSCameraUsageDescription": "OpenCode can capture images with your camera and attach them to messages to your AI coding agent.",
"NSLocalNetworkUsageDescription": "OpenCode uses your local network to connect to self-hosted OpenCode servers running on your LAN.",
"NSAppTransportSecurity": {
"NSAllowsArbitraryLoads": true,
"NSAllowsArbitraryLoadsInWebContent": false
},
"ITSAppUsesNonExemptEncryption": false
}
},
"android": {
"package": "cc.agentlabs.opencode",
"versionCode": 34,
"usesCleartextTraffic": true,
"adaptiveIcon": {
"foregroundImage": "./assets/adaptive-icon.png",
"backgroundColor": "#0F172A"
}
},
"web": {
"bundler": "metro",
"output": "static"
},
"plugins": [
"expo-router",
"expo-secure-store",
"expo-local-authentication",
[
"@sentry/react-native/expo",
{
"organization": "vibetechnologies",
"project": "opencode-mobile"
}
],
[
"expo-notifications",
{
"icon": "./assets/icon.png",
"color": "#ffffff",
"sounds": []
}
],
[
"expo-image-picker",
{
"photosPermission": "OpenCode can attach images from your photo library to messages to your AI coding agent.",
"cameraPermission": "OpenCode can capture images with your camera and attach them to messages to your AI coding agent.",
"microphonePermission": false
}
],
[
"expo-speech-recognition",
{
"microphonePermission": "OpenCode uses the microphone to capture your voice when using speech-to-text input.",
"speechRecognitionPermission": "OpenCode uses speech recognition so you can dictate prompts to your AI coding agent hands-free."
}
],
"expo-localization"
],
"experiments": {
"typedRoutes": true,
"reactCompiler": true
}
}
}