OTA Translation Updates for Mobile
Push translation changes to your mobile app without app store releases. Our SDKs handle downloading, caching, and applying updates automatically.
App Store Compliant: OTA translation updates are explicitly permitted by Apple and Google guidelines. Our SDKs only update string resources, not executable code.
SDK Features
Delta Updates
Only download changed strings. Reduces bandwidth by up to 90% for incremental updates.
Offline Support
Graceful fallback to bundled translations when offline. No missing strings, ever.
Signed Bundles
Cryptographic signatures prevent tampering. Verify bundle integrity on device.
Background Sync
Updates download in the background. Users see new translations on next app launch.
Platform SDKs
React Native
For React Native and Expo apps
Install:
npm install @intlpull/react-nativeUsage:
// App.tsx
import { IntlPullProvider } from '@intlpull/react-native';
export default function App() {
return (
<IntlPullProvider
projectId="proj_abc123"
defaultLanguage="en"
fallbackToBundle={true}
>
<YourApp />
</IntlPullProvider>
);
}
// Use in components
import { useTranslation } from '@intlpull/react-native';
function Welcome() {
const { t, language, setLanguage } = useTranslation();
return (
<View>
<Text>{t('common.welcome')}</Text>
<Button onPress={() => setLanguage('es')} title="Español" />
</View>
);
}iOS (Swift)
For native iOS apps
Install:
pod 'IntlPull', '~> 2.0'Usage:
// AppDelegate.swift
import IntlPull
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
IntlPull.configure(projectId: "proj_abc123")
IntlPull.shared.sync()
return true
}
}
// Use in views
import IntlPull
struct ContentView: View {
var body: some View {
Text(IntlPull.t("common.welcome"))
}
}
// Or with SwiftUI environment
struct ContentView: View {
@Environment(\.intlpull) var t
var body: some View {
Text(t("common.welcome"))
}
}Android (Kotlin)
For native Android apps
Install:
implementation 'com.intlpull:android:2.0.0'Usage:
// Application.kt
import com.intlpull.IntlPull
class MyApplication : Application() {
override fun onCreate() {
super.onCreate()
IntlPull.configure(this, "proj_abc123")
IntlPull.sync()
}
}
// Use in activities/fragments
import com.intlpull.IntlPull.t
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding.welcomeText.text = t("common.welcome")
}
}
// With Jetpack Compose
@Composable
fun Welcome() {
val t = rememberIntlPull()
Text(text = t("common.welcome"))
}Configuration Options
| Option | Default | Description |
|---|---|---|
| projectId | - | Your IntlPull project ID (required) |
| defaultLanguage | "en" | Fallback language when translation missing |
| fallbackToBundle | true | Use bundled translations if OTA fails |
| syncOnLaunch | true | Check for updates on app launch |
| syncInterval | 3600 | Seconds between sync checks (0 = manual only) |
| enableLogging | false | Log sync activity for debugging |
Plan Availability
OTA updates are available on Professional and Enterprise plans. Lower-tier plans can still use the SDKs for bundled translations without OTA.