我有一个 XSLT 样式表,可将 XML 数据转换为 XSL-FO(然后使用 Apache FOP 将其呈现为 PDF)。
现在,我需要将输出本地化为几种不同的语言。例如,XSLT 生成的表的列标题需要本地化。下面是生成带有列标题“Date”、“Name”和“Something”的表标题的 XSLT 的简化片段:
...
<fo:table>
<fo:table-header>
<fo:table-row>
<fo:table-cell>
<fo:block>Date</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block>Name</fo:block>
</fo:table-cell>
<fo:table-cell>
</fo:block>Something</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-header>
</fo:table-body>
<xsl:apply-templates select="item"/>
</fo:table-body>
</fo:table>
...
Run Code Online (Sandbox Code Playgroud)
我们已经在系统的其他部分使用TMX文件进行国际化,因此这似乎是一种自然的方法。下面是一个 TMX 文件的简化示例,其中包含两个语言的几个字符串:
<tmx version="1.4b">
<body>
<tu tuid="DATE">
<tuv xml:lang="en"><seg>Date</seg></tuv>
<tuv xml:lang="sv"><seg>Datum</seg></tuv>
</tu>
<tu tuid="NAME">
<tuv xml:lang="en"><seg>Name</seg></tuv>
<tuv xml:lang="sv"><seg>Namn</seg></tuv>
</tu>
</body>
</tmx>
Run Code Online (Sandbox Code Playgroud)
因此,基本上我想用 TMX 文件中的字符串引用(使用tuid属性)替换 XSLT 中的硬编码列标题,以便相同的 XSLT 可以生成不同语言的输出。
但我似乎找不到任何有关如何将 TMX 文件与 XSLT 结合使用的资源。示例或指向一些好的教程的指针将不胜感激。
我想我明白了,但有几个方面让我感到困惑。假设我想要为德国、西班牙和美国的 MyApp 本地化字符串。
MyApp.resx
MyApp.de-DE.resx
MyApp.es-ES.resx
MyApp.en-US.resx // this *feels* redundant
Run Code Online (Sandbox Code Playgroud)
由于我是一名美国开发人员,最后一个 rex 文件(“en”)将具有与“中性”文件相同的键和值,但是......我需要两者吗?
我可以猜测答案,但尽管(或者可能是因为)所有 msdn 文档都解释了最终回退、卫星和中性语言,但它似乎令人困惑。
有国际发展经验的人能否以(非常)简单的方式解释原因或原因?如果我正在开发 WPF、Silverlight、ASP 或其他 .Net 变体,这会重要吗?
干杯,
贝里尔
我在 WPF 应用程序中使用 MVVM 模式,并将具有本地化功能的 DisplayAttribute 应用到模型的属性:
class MyModel
{
[Display(
ResourceType = typeof(Resources.Strings),
Name = "MyPropertyName",
Description = "MyPropertyDescription")]
public double MyProperty { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我想显示模型属性的本地化属性。必要的资源文件位于适当的位置,必要的区域性已设置。我还将“构建操作”设置为“嵌入资源”,并将“自定义工具”设置为“PublicResXFileCodeGenerator”——根据 DisplayAttribute 的要求。但 DisplayAttribute 返回“MyPropertyName”,而不是其 Name 参数的本地化字符串。
下面介绍了我使用 DisplayProperty 的场景。为了显示模型属性的属性属性,我使用带有辅助类的转换器,如下所示:
namespace MyProject.Converters
{
// helper class
public class MetadataParameters
{
public Type ModelType { get; set; }
public string ModelProperty { get; set; }
public Type AttributeType { get; set; }
public string AttributeProperty { get; set; }
}
public class MetadataConverter …Run Code Online (Sandbox Code Playgroud) 我有以下算法能够连接阿拉伯文本和英语文本
private String getFormatedArabicEnglishMessage (String [] parts) {
String retString = "";
for (int i = 0; i < parts.length; i++) {
if (MyServices2Utils.isProbablyArabic(parts[i]) == true) {
retString += "\u202B" + new String(" ") + "\u202C";
retString += "\u202B" + new String(parts[i].getBytes()) + "\u202C";
retString += "\u202B" + new String(" ") + "\u202C";
} else {
retString += " ";
retString += parts[i];
retString += " ";
}
}
return retString;
}
Run Code Online (Sandbox Code Playgroud)
但并非在所有情况下都有效:
如果默认区域设置== ar,我得到以下结果:
如果默认区域设置 == en 我得到以下结果:

在我的快速代码中,我使用自动布局约束。有些是直接从情节提要添加的,有些是以编程方式添加到 UIScrollView 上的。
当应用程序以阿拉伯语版本(RTL 方向)运行时,从故事板添加的自动布局约束会自动切换到 RTL 方向,而无需我做任何努力,但以编程方式添加到 UIScrollView 上的约束不会被翻转。
这是我在 UISCrollView 上添加约束的示例:
var previousView: UIView = self.productsScrollView
for productObj in productsArray {
let productViewObj: ProductView = ProductView(frame: CGRectMake(0, 0, self.productsScrollView.frame.size.width, self.productsScrollView.frame.size.height), productObj: productObj)
productViewObj.translatesAutoresizingMaskIntoConstraints = false
self.productsScrollView.addSubview(productViewObj)
// Left Constraint
let leftConstraint = NSLayoutConstraint(item: productViewObj,
attribute: .Left,
relatedBy: .Equal,
toItem: previousView,
attribute: (previousView === self.productsScrollView) ? .Left : .Right,
multiplier: 1.0,
constant: 0.0);
self.productsScrollView .addConstraint(leftConstraint)
// Top Constraint
let topConstraint = NSLayoutConstraint(item: productViewObj,
attribute: .Top,
relatedBy: .Equal,
toItem: self.productsScrollView,
attribute: …Run Code Online (Sandbox Code Playgroud) 我试图阻止我的应用程序自动翻译为其他语言(例如我的例子中的保加利亚语)。我希望所有的字符串都是英文的。我尝试将时区设置为“欧洲\伦敦”(因为我在英国),但这不太有效。有没有办法确保当有人在英国以外的国家/地区安装我的应用程序时,我的应用程序的设置(所有设置)不会被翻译?
我在我的应用程序中使用日期,并且我正在使用SimpleDateFormatter. 我认为这导致了翻译某些字符串的问题。所以我所做的就是在使用其中的字符串之前将时区设置为它:
public static SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("Europe/London"));
String time = sdf.format(new Date());
mPurchasedDate.setText(day + " " + numDay + " " + mont + " at " + time);
Run Code Online (Sandbox Code Playgroud)
但这也不起作用。
PS:我没有在我的应用程序中添加任何本地化。我只有一个strings.xml文件夹,里面的字符串都是英文的。
I have a list of physics parameters (like Pressure, Voltage and etc.) accessible to all users from all tenants (multi-tenant application). Now, I need a way to display appropriate language to different users.
Parameter is an aggregate root:
class Parameter
{
public string Name { get; }
public string Description { get; }
}
Run Code Online (Sandbox Code Playgroud)
I need a way to localize both name and description. My first approach was this:
class Parameter
{
public IDictionary<Locale, NameAndDescription> Info { get; }
} …Run Code Online (Sandbox Code Playgroud) 我一直很难弄清楚 React 应用程序中本地化的最佳实践是什么。经过多次谷歌搜索后,我找到了雅虎的react-intl库,但我还没有找到更多其他东西来完成我想要的。该库看起来工作得很好,但至少有多个库可以比较就太好了。我只是在寻找一种方法来根据用户的浏览器区域设置来表示每个组件中的不同字符串。我可以使用什么库或方法来完成此任务?
我正在尝试将我的 ASP.NET Core 2.0 Web 应用程序全球化并本地化为西班牙语。我正在尝试遵循文档,但这些文档似乎并不适用于 Core 2.0,因为它们似乎没有涵盖 Razor Pages。仅控制器和视图。然而,无论我更改请求标头中的区域性还是使用文档中所示的查询字符串,本地化都不起作用。对我做错了什么有任何见解吗?
http://localhost:26417/?culture=es&ui-culture=es
Run Code Online (Sandbox Code Playgroud)
启动.cs
public void ConfigureServices( IServiceCollection services )
{
services.AddDbContext<PartDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("PartDatabase"))
);
services.AddAuthentication(IISDefaults.AuthenticationScheme);
services.AddLocalization(options => options.ResourcesPath = "Localization");
services.AddMvc()
.AddRazorPagesOptions(options => {
//options.Conventions.AllowAnonymousToPage("/Index");
// I can just use [AllowAnonymous] attribute
})
.AddViewLocalization()
.AddDataAnnotationsLocalization();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure( IApplicationBuilder app, IHostingEnvironment env )
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseBrowserLink();
}
var …Run Code Online (Sandbox Code Playgroud) 在 Xcode 中,您可以编辑方案并选择双倍长度的 PseudoLanguage 作为应用程序语言。
这对于一次性构建非常有用,但我想在应用程序中添加一个 UI 切换,允许 QA 切换double-length PseudoLanguage。QA 的目标是进入应用程序内的调试设置菜单并打开double-length PseudoLanguage或关闭。
具体来说,有没有办法double-length PseudoLanguage在代码中切换?
localization ×10
android ×2
c# ×2
wpf ×2
xcode ×2
.net ×1
attributes ×1
autolayout ×1
ios ×1
javascript ×1
mvvm ×1
razor-pages ×1
reactjs ×1
resx ×1
swift ×1
textview ×1
tmx ×1
xsl-fo ×1
xslt ×1