fredag 10 augusti 2012

Införa lite finkultur i ditt CMS

Pillade lite med språk i Orchard CMS och kände ett starkt behov av att kunna uttrycka mig på mitt modersmål.

Googlade lite och hittade CultureAndRegionInfoBuilder-klassen som MS gömt i dll:en sysglobl.dll men som tillhör namespacet System.Globalization. Så för att kunna använda den måste du referera sysglobl.dll.

Skapade en liten konsolapp:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Globalization;

namespace CultureCreator
{
    class Program
    {
        static void Main(string[] args)
        {
            new Program(args);
        }

        public Program(string[] args)
        {
            if (args == null || args.Length == 0)
            {
                Console.WriteLine("Error: No args supplied.");
                return;
            }
            try
            {
                if (args[0].ToLower() == "register")
                {
                    CreateCulture();
                    Console.WriteLine("Culture created.");
                }
                else if (args[0].ToLower() == "unregister")
                {
                    RemoveCulture();
                    Console.WriteLine("Culture removed.");
                }
            }
            catch (Exception)
            {
                Console.WriteLine("Could not perform the operation, make sure you are running the script as an administrator!");
            }
        }
       
        public void CreateCulture()
        {
            if (CultureInfo.GetCultures(CultureTypes.AllCultures).Any(c => c.Name == "vl-SE"))
            {
                Console.WriteLine("The culture has already been created!");
                return;
            }
               
            CultureAndRegionInfoBuilder cib = null;
            cib = new CultureAndRegionInfoBuilder("vl-SE", CultureAndRegionModifiers.None);
           
            CultureInfo ci = new CultureInfo("sv-SE");
            cib.LoadDataFromCultureInfo(ci);

            RegionInfo ri = new RegionInfo("SE");
            cib.LoadDataFromRegionInfo(ri);

            cib.CultureEnglishName = "Wermlandish (Sweden)";
            cib.CultureNativeName = "värmländska (Sverige)";

            cib.Register();
        }

        public void RemoveCulture()
        {
            CultureAndRegionInfoBuilder.Unregister("vl-SE");
        }
    }
}


Körde den:




Hoppar in i Orchards dashboard och kollar lista över tillgängliga språk:












Jajjamen! Där satt 'an!

Skapar en översättning av en text på min sida:
























Kollar att min språklistare på sidan fångar upp det tillagda språket:











Yes, ser gôrfint ut!

Nu testar vi att välja språket!






Vackert! Funkar antagligen precis lika fint i andra CMS:er.

Ps.:
Upptäckte att det inte var lika lätt att bli av med det vackra språket i Orchard (antar att Orchard fäste sig vid det). Det fanns nämligen ingen removeknapp för detta språk i GUI:t. Därför får man först städa bort gjorda översättningar, sedan kika in i databasen och köra:

DELETE FROM dbo.Orchard_Framework_CultureRecord WHERE Culture = 'vl-SE'

Om detta beror på felaktigheter i min registrerade Culture eller på någon Orchard-bugg låter jag vara osagt :)


Inga kommentarer:

Skicka en kommentar