Gerenciamento de tradução

Sobre o Ar (Cordas)

O conteúdo de toda a Central de Ajuda é traduzido automaticamente de inglês pelo Phrase Language AI.

Atualize as traduções para os aplicativos iOS, Android, React Native e Flutter com um único clique sem lançar uma nova versão na App Store ou Google Play. As atualizações para rótulos de texto são enviadas instantaneamente para aplicativos móveis.

OTA_user_device_diagram.png

Over-the-Air (OTA) também se integra com as plataformas i18Next e Rails, permitindo que os usuários atualizem e gerenciem conteúdo localizado em aplicativos web sem a necessidade de uma reimplantação.

Uma nova versão deve ser criada para que as configurações atualizadas sejam aplicadas.

Ao iniciar um aplicativo implementando o iOS, Android, React Native ou Flutter SDK pela primeira vez em um dispositivo, um identificador de dispositivo exclusivo e aleatório é gerado. Esse identificador rastreia usuários ativos durante um determinado período de tempo. Ele não é usado para qualquer outra forma ou meio de rastreamento e não contém nenhuma informação do usuário ou dispositivo.

O único limite em relação à OTA é a quantidade de MAU (usuários ativos mensais), dependendo do plano de preços selecionado.

MAU é o número de dispositivos a partir dos quais as traduções são solicitadas. A cada dispositivo é atribuído um ID aleatório e o MAU é calculado a partir do número de IDs diferentes atribuídos nos últimos 30 dias.

Data

O SDK se comunica com o serviço OTA para verificar se há atualizações e inclui os seguintes detalhes em cada solicitação:

  • Identificador do dispositivo (por exemplo, "F3AFCB10-80A2-84CB-94C0-27F5EF58876D". Exclusivo para este aplicativo e, portanto, não permite rastrear um dispositivo específico.)

  • Versão do aplicativo (por exemplo, "1.2.0")

  • Última atualização do arquivo de tradução (por exemplo, "1542187679")

  • Versão do SDK (por exemplo, "1.0.0")

  • Localidade (por exemplo, "de-DE")

  • Formato de arquivo (por exemplo, "strings")

  • Cliente (por exemplo, "ios")

  • ID de distribuição (ID da distribuição)

  • Segredo do ambiente (para distinguir entre desenvolvimento e produção)

Distribuições OTA

As plataformas de destino são definidas dentro da distribuição:

  • iOS

  • Android

  • Tremulação

  • i18next

  • Trilhos

Várias distribuições são possíveis, mas o ideal é que haja uma distribuição por projeto. Se estiver usando uma distribuição para iOS e Android, os espaços reservados para os dois formatos serão convertidos automaticamente.

Fallbacks

Se os fallbacks de idioma forem definidos nas configurações de idioma do projeto ao qual a distribuição está conectada, cadeias de caracteres do idioma selecionado serão exibidas se o idioma solicitado existir, mas a chave não for traduzida.

Se um idioma específico do país (por exemplo, en-GB) for usado, mas não fizer parte da versão, o sistema poderá recorrer a uma versão padrão (por exemplo, en) desse idioma, se ele existir no projeto. Se o idioma solicitado não for encontrado, a localidade padrão do projeto poderá ser atendida.

Criar uma distribuição

Para criar uma distribuição, execute estas etapas:

  1. Na caixa OTA (Over the air) na página Integrações , clique em Configurar ou no número de configurações, se já existirem algumas.

    A página Over the air é aberta e exibe as configurações existentes.

  2. Clique em Nova distribuição. As janelas Adicionar distribuição são abertas.

  3. Na guia Geral , forneça um Nome, a qual Projeto a distribuição está associada, Idiomas necessários e Plataformas necessárias.

    • Para distribuições Android, clique na guia Android para selecionar a opção de formato que inclui qualquer tradução, incluindo tags HTML no CDATA, se necessário.

    • Depois de selecionar o projeto a ser associado à distribuição, a guia Agendamento fica disponível. Se necessário, use esta guia para configurar versões agendadas OTA na distribuição.

  4. Na guia Idiomas de fallback , selecione configurações de fallback específicas da distribuição, conforme necessário. As opções de fallback são priorizadas conforme exibido na lista.

  5. Opcionalmente, clique na guia Traduções para selecionar a opção de usar a versão revisada mais recente das traduções.

  6. Clique em Salvar.

    Os detalhes da distribuição são exibidos com IDs exigidos pelos SDKs. Os detalhes podem ser exibidos novamente clicando na distribuição na página Sobre o ar .

