번역 관리

Over the Air (스트링)

컨텐츠는 영어 텍스트를 Phrase Language AI를 이용해 기계 번역한 것입니다.

App Store 또는 Google Play에 새 버전을 출시하지 않고도 클릭 한 번으로 iOS, Android, React Native 및 Flutter 애플리케이션의 번역을 업데이트할 수 있습니다. 텍스트 레이블에 대한 업데이트는 모바일 앱에 즉시 푸시됩니다.

OTA_user_device_diagram.png

OTA(Over-the-Air)는 i18Next 및 Rails 플랫폼과도 통합되므로 사용자는 재배포 없이 웹 애플리케이션에서 현지화된 콘텐츠를 업데이트하고 관리할 수 있습니다.

업데이트된 설정을 적용하려면 새 릴리스를 만들어야 합니다.

기기에서 iOS, Android, React Native 또는 Flutter SDK를 구현하는 애플리케이션을 처음 시작할 때 고유한 임의의 기기 식별자가 생성됩니다. 이 식별자는 지정된 기간 동안 활성 사용자를 추적합니다. 다른 형식이나 추적 수단에는 사용되지 않으며 사용자 또는 장치 정보를 포함하지 않습니다.

OTA에 대한 유일한 제한은 선택한 요금제에 따라 MAU(월간 활성 사용자)의 양입니다.

MAU는 변환이 요청되는 장치의 수입니다. 각 디바이스에는 임의의 ID가 할당되고 MAU는 지난 30일 동안 할당된 서로 다른 ID 수에서 계산됩니다.

데이터

SDK는 업데이트를 확인하기 위해 OTA 서비스와 통신하며 각 요청에 다음 세부정보를 포함합니다.

  • 기기 식별자(예: "F3AFCB10-80A2-84CB-94C0-27F5EF58876D". 이 앱에서는 고유하므로 특정 장치를 추적할 수 없습니다.)

  • 앱 버전(예: "1.2.0")

  • 번역 파일의 마지막 업데이트(예: "1542187679")

  • SDK 버전(예: "1.0.0")

  • 로캘(예: "de-DE")

  • 파일 형식(예: "문자열")

  • 클라이언트(예: "ios")

  • 배포 ID(배포 ID)

  • 환경 비밀(개발과 프로덕션을 구별하기 위해)

OTA 배포

대상 플랫폼은 배포 내에서 정의됩니다.

  • iOS

  • Android

  • Flutter

  • i18next

  • 레일

여러 배포가 가능하지만 이상적으로는 프로젝트당 하나의 배포가 있습니다. iOS 및 Android용 배포를 사용하는 경우 두 형식의 자리 표시자가 자동으로 변환됩니다.

대체

배포가 연결된 프로젝트의 언어 설정에서 언어 대체가 설정된 경우 요청된 언어가 존재하지만 키가 번역되지 않은 경우 선택한 언어의 문자열이 표시됩니다.

국가별 언어(예 : en-GB)가 사용되지만 릴리스에 포함되지 않은 경우 시스템은 해당 언어의 표준 버전(예 : en)이 프로젝트에 있는 경우 해당 언어로 대체될 수 있습니다. 요청한 언어를 전혀 찾을 수 없는 경우 프로젝트의 기본 로캘을 대신 제공할 수 있습니다.

배포 생성

