diff --git a/README.md b/README.md
index 0d6d4a0..bf87441 100644
--- a/README.md
+++ b/README.md
@@ -160,6 +160,7 @@ 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
+* `handleEmptyTranslationsAsDefault` - default=`false`, if set to true empty values do not result in entries in non-default languages, i.e. no empty XML entries for non-default languages being created. If set to `true` then `allowEmptyTranslations` is ignored for all but default language
* `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
diff --git a/src/main/groovy/pl/droidsonroids/gradle/localization/ConfigExtension.groovy b/src/main/groovy/pl/droidsonroids/gradle/localization/ConfigExtension.groovy
index 5142bf0..6d49195 100644
--- a/src/main/groovy/pl/droidsonroids/gradle/localization/ConfigExtension.groovy
+++ b/src/main/groovy/pl/droidsonroids/gradle/localization/ConfigExtension.groovy
@@ -9,6 +9,7 @@ import java.text.Normalizer
* @author koral--
*/
class ConfigExtension {
+ boolean handleEmptyTranslationsAsDefault = false
boolean allowNonTranslatableTranslation = false
boolean allowEmptyTranslations = false
boolean escapeApostrophes = true
diff --git a/src/main/groovy/pl/droidsonroids/gradle/localization/ParserEngine.groovy b/src/main/groovy/pl/droidsonroids/gradle/localization/ParserEngine.groovy
index e507fe7..b9d3514 100644
--- a/src/main/groovy/pl/droidsonroids/gradle/localization/ParserEngine.groovy
+++ b/src/main/groovy/pl/droidsonroids/gradle/localization/ParserEngine.groovy
@@ -144,6 +144,8 @@ class ParserEngine {
if (value.empty) {
if (!translatable && builder.mQualifier != mConfig.defaultColumnName)
continue
+ if (mConfig.handleEmptyTranslationsAsDefault && builder.mQualifier != mConfig.defaultColumnName)
+ continue
if (!mConfig.allowEmptyTranslations)
throw new IllegalArgumentException("$name is not translated to locale $builder.mQualifier, row #${i + 1}")
} else {
diff --git a/src/test/groovy/pl/droidsonroids/gradle/localization/ParseXLSXTest.groovy b/src/test/groovy/pl/droidsonroids/gradle/localization/ParseXLSXTest.groovy
index fd25a44..39ae776 100644
--- a/src/test/groovy/pl/droidsonroids/gradle/localization/ParseXLSXTest.groovy
+++ b/src/test/groovy/pl/droidsonroids/gradle/localization/ParseXLSXTest.groovy
@@ -43,6 +43,39 @@ class ParseXLSXTest extends LocalizationPluginTestBase {
}
}
+ @Test
+ void testXlsxFileWithDefaults() {
+ def name = 'valid_with_defaults.xlsx'
+
+ ConfigExtension config = new ConfigExtension()
+ config.xlsFileURI = getClass().getResource(name).toString()
+ config.handleEmptyTranslationsAsDefault = true
+ config.allowEmptyTranslations = true
+ config.skipInvalidName = true
+ config.skipDuplicatedName = true
+ config.defaultColumnName = 'EN'
+ config.nameColumnName = 'Android'
+ config.ignorableColumns.add('WinPhone')
+ config.ignorableColumns.add('iOS')
+ config.ignorableColumns.add('END')
+ config.defaultLocaleQualifier = 'en'
+ config.useAllSheets = true
+
+ def resDir = parseTestFile(config)
+
+ resDir.traverse(type: FileType.FILES) {
+ def filePath = it.path.replace(resDir.path, '')
+ def expectedFileURL = getClass().getResource("parsed_valid_xlsx/$filePath")
+ def diff = DiffBuilder.compare(Input.fromFile(it))
+ .withTest(Input.fromURL(expectedFileURL))
+ .ignoreWhitespace()
+ .withNodeMatcher(new DefaultNodeMatcher(ElementSelectors.byNameAndAllAttributes))
+ .checkForSimilar()
+ .build()
+ assertThat(diff.hasDifferences()).as('file: %s is different than expected %s', filePath, diff.toString()).isFalse()
+ }
+ }
+
@Test
void testXlsxURI() {
ConfigExtension config = new ConfigExtension()
diff --git a/src/test/resources/pl/droidsonroids/gradle/localization/parsed_valid_xlsx/values-pl/main_with_defaults.xml b/src/test/resources/pl/droidsonroids/gradle/localization/parsed_valid_xlsx/values-pl/main_with_defaults.xml
new file mode 100644
index 0000000..58cd4e9
--- /dev/null
+++ b/src/test/resources/pl/droidsonroids/gradle/localization/parsed_valid_xlsx/values-pl/main_with_defaults.xml
@@ -0,0 +1,8 @@
+
+
+ Plik
+
+ - krowy
+ - krowa
+
+
\ No newline at end of file
diff --git a/src/test/resources/pl/droidsonroids/gradle/localization/parsed_valid_xlsx/values/main_with_defaults.xml b/src/test/resources/pl/droidsonroids/gradle/localization/parsed_valid_xlsx/values/main_with_defaults.xml
new file mode 100644
index 0000000..a420292
--- /dev/null
+++ b/src/test/resources/pl/droidsonroids/gradle/localization/parsed_valid_xlsx/values/main_with_defaults.xml
@@ -0,0 +1,16 @@
+
+
+ Application
+ File
+ %d %s
+
+
+ - cows
+ - cow
+
+
+ - monday
+ - tuesday
+ - wednesday
+
+
\ No newline at end of file
diff --git a/src/test/resources/pl/droidsonroids/gradle/localization/valid_with_defaults.xlsx b/src/test/resources/pl/droidsonroids/gradle/localization/valid_with_defaults.xlsx
new file mode 100644
index 0000000..9247f8f
Binary files /dev/null and b/src/test/resources/pl/droidsonroids/gradle/localization/valid_with_defaults.xlsx differ