Xamarin.Forms本地化多语言
Forms
右键新建文件夹 Localization
新建文件TranslateExtension.cs
namespace Localization
{
///
<summary>
/// xaml 文件本地化
///
</summary>
[ContentProperty("Text")]
public
class
TranslateExtension : IMarkupExtension
{
///
<summary>
/// 本地资源对象
///
</summary>
readonly
CultureInfo ci;
///
<summary>
/// 反射用命名空间常量
///
</summary>
const
string ResourceId = "BarCode.Localization.TextResources";
///
<summary>
/// 构造函数 本地化对象根据抽象实现对象获取
///
</summary>
public TranslateExtension()
{
ci = DependencyService.Get<ILocalize>().GetCurrentCultureInfo();
}
///
<summary>
/// 文本对象属性
///
</summary>
public
string Text { get; set; }
///
<summary>
/// 获取数据值显示用于xaml
///
</summary>
///
<param name="serviceProvider"></param>
///
<returns></returns>
public
object ProvideValue(IServiceProvider serviceProvider)
{
if (Text == null)
return
"";
ResourceManager resmgr = new
ResourceManager(ResourceId
, typeof(TranslateExtension).GetTypeInfo().Assembly);
var translation = resmgr.GetString(Text, ci);
if (translation == null)
{
#if DEBUG
throw
new
ArgumentException(
String.Format("Key '{0}' was not found in resources '{1}' for culture '{2}'.", Text, ResourceId, ci.Name),
"Text");
#else
translation = Text; // HACK: returns the key, which GETS DISPLAYED TO THE USER
#endif
}
return translation;
}
}
}
新建抽象接口ILocalize.cs
///
<summary>
/// 定义一个接口暴露用户的首选UICulture 本地资源化对象
///
</summary>
public
interface
ILocalize
{
CultureInfo GetCurrentCultureInfo();
}
新建资源文件TextResources.resx
新建TextResources.en-US.resx
名称相同(key)一致,值区分语言。
新建xaml文件Multilingualism.xaml
<?xml
version="1.0"
encoding="utf-8" ?>
<ContentPage
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="XMD1.Page.Multilingualism"
xmlns:i18n="clr-namespace:Localization">
<StackLayout >
<!--<BoxView AbsoluteLayout.LayoutBounds="0.25, 0.25, 0.5, 0.5"
Color="Blue"
AbsoluteLayout.LayoutFlags="All" />-->
<Label
Text="{i18n:Translate About_Context}"
VerticalOptions="Center"
HorizontalOptions="Center"
x:Name="lab"/>
<Button
Text="中文"
Clicked="zhclicked"
HorizontalOptions="Start" />
<Button
Text="英文"
x:Name="enbtn"
HorizontalOptions="End"/>
</StackLayout>
</ContentPage>Android
同目录、实现接口
using Localization;
using Xamarin.Forms;
[assembly: Dependency(typeof(Localize))]
namespace Localization
{
///
<summary>
/// Android 本地资源化实现对象
///
</summary>
public
class
Localize : ILocalize
{
public System.Globalization.CultureInfo GetCurrentCultureInfo()
{
var androidLocale = Java.Util.Locale.Default;
var netLanguage = androidLocale.ToString().Replace("_", "-"); // turns pt_BR into pt-BR
return
new System.Globalization.CultureInfo(netLanguage);
}
}
}
IOS
同目录、实现接口
using Foundation;
using Localization;
using System;
using Xamarin.Forms;
[assembly: Dependency(typeof(Localize))]
namespace Localization
{
///
<summary>
/// ios 本地资源化实现对象
///
</summary>
public
class
Localize: ILocalize
{
public System.Globalization.CultureInfo GetCurrentCultureInfo()
{
var netLanguage = "en";
var prefLanguageOnly = "en";
if (NSLocale.PreferredLanguages.Length > 0)
{
var pref = NSLocale.PreferredLanguages[0];
prefLanguageOnly = pref.Substring(0, 2);
if (prefLanguageOnly == "pt")
{
if (pref == "pt")
pref = "pt-BR"; // get the correct Brazilian language strings from the PCL RESX (note the local iOS folder is still "pt")
else
pref = "pt-PT"; // Portugal
}
netLanguage = pref.Replace("_", "-");
Console.WriteLine("preferred language:" + netLanguage);
}
System.Globalization.CultureInfo ci = null;
try
{
ci = new System.Globalization.CultureInfo(netLanguage);
}
catch
{
// iOS locale not valid .NET culture (eg. "en-ES" : English in Spain)
// fallback to first characters, in this case "en"
ci = new System.Globalization.CultureInfo(prefLanguageOnly);
}
return ci;
}
}
}
参考一下布局
https://developer.xamarin.com/guides/xamarin-forms/controls/layouts/
Xamarin.Forms本地化多语言的更多相关文章
- 与Xamarin.Forms跨平台的用户界面
Xamarin.Forms 与Xamarin.Forms跨平台的用户界面 Xamarin的. 形式是一个跨平台的UI工具包,它允许开发人员 轻松地创建本地用户界面布局,可以共享 在Android,iO ...
- Xamarin XAML语言教程Xamarin.Forms中构建进度条
Xamarin XAML语言教程Xamarin.Forms中构建进度条 ProgressBar被称为进度条,它类似于没有滑块的滑块控件.进度条总是水平放置的.本节将讲解如何使用进度条. 注意:进度条在 ...
- Xamarin XAML语言教程Xamarin.Forms中改变活动指示器颜色
Xamarin XAML语言教程Xamarin.Forms中改变活动指示器颜色 在图12.10~12.12中我们会看到在各个平台下活动指示器的颜色是不一样的.Android的活动指示器默认是深粉色的: ...
- Xamarin XAML语言教程Xamarin.Forms中活动指示器的显示隐藏
Xamarin XAML语言教程Xamarin.Forms中活动指示器的显示隐藏 开发者除了可以在XAML中使用IsRunning属性控制指示器的显示隐藏外,还可以在代码隐藏文件中使用IsRunnin ...
- Xamarin XAML语言教程Xamarin.Forms中程序状态与进度(一)
Xamarin XAML语言教程Xamarin.Forms中程序状态与进度(一) 在Xamarin.Forms中,提供了两个控件用来指示程序的状态和进度.他们分别为活动指示器和进度条.其中,活动指示器 ...
- Xamarin.Forms 简介
An Introduction to Xamarin.Forms 来源:http://developer.xamarin.com/guides/cross-platform/xamarin-forms ...
- 老司机学新平台 - Xamarin Forms开发框架之MvvmCross插件精选
在前两篇老司机学Xamarin系列中,简单介绍了Xamarin开发环境的搭建以及Prism和MvvmCross这两个开发框架.不同的框架,往往不仅仅使用不同的架构风格,同时社区活跃度不同,各种功能模块 ...
- 老司机学新平台 - Xamarin Forms开发框架二探 (Prism vs MvvmCross)
在上一篇Xamarin开发环境及开发框架初探中,曾简单提到MvvmCross这个Xamarin下的开发框架.最近又评估了一些别的,发现老牌Mvvm框架Prism现在也支持Xamarin Forms了, ...
- Xamarin.Forms介绍
On May 28, 2014, Xamarin introduced Xamarin.Forms, which allows you to write user-interface code tha ...
随机推荐
- JS常用扩展
// 清除两边的空格 String.prototype.trim = function() { return this.replace(/(^\s*)|(\s*$)/g, ''); }; // 合并多 ...
- Lucene 4.10.2开发示例
这里面用的是比较新的Lucene4.10.2 做的一个实例.(lucene的索引不能太大,要不然效率会很低.大于1G的时候就必须考虑分布索引的问题) 先介绍一下Lucene的几个参数意义: Index ...
- Node.js【2】开发环境搭建(Windows、Linux&Mac)
安装方式有非常多种,以下仅仅是我喜欢的一种方式,安装的路径不一定要跟我一样. 眼下最新的版本号是v0.10.28 Windows 1.下载(放到E:\node\nodejs): http://node ...
- 动态规划晋级——POJ 3254 Corn Fields【状压DP】
转载请注明出处:http://blog.csdn.net/a1dark 分析:刚开始学状压DP比较困难.多看看就发现其实也没有想象中那么难.这道题由于列数较小.所以将行压缩成二进制来看.首先处理第一行 ...
- mysql @变量和变量的区别及怎么判断记录唯一性
DELIMITER// drop PROCEDURE if EXISTS test.express; create PROCEDURE test.express() BEGIN ) into @a f ...
- 微信支付bug
1.最基本的操作就是检查各项参数正确2.确保将测试微信号加入测试白名单 3.目录正确:发起授权请求的页面必须是在授权目录下的页面,而不能是存在与子目录中.否则会返回错误,Android返回“Syste ...
- 第五章:最后一步准备,1.8的Json模型、状态描述机制详解
<基于1.8 Forge的Minecraft mod制作经验分享> 1.8的所有纹理材质都需要一个Json来对其描述,这一块感觉是各大神的教程里面涉及最少最浅的,我就斗胆在这分享下我研究了 ...
- codevs1955光纤通信(并查集)
/* 第一眼以为就是个区间覆盖 然后敲完提交60分0.0 然而觉得自己的做法很对 以为数据错了 后来发现XXX他的牛棚是一圈(牛过得挺好的啊 还能赏湖...) 然后枚举断开的点 可惜n=750 p=1 ...
- 重装系统时,将MBR分区转为GPT 分区
摘要 很多同学在重装系统的时候,或多或少都遇到过这样的问题:镜像文件没有问题,软碟通刻录也没有问题,但偏偏就在选择安装系统盘盘符的时候,跳出对话框,提示:Windows无法安装到这个磁盘,选中的磁盘具 ...
- js如何设置网页横屏和竖屏切换
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...