应用gettext技术也ASP.NET网站实现国际化襄助

奇迹用得开辟后缀名为x的公文,那么什么样自文本打开应用?

匪亮堂发生多少人口对斯题材感兴趣,因为目前于召开一个网站打,有点闲心给网站加了国际化援助。尽管ASP.NET已经闹ResourceManager这个看似,并且发生标签实现国际化的支撑了,可是她的题材是,ResourceManager对各国一个用翻译的语句都务求来一个键(Key):

<!–more–>
<!– csdn –>

1.      
要先行创立一个.resx文件,在Visual Studio里,有一个工具编辑这.resx文件。

率先,需要打开 Package.appxmanifest

2.      
对各国一个要翻译的语句,添加一个键值对。

图片 1

3.      
然后以代码里,使用ResourceManager或者<%#其一标签,通过定义好之键来告诉ASP.NET在运行的当儿找正确的翻文本。

丰硕一个效益,需要加上最少有号,文件类型。

太麻烦了,不知情大家发生啊其他好之措施,我下的艺术是于unix
gettext这边借用过来的观。

上边的希冀虽是自家上加jpg
的法子,我之选取可打开jpg,我也来一个采取是得的。

理念

是就是 UWP图床:https://www.microsoft.com/store/apps/9nblggh562r2

Gettext的眼光分外简单,文本翻译啊,说白了就是是拿同句话翻译成此外一句话嘛,这么些只要翻的句子,本身就雅观作检索要为此底重要字,何必要再一次新建一个其它的显要字呢?gettext的法子特别简短:

添加完,打开App.xaml.cs

1.      
在源代码里,你得编制一个新鲜之函数执行翻译,那个函数只接受一个参数,就是假设翻的公文。

长一个函数

2.      
使用一个拉程序xgettext扫描源代码的文件,将所有待翻译的文件都摸出来,保存至一个文书里,一般的话,这些文件称po文件。

        protected override void OnFileActivated(FileActivatedEventArgs args)
        {
            base.OnFileActivated(args);
        }

3.      
因为ASP.NET程序不匡助po文件,再下一个援救程序msgfmt将po文件转换成ASP.NET补助之.resources文件。

亟需对客召开一些改动

这法子的助益在:

        protected override void OnFileActivated(FileActivatedEventArgs args)
        {
            var file = args.Files[0];
            Frame frame = Window.Current.Content as Frame;
            if (frame == null)
            {
                frame = new Frame();
                Window.Current.Content = frame;
            }
            frame.Navigate(typeof(MainPage), file);
             Window.Current.Activate();
 }

1.      
你当编写程序的时,不用也用翻译的句子,定义一个新的根本字——这多少个重点字一般都相比较为难通晓,也坏取名。在怜惜代码的时节挺烦——因为您要不结束地在.resx编辑器和cs文件中切换。

此处的file可能是拖欠。

2.      
不晓怎么打的,很不便找到好编辑.resx文件之家伙,而gettext生成的po文件是通常的文书文件,而且格式非常简单。这样以翻译的时刻,就老大有利了。

页面跳反就是这么,页面传入可以是 StorageFile。

做法

直白显示在 MainPage ,假若用展示在此外窗口,当然也非是对准您生出难度。

坚守写了一个ASP.NET MVC程序,当然窗体(Web Form)格局之主次理念也是相同的,

可是好的措施是拔取MVVM
参见:http://lindexi.oschina.io/lindexi/post/win10-uwp-MVVM%E5%85%A5%E9%97%A8/

1.      
写一个控制器和视图页的基类,里面都发出一个行翻译的函数T:

自家无当博客说哪些传参,但是是针对大家也一拍即合。

    public class G18nController : Controller

    {

        public CultureInfo Culture { get; set; }

 

        public string T(string message)

        {

            var obj = HttpContext.GetGlobalResourceObject("website", message, Culture);

            var translated = obj == null ? null : obj.ToString();

            if (string.IsNullOrEmpty(translated))

                return message;

            else

                return translated;

        }

    }

 

    public abstract class G18nWebViewPage<U> : WebViewPage<U>

    {

        public CultureInfo Culture { get; set; }

 

        public string T(string message)

        {

            var obj = HttpContext.GetGlobalResourceObject("website", message, Culture);

            var translated = obj == null ? null : obj.ToString();

            if (string.IsNullOrEmpty(translated))

                return message;

            else

                return translated;

        }

    }

