// Copyright (c) 2010 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// This file declares a helper class for selecting a supported language from a
// set of candidates.
#ifndef CHROME_INSTALLER_UTIL_LANGUAGE_SELECTOR_H_
#define CHROME_INSTALLER_UTIL_LANGUAGE_SELECTOR_H_
#include <string>
#include <vector>
#include "base/basictypes.h"
namespace installer {
// A helper class for selecting a supported language from a set of candidates.
// By default, the candidates are retrieved from the operating system.
class LanguageSelector {
public:
// Default constructor will select from the set of languages supported by the
// operating system.
LanguageSelector();
// Constructor for testing purposes.
explicit LanguageSelector(const std::vector<std::wstring>& candidates);
~LanguageSelector();
// The offset of the matched language (i.e., IDS_L10N_OFFSET_*).
int offset() const { return offset_; }
// The full name of the candidate language for which a match was found.
const std::wstring& matched_candidate() const { return matched_candidate_; }
// The name of the selected translation.
std::wstring selected_translation() const { return GetLanguageName(offset_); }
// Returns the name of a translation given its offset.
static std::wstring GetLanguageName(int offset);
private:
typedef bool (*SelectPred_Fn)(const std::wstring&, int*);
static bool SelectIf(const std::vector<std::wstring>& candidates,
SelectPred_Fn select_predicate,
std::wstring* matched_name, int* matched_offset);
void DoSelect(const std::vector<std::wstring>& candidates);
std::wstring matched_candidate_;
int offset_;
DISALLOW_COPY_AND_ASSIGN(LanguageSelector);
};
} // namespace installer.
#endif // CHROME_INSTALLER_UTIL_LANGUAGE_SELECTOR_H_