배포를 생성하려면 다음 단계를 수행합니다.

  1. Integrations (통합) 페이지의 Over the air(OTA) 상자에서 Configure(구성 ) 또는 구성 수(이미 있는 경우)를 클릭합니다 .

    Over the air 페이지가 열리고 기존 구성이 표시됩니다.

  2. 새 배포를클릭합니다 . 배포 추가 창이 열립니다.

  3. General( 일반 ) 탭에서 Name(이름, ), 배포가 연결된 Project(프로젝트), required Languages(필수 언어) 및 required Platforms(플랫폼)를 제공합니다 . ,

    Android 배포의 경우 필요한 경우 Android 탭을 클릭하여 CDATA의 HTML 태그를 포함한 모든 번역을 포함하는 형식 옵션을 선택합니다.

  4. Fallback languages(대체 언어 ) 탭에서 필요에 따라 배포별 대체 설정을 선택합니다. 대체 옵션은 목록에 표시된 대로 우선 순위가 지정됩니다.

  5. 필요한 경우 번역 탭을 클릭하여 번역의 최신 검토 버전을 사용하는 옵션을 선택합니다.

  6. 저장을클릭합니다 .

    배포 세부 정보는 SDK에 필요한 ID와 함께 표시됩니다. 세부 정보는 Over the air 페이지에서 배포 를 클릭하여 다시 표시할 수 있습니다.

OTA 릴리스

번역을 업데이트하려면 배포 내에서 새 릴리스를 만듭니다. 프로젝트의 현재 상태가 내보내지고 연결된 클라이언트에서 사용할 수 있게 됩니다.

릴리스를 만들려면 다음 단계를 수행합니다.

  1. Over the air(무선 페이지)에서 필요한 배포 옆에 있는 Add release(릴리스 추가)를 클릭합니다 .

    새 릴리스 창이 열립니다.

  2. Description(설명, ), required Platform(필수 플랫폼), Branch(분기), Locales(로캘) 및 App versions(앱 버전)를 제공합니다. , ,

    필요한 경우 릴리스에 특정 태그가 있는 키만 포함하도록 태그를 입력합니다.

  3. 저장을클릭합니다 .

    배포 세부 정보 페이지 하단의 목록에 릴리스가 추가됩니다.

OTA 모바일 SDK 및 웹 라이브러리 보고서

적절한 모바일 SDK 또는 웹 라이브러리를 통합하면 클릭 한 번으로 번역을 업데이트할 수 있을 뿐만 아니라 사용량을 측정하는 지표도 제공합니다. 모바일 SDK 및 웹 라이브러리 보고서는 활성 앱 사용자 및 해당 앱 언어에 대한 귀중한 통찰력을 제공합니다. 이 보고서 집합은 각 배포에 대해 액세스할 수 있으며 보고서의 데이터는 하루에 두 번 업데이트됩니다.

활성 사용자 수, 전체 요청, 언어별 요청, 플랫폼별 요청 및 제공되지 않은 기기 언어에 대한 보고서가 제공됩니다.

각 배포에 대한 보고서는 OTA(Over the air ) 페이지의 Reports.jpg alt아이콘을 통해 액세스할 수alt 있습니다.

OTA Android SDK 설치

SDK를 사용하면 앱이 정기적으로 업데이트된 번역을 확인하고 백그라운드에서 다운로드합니다.

특히 업그레이드를 고려하여 Android SDK의 최신 릴리스를 정기적으로 확인하세요.

번역이 업데이트되지 않는 경우:

  • 배포 ID 및 환경 암호가 올바른지 확인합니다.

  • 현재 앱 버전에 대한 릴리스가 생성되었는지 확인합니다.

  • ViewController를 새로고침하여 변경사항이 즉시 나타나도록 합니다.

잘못된 버전의 번역을 사용하는 경우 최신 번역이 포함된 릴리스를 확인하고 현재 앱 버전을 사용할 수 있으며 앱의 versionName 이 설정되어 있고 <major>.<minor>.<point>. 형식을 사용하고 있는지 확인합니다.

요구 사항

SDK 포함

루트 build.gradle에 새 저장소를 추가합니다.

모든 프로젝트 {
    리포지토리 {
        ...
        maven { url "https://maven.download.phrase.com" }
    }
}

라이브러리를 종속성으로 추가합니다.

종속성 {
    implementation "com.phrase.android:ota-sdk:3.5.0"
    ...
}

Jetpack Compose 지원