打开 MainPage.xaml 写一个Image

 

            <Image x:Name="Image"></Image>

上面的Culture属性,可以从Request.Headers[“Accept-Language”]特性取得。

打开 xaml.cs ,把app启动的file显示

 

        protected override async void OnNavigatedTo(NavigationEventArgs e)
        {
            var file = e.Parameter as StorageFile;
            if (file != null)
            {
                using (var stream = await file.OpenAsync(FileAccessMode.Read))
                {
                    BitmapImage img = new BitmapImage();
                    await img.SetSourceAsync(stream);
                    Image.Source = img;
                }
            }
        }

2.      
在代码里,针对每个要翻的语句,直接调用那个T函数好了:

UWP 从文本呈现图片很简短,打开放在img就好。

throw new ArgumentException(string.Format(T(“找不到ID为{0}的项目!”), id));

于是打开一个jpg,用这用,可以观察,就是简单代码就可。

 

图片 2

3.      
程序写好后,要起翻,调用gettext程序用具备设翻的语句找出来,保存至指定的po文件里。可以在http://gnuwin32.sourceforge.net/packages/gettext.htm其一网页下载gettext。

一个窘迫的应用,需要以涉及文件加上图片。

 

观看txt
文件,有一个图片,这个图,假设选拔可以添加一个图,这多少个图形就是安装默认使用加上。

然而正剧的是,gettext好像要求主语言是英文,对闽南语字符串扶助之未是杀好。所以我便用C#好写了一个gettext,你可以在本文的附件里生充斥她,命令的格式是:

但个人开发者好像不克关联文件。

Zgettext -k T -i
源代码路径名 -o 输出的po文件称

图片 3
服从作品以知识共享署名-非商业性使用-相同模式共享 4.0
国际许可协议
开展许可。欢迎转载、使用、重新发表,但要保留作品署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd
),不得用于商业目标,基于本文修改后底创作必须以相同的批准宣布。如发此外问题,请与己联系

Zgettext -k T -f
源代码路径列表文件 -o 输出的po文件称

<script type=”text/javascript”> $(function () { $(‘pre.prettyprint
code’).each(function () { var lines =
$(this).text().split(‘\n’).length; var $numbering =
$(‘<ul/>’).addClass(‘pre-numbering’).hide();
$(this).addClass(‘has-numbering’).parent().append($numbering); for (i =
1; i <= lines; i++) { $numbering.append($(‘<li/>’).text(i)); };
$numbering.fadeIn(1700); }); }); </script>

 

比如:

Zgettext -k T -i
AccountController.cs -o test.po

 

4.      
生成的po文件格式其实分外简单易亮:

1.  #: C:\workspace\Views\Role\Edit.cshtml:9

2.  msgid "管理用户组"

3.  msgstr ""

4. 

 

5.  #: C:\workspace\Views\Role\Edit.cshtml:23

6.  msgid "用户组[{0}]的权限"

7.  msgstr ""

       

        Msgid就是若翻的句子,msgstr就是翻译好之语句。

5.      
完成翻译后,使用一个援救程序msgfmt将翻译好之po文件转换成ASP.NET补助之格式。因为原本的gettext程序包里的msgfmt.exe好像不可知生成ASP.NET识其它.resources文件,所以 我吗描绘了一个msgfmt程序完成这工作——在本文的附件里好下载到,命令格式是:

 

Msgfmt -o
输出的resource文件路径 -i 输入的po文件路径

 

例如:

Msgfmt -o
website.en-US.resources -i website.po

 

留意:输出的resource文件称,必须和你在首先步里,使用HttpContext.GetGlobalResourceObject函数的首先只参数相同。

 

6.      
我写了一个小之批处理,将3、4、5步结合在一起执行:

1.  pushd src

2.  del /F source.lst

3.  dir /s /b src\*.cs >> source.lst

4.  dir /s /b src\*.cshtml >> source.lst

5.  tools\zgettext\zgettext\bin\Debug\zgettext.exe -k T -f source.lst -o glob\website.po

6.  tools\zgettext\msgfmt\bin\Debug\msgfmt.exe -o src\App_GlobalResources\website.resources -i glob\ website.po

7.       popd

 

但愿对君爆发接触扶持。

Leave a Comment.