Lançamentos OTA

Para atualizar as traduções, crie uma nova versão dentro da distribuição. O estado atual do projeto é exportado e disponibilizado para clientes conectados.

Para criar uma versão, execute estas etapas:

  1. Na página Sobre o ar, clique em Adicionar versão ao lado da distribuição necessária.

    A janela Nova versão é aberta.

  2. Forneça uma descrição, plataforma necessária, ramificação, localidades e versões do aplicativo.

    Se necessário, insira tags para incluir apenas chaves com tags específicas na versão.

  3. Clique em Salvar.

    A versão é adicionada à lista na parte inferior da página de detalhes da distribuição.

Agendar lançamentos OTA

Para configurar agendas recorrentes para liberar a distribuição, execute estas etapas:

  1. Na página Over the air, clique no ícone roda dentada ao lado da distribuição necessária.

    A janela Editar distribuição é exibida.

  2. Selecione a guia Agendar versão e clique em Habilitar agendamento.

    As opções de agendamento de lançamento são exibidas.

    Nota

    As opções de agendamento também estão disponíveis em de criação de uma nova distribuição.

  3. Na lista suspensa Criar versões a cada , escolha a frequência de lançamento selecionando uma das opções disponíveis:

    • Dia

    • Semana

      Selecione os dias da semana desejados para as versões agendadas.

  4. Forneça um horário e fuso horário relevante.

  5. Se necessário, selecione Ramificação, Tags e Idiomas para as versões agendadas.

    • O campo Ramificação será exibido somente se a ramificação estiver habilitada no projeto. A seleção de uma ramificação atualiza a lista de localidades e idiomas.

  6. Opcionalmente, especifique as versões do aplicativo nos campos Versão mínima e Versão máxima .

    Deixe em branco para aplicar a liberação de agendamento a todas as versões do aplicativo.

  7. Clique em Salvar.

    A distribuição é atualizada com informações de agendamento de lançamento.

Desabilitar o agendamento interrompe a liberação automática da distribuição, mas as configurações definidas são salvas.

Relatórios do OTA Mobile SDK e da Biblioteca da Web

A integração do SDK móvel ou da biblioteca da Web apropriado permite a atualização de traduções com um único clique, mas também fornece métricas para medir o uso. Os relatórios do SDK móvel e da biblioteca da Web fornecem informações valiosas sobre os usuários ativos do aplicativo e seus idiomas de aplicativo. Esse conjunto de relatórios pode ser acessado para cada distribuição e os dados para os relatórios são atualizados duas vezes por dia.

Os relatórios são fornecidos para o número de usuários ativos, solicitações gerais, solicitações por idioma, solicitações por plataforma e para idiomas de dispositivo não fornecidos.

Os relatórios de cada distribuição são acessados por meio do ícone na página Over the air.

Instalação do SDK do Android OTA

Com o SDK, o aplicativo verifica regularmente se há traduções atualizadas e as baixa em segundo plano.

Verifique regularmente as versões mais recentes do SDK do Android, especialmente considerando atualizações.

Se as traduções não estiverem sendo atualizadas:

  • Verifique se a ID da distribuição e o segredo do ambiente estão corretos.

  • Verifique se uma versão foi criada para a versão atual do aplicativo.

  • Recarregue o ViewController para que as alterações apareçam imediatamente.

Se a versão errada de uma tradução estiver sendo usada, verifique se uma versão com as traduções mais recentes e a versão atual do aplicativo está disponível e o versionName para o aplicativo definido e estão usando o formato <major>.<minor>.<point>.

