From: Gert D. <dri...@us...> - 2003-11-19 20:07:07
|
Update of /cvsroot/nant/nant/src/NAnt.DotNet/Tasks In directory sc8-pr-cvs1:/tmp/cvs-serv5979 Modified Files: CompilerBase.cs Log Message: fixed generated resource name for localized resources (resource name should contain name of the culture, eg. WindowsApplication1.Form1.nl-BE.resources instead of WindowsApplication1.Form1.resources) code formatting updates Index: CompilerBase.cs =================================================================== RCS file: /cvsroot/nant/nant/src/NAnt.DotNet/Tasks/CompilerBase.cs,v retrieving revision 1.48 retrieving revision 1.49 diff -C2 -d -r1.48 -r1.49 *** CompilerBase.cs 15 Nov 2003 14:17:59 -0000 1.48 --- CompilerBase.cs 19 Nov 2003 20:07:04 -0000 1.49 *************** *** 371,375 **** // compile resources foreach (ResourceFileSet resources in ResourcesList) { - // Resx args foreach (string fileName in resources.ResxFiles.FileNames) { --- 371,374 ---- *************** *** 381,386 **** } ! string actualFileName = Path.GetFileNameWithoutExtension(fileName); ! string manifestResourceName = Path.ChangeExtension(Path.GetFileName(fileName), ".resources" ); // cater for asax/aspx special cases ... --- 380,385 ---- } ! string actualFileName = Path.GetFileNameWithoutExtension(fileName); ! string manifestResourceName = Path.ChangeExtension(Path.GetFileName(fileName), ".resources"); // cater for asax/aspx special cases ... *************** *** 393,402 **** } ! if ( resourceLinkage != null && !resourceLinkage.HasClassName ) { resourceLinkage.ClassName = actualFileName; } if (resourceLinkage != null && resourceLinkage.IsValid) { ! manifestResourceName = manifestResourceName.Replace(actualFileName, resourceLinkage.ToString()); } --- 392,402 ---- } ! if (resourceLinkage != null && !resourceLinkage.HasClassName) { resourceLinkage.ClassName = actualFileName; } if (resourceLinkage != null && resourceLinkage.IsValid) { ! manifestResourceName = manifestResourceName.Replace( ! actualFileName, resourceLinkage.ToString()); } *************** *** 405,440 **** } ! string tmpResourcePath = fileName.Replace( Path.GetFileName(fileName), manifestResourceName ); ! compiledResourceFiles.Add( tmpResourcePath ); // compile to a temp .resources file ! CompileResxResource( fileName, tmpResourcePath); ! // Check for internationalised resource files. ! string culture = ""; ! if ( ContainsCulture( fileName, ref culture )) { ! if (! cultureResources.ContainsKey( culture ) ) { ! cultureResources.Add( culture, new StringCollection() ); } // store resulting .resoures file for later linking ! ((StringCollection)cultureResources[culture]).Add( tmpResourcePath ); } else { - // regular embedded resources string resourceoption = tmpResourcePath + "," + manifestResourceName; // write resource option to response file ! WriteOption(writer, "resource", resourceoption ); } } // create a localised resource dll for each culture name ! foreach (string culture in cultureResources.Keys ) { ! ! string culturedir = Path.GetDirectoryName( Output ) + Path.DirectorySeparatorChar + culture; ! Directory.CreateDirectory( culturedir ); ! string outputFile = Path.Combine( culturedir, Path.GetFileNameWithoutExtension(Output) + ".resources.dll"); ! LinkResourceAssembly( (StringCollection)cultureResources[culture],outputFile, culture ); } --- 405,438 ---- } ! string tmpResourcePath = fileName.Replace(Path.GetFileName(fileName), manifestResourceName); ! compiledResourceFiles.Add(tmpResourcePath); // compile to a temp .resources file ! CompileResxResource(fileName, tmpResourcePath); ! // check if resource is localized ! CultureInfo resourceCulture = GetResourceCulture(fileName); ! if (resourceCulture != null) { ! if (!cultureResources.ContainsKey(resourceCulture.Name)) { ! cultureResources.Add(resourceCulture.Name, new StringCollection()); } // store resulting .resoures file for later linking ! ((StringCollection) cultureResources[resourceCulture.Name]).Add(tmpResourcePath); } else { // regular embedded resources string resourceoption = tmpResourcePath + "," + manifestResourceName; // write resource option to response file ! WriteOption(writer, "resource", resourceoption); } } // create a localised resource dll for each culture name ! foreach (string culture in cultureResources.Keys) { ! string culturedir = Path.GetDirectoryName(Output) + Path.DirectorySeparatorChar + culture; ! Directory.CreateDirectory(culturedir); ! string outputFile = Path.Combine(culturedir, Path.GetFileNameWithoutExtension(Output) + ".resources.dll"); ! LinkResourceAssembly((StringCollection) cultureResources[culture], outputFile, culture); } *************** *** 464,473 **** // call base class to do the work base.ExecuteTask(); - } finally { - // cleanup .resource files ! foreach( string fileName in compiledResourceFiles ) { ! File.Delete( fileName ); } // make sure we delete response file even if an exception is thrown --- 462,469 ---- // call base class to do the work base.ExecuteTask(); } finally { // cleanup .resource files ! foreach (string fileName in compiledResourceFiles) { ! File.Delete(fileName); } // make sure we delete response file even if an exception is thrown *************** *** 572,584 **** /// <summary> ! /// Determines if a given file is a localised resource file. /// </summary> ! /// <param name="resXFile">The resx file path to check for culture info.</param> ! /// <param name="foundCulture">The name of the culture that was located.</param> /// <returns> ! /// <see langword="true" /> if we found a culture name; otherwise, ! /// <see langword="false" />. /// </returns> ! protected bool ContainsCulture(string resXFile, ref string foundCulture) { string noextpath = Path.GetFileNameWithoutExtension(resXFile); int index = noextpath.LastIndexOf('.'); --- 568,580 ---- /// <summary> ! /// Determines the culture associated with a given resource file by ! /// scanning the filename for valid culture names. /// </summary> ! /// <param name="resXFile">The resx file path to check for culture info.</param> /// <returns> ! /// A valid <see cref="CultureInfo" /> instance if the resource is ! /// associated with a specific culture; otherwise, <see langword="null" />. /// </returns> ! protected CultureInfo GetResourceCulture(string resXFile) { string noextpath = Path.GetFileNameWithoutExtension(resXFile); int index = noextpath.LastIndexOf('.'); *************** *** 587,595 **** // check that its in our list of culture names if (CultureNames.Contains(possibleculture)) { ! foundCulture = possibleculture; ! return true; } } ! return false; } --- 583,590 ---- // check that its in our list of culture names if (CultureNames.Contains(possibleculture)) { ! return new CultureInfo(possibleculture); } } ! return null; } *************** *** 603,607 **** /// The namespace/classname of the source file matching the resource. /// </returns> ! public virtual ResourceLinkage PerformSearchForResourceLinkage(TextReader sr){ Regex matchNamespaceRE = NamespaceRegex; Regex matchClassNameRE = ClassNameRegex; --- 598,602 ---- /// The namespace/classname of the source file matching the resource. /// </returns> ! public virtual ResourceLinkage PerformSearchForResourceLinkage(TextReader sr) { Regex matchNamespaceRE = NamespaceRegex; Regex matchClassNameRE = ClassNameRegex; *************** *** 652,660 **** string sourceFile = resxPath.Replace("resx", Extension); ! // check if this is a localised resx file ! string culture = ""; ! if (ContainsCulture(sourceFile, ref culture)) { sourceFile = sourceFile.Replace(string.Format(CultureInfo.InvariantCulture, ! ".{0}", culture), ""); } --- 647,655 ---- string sourceFile = resxPath.Replace("resx", Extension); ! // check if we're dealing with a localized resource ! CultureInfo resourceCulture = GetResourceCulture(resxPath); ! if (resourceCulture != null) { sourceFile = sourceFile.Replace(string.Format(CultureInfo.InvariantCulture, ! ".{0}", resourceCulture.Name), ""); } *************** *** 663,671 **** try { sr = File.OpenText(sourceFile); resourceLinkage = PerformSearchForResourceLinkage(sr); } catch (FileNotFoundException) { // if no matching file, dump out Log(Level.Debug, LogPrefix + "Did not find associated source file for resource {0}.", resxPath); ! return resourceLinkage; } finally { if (sr != null) { --- 658,670 ---- try { + // open matching source file sr = File.OpenText(sourceFile); + // get resource linkage resourceLinkage = PerformSearchForResourceLinkage(sr); + // set resource culture + resourceLinkage.Culture = resourceCulture; } catch (FileNotFoundException) { // if no matching file, dump out Log(Level.Debug, LogPrefix + "Did not find associated source file for resource {0}.", resxPath); ! return null; } finally { if (sr != null) { *************** *** 733,737 **** /// <param name="inputFile"></param> /// <param name="outputFile"></param> ! protected void CompileResxResource(string inputFile, string outputFile ) { ResGenTask resgen = new ResGenTask(); resgen.Project = this.Project; --- 732,736 ---- /// <param name="inputFile"></param> /// <param name="outputFile"></param> ! protected void CompileResxResource(string inputFile, string outputFile) { ResGenTask resgen = new ResGenTask(); resgen.Project = this.Project; *************** *** 769,772 **** --- 768,772 ---- private string _namespaceName; private string _className; + private CultureInfo _culture; #endregion Private Instance Fields *************** *** 782,786 **** public ResourceLinkage(string namespaceName, string className) { _namespaceName = namespaceName; ! _className = className; } --- 782,786 ---- public ResourceLinkage(string namespaceName, string className) { _namespaceName = namespaceName; ! _className = className; } *************** *** 788,792 **** #region Override implementation of Object ! /// <summary> /// Returns the resource linkage as a string. --- 788,792 ---- #region Override implementation of Object ! /// <summary> /// Returns the resource linkage as a string. *************** *** 796,809 **** /// </returns> public override string ToString() { if (!IsValid) { return string.Empty; } ! if (HasNamespaceName && HasClassName) { ! return NamespaceName + "." + ClassName; } ! if (HasNamespaceName) { ! return NamespaceName; ! } ! return ClassName; } --- 796,820 ---- /// </returns> public override string ToString() { + string resourceName; + if (!IsValid) { return string.Empty; } ! ! if (HasNamespaceName) { ! if (HasClassName) { ! resourceName = NamespaceName + "." + ClassName; ! } else { ! resourceName = NamespaceName; ! } ! } else { ! resourceName = ClassName; } ! ! if (Culture != null) { ! resourceName = string.Format("{0}.{1}", resourceName, Culture.Name); ! } ! ! return resourceName; } *************** *** 871,874 **** --- 882,896 ---- get { return _className; } set { _className = (value != null) ? value.Trim() : null; } + } + + /// <summary> + /// Gets the culture that the resource is associated with. + /// </summary> + /// <value> + /// The culture that the resource is associated with. + /// </value> + public CultureInfo Culture { + get { return _culture; } + set { _culture = value; } } |