OTA 번역에 Jetpack Compose 지원을 사용 설정하려면 다음 단계를 따르세요.

  1. 라이브러리 구현 'com.phrase.android:ota-sdk-compose:3.5.0' 을 루트 build.gradle에 추가합니다.

  2. Jetpack Compose 코드를 Phrase { ... }로 래핑합니다 .

구성

응용 프로그램 클래스에서 SDK를 초기화하고 배포 ID 및 환경 암호를 추가합니다. Application에서 상속되는 클래스는 attachBaseContext 를 덮어써 서 활동 컨텍스트 외부에서 번역을 사용하도록 설정해야 합니다.

공개 클래스 MainApplication은 Application {
  @Override
  public void onCreate() {
      super.onCreate();
      Phrase.setup(this, "DISTRIBUTION_ID", "ENVIRONMENT_TOKEN");
      Phrase.updateTranslations();
  }

  @Override
  보호 된 무효 attachBaseContext (컨텍스트 newBase) {
    super.attachBaseContext(Phrase.wrapApplicationContext(newBase));
  }  
}

각 활동에서 SDK를 주입합니다 (예 : 다른 모든 활동이 상속하는 기본 활동을 만듭니다).

공개 클래스 BaseActivity는 AppCompatActivity {
  @NonNull
  @Override
  public AppCompatDelegate getDelegate() {
    return Phrase.getDelegate(this, super.getDelegate());
  }
}

번역은 레이아웃에서 평소와 같이 사용할 수 있습니다.

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

그리고 내부 코드 :

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

일부 라이브러리는 컨텍스트의 자동 래핑 해제를 지원하지 않으며 특정 클래스를 기대합니다. 이 경우 Jetpack Compose 구성요소의 컨텍스트 래핑은 다음을 사용하여 사용 중지할 수 있습니다.

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

로그 수준에 대한 구성:

  • Java PhraseLog.setLogLevel(Severity.Debug);

  • 코틀린

    PhraseLog.logLevel = Severity.Verbose

  • 지원되는 다른 로깅 옵션

    • 없음

    • 오류

    • 경고

    • 정보

    • 디버그

    • 자세한

언어 선택

시스템 언어를 사용하지 않는 경우 setLocaleCode 메서드에서 다른 언어를 설정할 수 있습니다. 언어 코드(로캘)는 릴리스에 있어야 합니다.

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

사용자 지정 앱 버전

SDK는 기본적으로 앱 버전을 사용하여 최소 및 최대 버전에 대한 릴리스 제약 조건과 일치하는 릴리스를 반환합니다. 앱 버전은 의미 체계 버전 관리를 사용해야 하며, 그렇지 않으면 번역 업데이트가 반환되지 않습니다. 앱이 유의적 버전 관리를 사용하지 않는 경우 사용된 앱 버전을 수동으로 재정의할 수 있습니다.

본보기:

Phrase.setAppVersion("3.2.4");

updateTranslations( )를 호출 하기 전에 버전을 설정해야 합니다.

시간 제한 설정

번역 다운로드의 기본 시간 제한은 10초로 설정되어 있습니다.

기본값은 다음을 사용하여 변경할 수 있습니다.

Phrase.setTimeout(10000); 제한 시간(밀리초)

콜백 업데이트

성공적인 번역 업데이트를 처리해야 하는 경우 콜백 처리기를 연결합니다.

