auto import from //depot/cupcake/@135843
diff --git a/tools/localize/XLIFFFile.h b/tools/localize/XLIFFFile.h
new file mode 100644
index 0000000..a93d479
--- /dev/null
+++ b/tools/localize/XLIFFFile.h
@@ -0,0 +1,98 @@
+#ifndef XLIFF_FILE_H
+#define XLIFF_FILE_H
+
+#include "Values.h"
+
+#include "Configuration.h"
+
+#include <set>
+
+using namespace std;
+
+extern const XMLNamespaceMap XLIFF_NAMESPACES;
+
+extern const char*const XLIFF_XMLNS;
+
+struct Stats
+{
+    string config;
+    size_t files;
+    size_t toBeTranslated;
+    size_t noComments;
+    size_t totalStrings;
+};
+
+struct TransUnit {
+    string id;
+    StringResource source;
+    StringResource target;
+    StringResource altSource;
+    StringResource altTarget;
+    string rejectComment;
+};
+
+class XLIFFFile
+{
+public:
+    static XLIFFFile* Parse(const string& filename);
+    static XLIFFFile* Create(const Configuration& sourceConfig, const Configuration& targetConfig,
+                                const string& currentVersion);
+    ~XLIFFFile();
+
+    inline const Configuration& SourceConfig() const                { return m_sourceConfig; }
+    inline const Configuration& TargetConfig() const                { return m_targetConfig; }
+
+    inline const string& CurrentVersion() const                     { return m_currentVersion; }
+    inline const string& OldVersion() const                         { return m_oldVersion; }
+
+    set<string> Files() const;
+
+    void AddStringResource(const StringResource& res);
+    inline set<StringResource> const& GetStringResources() const { return m_strings; }
+    bool FindStringResource(const string& filename, int version, bool source);
+
+    void Filter(bool (*func)(const string&,const TransUnit&,void*), void* cookie);
+    void Map(void (*func)(const string&,TransUnit*,void*), void* cookie);
+
+    TransUnit* EditTransUnit(const string& file, const string& id);
+
+    // exports this file as a n XMLNode, you own this object
+    XMLNode* ToXMLNode() const;
+
+    // writes the ValuesFile out to a string in the canonical format (i.e. writes the contents of
+    // ToXMLNode()).
+    string ToString() const;
+
+    Stats GetStats(const string& config) const;
+
+private:
+    struct File {
+        int Compare(const File& that) const;
+
+        inline bool operator<(const File& that) const { return Compare(that) < 0; }
+        inline bool operator<=(const File& that) const { return Compare(that) <= 0; }
+        inline bool operator==(const File& that) const { return Compare(that) == 0; }
+        inline bool operator!=(const File& that) const { return Compare(that) != 0; }
+        inline bool operator>=(const File& that) const { return Compare(that) >= 0; }
+        inline bool operator>(const File& that) const { return Compare(that) > 0; }
+
+        string filename;
+        vector<TransUnit> transUnits;
+    };
+
+    XLIFFFile();
+    StringResource* find_string_res(TransUnit& g, const StringResource& str);
+    
+    Configuration m_sourceConfig;
+    Configuration m_targetConfig;
+
+    string m_currentVersion;
+    string m_oldVersion;
+
+    set<StringResource> m_strings;
+    vector<File> m_files;
+};
+
+int convert_html_to_xliff(const XMLNode* original, const string& name, XMLNode* addTo, int* phID);
+
+#endif // XLIFF_FILE_H