Requisitos

  • O SDK requer pelo menos appcompat versão 1.2.0. Se estiver usando uma versão mais antiga do appcompat, considere usar o SDK versão 2.1.3

  • A biblioteca depende do AndroidX para oferecer suporte a elementos de interface do usuário compatíveis com versões anteriores, como a barra de ferramentas.

Incluir o SDK

Adicione um novo repositório à raiz build.gradle:

allprojects {
    repositórios {
        ...
        maven { url "https://maven.download.phrase.com" }
    }
}

Adicione a biblioteca como uma dependência:

dependências {
    implementation "com.phrase.android:ota-sdk:3.5.0"
    ...
}

Suporte ao Jetpack Compose

Para habilitar o suporte do Jetpack Compose para traduções OTA, execute estas etapas:

  1. Adicione a implementação da biblioteca "com.phrase.android:ota-sdk-compose:3.5.0" à raiz build.gradle.

  2. Envolva o código Jetpack Compose em Phrase { ... }.

Configuração

Inicialize o SDK na classe do aplicativo e adicione a ID de distribuição e o segredo do ambiente. As classes herdadas de Application devem substituir attachBaseContext para permitir traduções fora do contexto de atividade:

public class MainApplication estende Application {
  @Override
  public void onCreate() {
      super.onCreate();
      Phrase.setup(this, "DISTRIBUTION_ID", "ENVIRONMENT_TOKEN");
      Phrase.updateTranslations();
  }

  @Override
  protected void attachBaseContext(Context newBase) {
    super.attachBaseContext(Phrase.wrapApplicationContext(newBase));
  }  
}

Eu injeto o SDK em cada atividade, por exemplo, criando uma atividade base da qual todas as outras atividades herdam:

classe pública BaseActivity estende AppCompatActivity {
  @NonNull
  @Override
  public AppCompatDelegate getDelegate() {
    return Phrase.getDelegate(this, super.getDelegate());
  }
}

As traduções podem ser usadas como de costume em layouts:

<TextView android:text="@string/translation_key" />

E dentro do código:

TextView text = (TextView) findViewById(R.id.text_id);
text.setText(R.string.translation_key);

Algumas bibliotecas não oferecem suporte ao desempacotamento automático do contexto e esperam uma classe específica. Nesse caso, o encapsulamento de contexto nos componentes do Jetpack Compose pode ser desabilitado com:

Phrase(contextWrapping = false) {
    Text( text = phraseString(R.string.test) )
}

Configurações para níveis de log:

  • Java PhraseLog.setLogLevel(Severity.Debug);

  • Kotlin

    PhraseLog.logLevel = Severity.Verbose

  • Outras opções de registro suportadas

    • Nenhum

    • Erro

    • advertência

    • Informações

    • Depurar

    • Prolixo

Alterar Idioma

Se não estiver usando o idioma do sistema, um idioma diferente pode ser definido no método setLocaleCode. O código de idioma (localidade) deve estar presente em uma versão.

Phrase.setLocaleCode("fr");
Phrase.updateTranslations();

Versão personalizada do aplicativo

O SDK usa a versão do aplicativo por padrão para retornar uma versão que corresponde às restrições de versão para a versão min e max. A versão do aplicativo deve usar controle de versão semântico, caso contrário, nenhuma atualização de tradução será retornada. Caso o aplicativo não use controle de versão semântico, é possível substituir manualmente a versão do aplicativo usada.

Exemplo:

Phrase.setAppVersion("3.2.4");

A versão deve ser definida antes de chamar updateTranslations( ).

Definir tempo limite

O tempo limite padrão para downloads de tradução é definido como 10s.

O padrão pode ser alterado com:

Frase.setTimeout(10000); Tempo limite em milissegundos

Atualizar retorno de chamada

Se o tratamento de atualizações de tradução bem-sucedidas for necessário, anexe um manipulador de retorno de chamada:

