diff --git a/pyxform/survey.py b/pyxform/survey.py index 6d44ecdbf..9c96ddc70 100644 --- a/pyxform/survey.py +++ b/pyxform/survey.py @@ -535,12 +535,6 @@ def _add_empty_translations(self, warnings=None): if warnings is None: warnings = [] - default_language_warning = ('\tDefault language not set,' + - ' with missing default translations.' - ' Please consider setting a `default_language` in your' + - ' settings tab to insure questions and options appear' + - ' as expected.') - paths = {} for lang, translation in self._translations.items(): for path, content in translation.items(): @@ -552,10 +546,23 @@ def _add_empty_translations(self, warnings=None): self._translations[lang][path] = {} for content_type in content_types: if content_type not in self._translations[lang][path]: - if lang == 'default' and default_language_warning not in warnings: - warnings.append(default_language_warning) + missing_warning = self._generate_missing_translation_warning( + lang) + if missing_warning not in warnings: + warnings.append(missing_warning) self._translations[lang][path][content_type] = u"-" + def _generate_missing_translation_warning(self, lang): + if lang == 'default': + return ('\tDefault language not set,' + + ' with missing default translations.' + ' Please consider setting a `default_language` in your' + + ' settings tab to insure questions and options appear' + + ' as expected.') + + return ('\tMissing field translations found for ' + lang + + 'field may not appear as expected') + def _setup_media(self): """ Traverse the survey, find all the media, and put in into the \ diff --git a/pyxform/tests_v1/test_language_warnings.py b/pyxform/tests_v1/test_language_warnings.py index 249c4b2bb..43687faa0 100644 --- a/pyxform/tests_v1/test_language_warnings.py +++ b/pyxform/tests_v1/test_language_warnings.py @@ -53,19 +53,25 @@ def test_label_with_unknown_subtag_should_warn(self): 'do not contain valid machine-readable codes: English (schm). Learn more' in warnings[0]) os.unlink(tmp.name) - def test_no_default_language_should_warn_with_unlabeled_media_tags(self): - # form should test media tag w NO default language set. + def test_no_default_language_should_warn_with_unlabeled_columns(self): survey = self.md_to_pyxform_survey(""" - | survey | | | | | | - | | type | name | label::English (en) | choice_filter | media::image| - | | select_one opts | opt | My opt | fake = 1 | opt1.jpg | - | choices | | | | | | - | | list_name | name | label | fake | | - | | opts | opt1 | Opt1 | 1 | | - | | opts | opt2 | Opt2 | 1 | | - | settings| | | | | | - | | form_title | form_id | public_key | | | - | | opts_form | abc1 | | | | + | survey | | | | | + | | type | name | label::English (en) | media::image| + | | integer | nums | How many nums? | opt1.jpg | + """) + + warnings = [] + tmp = tempfile.NamedTemporaryFile(suffix='.xml', delete=False) + tmp.close() + survey.print_xform_to_file(tmp.name, warnings=warnings) + self.assertTrue(len(warnings) == 1) + os.unlink(tmp.name) + + def test_language_lacking_translation_should_warn(self): + survey = self.md_to_pyxform_survey(""" + | survey | | | | | + | | type | name | label::English (en) | media::image::French (fr)| + | | integer | nums | How many nums? | opt1.jpg | """) warnings = []