예제 #1
0
        public void GetListOfLanguages(TStringList list)
        {
            string filename, path;
            string langcode;
            int    j;

            list.Clear();

            // Iterate through filesystem
            foreach (string name in System.IO.Directory.EnumerateDirectories(Directory, "*"))
            {
                if (name != "." && name != "..")
                {
                    filename = Directory + name + Path.DirectorySeparatorChar + "LC_MESSAGES" + Path.DirectorySeparatorChar + Domain + ".mo";
                    if (File.Exists(filename))
                    {
                        langcode = name.ToLower();
                        if (list.IndexOf(langcode) == -1)
                        {
                            list.Add(langcode);
                        }
                    }
                }
            }

            // Iterate through embedded files
            for (int i = 0; i < TFileLocator.filelist.Count; i++)
            {
                filename = TFileLocator.basedirectory + TFileLocator.filelist.Strings[i];
                path     = Directory;
                path     = path.ToUpper();
                filename = filename.ToUpper();
                j        = path.Length;
                if (filename.Substring(0, j) == path)
                {
                    path = Path.DirectorySeparatorChar + "LC_MESSAGES" + Path.DirectorySeparatorChar + Domain + ".mo";
                    path = path.ToUpper();
                    if (filename.Substring(filename.Length - path.Length, path.Length) == path)
                    {
                        langcode = filename.Substring(j, filename.Length - path.Length - j).ToLower();
                        langcode = langcode.Substring(0, 3) + langcode.Substring(3).ToUpper();
                        if (list.IndexOf(langcode) == -1)
                        {
                            list.Add(langcode);
                        }
                    }
                }
            }
        }
예제 #2
0
        public static TMoFile GetMoFile(string filename, TDebugLogger DebugLogger)
        {
            Int64 offset, size;

            // Find real filename
            offset = 0;
            size   = 0;
            string realfilename = filename;

            if (filename.StartsWith(basedirectory))
            {
                filename = filename.Substring(basedirectory.Length);
                int idx = filelist.IndexOf(filename);
                if (idx != -1)
                {
                    TEmbeddedFileInfo fi = (TEmbeddedFileInfo)filelist.Objects[idx];
                    realfilename = TGnuGettextInstance.ExecutableFilename;
                    offset       = fi.offset;
                    size         = fi.size;
#if DXGETTEXTDEBUG
                    DebugLogger("Instead of " + filename + ", using " + realfilename + " from offset " + (offset).ToString() + ", size " + (size).ToString());
#endif
                }
            }


#if DXGETTEXTDEBUG
            DebugLogger("Reading .mo data from file ''" + filename + "''");
#endif

            // Find TMoFile object
            TMoFile Result;
            MoFilesCS.AcquireWriterLock(Timeout.Infinite);
            try
            {
                string idxname = realfilename + " //\\ " + (offset).ToString();
                int    idx;
                if (MoFiles.Find(idxname, out idx))
                {
                    Result = (TMoFile)MoFiles.Objects[idx];
                }
                else
                {
                    Result = new TMoFile(realfilename, offset, size, TGnuGettextInstance.UseMemoryMappedFiles);
                    MoFiles.AddObject(idxname, Result);
                }
                Result.Users++;
            }
            finally
            {
                MoFilesCS.ReleaseWriterLock();
            }
            return(Result);
        }