Phrase.updateTranslations(new TranslationsSyncCallback() {
    @Override
    공개 무효 onSuccess(부울 번역 변경) {
    }

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

번역 업데이트를 수동으로 트리거할 수도 있습니다. 새로 가져온 번역은 다음 응용 프로그램 실행 시 표시됩니다.

최신 번역을 즉시 사용할 수 있도록 하려면 Phrase.applyPendingUpdates()메서드를 사용합니다. 이는 번역 업데이트 수신과 결합할 수 있습니다.

Phrase.updateTranslations(new TranslationsSyncCallback() {
    @Override
    공개 무효 onSuccess(부울 번역 변경) {
      if(translationsChanged) {
         Phrase.applyPendingUpdates()
        UI를 새로 고치는 사용자 지정 논리Custom logic to refresh UI
      }
    }

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

UI는 번역을 자동으로 표시하지 않으므로 다시 만들어야 합니다.

미국 데이터 센터 구성

Phrase 미국 데이터 센터도 지원됩니다. 미국 데이터 센터는 다음을 호출하여 구성할 수 있습니다.

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

대체

클라이언트의 네트워크 연결 누락 또는 서비스 중단으로 인해 Phrase에 연결할 수 없는 경우 SDK는 리소스 파일의 번들 번역을 사용합니다. 앱에서 번들 번역을 정기적으로 업데이트하는 것이 좋습니다. 또한 SDK는 번역을 디바이스에서 로컬로 캐시합니다. 이러한 캐시가 있는 경우 다음 번역 업데이트까지 사용됩니다.

SDK는 번역에 최신 릴리스를 사용합니다. 앱의 versionName설정된 경우 버전 제한을 충족하는 최신 릴리스가 사용됩니다.

새 언어 추가

Phrase에서 새 언어를 만들고 새 릴리스를 만듭니다. SDK는 사용자의 디바이스 언어인 경우 언어를 가져옵니다. 새 앱 버전을 출시할 때 새 언어 파일에 대한 새 strings.xml 정기적으로 추가하는 것이 좋으며, 그렇지 않으면 사용자는 앱을 처음 시작할 때 Android에서 결정한 대체 번역만 볼 수 있습니다.

감사

SDK는 비공개 소스이며 보거나 수정할 수 없습니다. 조직의 요구 사항인 경우 감사를 제공할 수 있습니다. 필요한 경우 자세한 내용은 당사에 문의하십시오.

사용자 지정 보기 지원

사용자 지정 보기는 스타일이 지정된 속성을 사용하여 변환할 수 있습니다. TypedArray는 리소스 덮어쓰기를 허용하지 않으므로 사용자 지정 보기를 약간 변경해야 합니다. 

  • Kotlin 예시

    전에:

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

    후:

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

    전에:

    최종 TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.CustomView, defStyleAttr, 0);
    시도 {
        setText(ta.getText(R.styleable.CustomView_android_text));
    } 마지막으로 {
        ta.recycle();
    }

    후:

    최종 TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.CustomView, defStyleAttr, 0);
    시도 {
        setText(PhraseTypedArray.getTextWithPhrase(ta, R.styleable.CustomView_android_text));
    } 마지막으로 {
        ta.recycle();
    }

예제 앱

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

OTA Flutter SDK 설치

SDK를 사용하면 앱이 정기적으로 업데이트된 번역을 확인하고 백그라운드에서 다운로드합니다.

요구 사항

이 라이브러리는 Flutter의 intl 라이브러리0.17.0 버전에 종속됩니다. 가이드 에 따라 앱에 현지화 지원을 추가하세요.

설치

pubspec.yaml에 Phrase를 추가합니다.

종속성:
  phrase: ^1.0.1 
  ...
  intl: ^0.17.0
  flutter_localizations:
    sdk: flutter
  ...

flutter:
  생성: 참
  ...

intl 라이브러리에서 와 마찬가지로 코드 생성은 ARB 파일을 처리하는 데 사용됩니다. 업데이트하려면 다음 명령을 실행합니다.

플러터 펍 런 프레이즈

build_runner 사용:

플러터 펍 런 build_runner 워치

사용법

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());
}

클래스 MyApp은 StatelessWidget을 확장합니다 {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      타이틀: '플러터 데모',
      //..
      localizationsDelegates: PhraseLocalizations.localizationsDelegates,
      supportedLocales: PhraseLocalizations.supportedLocales,
    );
  }
}

다음과 같은 메시지에 액세스합니다.

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

사용자화

업데이트 동작

OTA 번역은 앱이 실행될 때마다 업데이트됩니다. 이 기능을 비활성화하려면:

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

수동으로 업데이트하려면:

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

