{"id":43358237,"url":"https://github.com/hyperdevs-team/poeditor-android-gradle-plugin","last_synced_at":"2026-02-02T03:19:00.546Z","repository":{"id":44624390,"uuid":"62801151","full_name":"hyperdevs-team/poeditor-android-gradle-plugin","owner":"hyperdevs-team","description":"Gradle plug-in that enables importing PoEditor localized strings directly to an Android project","archived":false,"fork":false,"pushed_at":"2025-07-14T12:02:51.000Z","size":392,"stargazers_count":54,"open_issues_count":5,"forks_count":26,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-07-14T15:02:05.705Z","etag":null,"topics":["android","android-localization","android-poeditor","android-strings","android-translation","android-translations","gradle-kotlin","gradle-plugin","poeditor","poeditor-api","poeditor-string"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hyperdevs-team.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2016-07-07T11:17:50.000Z","updated_at":"2025-07-14T11:59:14.000Z","dependencies_parsed_at":"2023-12-10T22:27:45.746Z","dependency_job_id":"1c13a600-5b48-4c09-bb2e-381416f53e5e","html_url":"https://github.com/hyperdevs-team/poeditor-android-gradle-plugin","commit_stats":null,"previous_names":[],"tags_count":37,"template":false,"template_full_name":null,"purl":"pkg:github/hyperdevs-team/poeditor-android-gradle-plugin","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hyperdevs-team%2Fpoeditor-android-gradle-plugin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hyperdevs-team%2Fpoeditor-android-gradle-plugin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hyperdevs-team%2Fpoeditor-android-gradle-plugin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hyperdevs-team%2Fpoeditor-android-gradle-plugin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hyperdevs-team","download_url":"https://codeload.github.com/hyperdevs-team/poeditor-android-gradle-plugin/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hyperdevs-team%2Fpoeditor-android-gradle-plugin/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29003221,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-02T01:32:03.847Z","status":"online","status_checked_at":"2026-02-02T02:00:07.448Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","android-localization","android-poeditor","android-strings","android-translation","android-translations","gradle-kotlin","gradle-plugin","poeditor","poeditor-api","poeditor-string"],"created_at":"2026-02-02T03:18:59.886Z","updated_at":"2026-02-02T03:19:00.531Z","avatar_url":"https://github.com/hyperdevs-team.png","language":"Kotlin","readme":"# PoEditor Android Gradle Plug-in\n[![Release](https://jitpack.io/v/hyperdevs-team/poeditor-android-gradle-plugin.svg)](https://jitpack.io/#hyperdevs-team/poeditor-android-gradle-plugin)\n\nSimple plug-in that eases importing [PoEditor](https://poeditor.com) localized strings to your Android project.\n\n## Purpose\nThis plug-in super-charges your Android project by providing tasks to download your localized strings from the PoEditor service into you Android project.\nIt also provides a built-in syntax to handle placeholders to enhance the already awesome Android support from PoEditor.\n\n## Minimum requirements\n* Gradle 8.2 or above\n* Android Gradle Plug-in 8.0 or above\n\n## Setting Up\nIn your main `build.gradle`, add [jitpack.io](https://jitpack.io/) repository in the `buildscript` block and include the plug-in as a dependency:\n\n\u003cdetails open\u003e\u003csummary\u003eGroovy\u003c/summary\u003e\n\n```groovy\nbuildscript {\n    repositories { \n        maven { url \"https://jitpack.io\" }\n    }\n    dependencies {\n        classpath \"com.github.hyperdevs-team:poeditor-android-gradle-plugin:\u003clatest_version\u003e\"\n    }\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eKotlin (using classpath)\u003c/summary\u003e\n\n```kotlin\nbuildscript {\n    repositories { \n        maven { url = java.net.URI(\"https://jitpack.io\") }\n    }\n    dependencies {\n        classpath(\"com.github.hyperdevs-team:poeditor-android-gradle-plugin:\u003clatest_version\u003e\")\n    }\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eKotlin (using the plugins block)\u003c/summary\u003e\n\nTop-level `settings.gradle.kts`\n```kotlin\npluginManagement {\n    repositories {\n        maven { url = java.net.URI(\"https://jitpack.io\") }\n    }\n    resolutionStrategy {\n        eachPlugin {\n            // Add custom plugin ID for the PoEditor plugin.\n            // This is required because the plugin is not published in the Gradle plugin portal.\n            if (requested.id.id == \"com.hyperdevs.poeditor\") {\n                useModule(\"com.github.hyperdevs-team:poeditor-android-gradle-plugin:${requested.version}\")\n            }\n        }\n    }\n}\n```\n\nTop-level `build.gradle.kts`\n```kotlin\nplugins {\n    id(\"com.hyperdevs.poeditor\") version \"\u003clatest_version\u003e\" apply false\n}\n```\n\n\u003c/details\u003e\n\n## How to use\nApply and configure the plug-in in your app's `build.gradle` file:\n\u003cdetails open\u003e\u003csummary\u003eGroovy\u003c/summary\u003e\n\n```groovy\napply plugin: \"com.android.application\"\napply plugin: \"com.hyperdevs.poeditor\"\n\npoEditor {\n    apiToken = \"your_api_token\"\n    projectId = 12345\n    defaultLang = \"en\"\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eKotlin\u003c/summary\u003e\n\n```kotlin\nplugins {\n    id(\"com.android.application\")\n    id(\"com.hyperdevs.poeditor\")\n}\n\npoEditor {\n    apiToken.set(\"your_api_token\")\n    projectId.set(12345)\n    defaultLang.set(\"en\")\n}\n```\n\n\u003c/details\u003e\n\nThe complete attribute list is the following:\n\nAttribute                              | Description\n---------------------------------------|-----------------------------------------\n```apiToken```                         | PoEditor API Token.\n```projectId```                        | PoEditor project ID.\n```defaultLang```                      | (Optional) The lang to be used to build default ```strings.xml``` (```/values``` folder). Defaults to English (`en`).\n```defaultResPath```                   | (Since 1.3.0) (Optional) Path where the plug-in should dump strings. Defaults to the module's default (or build variant) `res` path.\n```enabled```                          | (Since 1.4.0) (Optional) Enables the generation of the block's related task. Defaults to `true`.\n```tags```                             | (Since 2.1.0) (Optional) List of PoEditor tags to download. Defaults to empty list.\n```languageValuesOverridePathMap```    | (Since 2.2.0) (Optional) Map of `language_code:path` entries that you want to override the default language values folder with. Defaults to empty map.\n```minimumTranslationPercentage```     | (Since 2.3.0) (Optional) The minimum accepted percentage of translated strings per language. Languages with fewer translated strings will not be fetched. Defaults to no minimum, allowing all languages to be fetched.\n```filters```                          | (Since 2.4.0) (Optional) List of PoEditor filters to use during download. Defaults to empty list. Accepted values are defined by the POEditor API.\n```resFileName```                      | (Since 3.1.0) (Optional) Sets the file name for the imported string resource XML files. Defaults to `strings`.\n```order```                            | (Since 3.1.0) (Optional) Defines how to order the export. Accepted values are defined by the POEditor API.\n```unquoted```                         | (Since 3.2.0) (Optional) Defines if the strings should be unquoted, overriding default PoEditor configuration. Defaults to `false`.\n```unescapeHtmlTags```                 | (Since 3.4.0) (Optional) Whether or not to unescape HTML tags (`\u003c`, `\u003e`) from strings. Defaults to `true`.\n```untranslatableStringsRegex```       | (Since 4.2.0) (Optional) Pattern to use to mark strings as translatable=false in the strings file. Defaults to `null`.\n```includeComments```                  | (Since 5.0.0) (Optional) Whether to include comments from the downloaded strings. Defaults to `true`.\n\nAfter the configuration is done, just run the new ```importPoEditorStrings``` task via Android Studio or command line:\n\n```\n./gradlew importPoEditorStrings\n```\n\nThis task will:\n* Download all strings files (every available lang) from PoEditor given the api token and project id.\n* Process the incoming strings to fix some PoEditor incompatibilities with Android strings system. \n* Create and save strings.xml (or whatever file name you desire by using the `resFileName` attribute) files to ```/values-\u003clang\u003e``` (or ```/values``` in case of the default lang). It supports\nregion specific languages by creating the proper folders (i.e. ```/values-es-rMX```).\n\n## Enhanced syntax\nThe plug-in enhances your PoEditor experience by adding useful features over your project by adding some custom syntax for certain tasks.\n\n### Variables\nThe plug-in does not parse string placeholders, instead it uses variables with a specific markup to use in PoEditor's string definition: it uses a double braces syntax to declare them.\nThis allows more clarity for translators that use the platform, since it allows them to know what the placeholders really mean and better reuse them in translations.\n\nFor example, the PoEditor string:\n\n```\nwelcome_message: Hey {{user_name}} how are you\n``` \n\nwill become, in `strings.xml`\n\n```xml\n\u003cstring name=\"welcome_message\"\u003eHey %1$s how are you\u003c/string\u003e\n```\n\nIf you need more than one variable in the same string, you can also use ordinals. The string:\n\n```\nwelcome_message: Hey {1{user_name}} how are you, today offer is {2{current_offer}}\n``` \n\nwill become, `in strings.xml`\n\n```xml\n\u003cstring name=\"welcome_message\"\u003eHey %1$s how are you, today offer is %2$s\u003c/string\u003e\n```\n\nThis way you can change the order of the placeholders depending on the language:\n\nThe same string, with the following Spanish translation:\n\n```\nwelcome_message: La oferta del día es {2{current_offer}} para ti, {1{user_name}}\n``` \n\nwill become, in `values-es/strings.xml`\n\n```xml\n\u003cstring name=\"welcome_message\"\u003eLa oferta del día es %2$s para ti, %1$s\u003c/string\u003e\n```\n\n### Tablet specific strings\nYou can mark some strings as tablet specific strings by adding ```_tablet```suffix to the string key in PoEditor. \nThe plug-in will extract tablet strings to its own XML and save it in ```values-\u003clang\u003e-sw600dp```.\n\nIf you define the following string in PoEditor:\n```welcome_message: Hey friend``` and ```welcome_message_tablet: Hey friend how are you doing today, you look great!```\n\nThe plug-in will create two `strings.xml` files:\n\n`/values/strings.xml`\n```xml\n\u003cstring name=\"welcome_message\"\u003eHey friend\u003c/string\u003e\n```\n\n`/values-sw600dp/strings.xml`\n```xml\n\u003cstring name=\"welcome_message\"\u003eHey friend how are you doing today, you look great!\u003c/string\u003e\n```\n\n## Handling multiple flavors and build types\nSometimes we might want to import different strings for a given flavor (for example, in white label apps, we could have\ndifferent string definitions depending on the brand where they're used). The plugin supports this kind of apps by providing\nspecific configurations via the `poEditorConfig` block.\n\nLet's see an example configuration:\n\n\u003cdetails open\u003e\u003csummary\u003eGroovy\u003c/summary\u003e\n\n```groovy\npoEditor {\n    // Default config that applies to all flavor/build type configurations. \n    // Also executed when calling 'importPoEditorStrings'\n}\n\nandroid {\n    // If you have the following flavors...\n    flavorDimensions 'type'\n    productFlavors {\n        free { dimension 'type' }\n        paid { dimension 'type' }\n    }\n\n    poEditorConfig {\n        free {\n            // Configuration for the free flavor, same syntax as the standard 'poEditor' block\n        }\n        paid {\n            // Configuration for the paid flavor, same syntax as the standard 'poEditor' block\n        }\n        debug {\n            // Configuration for the debug build type, same syntax as the standard 'poEditor' block\n        }\n        release {\n            // Configuration for the release build type, same syntax as the standard 'poEditor' block\n        }\n    }\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eKotlin\u003c/summary\u003e\n\n```kotlin\npoEditor {\n    // Default config that applies to all flavor/build type configurations. \n    // Also executed when calling 'importPoEditorStrings'\n}\n\nandroid {\n    // If you have the following flavors...\n    flavorDimensions(\"type\")\n\n    productFlavors {\n        register(\"free\") { setDimension(\"type\") }\n        register(\"paid\") { setDimension(\"type\") }\n    }\n\n    poEditorConfig {\n        register(\"free\") {\n            // Configuration for the free flavor, same syntax as the standard 'poEditor' block\n        }\n        register(\"paid\") {\n            // Configuration for the paid flavor, same syntax as the standard 'poEditor' block\n        }\n        register(\"debug\") {\n            // Configuration for the debug build type, same syntax as the standard 'poEditor' block\n        }\n        register(\"release\") {\n            // Configuration for the release build type, same syntax as the standard 'poEditor' block\n        }\n    }\n}\n```\n\n\u003c/details\u003e\n\nEach flavor (`free` and `paid`) and build type (`debug` and `release`) will have its own task to import strings for said\nconfiguration: `importFreePoEditorStrings`, `importPaidPoEditorStrings`, `importDebugPoEditorStrings` and\n`importReleasePoEditorStrings`.\n\nNow the `importPoEditorStrings` task will import the main strings configured in the `poEditor` block and also the\nstrings for each defined flavor or build type.`\n\n## Handling library modules\n\u003e Requires version 1.3.0 of the plug-in\n\nYou can also apply the plug-in to library modules. Here's an example:\nApply and configure the plug-in in your library's `build.gradle` file:\n\u003cdetails open\u003e\u003csummary\u003eGroovy\u003c/summary\u003e\n\n```groovy\napply plugin: \"com.android.library\"\napply plugin: \"com.hyperdevs.poeditor\"\n\npoEditor {\n    apiToken = \"your_api_token\"\n    projectId = 12345\n    defaultLang = \"en\"\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eKotlin\u003c/summary\u003e\n\n```kotlin\nplugins {\n    id \"com.android.library\"\n    id \"com.hyperdevs.poeditor\"\n}\n\npoEditor {\n    apiToken = \"your_api_token\"\n    projectId = 12345\n    defaultLang = \"en\"\n}\n```\n\n\u003c/details\u003e\n\nYou can also apply flavor and build type-specific configurations as you would do when setting them up with application modules.\nThe plug-in will generate the proper tasks needed to import the strings under your module: `:\u003cyour_module\u003e:import\u003cyour_flavor_or_build_type_if_any\u003ePoEditorStrings`\n\n## Disabling task generation for specific configurations\n\u003e Requires version 1.4.0 of the plug-in\n\nThere may be some cases where you only want certain configurations to have a related task.\nOne of these examples may be to only have tasks for the configured flavors or build types, but you don't want to have the\nmain `poEditor` block to download any strings. For these cases you have the `enabled` variable that you can set to false\nwhen you want to disable a configuration.\n\nKeep in mind that, if you disable the main `poEditor` block, you'll need to enable each specific configuration separately\nsince they inherit the main block configuration. Let's see how this works:\n\n\u003cdetails open\u003e\u003csummary\u003eGroovy\u003c/summary\u003e\n\n```groovy\npoEditor {\n    // Default config that applies to all flavor/build type configurations. \n    // Also executed when calling 'importPoEditorStrings'\n    enabled = false // This'll disable task generation for every configuration.\n    apiToken = \"your_common_api_token\"\n}\n\nandroid {\n    flavorDimensions 'type'\n    productFlavors {\n        free { dimension 'type' }\n        paid { dimension 'type' }\n    }\n\n    poEditorConfig {\n        free {\n            // Specific configuration for the free flavor\n            enabled = true // Explicitly enabled since the main block disables task generation\n            projectId = 12345\n        }\n        paid {\n            // Specific configuration for the paid flavor\n            enabled = true // Explicitly enabled since the main block disables task generation\n            projectId = 54321\n        }\n    }\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eKotlin\u003c/summary\u003e\n\n```kotlin\npoEditor {\n    // Default config that applies to all flavor/build type configurations. \n    // Also executed when calling 'importPoEditorStrings'\n    enabled = false // This'll disable task generation for every configuration.\n    apiToken = \"your_common_api_token\"\n}\n\nandroid {\n    // If you have the following flavors...\n    flavorDimensions(\"type\")\n\n    productFlavors {\n        register(\"free\") { setDimension(\"type\") }\n        register(\"paid\") { setDimension(\"type\") }\n    }\n\n    poEditorConfig {\n        register(\"free\") {\n            // Specific configuration for the free flavor\n            enabled = true // Explicitly enabled since the main block disables task generation\n            projectId = 12345\n        }\n        register(\"paid\") {\n            // Specific configuration for the paid flavor\n            enabled = true // Explicitly enabled since the main block disables task generation\n            projectId = 54321\n        }\n    }\n}\n```\n\n\u003c/details\u003e\n\n## Handling tags\n\u003e Requires version 2.1.0 of the plug-in\n\nYou can also select the tags that you want strings to be downloaded from PoEditor, based on the tags that you defined in\nyour PoEditor project.\n\n\u003cdetails open\u003e\u003csummary\u003eGroovy\u003c/summary\u003e\n\n```groovy\npoEditor {\n    apiToken = \"your_api_token\"\n    projectId = 12345\n    defaultLang = \"en\"\n    tags = [\"tag1\", \"tag2\"] // Download strings with the specified tags\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eKotlin\u003c/summary\u003e    \n    \n```kotlin\npoEditor {\n    apiToken = \"your_api_token\"\n    projectId = 12345\n    defaultLang = \"en\"\n    tags = listOf(\"tag1\", \"tag2\")\n}\n```\n    \n\u003c/details\u003e\n\n## Overriding default values folder for specific languages\n\u003e Requires version 2.2.0 of the plug-in\n\nSometimes you may want to override the default `values` path where the plug-in stores the downloaded strings.\nFor example, you may have a project where you have custom languages suited to your app flavors in PoEditor\n(let's say `free` and `paid`). The plug-in would create two folders in your app's `res` folder \n(`values-free` and `values-paid`) by default; this would not be ideal if you want the string values to their respective\nflavors.\n\nYou can add the parameter `languageValuesOverridePathMap` to your `poEditor` or `poEditorConfig` block to change the \npath of the `values` folder where the strings file will be stored for a given language code:\n\n\u003cdetails open\u003e\u003csummary\u003eGroovy\u003c/summary\u003e\n\n```groovy\npoEditor {\n    apiToken = \"your_api_token\"\n    projectId = 12345\n    defaultLang = \"en\"\n    languageValuesOverridePathMap = [\n            \"free\" : \"${rootDir}/app/src/free/res/values\", \n            \"paid\" : \"${rootDir}/app/src/paid/res/values\"\n    ]\n}\n```\n    \n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eKotlin\u003c/summary\u003e\n\n```kotlin\npoEditor {\n    apiToken = \"your_api_token\"\n    projectId = 12345\n    defaultLang = \"en\"\n    languageValuesOverridePathMap = mapOf(\n        \"free\" to \"${rootDir}/app/src/free/res/values\",\n        \"paid\" to \"${rootDir}/app/src/paid/res/values\"\n    )\n}\n```\n    \n\u003c/details\u003e\n\n## Tweaking minimum translation percentages\n\u003e Requires version 2.3.0 of the plug-in\n\nThe plug-in also allows setting a minimum percentage of translated strings to download languages. This is set-up with the `minimumTranslationPercentage` parameter in your `poEditor` or `poEditorConfig` blocks:\n\n\u003cdetails open\u003e\u003csummary\u003eGroovy\u003c/summary\u003e\n\n```groovy\npoEditor {\n    apiToken = \"your_api_token\"\n    projectId = 12345\n    defaultLang = \"en\"\n    minimumTranslationPercentage = 85\n}\n```\n    \n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eKotlin\u003c/summary\u003e\n\n```kotlin\npoEditor {\n    apiToken = \"your_api_token\"\n    projectId = 12345\n    defaultLang = \"en\"\n    minimumTranslationPercentage = 85\n}\n```\n    \n\u003c/details\u003e\n\n\n## Handling filters\n\u003e Requires version 2.4.0 of the plug-in\n\nThe plug-in also allows setting filters for narrowing down the type of terms to be downloaded. \nSupported filters are defined by the POEditor API and currently include:  `translated`, `untranslated`, `fuzzy`, `not_fuzzy`, `automatic`, `not_automatic`, `proofread`, `not_proofread`. \nAt the moment it's not possible to set different filters per language.  \nThis is set-up with the optional `filters` parameter in your `poEditor` or `poEditorConfig` blocks:\n\n\u003cdetails open\u003e\u003csummary\u003eGroovy\u003c/summary\u003e\n\n```groovy\npoEditor {\n    apiToken = \"your_api_token\"\n    projectId = 12345\n    defaultLang = \"en\"\n    filters = [\"translated\", \"not_fuzzy\"]\n}\n```\n    \n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eKotlin\u003c/summary\u003e\n\n```kotlin\npoEditor {\n    apiToken = \"your_api_token\"\n    projectId = 12345\n    defaultLang = \"en\"\n    filters = listOf(\"translated\", \"not_fuzzy\")\n}\n```\n    \n\u003c/details\u003e\n\n## Toggling HTML unescaping\n\u003e Requires version 3.4.0 of the plug-in\n\nYou can enable or disable HTML tags unescaping with the `unescapeHtmlTags` flag.\n\n\u003cdetails open\u003e\u003csummary\u003eGroovy\u003c/summary\u003e\n\n```groovy\npoEditor {\n    apiToken = \"your_api_token\"\n    projectId = 12345\n    defaultLang = \"en\"\n    unescapeHtmlTags = false\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eKotlin\u003c/summary\u003e\n\n```kotlin\npoEditor {\n    apiToken = \"your_api_token\"\n    projectId = 12345\n    defaultLang = \"en\"\n    unescapeHtmlTags = false\n}\n```\n\n\u003c/details\u003e\n\n## Creating extra PoEditor tasks\n\u003e Requires version 4.1.0 of the plug-in\n\nYou can create extra PoEditor tasks to import strings for other projects, for example. You can do so by adding this to\nyour `build.gradle(.kts)` file:\n\n\u003cdetails open\u003e\u003csummary\u003eKotlin\u003c/summary\u003e\n\n```kotlin\ntasks.register(\"importCustomPoEditorStrings\", ImportPoEditorStringsTask::class.java) {\n    description = \"Imports custom strings from POEditor.\"\n    group = \"strings\"\n\n    apiToken = \"another_token_from_a_different_project\"\n    projectId = 12345\n    resFileName = \"strings_custom\"\n}\n```\n\n\u003c/details\u003e\n\n## Mark strings as untranslatable\n\u003e Requires version 4.2.0 of the plug-in\n\nYou can use the `untranslatableStringsRegex` property to define a regex to mark matching PoEditor string keys as \nuntranslatable.\nThese strings will be marked as `translatable=\"false\"` in the final strings file.\n\n\u003cdetails open\u003e\u003csummary\u003eGroovy\u003c/summary\u003e\n\n```groovy\npoEditor {\n    apiToken = \"your_api_token\"\n    projectId = 12345\n    defaultLang = \"en\"\n    untranslatableStringsRegex = \"(.*)\"\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eKotlin\u003c/summary\u003e\n\n```kotlin\npoEditor {\n    apiToken = \"your_api_token\"\n    projectId = 12345\n    defaultLang = \"en\"\n    untranslatableStringsRegex = \"(.*)\"\n}\n```\n\n\u003c/details\u003e\n\nKeep in mind that the regex must match the whole string name and not just a part, as it relies on \n[`CharSequence.matches(Regex)`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.text/matches.html) from the \nKotlin API.\n\n## iOS alternative\nIf you want a similar solution for your iOS projects, check this out: [poeditor-parser-swift](https://github.com/hyperdevs-team/poeditor-parser-swift)\n\n## Authors \u0026 contributors\n* **[Iván Martínez](https://github.com/imartinez)** - *Initial work*\n* **[Adrián García](https://github.com/adriangl)** - *Maintainer*\n\nThanks to all the people who contributed to making the plug-in better!\n\n\u003ca href=\"https://github.com/hyperdevs-team/poeditor-android-gradle-plugin/graphs/contributors\"\u003e\n  \u003cimg src=\"https://contrib.rocks/image?repo=hyperdevs-team/poeditor-android-gradle-plugin\" /\u003e\n\u003c/a\u003e\n\n## Acknowledgements\nThe work in this repository up to April 28th, 2021 was done by [bq](https://github.com/bq).\nThanks for all the work!!\n\n## License\nThis project is licensed under the Apache Software License, Version 2.0.\n```\n   Copyright 2021 HyperDevs\n   \n   Copyright 2016 BQ\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhyperdevs-team%2Fpoeditor-android-gradle-plugin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhyperdevs-team%2Fpoeditor-android-gradle-plugin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhyperdevs-team%2Fpoeditor-android-gradle-plugin/lists"}