public static void Init(string localePath) { defaultService = new Lazy<ILocalizingService>(() => { var poFileWatcher = new PoFileWatcher(localePath); var genericCache = new GenericCache<IDictionary<string, I18NMessage>>(); poFileWatcher.OnChange += (o, e) => genericCache.Reset(new ChangeListParser(e.ChangeList).GetChangedCultures()); poFileWatcher.Begin(); return new LocalizingService(genericCache, localePath, new I18NPoFileParser()); }, true); }
public void should_reset_cache_when_po_file_changed() { var parser = new Mock<IPoFileParser>(); var expectedI18NMessages = new[] { new I18NMessage("translation key", "translation key") }; var localeEnUsMessagesPo = Path.Combine(TestHelper.GetRuntimePath(),"locale\\en-US\\messages.po"); parser.Setup(p => p.Parse(localeEnUsMessagesPo)).Returns(expectedI18NMessages.ToDictionary(d => d.MsgId)); var i18NMessagesCache = new GenericCache<IDictionary<string, I18NMessage>>(); var actualI18NMessages = i18NMessagesCache.Get("en-US", () => parser.Object.Parse(localeEnUsMessagesPo)); VerifyResult(expectedI18NMessages, actualI18NMessages); expectedI18NMessages = new[] { new I18NMessage("translation key", "new translation") }; parser.Setup(p => p.Parse(localeEnUsMessagesPo)).Returns(expectedI18NMessages.ToDictionary(d => d.MsgId)); string[] changedCultures = {"en-US"}; i18NMessagesCache.Reset(changedCultures); actualI18NMessages = i18NMessagesCache.Get("en-US", () => parser.Object.Parse(localeEnUsMessagesPo)); VerifyResult(expectedI18NMessages, actualI18NMessages); }