사용자 지정 앱 버전

SDK는 기본적으로 앱 버전을 사용하여 최소 및 최대 버전에 대한 릴리스 제약 조건과 일치하는 릴리스를 반환합니다. 앱 버전은 의미 체계 버전 관리를 사용해야 하며, 그렇지 않으면 번역 업데이트가 반환되지 않습니다. 앱이 의미 체계 버전 관리를 사용하지 않는 경우, 앱 버전을 수동으로 재정의할 수 있습니다: 앱 버전을 수동으로 재정의할 수 있습니다.

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

미국 데이터 센터 구성

Phrase 미국 데이터 센터도 지원됩니다. 미국 데이터 센터는 SDK 구성에서 관련 API 호스트 이름 매개 변수를 전달하여 선택할 수 있습니다.

Phrase.setup("[DISTRIBUTION_ID]", "[ENVIRONMENT_ID]", 호스트: PhraseHost.us);

예제 앱

https://github.com/phrase/flutter_sdk_example

OTA iOS 설치

SDK를 사용하면 앱이 정기적으로 업데이트된 번역을 확인하고 백그라운드에서 다운로드합니다.

Mac Catalyst 도 지원됩니다.

SDK는 수동으로 설치하거나 Swift Package Manager, Carthage 또는 Cocoa Pods를 통해 설치할 수 있습니다.

번역이 업데이트되지 않는 경우:

  • 배포 ID 및 환경 암호가 올바른지 확인합니다.

  • 현재 앱 버전에 대한 릴리스가 생성되었는지 확인합니다.

  • ViewController를 새로고침하여 변경사항이 즉시 나타나도록 합니다.

잘못된 버전의 번역을 사용하는 경우 최신 번역이 포함된 릴리스와 현재 앱 버전을 사용할 수 있는지 확인하세요.

스위프트 패키지 관리자

