Hello

I made something similar, but in stead of using DB I used good old
localizable folders:
sv.proj
--Localizable.strings
en.proj
--Localizable.strings

In the "swedish" Localizable.strings:
"Offers" = "Erbjudande";
"Barcode" = "Streckkod"

Display a label:
Locale.GetText ("Offers");

Switch Language, let say you have a settings view where you select a language:
Locale.ChangeCulture(MyApp.Instance.CurrentUser.Culture);

Don't forget to reload your view after the "switch". I did a flip
animation to spice it up...
Task.Factory.StartNew( () => ReloadView() );


private void ReloadView()
{
        InvokeOnMainThread(delegate {
                                        
                //Flip the view
                UIView.BeginAnimations("Flipper");
                UIView.SetAnimationDuration(1.25);
                UIView.SetAnimationCurve(UIViewAnimationCurve.EaseInOut);
                UIView.SetAnimationTransition
(UIViewAnimationTransition.FlipFromRight, _tabbarController.View ,
true);
                _tabbarController.ViewWillDisappear(true);
                _tabbarController.ViewWillAppear(true);
                UIView.CommitAnimations();
                        
        });
}


The class:
public static class Locale
{
                
        public static CultureInfo DefaultCultureInfo = new CultureInfo("sv-SE");
        private static CultureInfo _currentCultureInfo = DefaultCultureInfo;
                
                
        public static void ChangeCulture(string cultureInfo)
        {
                _currentCultureInfo = new CultureInfo(cultureInfo);
        }
                
        public static CultureInfo GetPhoneCultureInfo()
        {
                return new 
CultureInfo(NSLocale.CurrentLocale.LocaleIdentifier.Replace("_","-"));
        }
                
                
        public static string GetText (string str)
        {
                string path = null;
                path = 
NSBundle.MainBundle.PathForResource(_currentCultureInfo.TwoLetterISOLanguageName.ToLower(),"lproj");
                NSBundle languageBundle = NSBundle.FromPath(path);
                        
                return languageBundle.LocalizedString(str,string.Empty);
                        
        }
                

                
        public static string Format (string fmt, params object [] args)
        {
                fmt = NSBundle.MainBundle.LocalizedString(fmt,"");
                return String.Format (fmt, args);
        }


    public static CultureInfo GetCultureInfo(string countryCode)
    {
        CultureInfo currentCulture = null;

        foreach (CultureInfo ci in
CultureInfo.GetCultures(CultureTypes.AllCultures))
        {

            if (ci.Name.ToLower().Contains(countryCode.ToLower()))
            {

                currentCulture = ci;
                break;
            }



        }

        return currentCulture;

    }
}
                
That's it really...
(I must say that I just love the System.Threading.Task.Factory:
http://www.codethinked.com/net-40-and-systemthreadingtasks)

I hope it will help you.

Br
Göran
_______________________________________________
MonoTouch mailing list
[email protected]
http://lists.ximian.com/mailman/listinfo/monotouch

Reply via email to