Phrase.updateTranslations(new TranslationsSyncCallback() {
    @Override
    public void onSuccess(boolean translationsChanged) {
    }

    @Override
    public void onFailure() {
    }
});

As atualizações de tradução também podem ser acionadas manualmente. Traduções recém-obtidas são exibidas na próxima inicialização do aplicativo.

Para disponibilizar as traduções mais recentes imediatamente, use o método Phrase.applyPendingUpdates(). Isso pode ser combinado com a escuta de atualizações de tradução:

Phrase.updateTranslations(new TranslationsSyncCallback() {
    @Override
    public void onSuccess(boolean translationsChanged) {
      if(translationsChanged) {
         Phrase.applyPendingUpdates()
        Lógica personalizada para atualizar a interface do usuário
      }
    }

    @Override
    public void onFailure() {
    }
});

A interface do usuário não exibe traduções automaticamente e deve ser recriada.

Configurar o data center dos EUA

O data center Phrase US também é suportado. O data center dos EUA pode ser configurado chamando:

Phrase.setHost("https://ota.us.app.phrase.com")

Fallback

Caso não seja possível acessar o Phrase devido a uma conexão de rede ausente do cliente ou uma interrupção do serviço, o SDK usa as traduções agrupadas do arquivo de recurso. Recomenda-se a atualização regular das traduções agrupadas no aplicativo. O SDK também armazena em cache traduções localmente no dispositivo. Se esse cache existir, ele será usado até a próxima atualização de tradução.

O SDK usa a versão mais recente para as traduções. Caso o versionName do aplicativo esteja definido, a versão mais recente que satisfaça as restrições de versão será usada.

Adicionar um novo idioma

Criar o novo idioma no Phrase e criar uma nova versão. O SDK busca o idioma quando este é o idioma do dispositivo de um usuário. Recomenda-se adicionar regularmente um novo strings.xml para novos arquivos de idiomas ao lançar uma nova versão do aplicativo ou os usuários verão apenas as traduções de fallback determinadas pelo Android no primeiro início do aplicativo.

Auditoria

O SDK é de código fechado e não pode ser visualizado ou modificado. Se for um requisito da organização, auditorias podem ser fornecidas. Entre em contato conosco para mais detalhes, se necessário.

Suporte ao Modo de Exibição Personalizado

Modos de exibição personalizados podem ser traduzidos usando atributos com estilo. Como TypedArray não permite substituir os recursos, pequenas alterações no modo de exibição personalizado são necessárias:

  • Exemplo de Kotlin

    Antes:

    context.obtainStyledAttributes(attrs, R.styleable.CustomView, defStyleAttr, 0).use {
        text = it.getText(R.styleable.CustomView_android_text)
    }

    Depois:

    context.obtainStyledAttributes(attrs, R.styleable.CustomView, defStyleAttr, 0).use {
        text = it.getTextWithPhrase(R.styleable.CustomView_android_text)
    }
  • Exemplo de Java

    Antes:

    final TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.CustomView, defStyleAttr, 0);
    tente {
        setText(ta.getText(R.styleable.CustomView_android_text));
    } finalmente {
        ta.recycle();
    }

    Depois:

    final TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.CustomView, defStyleAttr, 0);
    tente {
        setText(PhraseTypedArray.getTextWithPhrase(ta, R.styleable.CustomView_android_text));
    } finalmente {
        ta.recycle();
    }

Aplicativo de exemplo

https://github.com/phrase/android-sdk-example

Instalação do OTA Flutter SDK

Com o SDK, o aplicativo verifica regularmente se há traduções atualizadas e as baixa em segundo plano.

Requisitos

Essa biblioteca depende da versão 0.17.0 da biblioteca intl do Flutter. Siga o guia para adicionar suporte a localizações ao aplicativo.

Instalação

Adicione frase ao pubspec.yaml:

Dependências:
  frase: ^1.0.1 
  ...
  intl: ^0.17.0
  flutter_localizations:
    SDK: Flutter
  ...

tremulação:
  Gerar: true
  ...

Como na biblioteca intl, a geração de código é usada para processar arquivos ARB. Execute este comando para atualizar:

flutter pub executar frase

Usando build_runner:

flutter pub correr build_runner assistir

Uso

Inicialize a frase no arquivo main.dart:

import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:flutter_gen/gen_l10n/phrase_localizations.dart';
import 'package:phrase/phrase.dart';

void main() {
  Phrase.setup("[DISTRIBUTION_ID]", "[ENVIRONMENT_ID]");
  runApp(MyApp());
}

classe MyApp estende StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      título: 'Flutter Demo',
      //..
      localizationsDelegates: PhraseLocalizations.localizationsDelegates,
      supportedLocales: PhraseLocalizations.supportedLocales,
    );
  }
}

Acesse mensagens com:

Text(AppLocalizations.of(context)!.helloWorld);

Personalização

Comportamento de atualização

As traduções OTA são atualizadas sempre que o aplicativo é iniciado. Para desativar isso:

Phrase.setup("[DISTRIBUTION_ID]", "[ENVIRONMENT_ID]", 
    checkForUpdates: false);

Para atualizar manualmente:

Phrase.updateTranslations(context).then((_) => print("Done!"));

Versão personalizada do aplicativo

O SDK usa a versão do aplicativo por padrão para retornar uma versão que corresponde às restrições de versão para a versão min e max. A versão do aplicativo deve usar controle de versão semântico, caso contrário, nenhuma atualização de tradução será retornada. Caso o aplicativo não use controle de versão semântico, a versão do aplicativo pode ser substituída manualmente: é possível substituir manualmente a versão do aplicativo:

Phrase.setup("[DISTRIBUTION_ID]", "[ENVIRONMENT_ID]",
    customAppVersion: "1.2.3");

Configurar o data center dos EUA

O data center Phrase US também é suportado. O data center dos EUA pode ser selecionado passando o parâmetro de nome de host da API relevante na configuração do SDK:

Phrase.setup("[DISTRIBUTION_ID]", "[ENVIRONMENT_ID]", host: PhraseHost.us);

Aplicativo de exemplo

https://github.com/phrase/flutter_sdk_example

Instalação OTA iOS

Com o SDK, o aplicativo verifica regularmente se há traduções atualizadas e as baixa em segundo plano.

O Mac Catalyst também é suportado.

O SDK pode ser instalado manualmente ou através do Swift Package Manager, Carthage ou Cocoa Pods.

Se as traduções não estiverem sendo atualizadas:

  • Verifique se a ID da distribuição e o segredo do ambiente estão corretos.

  • Verifique se uma versão foi criada para a versão atual do aplicativo.

  • Recarregue o ViewController para que as alterações apareçam imediatamente.

Se a versão errada de uma tradução estiver sendo usada, verifique se uma versão com as traduções mais recentes e a versão atual do aplicativo está disponível.

Gerenciador de pacotes Swift

Adicione a URL do repositório público (https://github.com/phrase/ios-sdk/). O Xcode manipula automaticamente o resto da instalação.

Carthage

Adicione a seguinte linha ao seu Cartfile:

binary "https://raw.githubusercontent.com/phrase/ios-sdk/master/PhraseSDK.json" ~> 3.0.0

Execute a atualização de cartago e adicione o PhraseApp.framework ao seu projeto conforme descrito na documentação de Cartago.

Vagens de Cacau

Adicione a seguinte linha ao seu Podfile:

pod 'PhraseSDK'

Execute a instalação do pod. Se for novo no CocoaPods, consulte a documentação deles.

Instalação manual

Siga estes passos:

  1. Baixe a versão mais recente.

  2. Adicione PhraseSDK.framework no Xcode como o binário vinculado ao destino.

  3. Um script para remover os binários extras precisa ser executado antes de carregar o aplicativo, pois a Apple Store rejeita aplicativos, incluindo binários do simulador.

    Vá para Fases de compilação e adicione uma seção Executar script clicando no símbolo +. Cole neste script:

    FRAMEWORK="PhraseSDK"
    FRAMEWORK_EXECUTABLE_PATH="${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/$FRAMEWORK.framework/$FRAMEWORK"
    EXTRACTED_ARCHS=()
    para a ARCH em $ARCHS
    fazer
       lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH"
       EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH")
    terminado
    lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRACTED_ARCHS[@]}"
    rm "${EXTRACTED_ARCHS[@]}"
    rm "$FRAMEWORK_EXECUTABLE_PATH"
    mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH"

