Commit a5dc5abb authored by Varun Varada's avatar Varun Varada Committed by Commit Bot

Add en-GB-oxendict locale

This commit adds the Oxford English Dictionary variant of the
British English (en-GB) locale to allow for strict spellchecking
when using the corresponding locale (en-GB-oxendict) as distinguished
from the generic British English (en-GB) locale.

Bug: chromium:1064659
Change-Id: Ia625a3566b7d89475c4853562ebbdb3afe7f9ffc
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2140610
Commit-Queue: Guillaume Jenkins <gujen@google.com>
Reviewed-by: default avataredchin <edchin@chromium.org>
Reviewed-by: default avatarGuillaume Jenkins <gujen@google.com>
Reviewed-by: default avataranthonyvd <anthonyvd@chromium.org>
Reviewed-by: default avatarAvi Drissman <avi@chromium.org>
Reviewed-by: default avatarRouslan Solomakhin <rouslan@chromium.org>
Reviewed-by: default avatarFrank Tang <ftang@chromium.org>
Cr-Commit-Position: refs/heads/master@{#784165}
parent 8f39775a
......@@ -1009,7 +1009,7 @@ deps = {
},
'src/third_party/hunspell_dictionaries':
Var('chromium_git') + '/chromium/deps/hunspell_dictionaries.git' + '@' + '6fdad5388130757e1efb58a14b8e7f9494625691',
Var('chromium_git') + '/chromium/deps/hunspell_dictionaries.git' + '@' + '18e09b9197a3b1d771c077c530d1a4ebad04c167',
'src/third_party/icu':
Var('chromium_git') + '/chromium/deps/icu.git' + '@' + '79326efe26e5440f530963704c3c0ff965b3a4ac',
......
......@@ -28,13 +28,29 @@ struct LocaleUIFallbackPair {
// Note that no (Norwegian) is an alias, and should fallback to Norwegian
// Bokmål (nb)
const LocaleUIFallbackPair kLocaleUIFallbackTable[] = {
{"en", "en-US"}, {"en-AU", "en-GB"}, {"en-CA", "en-GB"},
{"en-IN", "en-GB"}, {"en-NZ", "en-GB"}, {"en-ZA", "en-GB"},
{"es-AR", "es-419"}, {"es-CL", "es-419"}, {"es-CO", "es-419"},
{"es-CR", "es-419"}, {"es-HN", "es-419"}, {"es-MX", "es-419"},
{"es-PE", "es-419"}, {"es-US", "es-419"}, {"es-UY", "es-419"},
{"es-VE", "es-419"}, {"it-CH", "it"}, {"no", "nb"},
{"pt", "pt-PT"}};
// clang-format off
{"en", "en-US"},
{"en-AU", "en-GB"},
{"en-CA", "en-GB"},
{"en-GB-oxendict", "en-GB"},
{"en-IN", "en-GB"},
{"en-NZ", "en-GB"},
{"en-ZA", "en-GB"},
{"es-AR", "es-419"},
{"es-CL", "es-419"},
{"es-CO", "es-419"},
{"es-CR", "es-419"},
{"es-HN", "es-419"},
{"es-MX", "es-419"},
{"es-PE", "es-419"},
{"es-US", "es-419"},
{"es-UY", "es-419"},
{"es-VE", "es-419"},
{"it-CH", "it"},
{"no", "nb"},
{"pt", "pt-PT"}
// clang-format on
};
bool LocaleCompare(const LocaleUIFallbackPair& p1, const std::string& p2) {
return p1.chosen_locale < p2;
......
......@@ -78,7 +78,7 @@ TEST_F(LocaleUtilTest, ContainsSameBaseLanguage) {
EXPECT_EQ(true, language::ContainsSameBaseLanguage(list, "fr-FR"));
// Multiple elements, no match.
list = {"en-US", "es-AR", "en-UK"};
list = {"en-US", "es-AR", "en-GB"};
EXPECT_EQ(false, language::ContainsSameBaseLanguage(list, "fr-FR"));
// Multiple elements, with match.
......@@ -187,6 +187,11 @@ TEST_F(LocaleUtilTest, ConvertToActualUILocale) {
EXPECT_TRUE(is_ui);
EXPECT_EQ("en-GB", locale);
locale = "en-GB-oxendict";
is_ui = language::ConvertToActualUILocale(&locale);
EXPECT_TRUE(is_ui);
EXPECT_EQ("en-GB", locale);
locale = "en-IN";
is_ui = language::ConvertToActualUILocale(&locale);
EXPECT_TRUE(is_ui);
......
......@@ -29,6 +29,7 @@ struct LanguageVersion {
static constexpr LanguageRegion kSupportedSpellCheckerLanguages[] = {
// Several languages are not to be included in the spellchecker list:
// th-TH, vi-VI.
// clang-format off
{"af", "af-ZA"},
{"bg", "bg-BG"},
{"ca", "ca-ES"},
......@@ -40,6 +41,7 @@ static constexpr LanguageRegion kSupportedSpellCheckerLanguages[] = {
{"en-AU", "en-AU"},
{"en-CA", "en-CA"},
{"en-GB", "en-GB"},
{"en-GB-oxendict", "en-GB-oxendict"},
{"en-US", "en-US"},
{"es", "es-ES"},
{"es-419", "es-ES"},
......@@ -79,6 +81,7 @@ static constexpr LanguageRegion kSupportedSpellCheckerLanguages[] = {
{"tr", "tr-TR"},
{"uk", "uk-UA"},
{"vi", "vi-VN"},
// clang-format on
};
bool IsValidRegion(const std::string& region) {
......@@ -136,6 +139,9 @@ base::FilePath GetVersionedFileName(base::StringPiece input_language,
// March 2020: Update uk-UA dictionary from upstream.
{"uk-UA", "-4-0"},
// June 2020: Add the en-GB-oxendict dictionary.
{"en-GB-oxendict", "-9-0"},
};
// Generate the bdict file name using default version string or special
......
......@@ -11,6 +11,7 @@
#include <vector>
#include "base/json/json_reader.h"
#include "base/strings/utf_string_conversions.h"
#include "base/test/scoped_feature_list.h"
#include "base/test/test_timeouts.h"
#include "base/values.h"
......@@ -26,6 +27,7 @@
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/l10n/l10n_util_collator.h"
namespace {
......@@ -138,11 +140,11 @@ class TranslatePrefsTest : public testing::Test {
// Returns a vector of display names from the elements of the given
// |language_list|.
std::vector<std::string> ExtractDisplayNames(
std::vector<base::string16> ExtractDisplayNames(
const std::vector<TranslateLanguageInfo>& language_list) const {
std::vector<std::string> output;
std::vector<base::string16> output;
for (const auto& item : language_list) {
output.push_back(item.display_name);
output.push_back(base::UTF8ToUTF16(item.display_name));
}
return output;
}
......@@ -362,10 +364,11 @@ TEST_F(TranslatePrefsTest, GetLanguageInfoListOutput) {
language_list.clear();
TranslatePrefs::GetLanguageInfoList("en-US", true /* translate_enabled */,
&language_list);
const std::vector<std::string> display_names =
const std::vector<base::string16> display_names =
ExtractDisplayNames(language_list);
std::vector<std::string> sorted(display_names);
std::sort(sorted.begin(), sorted.end());
std::vector<base::string16> sorted(display_names);
l10n_util::SortVectorWithStringKey("en-US", &sorted, false);
EXPECT_THAT(display_names, ElementsAreArray(sorted));
}
......
......@@ -87,7 +87,9 @@ source_set("unit_tests") {
"//ios/chrome/browser/translate",
"//ios/chrome/browser/ui/settings/language",
"//ios/chrome/browser/ui/settings/language/cells",
"//testing/gmock",
"//testing/gtest",
"//ui/base:base",
]
}
......
......@@ -23,8 +23,10 @@
#import "ios/chrome/browser/ui/settings/language/cells/language_item.h"
#import "ios/chrome/browser/ui/settings/language/language_settings_consumer.h"
#import "ios/chrome/browser/ui/settings/language/language_settings_mediator.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest_mac.h"
#include "testing/platform_test.h"
#include "ui/base/l10n/l10n_util_collator.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
......@@ -35,18 +37,19 @@ using language::prefs::kAcceptLanguages;
using sync_preferences::PrefServiceMockFactory;
using sync_preferences::PrefServiceSyncable;
using user_prefs::PrefRegistrySyncable;
using ::testing::ElementsAreArray;
namespace {
// Constant for timeout while waiting for asynchronous sync operations.
const NSTimeInterval kSyncOperationTimeout = 10.0;
std::vector<std::string> ExtractDisplayNamesFromLanguageItems(
std::vector<base::string16> ExtractDisplayNamesFromLanguageItems(
NSArray<LanguageItem*>* language_items) {
__block std::vector<std::string> output;
__block std::vector<base::string16> output;
[language_items enumerateObjectsUsingBlock:^(LanguageItem* item,
NSUInteger index, BOOL* stop) {
output.push_back(base::SysNSStringToUTF8(item.text));
output.push_back(base::SysNSStringToUTF16(item.text));
}];
return output;
}
......@@ -182,9 +185,11 @@ TEST_F(LanguageSettingsMediatorTest, TestPrefsChanged) {
// and excludes languages already in the accept languages list.
TEST_F(LanguageSettingsMediatorTest, TestSupportedLanguagesItems) {
NSArray<LanguageItem*>* language_items = [mediator() supportedLanguagesItems];
std::vector<std::string> display_names =
std::vector<base::string16> display_names =
ExtractDisplayNamesFromLanguageItems(language_items);
EXPECT_TRUE(std::is_sorted(display_names.begin(), display_names.end()));
std::vector<base::string16> sorted(display_names);
l10n_util::SortVectorWithStringKey("en-US", &sorted, false);
EXPECT_THAT(display_names, ElementsAreArray(sorted));
std::vector<std::string> language_codes =
ExtractLanguageCodesFromLanguageItems(language_items);
......
......@@ -66,7 +66,7 @@ static const char* const kAcceptLanguageList[] = {
"bs", // Bosnian
"ca", // Catalan
"ceb", // Cebuano
"ckb", // Kurdish (Arabci), Sorani
"ckb", // Kurdish (Arabic), Sorani
"co", // Corsican
"cs", // Czech
"cy", // Welsh
......@@ -81,6 +81,7 @@ static const char* const kAcceptLanguageList[] = {
"en-AU", // English (Australia)
"en-CA", // English (Canada)
"en-GB", // English (UK)
"en-GB-oxendict", // English (UK, OED spelling)
"en-IN", // English (India)
"en-NZ", // English (New Zealand)
"en-US", // English (US)
......@@ -383,18 +384,15 @@ bool CheckAndResolveLocale(const std::string& locale,
tmp_locale.append("-CN");
}
} else if (base::LowerCaseEqualsASCII(lang, "en")) {
// Map Australian, Canadian, Indian, New Zealand and South African
// English to British English for now.
// Map Liberian and Filipino English to US English, and everything
// else to British English.
// TODO(jungshik): en-CA may have to change sides once
// we have OS locale separate from app locale (Chrome's UI language).
if (base::LowerCaseEqualsASCII(region, "au") ||
base::LowerCaseEqualsASCII(region, "ca") ||
base::LowerCaseEqualsASCII(region, "in") ||
base::LowerCaseEqualsASCII(region, "nz") ||
base::LowerCaseEqualsASCII(region, "za")) {
tmp_locale.append("-GB");
} else {
if (base::LowerCaseEqualsASCII(region, "lr") ||
base::LowerCaseEqualsASCII(region, "ph")) {
tmp_locale.append("-US");
} else {
tmp_locale.append("-GB");
}
}
if (IsLocaleAvailable(tmp_locale)) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment