def test_set_locale(self): en = Locale('en') fr = Locale('fr') with self.app.test_request_context('/'): assert get_locale() == en with i18n.set_locale('fr') as new_locale: assert get_locale() == fr assert isinstance(new_locale, Locale) assert new_locale == fr assert get_locale() == en with i18n.set_locale(fr): assert get_locale() == fr with i18n.set_locale(en): assert get_locale() == en assert get_locale() == fr assert get_locale() == en # no request context: no locale set app_ctx = _app_ctx_stack.top self._ctx.pop() self._ctx = None app_ctx.push() with i18n.set_locale(fr): assert get_locale() is None
def test_ensure_request_context(self): en = Locale('en') fr = Locale('fr') # by default, a request context is present is test case setup. first let's # show no new request context is set up and that set_locale works as # advertised app_ctx = _app_ctx_stack.top current_ctx = _request_ctx_stack.top assert current_ctx is not None assert get_locale() == en with i18n.ensure_request_context(): assert current_ctx == _request_ctx_stack.top with i18n.set_locale(fr): assert get_locale() == fr self._ctx.pop() self._ctx = None assert _app_ctx_stack.top is None assert _request_ctx_stack.top is None assert get_locale() is None app_ctx.push() # ensure set_locale() doesn't set up a request context with i18n.set_locale(fr): assert _request_ctx_stack.top is None assert get_locale() is None with i18n.ensure_request_context(): assert _request_ctx_stack.top is not None assert current_ctx != _request_ctx_stack.top assert get_locale() == en with i18n.set_locale(fr): assert get_locale() == fr assert _request_ctx_stack.top is None assert get_locale() is None # test chaining with i18n.ensure_request_context(), i18n.set_locale(fr): assert get_locale() == fr
def test_get_template_i18n(self): template_path = '/myfile.txt' en = Locale('en') result = i18n.get_template_i18n(template_path, locale=en) self.assertIn('/myfile.en.txt', result) self.assertIn('/myfile.txt', result) en = Locale('en_US') result = i18n.get_template_i18n(template_path, locale=en) self.assertIn('/myfile.en_US.txt', result) self.assertIn('/myfile.txt', result) with i18n.set_locale('fr'): result = i18n.get_template_i18n(template_path, get_locale()) self.assertIn('/myfile.fr.txt', result) self.assertIn('/myfile.txt', result)