예제 #1
0
        static IResourceReader GetReader(Stream stream, string name, bool useSourcePath, Options options)
        {
            string format = Path.GetExtension(name);

            switch (format.ToLower(System.Globalization.CultureInfo.InvariantCulture))
            {
            case ".po":
            case ".pot":
                return(new PoResourceReader(stream, options));

            case ".isl":
                return(new IslResourceReader(stream, options));

            /* this version has been specialized for use converting between '.resx'
             * and '.po' files, other formats will now fail!
             * case ".txt":
             * case ".text":
             *  return new TxtResourceReader (stream);
             * case ".resources":
             *  return new ResourceReader (stream);*/
            case ".resx":
                IResourceReader reader = new ResXResourceReader(stream);

                if (useSourcePath)       // only possible on 2.0 profile, or higher
                {
                    PropertyInfo p = reader.GetType().GetProperty("BasePath",
                                                                  BindingFlags.Public | BindingFlags.Instance);
                    if (p != null && p.CanWrite)
                    {
                        p.SetValue(reader, Path.GetDirectoryName(name), null);
                    }
                }
                ((ResXResourceReader)reader).UseResXDataNodes = true;
                return(reader);

            default:
                throw new Exception("Unknown format in file " + name);
            }
        }