public bool TryGetReader(CultureInfo culture, Assembly assembly, out ITranslationReader reader) { Ensure.NotNull(culture, "culture"); Ensure.NotNull(assembly, "assembly"); string assemblyName = GetAssemblyName(assembly); IEnumerable <ITranslationReader> assemblyReaders = FindReaders(culture, assemblyName); IEnumerable <ITranslationReader> globalReaders = FindReaders(culture, String.Empty); if (assemblyReaders != null || globalReaders != null) { if (assemblyReaders == null) { reader = new EnumerationTranslationReader(globalReaders); } else if (globalReaders == null) { reader = new EnumerationTranslationReader(assemblyReaders); } else { reader = new EnumerationTranslationReader(Enumerable.Concat(assemblyReaders, globalReaders)); } return(true); } reader = null; return(false); }
public bool TryGetReader(CultureInfo culture, Assembly assembly, out ITranslationReader reader) { IEnumerable <CultureInfo> defaultCultures = defaultCultureProvider.GetCulture(); if (defaultCultures.Contains(culture)) { reader = EmptyTranslationReader.SourceAsTranslated; return(true); } return(readerProvider.TryGetReader(culture, assembly, 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); }
public void TranslateTextUsingL() { PlainTextTranslationReaderFactory factory = new PlainTextTranslationReaderFactory(); using (MemoryStream fileContent = new MemoryStream()) using (TextWriter writer = new StreamWriter(fileContent)) { writer.WriteLine("Hello, World!=Ahoj světe!"); writer.WriteLine("Character '\\=' means 'equal'=Znak '\\=' znamená 'rovnost'"); writer.Flush(); fileContent.Seek(0, SeekOrigin.Begin); ITranslationReader reader = factory.Create(fileContent); TranslationAdapter adapter = new TranslationAdapter(new DefaultCultureProvider(), new TranslationReaderCollection().Add(new CultureInfo("cs"), reader)); Translate.SetHandler(adapter.Translate); Assert.AreEqual("Ahoj světe!", (L)"Hello, World!"); } }
public void PlainTextReaderFactory() { PlainTextTranslationReaderFactory factory = new PlainTextTranslationReaderFactory(); using (MemoryStream fileContent = new MemoryStream()) using (TextWriter writer = new StreamWriter(fileContent)) { writer.WriteLine("Hello, World!=Ahoj světe!"); writer.WriteLine("Character '\\=' means 'equal'=Znak '\\=' znamená 'rovnost'"); writer.Flush(); fileContent.Seek(0, SeekOrigin.Begin); ITranslationReader reader = factory.Create(fileContent); string translatedText; Assert.AreEqual(true, reader.TryGet("Hello, World!", out translatedText)); Assert.AreEqual("Ahoj světe!", translatedText); Assert.AreEqual(true, reader.TryGet("Character '\\=' means 'equal'", out translatedText)); Assert.AreEqual("Znak '\\=' znamená 'rovnost'", translatedText); } }
public static async Task <IActionResult> Run( [HttpTrigger(AuthorizationLevel.Function, "get", Route = "translation/{lang}/{resourceGroup}_{resource}")] HttpRequest req, string lang, string resourceGroup, string resource, ILogger log) { log.LogInformation($"C# HTTP trigger function processed a request. Requested language: {lang}, resource group: {resourceGroup}, resource: {resource}"); try { // Load configurations string storageConnString = Environment.GetEnvironmentVariable("AzureWebJobsStorage"); string langFilesContainerName = Environment.GetEnvironmentVariable("LanaguageFilesContainer"); // Get the blob reader and get the required translation file. TranslatorFactory translatorFactory = new TranslatorFactory(); IBlobReader blobReader = translatorFactory.GetBlobReader(); BlobDownloadInfo languageFile = await blobReader.ReadBlobAsync(storageConnString, langFilesContainerName, $"{lang}.xml"); if (languageFile != null) { // Read the requested resource from the translation file ITranslationReader translationReader = translatorFactory.GetTranslationReader(); string result = translationReader.ReadResource(lang, resourceGroup, resource, log, languageFile.Content); if (!string.IsNullOrEmpty(result)) { return(new OkObjectResult(result)); } return(new BadRequestObjectResult("Requested resource does not exist")); } log.LogInformation("Translations don't exist for the language"); return(new BadRequestObjectResult("Translations don't exist for the language")); } catch (Exception e) { log.LogError(e, "Unexpected error"); return(new BadRequestResult()); } }
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); }
/// <summary> /// Adds <paramref name="reader"/> for <paramref name="culture"/> and <paramref name="assembly"/>. /// </summary> /// <param name="culture">Culture to add <paramref name="reader"/> for.</param> /// <param name="assembly">Assembly to add <paramref name="reader"/> for.</param> /// <param name="reader">Translation reader.</param> /// <returns>Self (for fluency).</returns> public TranslationReaderCollection Add(CultureInfo culture, Assembly assembly, ITranslationReader reader) { Ensure.NotNull(culture, "culture"); Ensure.NotNull(assembly, "assembly"); string assemblyName = GetAssemblyName(assembly); Add(culture, assemblyName, reader); return(this); }
/// <summary> /// Adds <paramref name="reader"/> for <paramref name="culture"/>. /// </summary> /// <param name="culture">Culture to add <paramref name="reader"/> for.</param> /// <param name="reader">Translation reader.</param> /// <returns>Self (for fluency).</returns> public TranslationReaderCollection Add(CultureInfo culture, ITranslationReader reader) { Add(culture, String.Empty, reader); return(this); }
/// <summary> /// Adds <paramref name="reader"/> for <paramref name="culture"/> and <paramref name="assemblyName"/>. /// </summary> /// <param name="culture">Culture to add <paramref name="reader"/> for.</param> /// <param name="assemblyName">Name of the assembly to add <paramref name="reader"/> for.</param> /// <param name="reader">Translation reader.</param> /// <returns>Self (for fluency).</returns> public TranslationReaderCollection Add(CultureInfo culture, string assemblyName, ITranslationReader reader) { Ensure.NotNull(culture, "culture"); Ensure.NotNull(reader, "reader"); Dictionary <string, List <ITranslationReader> > cultureReaders; if (!storage.TryGetValue(culture, out cultureReaders)) { storage[culture] = cultureReaders = new Dictionary <string, List <ITranslationReader> >(); } List <ITranslationReader> assemblyReaders; if (!cultureReaders.TryGetValue(assemblyName, out assemblyReaders)) { cultureReaders[assemblyName] = assemblyReaders = new List <ITranslationReader>(); } assemblyReaders.Add(reader); return(this); }