Eliminate manual copy-pasting across dozens of values-xx/strings.xml directories. AppText gives Android engineering teams a collaborative translation workbench with automated Gradle build syncing.
Android localization requires adhering to strict XML syntax, resource qualifiers, and formatting tokens. AppText manages all of it natively.
Exports ready-to-use zip bundles organized into standard res/values-es/, res/values-ar/, and res/values-ja/ folders.
Safeguards variables like %1$s, %2$d, and HTML entities so your Android builds never crash from XML parsing errors.
Full bidirectional and Right-to-Left (RTL) editing interface for Arabic, Hebrew, and Persian, ensuring proper layout mirroring and punctuation handling.
Add this simple task to your Android app's app/build.gradle. Run it directly or inside your CI/CD pipeline (GitHub Actions, Bitrise, GitLab) to pull fresh translations automatically.
task updateTranslations {
description = "Downloads and extracts latest strings.xml bundles from AppText"
doLast {
def projectId = "YOUR_PROJECT_ID" // Find your project ID on AppText
def url = "https://apptext.site/public/export/android/${projectId}"
def zipFile = file("${buildDir}/translations.zip")
def outputDir = file("${buildDir}/tmp-translations")
outputDir.mkdirs()
println "Downloading latest translations from AppText..."
new URL(url).withInputStream { i -> zipFile.withOutputStream { it << i } }
ant.unzip(src: zipFile, dest: outputDir)
def resDir = file("src/main/res")
outputDir.eachDir { langDir ->
def targetDir = new File(resDir, langDir.name)
targetDir.mkdirs()
new File(langDir, "strings.xml").withInputStream { i ->
new File(targetDir, "strings.xml").withOutputStream { it << i }
}
println "Updated: ${targetDir}/strings.xml"
}
println "✓ Translations updated successfully!"
}
}
./gradlew :app:updateTranslations
• No additional plugins or dependencies required
Join mobile developers worldwide using AppText to deliver 5-star multilingual Android apps. 100% free with unlimited keys.
Create Free Account →