Configuração

  1. Importar PhraseSDK:

    import PhraseSDK
  2. Inicialize o SDK chamando o seguinte código:

    Phrase.shared.setup(
      distributionID: <ID de distribuição>, 
      environmentSecret: <Segredo do Meio Ambiente>
    )
  3. Para atualizar arquivos de localização, chame Phrase.shared.updateTranslation().

    Esse método gerará uma exceção se o SDK não estiver configurado corretamente.

    Para configurar a OTA para usar o data center dos EUA, defina o host antes de chamar PhraseApp.shared.updateTranslation() com Phrase.shared.configuration.apiHost = .us.

Recomenda-se chamar ambas as funções dentro do AppDelegate no método applicationDidFinishLaunchingWithOptions .

Objetivo-C

Integre o SDK ao aplicativo Objective-C:

@import PhraseSDK;

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  [[Frase compartilhada] setDebugMode:true]; Opcional

  [[Frase compartilhada] setupWithDistributionID:@"Seu ID de distribuição"
                         environmentSecret:@"Your Environment Secret"];

  // OR:
  //
  [[Frase compartilhada] setupWithDistributionID:@"Seu ID de distribuição"
  environmentSecret:@"Seu Segredo Ambiental"
  //                                   timeout:10];

  Atualize as traduções usando o bloco de retorno de chamada:
  [[Frase compartilhada] updateTranslationsWithCompletionHandler:^(BOOL atualizado, NSError* error){
    NSLog(@"Updated: %@", updated ? @"true" : @"false");

    if (erro) {
      NSLog(@"Domínio: %@ Código: %ld Mensagem: %@", error.domain, (long)error.code, error.localizedDescription);
    } else {
      NSLog(@"No error");
    }

    Traduzir via bundle proxy:
    NSString *translation = NSLocalizedString(@"layouts.application.about", @"");
    NSLog(@"NSLocalizedString via proxy de pacote: %@", tradução);

    // OR:
    //
    Traduzir usando o método de fallback:
    NSString *otherTranslation = [[Frase compartilhada]
                                  localizedStringForKey:@"layouts.application.about" value:NULL table:NULL];
    NSLog(@"Phrase.shared localizedStringForKey: %@", otherTranslation);
  }];

  // OR:
  //
  [[Frase compartilhada] updateTranslationsWithCompletionHandler:NULL]; ignorar resultado e erros (não recomendado)

  // [...] Seu outro código
  
  retornar SIM;
}

Desativar swizzling

Para desativar o swizzling, defina PhraseSDKMainBundleProxyDisabled como SIM no arquivo Info.plist .

Quando o swizzling está desativado, as traduções atualizadas não são mais exibidas. A tradução ainda será sincronizada se updateTranslation for chamada e puder ser acessada com o método Phrase.localizedString().

Manipulação de versão do aplicativo

Para determinar qual versão deve ser retornada, o SDK requer uma versão semântica do aplicativo para que as traduções sejam atualizadas.

O SDK tenta obter uma versão semântica da seguinte maneira:

  • CFBundleShortVersionString é usado se semântico.

  • Caso contrário, CFBundleVersion é usado se semântico.

  • Se ambos não forem semânticos, uma combinação de (CFBundleShortVersionString.CFBundleVersion) será usada.

Se CFBundleShortVersionString estiver ausente ou não puder ser criado com uma versão semântica junto com CFBundleVersion, o SDK lançará a mensagem PhraseSetupError.appVersionNotSemantic .

Desabilitar a tradução para várias tabelas

