android-gradle-localization-plugin


Source link: https://github.com/koral--/android-gradle-localization-plugin

android-gradle-localization-plugin

Gradle plugin for generating localized string resources

Overview

This plugin generates Android string resource XML files from CSV or XLS(X) file. Generation has to be invoked as additional gradle task. Java 1.8 is required.

##Supported features

  • string arrays - see Arrays
  • plurals - see Plurals
  • non-translatable resources - translatable XML attribute
  • auto-escaping double quotes, apostrophes and newlines
  • auto-quoting leading and trailing spaces
  • syntax validation - duplicated, empty, invalid names detection
  • comments
  • formatted strings - formatted XML attribute
  • default locale specification - tools:locale

Applying plugin

Gradle 2.1+

In whichever build.gradle file.

plugins {

id 'pl.droidsonroids.localization' version '1.0.11' 
}
 

Note: exact version number must be specified, + cannot be used as wildcard.

All versions of Gradle

  1. Add dependency to the top-level build.gradle file.
 buildscript {

  repositories {

mavenCentral()

jcenter()
  
}

  dependencies {

classpath 'com.android.tools.build:gradle:2.2.3'

classpath 'pl.droidsonroids.gradle.localization:android-gradle-localization-plugin:1.0.11'
  
}
 
}
 

Note: mavenCentral() and/or jcenter() repository can be specified, + can be used as wildcard in version number. 2. Apply plugin and add configuration to build.gradle of the application, eg:

apply plugin: 'pl.droidsonroids.localization' 

Usage

Invoke localization gradle task. Task may be invoked from commandline or from Android Studio GUI.

  • from commandline: ./gradlew localization (or gradlew.bat localization on Windows)
  • from GUI: menu View->Tool Windows->Gradle and double click localization

Non existent folders will be created. WARNING existing XML files will be overwritten.

##Example The following CSV file:

name,default
 ,pl

 ,comment
,translatable file,File

 ,"Plik"
,file label, app ,Application,,,false 

will produce 2 XML files:

  • values/strings.xml:
<?xml version="1.0" encoding="utf-8"?> <resources xmlns:tools="http://schemas.android.com/tools">
<string name="file">File</string><!-- file label -->
<string name="app" translatable="false">Application</string> </resources>
  • values-pl/strings.xml:
<?xml version="1.0" encoding="utf-8"?> <resources xmlns:tools="http://schemas.android.com/tools">
<string name="file">Plik</string><!-- file label --> </resources>

##Configuration Add localization extension in build.gradle of particular module.

localization
  {

csvFile=file('translations.csv')

OR

csvFileURI='https://docs.google.com/spreadsheets/d/<key>/export?format=csv'

OR

csvGenerationCommand='/usr/bin/xlsx2csv translation.xlsx'

OR

xlsFile=file('translations.xlsx')

OR

xlsFileURI='https://docs.google.com/spreadsheets/d/<key>/export?format=xlsx'
  
}
 
  • csvFileURI and xlsFileURI can be any valid URI, not necessarily Google Docs' one
  • xlsFile and xlsFileURI accepts both XLSX and XLS files. If filename ends with xls file will be treated as XLS, XLSX otherwise

Sources, exactly one of them must be specified:

  • csvFile, xlsFile - CSV/XLS(X) file, Gradle's file() can be used to retrieve files by path relative to module location or absolute
  • csvFileURI, xlsFileURI - CSV/XLS(X) file URI
  • csvGenerationCommand - shell command which writes CSV as text to standard output. Command string should be specified like for Runtime#exec(). Standard error of the command is redirected to the standard error of the process executing gradle, so it could be seen in the gradle console.

Spreadsheet format:

  • defaultColumnName - default= 'default', name of the column which corresponds to default localization ( values folder)
  • nameColumnIndex - default=unset ( nameColumnName is taken into account), index of the column containing key names (source for the name XML attribute)
  • nameColumnName - default= 'name' (if nameColumnIndex is not present), name of the column containing key names (source for the name XML attribute)
  • translatableColumnName - default= 'translatable', name of the column containing translatable flags (source for the translatable XML attribute)
  • commentColumnName - default= 'comment', name of the column containing comments
  • formattedColumnName - default= 'formatted', name of the column formatted flags (source for the formatted XML attribute)

If both nameColumnIndex and nameColumnName are specified exception is thrown.

