Click here to Skip to main content
15,891,607 members
Articles / Programming Languages / C#

Localization of RDLC Reports into an Arabic Locale

Rate me:
Please Sign up or sign in to vote.
4.33/5 (9 votes)
10 Dec 2008CPOL2 min read 46K   943   12  
Localize RDLC into Arabic Locale or any other language with the correct right-to-left alignment.
using System;
using System.Xml;
using System.Collections;
using System.Windows.Forms;
using System.Collections.Specialized;
using System.Collections.Generic;

namespace Localization
{
	public class Language
	{
		private string id = "";

		private string name = "";

        private string direction = Enumerations.LanguageDirection.ltr.ToString();

        /// <summary>
        /// Gets or sets the id of the language, as ar for Arabic or en for English
        /// </summary>
        public virtual string Id 
        { 
            get 
            { 
                return id; 
            } 
            set 
            { 
                id = value; 
            } 
        }

        /// <summary>
        /// Gets or sets the descriptive name for the language
        /// </summary>
        public virtual string Name 
        { 
            get 
            { 
                return name; 
            } 
            set 
            { 
                name = value; 
            } 
        }

        /// <summary>
        /// Get the culture info for the language
        /// </summary>
        public virtual System.Globalization.CultureInfo CultureInfo
        {
            get
            {
                if (id == "ar")
                    return new System.Globalization.CultureInfo("ar-lb");
                else if (id == "en")
                    return new System.Globalization.CultureInfo("en-US");
                else
                    return System.Globalization.CultureInfo.CurrentCulture;
            }
        }

        /// <summary>
        /// Gets or sets the layout direction settings for the language
        /// </summary>
        public virtual Enumerations.LanguageDirection Direction 
        { 
            get 
            {
                return (Enumerations.LanguageDirection) Enum.Parse(typeof(Enumerations.LanguageDirection), direction, true); 
            } 
            set 
            { 
                direction = value.ToString(); 
            }
        }

        public Language(string id, string name, Enumerations.LanguageDirection direction)
        {
            this.id = id;
            this.name = name;
            this.direction = direction.ToString();
        }

        private static List<Language> all = new List<Language>();
        public static List<Language> All
        {
            get
            {
                lock (all)
                {
                    if (all.Count == 0)
                    {
                        all = new List<Language>();
                        
                        all.Add(new Language("ar", "����", Enumerations.LanguageDirection.rtl));

                        all.Add(new Language("en", "English", Enumerations.LanguageDirection.ltr));
                    }
                }

                return all;
            }
        }

        //overriding the object's ToString method
        public override string ToString()
		{
			return name;
		}

		// implicit conversion to a string
        public static implicit operator string(Language language)
        {
            return language.Name;
        }

        public override bool Equals(object obj)
        {
            if (obj == null)
                return false;

            if (obj is Language)
            {
                Language language = (Language)obj;
                return this.Id == language.Id;
            }
            else
            {
                return false;
            }
        }

        public override int GetHashCode()
        {
            return 0;
        }
	}
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer (Senior) Integrated Digital Systems - IDS
Lebanon Lebanon
Been programming since 2001 interested in finance, security, workflows, SharePoint and algorithms. He is an MCSD, MCDBA, MCAD, MCSD, (again), MCTS, MCPD and MCT.
My Blog: www.alihamdar.com

Comments and Discussions