Para impedir que a OTA converta qualquer tabela no pacote principal do iOS que não seja a tabela Localizável padrão, defina a seguinte opção:

Phrase.shared.configuration.ignoreOtherTables = true

Retornos

Anexe um manipulador de retorno de chamada para lidar com atualizações de tradução bem-sucedidas:

Phrase.shared.updateTranslation { resultado em
            resultado da mudança {
            case .success(let atualizado):
            Caso .failure:
            }
        }

Modo de depuração

Se mais informações forem necessárias, habilite o modo de depuração para obter log adicional do PhraseSDK.framework no console:

Phrase.shared.configuration.debugMode = verdadeiro

Definir tempo limite para solicitações

Defina um tempo limite para as solicitações em relação à Frase chamando:

Phrase.shared.configuration.timeout = TimeInterval(20)

O tempo limite padrão é de 10 segundos e as conexões que levam mais de 10 segundos serão fechadas.

Fornecer substituição manual de idioma

Se não estiver usando o idioma do sistema como localidade, uma localidade diferente pode ser definida na chamada init. O código de localidade precisa estar presente em uma versão do Phrase:

Phrase.shared.configuration.localeOverride = "en-US"

Fallback

Caso novas traduções não possam ser obtidas do Phrase por meio do SDK, os arquivos de tradução mais recentes recebidos pela instalação serão usados. Se o aplicativo nunca recebeu novos arquivos do Phrase, ele usa os arquivos de tradução compilados do aplicativo. Isso evita erros em caso de dificuldades técnicas ou erros de rede. Recomenda-se manter os arquivos de tradução compilados no aplicativo atualizados a cada versão.

Auditoria

O SDK é de código fechado e não pode ser visualizado ou modificado. Se for um requisito da organização, auditorias podem ser fornecidas. Entre em contato conosco para mais detalhes, se necessário.

Instalação do OTA React Native SDK

Com o SDK, o aplicativo verifica regularmente se há traduções atualizadas e as baixa em segundo plano.

A biblioteca para traduções OTA só funciona com a biblioteca react-i18next.

Para instalar o SDK do React Native, execute estas etapas:

  1. Execute este comando:

    $ npm instalar react-native-phrase-sdk --save
  2. Inicializar frase:

    importar frase de "react-native-phrase-sdk";
    
    let phrase = nova frase(
        "YOUR_DISTRIBUTION_ID",
        "YOUR_DEVELOPMENT_OR_PRODUCTION_SECRET",
        "YOUR_APP_VERSION",
        "i18next"
    );

    O formato de arquivo pode ser i18next (como no exemplo acima) ou i18next_4, o que resulta no arquivo de formato i18next v4.

    O data center Phrase US também é suportado. Para usar o SDK do React Native com o data center dos EUA, passe o host relevante durante a inicialização:

    importar frase de "react-native-phrase-sdk";
    
    let phrase = nova frase(
        "YOUR_DISTRIBUTION_ID",
        "YOUR_DEVELOPMENT_OR_PRODUCTION_SECRET",
        "YOUR_APP_VERSION",
        "i18next",
        host="https://ota.us.app.phrase.com"
    );  
    
  3. Crie o back-end i18next com base na instância:

    import resourcesToBackend from "i18next-resources-to-backend";
    
    const backendPhrase = resourcesToBackend((language, namespace, callback) => {
        phrase.requestTranslation(language)
            .then((remoteResources) => {
                callback(null, remoteResources);
            })
            .catch((error) => {
                callback(erro, nulo);
            });
    });
    
    const backendFallback = resourcesToBackend(localResources)
  4. Inicialize o i18n com o back-end da frase:

    i18n
      .use(ChainedBackend)
      .use(initReactI18next)
      .init({
        Back-end: {
            back-ends: [backendPhrase, backendFallback]
        }
        //...
      });

Arquivo de i18next.js de exemplo

importar i18n de "i18next";
import { initReactI18next } from "react-i18next";
importar ChainedBackend de "i18next-chained-backend";
import resourcesToBackend from "i18next-resources-to-backend";
import translationEN from "./locales/en/translation.json";
import translationRU from "./locales/ru/translation.json";
importar frase de "react-native-phrase-sdk";