The following options turn off some character escaping and substitutions, can be useful if you have something already escaped in source:

  • escapeApostrophes - default= true, if set to false apostrophes ( ') won't be escaped
  • escapeQuotes - default= true, if set to false double quotes ( ") won't be escaped
  • escapeNewLines - default= true, if set to false newline characters won't be escaped
  • convertTripleDotsToHorizontalEllipsis - default= true, if set to false triple dots ( ...) won't be converted to ellipsis entity &#8230;
  • escapeSlashes - default= true, if set to false slashes ( \) won't be escaped
  • normalizationForm - default= Normalizer.Form.NFC if set to null Unicode normalization won't be performed, see javadoc of Normalizer for more details

(X)HTML tags escaping

  • tagEscapingStrategy - default= IF_TAGS_ABSENT, defines X(H)TML tag brackets (< and >) escaping strategy possible values:
  • ALWAYS - brackets are always escaped. Eg. "<" in source becomes "&lt;" in output XML
  • NEVER - brackets are never escaped. Eg. "<" in source is passed without change to output XML
  • IF_TAGS_ABSENT - Brackets aren't escaped if text contains tags or CDATA section. Eg. <b>bold</b> will be passed without change, but "if x<4 then…" becomes "if x&lt;4 then…".
  • tagEscapingStrategyColumnName - default=unset (no column), name of the column containing non-default tag escaping strategy, if cell is non-empty then strategy defined there is used instead of global one

CSV format:

XLS(X) format:

  • sheetName - default= <name of the first sheet>, name of the sheet to be processed, only one can be specified, ignored if multiSheets is set to true
  • multiSheets - default= false, if set to true all sheets are processed and sheetName is ignored

Advanced options:

  • ignorableColumns - default= [], columns from that list will be ignored during parsing. List should contain column names eg. ['Section', 'Notes']
  • allowNonTranslatableTranslation - default= false, if set to true resources marked non-translatable but translated are permitted
  • allowEmptyTranslations - default= false, if set to true then empty values are permitted
  • outputFileName - default= strings.xml, XML file name (with extension) which should be generated as an output
  • outputIndent - default= (two spaces), character(s) used to indent each line in output XML files
  • skipInvalidName - default= false, if set to true then rows with invalid key names will be ignored instead of throwing an exception
  • skipDuplicatedName - default= false, if set to true then rows with duplicated key names will be ignored instead of throwing an exception. First rows with given key will be taken into account.
  • defaultLocaleQualifier - language (eg. es) and optionally region (eg. es_US) ISO codes of default translations. Default= null(unset) which effectively means English en, if set then value will be placed in tools:locale XML attribute. See Tools Attributes for more information.

Migration from versions <1.0.7:

Versions older than 1.0.7 provided escapeBoundarySpaces option, which defaulted to true. Currently strings are always escaped when corresponding parsed cell contains leading or trailing spaces, but such spaces are stripped by default CSV strategy. So effectively strings are trimmed by default. If you want to include mentioned spaces in output set appropriate csvStrategy.

##License

MIT License
See LICENSE file.

Resources

SimpleTabBar is customizable tab bar for viewpager

A Dialog fragment with date pickers which can be used to select a time range.

Tab Stacker is an Android library that handles Multiple Fragment History (Back Stacks), like it is done on iOS Apps.

Simplified Android Rest API wrapper on-top of okHttp

A utility library for Android to schedule one-time or periodic jobs while your app is running. Currently, Android OS supports 3 types of scheduling APIs: Handler, AlarmManager and JobScheduler. The choice of one suitable API, the inflexibility of switching between them and the amount of boilerplate code required for setting up makes it difficult to use these APIs.

A Java library that adjust interpolator dynamically (inspired by Facebook Rebound).

Topics


2D Engines   3D Engines   9-Patch   Action Bars   Activities   ADB   Advertisements   Analytics   Animations   ANR   AOP   API   APK   APT   Architecture   Audio   Autocomplete   Background Processing   Backward Compatibility   Badges   Bar Codes   Benchmarking   Bitmaps   Bluetooth   Blur Effects   Bread Crumbs   BRMS   Browser Extensions   Build Systems   Bundles   Buttons   Caching   Camera   Canvas   Cards   Carousels   Changelog   Checkboxes   Cloud Storages   Color Analysis   Color Pickers   Colors   Comet/Push   Compass Sensors   Conferences   Content Providers   Continuous Integration   Crash Reports   Credit Cards   Credits   CSV   Curl/Flip   Data Binding   Data Generators   Data Structures   Database   Database Browsers   Date &   Debugging   Decompilers   Deep Links   Dependency Injections   Design   Design Patterns   Dex   Dialogs   Distributed Computing   Distribution Platforms   Download Managers   Drawables   Emoji   Emulators   EPUB   Equalizers &   Event Buses   Exception Handling   Face Recognition   Feedback &   File System   File/Directory   Fingerprint   Floating Action   Fonts   Forms   Fragments   FRP   FSM   Functional Programming   Gamepads   Games   Geocaching   Gestures   GIF   Glow Pad   Gradle Plugins   Graphics   Grid Views   Highlighting   HTML   HTTP Mocking   Icons   IDE   IDE Plugins   Image Croppers   Image Loaders   Image Pickers   Image Processing   Image Views   Instrumentation   Intents   Job Schedulers   JSON   Keyboard   Kotlin   Layouts   Library Demos   List View   List Views   Localization   Location   Lock Patterns   Logcat   Logging   Mails   Maps   Markdown   Mathematics   Maven Plugins   MBaaS   Media   Menus   Messaging   MIME   Mobile Web   Native Image   Navigation   NDK   Networking   NFC   NoSQL   Number Pickers   OAuth   Object Mocking   OCR Engines   OpenGL   ORM   Other Pickers   Parallax List   Parcelables   Particle Systems   Password Inputs   PDF   Permissions   Physics Engines   Platforms   Plugin Frameworks   Preferences   Progress Indicators   ProGuard   Properties   Protocol Buffer   Pull To   Purchases   Push/Pull   QR Codes   Quick Return   Radio Buttons   Range Bars   Ratings   Recycler Views   Resources   REST   Ripple Effects   RSS   Screenshots   Scripting   Scroll Views   SDK   Search Inputs   Security   Sensors   Services   Showcase Views   Signatures   Sliding Panels   Snackbars   SOAP   Social Networks   Spannable   Spinners   Splash Screens   SSH   Static Analysis   Status Bars   Styling   SVG   System   Tags   Task Managers   TDD &   Template Engines   Testing   Testing Tools   Text Formatting   Text Views   Text Watchers   Text-to   Toasts   Toolkits For   Tools   Tooltips   Trainings   TV   Twitter   Updaters   USB   User Stories   Utils   Validation   Video   View Adapters   View Pagers   Views   Watch Face   Wearable Data   Wearables   Weather   Web Tools   Web Views   WebRTC   WebSockets   Wheel Widgets   Wi-Fi   Widgets   Windows   Wizards   XML   XMPP   YAML   ZIP Codes