/// <summary>
        /// Load the specified CSV file.
        /// </summary>

        static bool LoadCSV(byte[] bytes, TextAsset asset, bool merge = false)
        {
            if (bytes == null)
            {
                return(false);
            }
            GameByteReader reader = new GameByteReader(bytes);

            // The first line should contain "KEY", followed by languages.
            GameBetterList <string> temp = reader.ReadCSV();

            // There must be at least two columns in a valid CSV file
            if (temp.size < 2)
            {
                return(false);
            }

            // Clear the dictionary
            if (!merge || temp.size - 1 != mLanguage.Length)
            {
                merge = false;
                mDictionary.Clear();
            }

            temp[0]    = "KEY";
            mLanguages = new string[temp.size - 1];
            for (int i = 0; i < mLanguages.Length; ++i)
            {
                mLanguages[i] = temp[i + 1];
            }

            // Read the entire CSV file into memory
            while (temp != null)
            {
                AddCSV(temp, !merge);
                temp = reader.ReadCSV();
            }
            return(true);
        }
        /// <summary>
        /// Set the localization data directly.
        /// </summary>

        public static void Set(string languageName, byte[] bytes)
        {
            GameByteReader reader = new GameByteReader(bytes);

            Set(languageName, reader.ReadDictionary());
        }
        /// <summary>
        /// Load the specified asset and activate the localization.
        /// </summary>

        public static void Load(TextAsset asset)
        {
            GameByteReader reader = new GameByteReader(asset);

            Set(asset.name, reader.ReadDictionary());
        }