const localResources = {
  pt: {
    tradução: traduçãoPT,
  },
  ru: {
    tradução: translationRU,
  },
};

let phrase = nova frase(
    "YOUR_DISTRIBUTION_ID",
    "YOUR_ENVIRONMENT_ID",
    require('./package.json').version,
    "i18next"
);

const backendPhrase = resourcesToBackend((language, namespace, callback) => {
    phrase.requestTranslation(language)
        .then((remoteResources) => {
            callback(null, remoteResources);
        })
        .catch((error) => {
            callback(erro, nulo);
        });
});

const backendFallback = resourcesToBackend(localResources)

i18n
  .use(ChainedBackend)
  .use(initReactI18next)
  .init({
    Back-end: {
        back-ends: [backendPhrase, backendFallback]
    },
    Depurar: verdadeiro,
    GNL: "en",
    fallbackLng: "en",
    interpolação: {
      escapeValue: false, // não é necessário para reagir, pois escapa por padrão
    }
  });

Aplicativo de exemplo

https://github.com/phrase/react_native_sdk_example

Instalação de back-end OTA i18next

A biblioteca i18next-phrase-backend implementa um back-end de exemplo para i18next que recupera as traduções de versões OTA.

Para criar uma nova versão, a plataforma i18next precisa ser configurada para a distribuição e fazer parte de uma versão.

Uso

Para inicializar a frase:

importar i18n de "i18next";
import { I18nextPhraseBackend } from "@phrase/i18next-backend";

i18n
  .use(I18nextPhraseBackend)
  .init({
    fallbackLng: 'en',
    Back-end: {
      distribuição: 'DISTRIBUTION_ID',
      segredo: 'YOUR_ENVIRONMENT_SECRET',
      appVersion: '1.0.0',
    }
  });

Cache

A biblioteca está armazenando traduções em cache e não verificará se há novas traduções por 5 minutos. O cache pode ser configurado definindo a opção cacheExpirationTime na configuração de back-end para fins de teste.

i18n
  .use(I18nextPhraseBackend)
  .init({
    fallbackLng: 'en',
    Back-end: {
      distribuição: 'DISTRIBUTION_ID',
      segredo: 'YOUR_ENVIRONMENT_SECRET',
      appVersion: '1.0.0',
      cacheExpirationTime: 60 * 5, // tempo em segundos
    }
  });

Nota

Recomenda-se usar pelo menos 5 minutos de tempo de cache em ambientes de produção.

Aplicativo de exemplo

https://github.com/phrase/ota-web-demo

Instalação de back-end do OTA Rails

A biblioteca phrase-ota-i18n implementa um back-end de exemplo para a gema I18n que recupera as traduções de versões OTA. Com a biblioteca, o aplicativo verifica regularmente se há traduções atualizadas e as baixa em segundo plano.

A biblioteca é válida para qualquer aplicativo Ruby que use o gem, i18n.

Para criar uma nova versão, a plataforma Rails precisa ser configurada para a distribuição e fazer parte de uma versão.

Instalação

  1. Adicione a seguinte linha ao Gemfile do aplicativo:

    gem 'phrase-ota-i18n'
  2. Executar:

    $ pacote instalar
  3. Como alternativa, instale-o como:

    $ gema instalar frase-ota-i18n

Uso

Para gerar a configuração:

bundle exec rails geram phrase_ota:install --distribution-id <DISTRIBUTION_ID> --secret-token <SECRET>

Depuração

O gem tem uma configuração de depuração que pode ser habilitada no inicializador definindo:

config.debug = true
Esse artigo foi útil?

Sorry about that! In what way was it not helpful?

The article didn’t address my problem.
I couldn’t understand the article.
The feature doesn’t do what I need.
Other reason.

Note that feedback is provided anonymously so we aren't able to reply to questions.
If you'd like to ask a question, submit a request to our Support team.
Thank you for your feedback.