퍼블릭 리포지토리 URL(https://github.com/phrase/ios-sdk/)을 추가합니다. Xcode는 나머지 설치를 자동으로 처리합니다.

카르타고

Cartfile에 다음 줄을 추가합니다.

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

carthage update를 실행하고 Carthage 문서에설명된 대로 프로젝트에 PhraseApp.framework를 추가합니다 .  

코코아 꼬투리

Podfile에 다음 줄을 추가합니다.

포드 'PhraseSDK'

pod install을 실행합니다. CocoaPods를 처음 사용하는 경우 해당 설명서를참조하세요.

수동 설치

다음 단계를 수행합니다.

  1. 최신 릴리스를 다운로드합니다.

  2. Xcode의 PhraseSDK.framework를 대상에 연결된 바이너리로 추가합니다 .

  3. Apple Store에서 시뮬레이터 바이너리를 포함한 앱을 거부하므로 앱을 업로드하기 전에 추가 바이너리를 제거하는 스크립트를 실행해야 합니다.

    Build Phases(빌드 단계) 로 이동하고 + 기호를 클릭하여 Run Script(스크립트 실행) 섹션을 추가합니다. 이 스크립트에 붙여넣습니다.

    FRAMEWORK="PhraseSDK"
    FRAMEWORK_EXECUTABLE_PATH="${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/$FRAMEWORK.framework/$FRAMEWORK"
    EXTRACTED_ARCHS=()
    $ARCHS의 ARCH
    do
       lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH"
       EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH")
    수행
    lipo -o "$FRAMEWORK_EXECUTABLE_PATH-병합" -create "${EXTRACTED_ARCHS[@]}"
    rm "${EXTRACTED_ARCHS[@]}"
    rm "$FRAMEWORK_실행 파일_경로"
    mv "$FRAMEWORK_EXECUTABLE_PATH-병합됨" "$FRAMEWORK_EXECUTABLE_PATH"

구성

  1. PhraseSDK 가져오기:

    PhraseSDK 가져오기
  2. 다음 코드를 호출하여 SDK를 초기화합니다.

    Phrase.shared.setup(
      distributionID: <배포 ID>, 
      environmentSecret: <환경 시크릿>
    )
  3. 현지화 파일을 업데이트하려면 Phrase.shared.updateTranslation()을호출합니다 .

    이 메서드는 SDK가 올바르게 설정되지 않은 경우 예외를 발생시킵니다.

    미국 데이터 센터를 사용하도록 OTA를 구성하려면 Phrase.shared.configuration.apiHost = .us로 PhraseApp.shared.updateTranslation()을 호출하기 전에 호스트를 설정하세요.

applicationDidFinishLaunchingWithOptions 메서드의 AppDelegate 내에서 두 함수를 모두 호출하는 것이 좋습니다.

목표-C

SDK를 Objective-C 애플리케이션에 통합합니다.

@import PhraseSDK;

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  [[구문 공유] setDebugMode:true]; 선택적

  [Phrase shared] setupWithDistributionID:@"배포 ID"
                         environmentSecret:@"환경 시크릿"];

  // OR:
  //
  [Phrase shared] setupWithDistributionID:@"배포 ID"
  environmentSecret:@"환경 비밀"
  시간 초과:10];

  콜백 블록을 사용하여 번역을 업데이트합니다.
  [[공유 구문] updateTranslationsWithCompletionHandler:^(BOOL 업데이트됨, NSError* 오류){
    NSLog(@"Updated: %@", updated ? @"true" : @"false");

    if (오류) {
      NSLog(@"도메인: %@ 코드: %ld 메시지: %@", error.domain, (long)error.code, error.localizedDescription);
    } 또 다른 {
      NSLog(@"No error");
    }

    번들 프록시를 통한 번역:
    NSString *translation = NSLocalizedString(@"layouts.application.about", @"");
    NSLog (@ "번들 프록시를 통한 NSLocalizedString : % @", 번역);

    // OR:
    //
    대체 방법을 사용하여 번역:
    NSString *otherTranslation = [[공유 구문]
                                  localizedStringForKey:@"layouts.application.about" 값:NULL 테이블:NULL];
    NSLog(@"Phrase.shared localizedStringForKey: %@", otherTranslation);
  }];

  // OR:
  //
  [[구문 공유] updateTranslationsWithCompletionHandler:NULL]; 결과 및 오류 무시(권장하지 않음)

   [...] 다른 코드
  
  YES를 반환합니다.
}

스위즐링 비활성화

스위즐링을 사용하지 않도록 설정하려면 Info.plist 파일에서 PhraseSDKMainBundleProxyDisabled를 YES 로 설정합니다 .

스위즐링이 비활성화되면 업데이트된 번역이 더 이상 표시되지 않습니다. updateTranslation 이 호출되면 번역은 계속 동기화되며 Phrase.localizedString() 메서드로 액세스할 수 있습니다.

앱 버전 처리

반환해야 하는 릴리스를 결정하려면 SDK에 앱의 의미 체계 버전이 필요하므로 번역이 업데이트됩니다.

SDK는 다음과 같은 방법으로 의미 체계 버전을 가져오려고 시도합니다.

  • CFBundleShortVersionString 의미 체계인 경우 사용됩니다.

  • 그렇지 않은 경우 의미 체계인 경우 CFBundleVersion 이 사용됩니다.

  • 둘 다 의미 체계가 아닌 경우 (CFBundleShortVersionString.CFBundleVersion)의 조합이 사용됩니다.

CFBundleShortVersionString이 없거나 CFBundleVersion, 과 함께 의미 체계 버전을 사용하여 만들 수 없는 경우 SDK는 PhraseSetupError.appVersionNotSemantic 메시지를 throw합니다.

여러 테이블에 대한 번역 사용 안 함

OTA가 기본 Localizable 테이블 이외의 기본 iOS 번들의 테이블을 번역하지 못하도록 하려면 다음 옵션을 설정합니다.

Phrase.shared.configuration.ignoreOtherTables = true

