今天有一位采访者问我如何将阿拉伯语作为第二语言实现到PHP Web应用程序中.我谈到为数据库和前端选择unicode编码,以及设计RTL友好的用户界面模块.他对答案似乎并不满意.我对多语言系统一无所知,你会如何回答这个问题?
我需要在打印前知道文本的方向.
我正在使用Unicode字符.
我怎么能用C++做到这一点?
这是一个问题和答案:-)
很长一段时间以来,我尝试使用希伯来语的JQM.获取希伯来字母很容易(utf-8编码......),但是没有用的东西就是对齐.我的意思是切换元素的方向,文本对齐,定位等.
我发现了很多关于这方面的问题,但答案很少(而且我发现的答案并不完整).
然后我找到了这篇优秀的文章:http: //rtl-this.com/tutorial/rtling-hello-world-webpage-rtling
我在css文件上实现了它(更确切地说是在这里:http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.css).
那工作:-)
如果我想弄清楚如何上传文件,我会分享:-)我希望这会有用.
我刚用Netbeans 7.1为我的手机创建了一个简单的java-me程序.我
有一个启动画面,然后是一个包含4个项目的列表.
我想从右到左对齐我的列表项RTL
有没有办法做到这一点?
注意!这不涉及到正则表达式的问题,整个字符串相匹配的部分,而不是
大家好.我试着去做
Match y = Regex.Match(someHebrewContainingLine, @"^.{0,9} - \[(.*)?\s\d{1,3}");
Run Code Online (Sandbox Code Playgroud)
除了其他VS希伯来语怪癖(你喜欢如何替换)[编辑字符串?)时,它偶尔会返回疯狂的结果:
Match.Captures.Count = 1;
Match.Captures[0] = whole string! (not expected)
Match.Groups.Count = 2; (not expected)
Match.Groups[0] = whole string again! (not expected)
Match.Groups[1] = (.*)? value (expected).
Run Code Online (Sandbox Code Playgroud)
Regex.Matches() 同样的行为.
这种行为的一般原因是什么?注意:它不会像这样简单的测试字符串Regex.Match("-???45--", "-(.{1,5})-") (样本显示不正确!,请查看页面的源代码),必须有正则表达式使其贪婪.匹配的字符串包含[ .... ],但只是将它们添加到测试字符串不会导致相同的效果.
我有一些代码试图确定文本区域的给定垂直切片中的文本是什么,其中垂直切片被指定为Y坐标而不是线.
顺便说一下,转换为使用线数学是这个问题的一个很好的解决方法,所以这就是我将要使用的,但是我可以设想你可能只有Y坐标的情况,它看起来像这样的东西会出现,所以无论如何我都会问它.
我把我的问题简化为一个相当简约(lol Java)的例子.我们显示带有一些文本的框架,然后尝试确定最接近文本区域开头的文本的字符偏移量.我们从常识中知道它将为0,但是以编程方式解决问题就是问题.
public static void main(String[] args) throws Exception {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new RtlTest().run();
}
});
}
JFrame frame;
JTextArea textArea;
public void run() {
textArea = new JTextArea(
"\u05D4\u05D5\u05D3\u05E2\u05EA \u05D8\u05D9\u05D9\u05D2\u05E8 " +
"\u05D8\u05E7\u05E1\u05D8 \u05D1\u05E2\u05D1\u05E8\u05D9\u05EA");
frame = new JFrame();
frame.setLayout(new BorderLayout());
frame.add(new JScrollPane(textArea), BorderLayout.CENTER);
frame.setSize(400, 300);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
measure();
}
});
}
public void measure() {
try {
System.out.println("Either the line is left to …Run Code Online (Sandbox Code Playgroud) 当我尝试将NotePad ++的方向更改为rtl(从右到左)时,它看起来像这样:

(我写了“测试”)。
请帮我 :)
我想在Android中布局下面的rtl(从右到左)就像layoutDirection="rtl"在父布局中使用时(但它仅用于4.2及更高版本)以及任何方式使其明确地从右向左.这是主要的android项目布局的一部分,用于Android中的Preference Activity.
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2006 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. …Run Code Online (Sandbox Code Playgroud) 我想让它产生一个单词旁边的数字,这样我就可以要求用户使用相应的数字来选择单词.
这是我的代码
alt_words = hlst
loopnum = 8
for i in range(loopnum):
if i < len(alt_words):
print('{0}. {1:<20}'.format((i+1), alt_words[i]), end =' ')
if i == 0:
print('', end=' ')
if i + 9 <= len(alt_words):
print('{0}. {1:<20}'.format((i+9), alt_words[i+8]), end =' ')
if i + 17 <= len(alt_words):
print('{0}. {1:<20}'.format((i+17), alt_words[i+16]), end=' ')
print('\n'+'-'*80)
Run Code Online (Sandbox Code Playgroud)
每行的第一个数字打印在左侧,但是右侧的单词,而其余的数字和单词打印在RTL上.似乎一旦python开始在LTR线上打印,它就可以切换到RTL,但不能从RTL返回到LTR.请注意,即使周期打印在每行第二组数字的数字右侧.
它工作得很好,用英文单词看起来不错:
我猜一个工作可能涉及把数字放在后面,但我认为必须有一个更好的方法.
我正在尝试从右到左显示ListView的列.这已经被问及并回答了.但问题是关于图标和复选框.当我使用ListView RTL时SetWindowLong,它也会反映图形和复选框,这是不需要的.我可以使用编辑工具镜像图形,困扰但可行,但我不知道如何处理复选框.
我认为他们两个都有相同的原因,所以我搜索了它并在Microsoft Docs中找到了一篇关于RTL布局的完整文章.在" 按设备上下文激活镜像"部分中,它指出了图形问题.它建议改变DC的布局样式LAYOUT_RTL和LAYOUT_BITMAPORIENTATIONPRESERVED标志.
这是我用文章中提出的组合方法和上面提到的答案实现的功能:
const
LAYOUT_RTL = 1;
LAYOUT_BITMAPORIENTATIONPRESERVED = 8;
function GetLayout(DC: HDC): DWORD; stdcall; external 'gdi32.dll';
function SetLayout(DC: HDC; dwLayout: DWORD): DWORD; stdcall; external 'gdi32.dll';
procedure MakeRTL(const Handle: HWND);
var
DC: HDC;
begin
SetWindowLong(Handle, GWL_EXSTYLE,
GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYOUTRTL);
DC := GetWindowDC(Handle);
if DC <> 0 then
SetLayout(DC, GetLayout(DC) or LAYOUT_RTL or LAYOUT_ORIENTATIONMASK);
InvalidateRect(Handle, nil, True);
end;
Run Code Online (Sandbox Code Playgroud)
但它没有改变任何东西.我试图阻止其中任何一个,改变它们的顺序并改变不同的地方来调用它,但没有成功.
现在的问题是,如何使ListView的列从右到左显示,而不镜像图形或复选框?
我正在使用Win10 x64和Delphi 2010.
如果你想重现这个问题,这是我的delphi代码:
unit Unit1; …Run Code Online (Sandbox Code Playgroud)