奇迹用得开辟后缀名为x的公文,那么什么样自文本打开应用?
匪亮堂发生多少人口对斯题材感兴趣,因为目前于召开一个网站打,有点闲心给网站加了国际化援助。尽管ASP.NET已经闹ResourceManager这个看似,并且发生标签实现国际化的支撑了,可是她的题材是,ResourceManager对各国一个用翻译的语句都务求来一个键(Key):
<!–more–>
<!– csdn –>
1.
要先行创立一个.resx文件,在Visual Studio里,有一个工具编辑这.resx文件。
率先,需要打开 Package.appxmanifest
2.
对各国一个要翻译的语句,添加一个键值对。
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,用这用,可以观察,就是简单代码就可。
3.
程序写好后,要起翻,调用gettext程序用具备设翻的语句找出来,保存至指定的po文件里。可以在http://gnuwin32.sourceforge.net/packages/gettext.htm其一网页下载gettext。
一个窘迫的应用,需要以涉及文件加上图片。
观看txt
文件,有一个图片,这个图,假设选拔可以添加一个图,这多少个图形就是安装默认使用加上。
然而正剧的是,gettext好像要求主语言是英文,对闽南语字符串扶助之未是杀好。所以我便用C#好写了一个gettext,你可以在本文的附件里生充斥她,命令的格式是:
但个人开发者好像不克关联文件。
Zgettext -k T -i
源代码路径名 -o 输出的po文件称
服从作品以知识共享署名-非商业性使用-相同模式共享 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 |
但愿对君爆发接触扶持。