1. 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>

  1. </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);

}

}

}

  1. 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本地化多语言的更多相关文章

  1. 与Xamarin.Forms跨平台的用户界面

    Xamarin.Forms 与Xamarin.Forms跨平台的用户界面 Xamarin的. 形式是一个跨平台的UI工具包,它允许开发人员 轻松地创建本地用户界面布局,可以共享 在Android,iO ...

  2. Xamarin XAML语言教程Xamarin.Forms中构建进度条

    Xamarin XAML语言教程Xamarin.Forms中构建进度条 ProgressBar被称为进度条,它类似于没有滑块的滑块控件.进度条总是水平放置的.本节将讲解如何使用进度条. 注意:进度条在 ...

  3. Xamarin XAML语言教程Xamarin.Forms中改变活动指示器颜色

    Xamarin XAML语言教程Xamarin.Forms中改变活动指示器颜色 在图12.10~12.12中我们会看到在各个平台下活动指示器的颜色是不一样的.Android的活动指示器默认是深粉色的: ...

  4. Xamarin XAML语言教程Xamarin.Forms中活动指示器的显示隐藏

    Xamarin XAML语言教程Xamarin.Forms中活动指示器的显示隐藏 开发者除了可以在XAML中使用IsRunning属性控制指示器的显示隐藏外,还可以在代码隐藏文件中使用IsRunnin ...

  5. Xamarin XAML语言教程Xamarin.Forms中程序状态与进度(一)

    Xamarin XAML语言教程Xamarin.Forms中程序状态与进度(一) 在Xamarin.Forms中,提供了两个控件用来指示程序的状态和进度.他们分别为活动指示器和进度条.其中,活动指示器 ...

  6. Xamarin.Forms 简介

    An Introduction to Xamarin.Forms 来源:http://developer.xamarin.com/guides/cross-platform/xamarin-forms ...

  7. 老司机学新平台 - Xamarin Forms开发框架之MvvmCross插件精选

    在前两篇老司机学Xamarin系列中,简单介绍了Xamarin开发环境的搭建以及Prism和MvvmCross这两个开发框架.不同的框架,往往不仅仅使用不同的架构风格,同时社区活跃度不同,各种功能模块 ...

  8. 老司机学新平台 - Xamarin Forms开发框架二探 (Prism vs MvvmCross)

    在上一篇Xamarin开发环境及开发框架初探中,曾简单提到MvvmCross这个Xamarin下的开发框架.最近又评估了一些别的,发现老牌Mvvm框架Prism现在也支持Xamarin Forms了, ...

  9. Xamarin.Forms介绍

    On May 28, 2014, Xamarin introduced Xamarin.Forms, which allows you to write user-interface code tha ...

随机推荐

  1. Android ===smail语法总结

    (转载自 网络)smail 语法总结 http://www.blogjava.net/midea0978/archive/2012/01/04/367847.html Smali背景: Smali,B ...

  2. javascript、js操作json方法总结(json字符创转换json对象)

    相信前端的同学们对json并不陌生,接触过很多.但是很少人知道json的全称是什么,哈哈,我也是查资 料知道的.(JSON JavaScript Object Notation是一种轻量级的数据交换格 ...

  3. 必胜宅急送Web app设计背后的思考

    O2O模式是餐饮业在移动消费趋势下主动拥抱互联网的方向,迎合餐饮消费者从以往经验判断为主转变为依靠移动设备.lbs.社交网络进行立体决策的过程.继App客户端之后,手机web app也逐渐成为O2O中 ...

  4. winform程序中将控件置于最顶层或最底层的方法

    有时,我们可能动态的添加控件,并准备将其置于对顶层或最底层.实现的方法有两个: 一种方法是在WinForm窗体中使用Controls控件集的SetChildIndex方法,该方法将子控件设定为指定的索 ...

  5. Android 网络框架---Volley

    /** * Volley 可以同时请求多个,允许高并发 * 特性: * 1.JSON.图片等的异步下载 * 2.网络请求的排序(Scheduling) * 3.网络请求的优先级处理 * 4.缓存 * ...

  6. android开发launcher

    1. launcher是桌面应用程序 一. android.intent.category.LAUNCHER与android.intent.category.HOME的差别?      android ...

  7. [转] prerender-SPA程序的SEO优化策略

    随着web2.0的兴起,ajax的时代已经成为了事实,更如今 Knockout,backbone, angular,ember前端MDV(model driver view)框架强势而来,Single ...

  8. chmod -x chmod的N种解法

    声明:该文章摘自陈皓的酷壳. 问题: 如果某天你的Unix/Linux系统上的chomd命令被某人去掉了x属性(执行属性),那么,你如何恢复呢? 参考答案: 1)重新安装.对于Debian的系统: s ...

  9. Log4j使用教程 (转载http://www.codeceo.com/article/log4j-usage.html)

    日志是应用软件中不可缺少的部分,Apache的开源项目log4j是一个功能强大的日志组件,提供方便的日志记录.在apache网站:jakarta.apache.org/log4j 可以免费下载到Log ...

  10. HDU5348

    题意:给一个无向图,让你指定边的方向,比如a→b为1,a←b为0,在给所有边指定方向后,对无向图上的每个顶点,如果满足|出度-入度|<2,那么输出一种方案. 思路:从结论入手,|出度-入度|&l ...