Exemplo n.º 1
0
        public void AvailableLanguages_AreRefreshed_WhenNewLanguageNode_IsAdded()
        {
            LanguageRoot dutch = new LanguageRoot();

            dutch.LanguageCode = "nl-NL";
            dutch.AddTo(root);
            engine.Persister.Save(dutch);

            ILanguageGateway gateway = engine.Resolve <ILanguageGateway>();

            Assert.That(gateway.GetAvailableLanguages().Count(), Is.EqualTo(4));
        }
Exemplo n.º 2
0
        /// <summary>
        /// Returns the best matching start page for the given locale names
        /// </summary>
        /// <param name="currentPage"></param>
        /// <param name="names">array</param>
        /// <returns></returns>
        public static LanguageRoot GetFirstMatchingLanguageRootOrDefault(ContentItem currentPage, IEnumerable <string> names)
        {
#if DEBUG_T
            Stopwatch timer = new Stopwatch();
            timer.Start();
#endif
            LanguageRoot translation  = null;
            var          translations = CmsFinder.FindTranslationsOf(currentPage).ToArray();
            if (translations.Length == 1)
            {
                translation = translations.First(); // no options, why check
            }
            else if (names != null)
            {
                var locales = GetLocalesFromUserLanguages(names).ToArray();

                // match full locales list
                translation = translations.FirstOrDefault(t => locales.Any(l => t.LanguageCode.StartsWith(l, StringComparison.InvariantCultureIgnoreCase)))
                              ?? translations.FirstOrDefault(t => locales.Any(l => t.LanguageCode.StartsWith(l.Substring(0, 2), StringComparison.InvariantCultureIgnoreCase)));
            }

            if (translation == null)
            {
                translation = translations.FirstOrDefault(); // TODO use configured default, otherwise assume first by sort order
            }
            if (translation == null)
            {
                throw new Exception("no translations found for " + currentPage);
            }
#if DEBUG_T
            timer.Stop();
            locales = locales ?? GetLocalesFromUserLanguages(names).ToArray(); // can contain en-us, en, de-de etc.
            var codes = String.Join(", ", translations.Select(t => t.LanguageCode));
            Logger.InfoFormat("{3} ms LanguageRoot from locales {0} and translations {1} => {2}",
                              String.Join(", ", locales), codes, translation, timer.Elapsed.TotalMilliseconds);
#endif
            return(translation);
        }
Exemplo n.º 3
0
        public void LanguageKey_IsReused_ForTranslations_OfAPage_AndLivesAcrossCalls()
        {
            using (engine.Persister)
            {
                ContentItem englishSub = CreateOneItem <Items.TranslatedPage>(0, "english1", english);
                engine.Persister.Save(englishSub);

                ContentItem swedishSub = CreateOneItem <Items.TranslatedPage>(0, "swedish1", swedish);

                using (new LanguageKeyScope(engine, englishSub.ID))
                {
                    engine.Persister.Save(swedishSub);
                }
            }

            using (engine.Persister)
            {
                english = engine.Persister.Get <LanguageRoot>(english.ID);
                swedish = engine.Persister.Get <LanguageRoot>(swedish.ID);
                ContentItem englishSub = english.Children[english.Children.Count - 1];
                ContentItem swedishSub = swedish.Children[swedish.Children.Count - 1];
                Assert.That(swedishSub.TranslationKey, Is.EqualTo(englishSub.TranslationKey));
            }
        }