#pragma once
/************************************************************************
    MeOS - Orienteering Software
    Copyright (C) 2009-2011 Melin Software HB
    
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.

    Melin Software HB - software@melin.nu - www.melin.nu
    Stigbergsvägen 7, SE-75242 UPPSALA, Sweden
    
************************************************************************/
#include <map>
#include <set>
#include <string>
#include <vector>

class LocalizerImpl
{
  string language;
  map<string, string> table;
  set<string> unknown;
  void loadTable(const vector<string> &raw, const string &language);

public:

  const string &translate(const string &str);
  
  void saveUnknown(const string &file);
  void saveTable(const string &file);
  void loadTable(const string &file, const string &language);
  void loadTable(int resource, const string &language);

  void clear();
  LocalizerImpl(void);
  ~LocalizerImpl(void);
};

class Localizer {
public:
  bool owning;
  Localizer *user;

  LocalizerImpl *impl;  

  /** Translate string */
  const string &tl(const string &str) 
    {return impl->translate(str);}
  
  void set(Localizer &li);

  Localizer();
  ~Localizer();
};

extern Localizer lang;