Como lidar com idiomas RTL e LTR mistos nas notificações?

fundo

O Android 4.3 adicionou muito suporte para idiomas RTL (da direita para a esquerda), como hebraico e árabe.

O problema

Mesmo que haja "textDirection", "layoutDirection" e "gravity", não consigo encontrar os equivalentes para o construtor de notificações, nem mesmo na biblioteca de compatibilidade.

Isso significa que, se houver palavras hebraicas e inglesas juntas, a ordem está errada. Por exemplo (e escrevo em inglês para simplificar):

Em vez de "X chamado Y", você obtém "Y chamado X" (suponha que "chamado" seja uma palavra em hebraico), pois a string deve estar neste formato:

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

Nota: X e Y podem ser palavras RTL ou LTR (e números pares).

O requisito é que, em hebraico, a palavra à direita seja X, depois a palavra "chamada" (mas em hebraico, é claro) e, em seguida, Y à esquerda. Como tentei mostrar no exemplo da analogia em inglês, é o contrário.

O que eu tentei

uma. Tentei pesquisar na documentação e tudo o que descobri é que provavelmente precisarei substituir o layout, mas essa não é uma boa solução. As razões:

Talvez eu não use o estilo correto do Android.Não é uma prova do futuro para as próximas versões do Android, que podem usar um estilo diferente.Não suporta o texto do ticker.

b. Também tentei investigar quais caracteres especiais forçariam a direção do texto a ser diferente, e funcionou adicionando '\ u200f' ao início e no final do texto para mostrar, mas há algumas falhas:

não é tão flexível quanto os outros atributos.Não sei se utilizo a maneira oficial de lidar com esse problema.Preciso adicionar isso sempre que uso uma notificaçãoNão funciona para o tickerText. apenas para notificações e, mesmo assim, não para todos os casos.

Aqui está um código de exemplo:

/** 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';
}

c. Eu também poderia alternar entre o '1' e o '2' na string, mas isso não lida com todos os casos, além de ser ainda mais confuso para os tradutores.

A questão

Existe alguma maneira de fazer o construtor de notificações manipular textos corretamente (para notificações e TickerText)?

Alguma maneira de ajustá-lo sem criar layouts totalmente novos para as notificações (ou alterar as strings), que podem não estar no mesmo estilo nativo do Android?

Qual é a maneira oficial de lidar com uma coisa dessas?

questionAnswers(1)

yourAnswerToTheQuestion