Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

220 lines
6.3 KiB

using System;
using System.Threading;
using System.Resources;
using System.Globalization;
using System.Web;
using Microsoft.Win32;
using UDDI.Diagnostics;
namespace UDDI
{
public class Localization
{
protected static ResourceManager manager = null;
static Localization()
{
try
{
Debug.VerifySetting( "InstallRoot" );
manager = ResourceManager.CreateFileBasedResourceManager( "uddi",
Config.GetString( "InstallRoot" ) + "resources",
null );
}
catch
{
//
// There may be a case where we get called before the database and hence our configuration
// settings are setup. The only information we need is the install root. If we can't get
// this information from the database, we'll try to get it from the registry.
//
//
// TODO should make this field non-private on Config
//
string registryRoot = @"SOFTWARE\Microsoft\UDDI";
RegistryKey uddiRegKey = Registry.LocalMachine.OpenSubKey( registryRoot );
//
// At this point, let any exceptions just propogate since we can't get the information that we need.
//
manager = ResourceManager.CreateFileBasedResourceManager( "uddi",
uddiRegKey.GetValue( "InstallRoot" ) + "resources",
null );
}
}
public static CultureInfo GetCulture()
{
Thread thread = Thread.CurrentThread;
CultureInfo culture = thread.CurrentUICulture;
try
{
//
// If this is an HTTP request, attempt to use the browser's
// preferred language setting.
//
HttpContext context = HttpContext.Current;
if( null != context && context.Request.UserLanguages.Length >= 1 )
{
string language = context.Request.UserLanguages[ 0 ];
//
// BUG: 778542. To fully support MUI Builds via the UI, we must
// first attempt to create a specific culture, and if that failes, create a
// primary culture.
//
try
{
culture = CultureInfo.CreateSpecificCulture( language );
}
catch
{
culture = new CultureInfo( language );
}
}
}
catch
{
culture = thread.CurrentUICulture;
}
return culture;
}
//
// Return the given string using the local machine culture rather than the
// caller's culture. TODO consider creating a new method, GetString( string name, bool useLocalMachine )
//
public static string GetStringLocalMachineCulture( string name )
{
string resource = null;
try
{
resource = manager.GetString( name );
}
catch
{}
if( null == resource )
resource = "[[" + name + "]]";
return resource;
}
public static CultureInfo GetCultureWithFallback( )
{
CultureInfo localculture = GetCulture();
string filebase = Config.GetString( "InstallRoot" ) + "resources\\uddi{0}resources";
string file = string.Format( filebase, "." + localculture.Name + "." ) ;
bool installed = System.IO.File.Exists( file );
if( installed )
return localculture;
else
{
do
{
localculture = localculture.Parent;
file = string.Format( filebase, "." + localculture.Name + "." ) ;
installed = System.IO.File.Exists( file );
}while( !installed && 127!=localculture.LCID );
if( installed )
return localculture;
else
return CultureInfo.InstalledUICulture;
}
}
public static string GetString( string name )
{
CultureInfo culture = GetCulture();
//
// Retrieve the resource.
//
string resource = null;
try
{
resource = manager.GetString( name, culture );
}
catch
{
}
if( null == resource )
resource = "[[" + name + "]]";
return resource;
}
/// *****************************************************************************
/// <summary>
/// Check to see if a string is marked up with '[[' at the start and ']]' at
/// the end. If so, return true, else return false.
/// </summary>
/// <param name="key">Key to validate</param>
/// <returns>Boolean indicated if it is a valide key</returns>
/// *****************************************************************************
public static bool IsKey( string key )
{
return( null!=key && key.StartsWith( "[[" ) && key.EndsWith( "]]" ) );
}
/// *****************************************************************************
/// <summary>
/// Removes the UDDI Localization Markup tags from a string. It will remove
/// '[[' from the begining and ']]' from the end.
///
/// If the key doesn't contain markup tags, the string is returned in its
/// original state.
/// </summary>
/// <param name="key">Key to remove markup on</param>
/// <returns>Bare Localization key.</returns>
/// *****************************************************************************
public static string StripMarkup( string key )
{
return key.TrimEnd( "]]".ToCharArray() ).TrimStart( "[[".ToCharArray() );
}
/// *****************************************************************************
/// <summary>
/// Translation of kernel32:SetThreadUILanguage semantics into managed code.
/// Used for overridding console CurrentUICulture when console code page
/// doesn't match the current ANSI or OEM code page.
/// </summary>
/// *****************************************************************************
public static void SetConsoleUICulture()
{
int iConsoleCodePage = System.Console.Out.Encoding.CodePage;
System.Threading.Thread currentThread = Thread.CurrentThread;
//
// if no code page set, we're not in a console
//
if( 0 != iConsoleCodePage )
{
if( !((iConsoleCodePage == currentThread.CurrentCulture.TextInfo.ANSICodePage ||
iConsoleCodePage == currentThread.CurrentCulture.TextInfo.OEMCodePage) &&
(iConsoleCodePage == currentThread.CurrentUICulture.TextInfo.ANSICodePage ||
iConsoleCodePage == currentThread.CurrentUICulture.TextInfo.OEMCodePage)) )
{
//
// override with en-US culture
//
currentThread.CurrentUICulture = new CultureInfo( "en-US" );
}
}
}
}
}