콜백을

콜백 처리기를 연결하여 성공적인 번역 업데이트를 처리합니다.

Phrase.shared.updateTranslation { 결과
            스위치 결과 {
            case .success(업데이트하자):
            사례 .실패:
            }
        }

디버그 모드

추가 정보가 필요한 경우 디버그 모드를 활성화하여 PhraseSDK.framework추가 로깅을 콘솔에 가져옵니다.

Phrase.shared.configuration.debugMode = true

요청에 대한 시간 제한 설정

다음을 호출하여 Phrase에 대한 요청에 대한 시간 제한을 설정합니다.

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

기본 제한 시간은 10초이며 10초 이상 걸리는 연결은 닫힙니다.

수동 언어 재정의 제공

시스템 언어를 로케일로 사용하지 않는 경우 init 호출에서 다른 로케일을 설정할 수 있습니다. 로캘 코드는 Phrase의 릴리스에 있어야 합니다.

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

대체

SDK를 통해 Phrase에서 새 번역을 가져올 수 없는 경우 설치에서 받은 최신 번역 파일이 사용됩니다. 앱이 Phrase에서 새 파일을 수신하지 않은 경우 앱의 컴파일된 번역 파일을 사용합니다. 이렇게 하면 기술적인 문제나 네트워킹 오류가 발생할 경우 오류를 방지할 수 있습니다. 앱에 컴파일된 번역 파일은 출시될 때마다 최신 상태로 유지하는 것이 좋습니다.

감사

SDK는 비공개 소스이며 보거나 수정할 수 없습니다. 조직의 요구 사항인 경우 감사를 제공할 수 있습니다. 필요한 경우 자세한 내용은 당사에 문의하십시오.

OTA React Native SDK 설치

SDK를 사용하면 앱이 정기적으로 업데이트된 번역을 확인하고 백그라운드에서 다운로드합니다.

OTA 번역용 라이브러리는 react-i18next 라이브러리에서만 작동합니다.

React Native SDK를 설치하려면 다음 단계를 수행합니다.

  1. 다음 명령을 실행합니다.

    $ npm install react-native-phrase-sdk --save
  2. 구문 초기화:

    "react-native-phrase-sdk"에서 Phrase 가져 오기;
    
    let phrase = new Phrase(
        "YOUR_DISTRIBUTION_ID",
        "YOUR_DEVELOPMENT_OR_PRODUCTION_SECRET",
        "YOUR_APP_VERSION",
        "i18next"
    );

    파일 형식은 i18next (위의 예와 같이) 또는 i18next_4일 수 있으며 이는 i18next v4 형식 파일이 됩니다.,

    Phrase 미국 데이터 센터 도 지원됩니다. 미국 데이터 센터에서 React Native SDK를 사용하려면 초기화 중에 관련 호스트를 전달합니다.

    "react-native-phrase-sdk"에서 Phrase 가져 오기;
    
    let phrase = new Phrase(
        "YOUR_DISTRIBUTION_ID",
        "YOUR_DEVELOPMENT_OR_PRODUCTION_SECRET",
        "YOUR_APP_VERSION",
        "i18next",
        host="https://ota.us.app.phrase.com"
    );  
    
  3. 인스턴스를 기반으로 i18next 백엔드 생성:

    "i18next-resources-to-backend"에서 resourcesToBackend 가져 오기;
    
    const backendPhrase = resourcesToBackend((language, namespace, callback) => {
        phrase.requestTranslation(language)
            .then((remoteResources) => {
                callback(null, remoteResources);
            })
            .catch((error) => {
                콜백 (오류, null);
            });
    });
    
    const backendFallback = resourcesToBackend(localResources)
  4. Phrase 백엔드로 i18n 초기화:

    i18n
      .use(ChainedBackend)
      .use(initReactI18next)
      .init({
        백엔드 : {
            백엔드: [backendPhrase, backendFallback]
        }
        //...
      });

샘플 i18next.js 파일

