private bool TryAddReader(TranslationReaderCollection collection, string filePath, ITranslationReader reader)
        {
            string fileName = Path.GetFileNameWithoutExtension(filePath);

            CultureInfo culture;

            if (CultureInfoParser.TryParse(fileName, out culture))
            {
                collection.Add(culture, reader);
                return(true);
            }

            // Everything before last '.' use as assembly name; everthing behind last '.' use as culture info.
            string assemblyName = Path.GetFileNameWithoutExtension(fileName);
            string cultureName  = Path.GetExtension(fileName);

            if (cultureName.StartsWith("."))
            {
                cultureName = cultureName.Substring(1);
            }

            if (CultureInfoParser.TryParse(cultureName, out culture))
            {
                collection.Add(culture, assemblyName, reader);
                return(true);
            }

            return(false);
        }
        public void GetText()
        {
            TranslationReaderCollection collection = new TranslationReaderCollection()
                                                     .Add(new CultureInfo("cs-CZ"), new DefaultTranslationReader().Add("Hello, World!", "Ahoj všichni!"));

            ITranslationReaderProvider provider = new GetTextTranslationReaderProvider(
                new EnumerationCultureProvider(new CultureInfo("en-US").ParentsWithSelf()),
                collection
                );


            /// EN ------------------
            ITranslationReader reader;

            Assert.AreEqual(true, provider.TryGetReader(new CultureInfo("en-US"), Assembly.GetExecutingAssembly(), out reader));
            string translatedText;

            Assert.AreEqual(true, reader.TryGet("Hello, World!", out translatedText));
            Assert.AreEqual("Hello, World!", translatedText);

            Assert.AreEqual(true, reader.TryGet("Hello!", out translatedText));
            Assert.AreEqual("Hello!", translatedText);


            /// CS ------------------
            Assert.AreEqual(true, provider.TryGetReader(new CultureInfo("cs-CZ"), Assembly.GetExecutingAssembly(), out reader));
            Assert.AreEqual(true, reader.TryGet("Hello, World!", out translatedText));
            Assert.AreEqual("Ahoj všichni!", translatedText);

            Assert.AreEqual(false, reader.TryGet("Hello!", out translatedText));
            Assert.AreEqual(null, translatedText);
        }
        public void TranslationCollection()
        {
            TranslationReaderCollection collection = new TranslationReaderCollection()
                                                     .Add(new CultureInfo("cs-CZ"), new EmptyTranslationReader());

            ITranslationReader reader;

            Assert.AreEqual(true, collection.TryGetReader(new CultureInfo("cs-CZ"), Assembly.GetCallingAssembly(), out reader));
            Assert.AreEqual(false, collection.TryGetReader(new CultureInfo("en-US"), Assembly.GetCallingAssembly(), out reader));
        }
        /// <summary>
        /// Creates translation reader provider from directory path.
        /// </summary>
        /// <param name="directoryPath">Path to directory to load readers from.</param>
        /// <returns></returns>
        public ITranslationReaderProvider Create(string directoryPath)
        {
            TranslationReaderCollection result = new TranslationReaderCollection();

            foreach (string filePath in Directory.EnumerateFiles(directoryPath, searchPattern))
            {
                using (FileStream fileStream = new FileStream(filePath, FileMode.Open))
                {
                    ITranslationReader reader = readerFactory.Create(fileStream);
                    TryAddReader(result, filePath, reader);
                }
            }

            return(result);
        }