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