我正在本地化我的一个应用程序,我正在阅读关于本地化here的Android文档.这句话引起了我的注意:

将应用程序的默认文本放在res/Values/strings.xml中.

Res/Values/Strings.xml中的文本字符串应该使用默认语言,这是您预计大多数应用程序用户都会使用的语言.

现在我的问题是,如果应用程序的默认文本是从右到左的语言(比如阿拉伯语),并且您构建的所有布局都适合阿拉伯语,那么您将如何处理LTR语言?你会如何告诉Android默认语言是RTL,布局是为RTL语言设计的,以及当用户 Select LTR语言时,如何真正翻转布局?

推荐答案

经过几天的研究,阅读了关于本地化的文章,并对XML进行了一些修改,似乎使用RTL语言作为默认语言,默认情况下用RTL构建所有的UI不是一个好的 Select ,尽管可以按照下面的解释完成,但我不建议这样做,除非你已经有了一个已经在头脑中只考虑了RTL语言的应用程序,现在你想支持LTR语言,而不必手动修复所有的布局.

你需要做的唯一一件事就是强迫Android在布局方向上使用Ltr(是的,Ltr而不是RTL,因为你已经用RTL构建了布局,但Android希望它是Ltr并将其翻转,所以你必须再次翻转它),你可以很容易地在styles.xml中的应用程序主题中添加<item name="android:layoutDirection">ltr</item>.

在此之后,您应该使用受支持的LTR语言的本地化限定符创建另一个styles.xml,并覆盖您的应用程序主题,这次使用rtl表示layoutDirection.

Android相关问答推荐

Android编写动画在发布版本中崩溃

如何完全隐藏的元素堆叠在CardView?

如何将子零部件的大小调整为可以调整大小的父组件大小?

在模块中找到重复的类com.google.Firebase.auth.ktx.AuthKt||Android Studio

strings.xml中字符串数组中的占位符

房间@嵌入式VS一对一关系

Android可绘制边框删除底线

在柯特林连续测量网速

Kotlin为多个控件设置一个侦听器

DatePickerDialog (Android/Kotlin) 的两个问题

为什么我要使用 $version 而不是2.7.0?

如何在jetpack compose中通过lamda返回columnScope/RowScope

MediumTopAppBar Material3 只更改大标题

可组合的可见性不随状态变化而变化

房间创建三四表关系

在 Kotlin 客户端应用程序中发送 FCM 推送通知 - Firebase 云消息传递

预览必须是顶级声明或具有默认构造函数的顶级类

禁用通知权限后启动前台服务导致崩溃(Android 13)

Android Java Keystore 在另一台机器上损坏

在 compose 屏幕之间传递 uri 会导致:SecurityException: Permission Denial