diff --git a/babel/core.py b/babel/core.py index 07b2ad0c7..aa4c25865 100644 --- a/babel/core.py +++ b/babel/core.py @@ -364,7 +364,7 @@ def parse( # C/POSIX is not a CLDR language. Same mapping default_locale uses. posix_stem = identifier.partition(".")[0] if posix_stem.upper() in {"C", "POSIX"}: - identifier = "en_US_POSIX" + identifier = sep.join(("en", "US", "POSIX")) parts = parse_locale(identifier, sep=sep) input_id = get_locale_identifier(parts) diff --git a/tests/test_core.py b/tests/test_core.py index 445ed67a8..608401a1e 100644 --- a/tests/test_core.py +++ b/tests/test_core.py @@ -56,10 +56,16 @@ def test_default_locale(monkeypatch): assert default_locale() == 'en_US_POSIX' -def test_locale_parse_accepts_c_and_posix(): +@pytest.mark.parametrize('sep', ['_', '-']) +@pytest.mark.parametrize('value', ['C', 'c', 'POSIX', 'posix', 'C.UTF-8', 'C.utf8', 'POSIX.UTF-8']) +def test_locale_parse_accepts_c_and_posix(value, sep): expected = Locale.parse('en_US_POSIX') - for value in ['C', 'c', 'POSIX', 'posix', 'C.UTF-8', 'C.utf8', 'POSIX.UTF-8']: - assert Locale.parse(value) == expected + assert Locale.parse(value, sep=sep) == expected + + +@pytest.mark.parametrize('value', ['C', 'POSIX']) +def test_locale_negotiate_c_and_posix_custom_separator(value): + assert Locale.negotiate([value], [value], sep='-') == Locale.parse('en_US_POSIX') def test_default_locale_multiple_args(monkeypatch):