"i18next"에서 i18n 가져오기;
"react-i18next"에서 { initReactI18next } 가져오기;
"i18next-chained-backend"에서 ChainedBackend 가져 오기;
"i18next-resources-to-backend"에서 resourcesToBackend 가져 오기;
import translationEN from "./locales/en/translation.json";
import translationRU from "./locales/ru/translation.json";
"react-native-phrase-sdk"에서 Phrase 가져 오기;

const localResources = {
  ko: {
    번역: 번역EN,
  },
  ru: {
    번역 : 번역RU,
  },
};

let phrase = new Phrase(
    "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) => {
            콜백 (오류, null);
        });
});

const backendFallback = resourcesToBackend(localResources)

i18n
  .use(ChainedBackend)
  .use(initReactI18next)
  .init({
    백엔드 : {
        백엔드: [backendPhrase, backendFallback]
    },
    디버그 : 사실,
    lng: "en",
    fallbackLng: "en",
    interpolation: {
      escapeValue: false, // 기본적으로 이스케이프되므로 반응에 필요하지 않습니다.
    }
  });

예제 앱

https://github.com/phrase/react_native_sdk_example

OTA i18next 백엔드 설치

i18next-phrase-backend 라이브러리는 OTA 릴리스에서 번역을 검색하는 i18next 의 예제 백엔드 를 구현합니다.

새 릴리스를 만들려면 배포용으로 i18next 플랫폼을 설정하고 릴리스의 일부여야 합니다.

사용법

구문을 초기화하려면:

"i18next"에서 i18n 가져오기;
"@phrase/i18next-backend"에서 { I18nextPhraseBackend } 가져오기;

i18n
  .use(I18nextPhraseBackend)
  .init({
    fallbackLng: 'en',
    백엔드 : {
      분포: 'DISTRIBUTION_ID',
      비밀: 'YOUR_ENVIRONMENT_SECRET',
      appVersion: '1.0.0',
    }
  });

캐싱

라이브러리가 번역을 캐싱 중이며 5분 동안 새 번역을 확인하지 않습니다. 캐싱은 테스트 목적으로 백엔드 구성에서 cacheExpirationTime 옵션을 설정하여 구성할 수 있습니다.

i18n
  .use(I18nextPhraseBackend)
  .init({
    fallbackLng: 'en',
    백엔드 : {
      분포: 'DISTRIBUTION_ID',
      비밀: 'YOUR_ENVIRONMENT_SECRET',
      appVersion: '1.0.0',
      cacheExpirationTime: 60 * 5, // 시간(초)
    }
  });

참고

프로덕션 환경에서는 최소 5분의 캐싱 시간을 사용하는 것이 좋습니다.

예제 앱

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

OTA Rails 백엔드 설치

phrase-ota-i18n 라이브러리는 OTA 출시에서 번역을 검색하는 I18n gem의 예제 백엔드 를 구현합니다. 라이브러리를 통해 응용 프로그램은 업데이트된 번역을 정기적으로 확인하고 백그라운드에서 다운로드합니다.

라이브러리는 i18n gem을 사용하는 모든 Ruby 응용 프로그램에 유효합니다.

새 릴리스를 작성하려면 배포에 대해 Rails 플랫폼을 설정하고 릴리스의 일부여야 합니다.

설치

  1. 애플리케이션의 Gemfile에 다음 줄을 추가합니다.

    gem 'phrase-ota-i18n'
  2. 수행하다:

    $ 번들 설치
  3. 또는 다음과 같이 설치합니다.

    $ 보석 설치 문구-ota-i18n

사용법

구성을 생성하려면 다음을 수행합니다.

번들 exec 레일 생성 phrase_ota:install --distribution-id <DISTRIBUTION_ID> --secret-token <SECRET>

디버깅

gem에는 디버그 구성이 있으며 다음을 설정하여 이니셜라이저에서 활성화할 수 있습니다.

config.debug = true
도움이 되었습니까?

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.