| // Copyright 2018 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "ash/system/model/locale_model.h" |
| |
| #include "ash/constants/ash_switches.h" |
| #include "base/command_line.h" |
| #include "ui/base/l10n/l10n_util.h" |
| |
| namespace ash { |
| |
| LocaleModel::Observer::~Observer() = default; |
| |
| LocaleModel::LocaleModel() { |
| if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
| switches::kQsShowLocaleTile)) { |
| AddFakeLocale("de"); |
| AddFakeLocale("en-US"); |
| AddFakeLocale("es"); |
| current_locale_iso_code_ = "en-US"; |
| } |
| } |
| |
| LocaleModel::~LocaleModel() = default; |
| |
| void LocaleModel::AddObserver(Observer* observer) { |
| observers_.AddObserver(observer); |
| } |
| |
| void LocaleModel::RemoveObserver(Observer* observer) { |
| observers_.RemoveObserver(observer); |
| } |
| |
| void LocaleModel::SetLocaleList(std::vector<LocaleInfo> locale_list, |
| const std::string& current_locale_iso_code) { |
| locale_list_ = std::move(locale_list); |
| current_locale_iso_code_ = current_locale_iso_code; |
| for (auto& observer : observers_) |
| observer.OnLocaleListSet(); |
| } |
| |
| bool LocaleModel::ShouldShowCurrentLocaleInStatusArea() const { |
| return !current_locale_iso_code_.empty(); |
| } |
| |
| void LocaleModel::AddFakeLocale(const std::string& locale) { |
| LocaleInfo locale_info; |
| locale_info.iso_code = locale; |
| locale_info.display_name = l10n_util::GetDisplayNameForLocale( |
| locale, /*display_locale=*/"en-US", /*is_for_ui=*/true); |
| std::u16string native_display_name = |
| l10n_util::GetDisplayNameForLocale(locale, locale, |
| /*is_for_ui=*/true); |
| if (locale_info.display_name != native_display_name) { |
| locale_info.display_name += u" - " + native_display_name; |
| } |
| locale_list_.push_back(locale_info); |
| } |
| |
| } // namespace ash |