如何处理混合RTL&通知中的LTR语言?

时间:2014-09-22 14:23:38

标签: android android-notifications android-support-library hebrew rtl-language

背景

Android 4.3增加了对RTL(从右到左)语言的大量支持,例如希伯来语和阿拉伯语。

问题

即使有“textDirection”,“layoutDirection”和“gravity”,我也找不到通知构建器的等价物,即使在兼容性库中也找不到。

这意味着如果一起有希伯来语和英语单词,则顺序错误。 例如(为简单起见,我用英文写作):

而不是“X叫Y”,而不是“Y叫X”(假设“被称为”是希伯来语中的一个单词),因为该字符串应该采用以下格式:

<string name="notification">%1$s called %2$s</string>

注意:X和Y可以是RTL或LTR字(和偶数)。

要求是在希伯来语中,右边的单词应该是X,然后是“被叫”(当然是希伯来语),然后是左边的Y.正如我试图在英语类比例中所示,它恰恰相反。

我尝试了什么

一个。我试图搜索文档,我发现的是我可能需要覆盖布局,但这不是一个好的解决方案。原因:

  1. 我可能不会使用Android的正确样式。
  2. 对于下一个可能使用不同样式的Android版本,这不是未来的证据。
  3. 它不支持自动收报机文字。
  4. 湾我还试图调查哪些特殊字符会强制文本方向不同,并且通过在显示的文本的开头和结尾添加'\ u200f'来起作用,但它有一些缺陷:

    1. 它没有其他属性那么灵活。
    2. 我不确定我是否使用官方方式来解决这个问题。
    3. 我每次使用通知时都需要添加此内容
    4. 它对tickerText完全不起作用。仅适用于通知,即便如此,也不适用于所有情况。
    5. 以下是示例代码:

      /** prepares a string to be shown in a notification, so that it will be shown even on RTL languages */
      @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
      public static String prepareNotificationText(final Context context, final String text) {
          if (VERSION.SDK_INT < VERSION_CODES.JELLY_BEAN_MR1)
              return text;
          final boolean isRTL = context.getResources().getConfiguration().getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;
          if (!isRTL)
              return text;
          return '\u200f' + text + '\u200f';
      }
      

      ℃。我也可以在字符串中的“1”和“2”之间切换,但这并不能处理所有情况,而且对翻译者来说更加困惑。

      问题

      有没有办法让通知构建器正确处理文本(对于通知和TickerText)?

      任何方式调整它而不实际为通知(或更改字符串)创建全新的布局,这可能与Android的原生样式不同?

      处理这类事情的官方方式是什么?

0 个答案:

没有答案