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); } } } } }
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); }