diff --git a/.github/workflows/anonymousauth.yml b/.github/workflows/anonymousauth.yml deleted file mode 100644 index 2810f886653..00000000000 --- a/.github/workflows/anonymousauth.yml +++ /dev/null @@ -1,76 +0,0 @@ -name: Anonymous Auth - -on: - push: - branches: [ main ] - paths: - - 'FirebaseAuthUI/**' - - 'FirebaseAuthUI.podspec' - - '.github/workflows/anonymousauth.yml' - - 'FirebaseAnonymousAuthUI/**' - - 'test.sh' - - 'FirebaseAnonymousAuthUI.podspec' - - 'Package.swift' - pull_request: - branches: [ main ] - paths: - - 'FirebaseAuthUI/**' - - 'FirebaseAuthUI.podspec' - - '.github/workflows/anonymousauth.yml' - - 'FirebaseAnonymousAuthUI/**' - - 'test.sh' - - 'FirebaseAnonymousAuthUI.podspec' - - 'Package.swift' - - workflow_dispatch: - -jobs: - xcodebuild: - name: xcodebuild - runs-on: macos-15 - - steps: - - name: Checkout - uses: actions/checkout@main - - name: Setup - run: | - cd FirebaseAnonymousAuthUI - gem install bundler - bundle install - gem install xcpretty - bundle exec pod install --repo-update - - name: Build - run: | - ./test.sh FirebaseAnonymousAuthUI - spm: - name: spm - runs-on: macos-15 - - steps: - - name: Checkout - uses: actions/checkout@main - - name: Select Xcode version - run: | - sudo xcode-select -switch /Applications/Xcode_16.3.app/Contents/Developer - - name: List - run: | - xcodebuild -list - - name: Build - run: | - xcodebuild -scheme FirebaseAnonymousAuthUI -sdk iphonesimulator -destination 'platform=iOS Simulator,OS=latest,name=iPhone 16 Pro' - pod: - name: pod lib lint - runs-on: macos-15 - - steps: - - name: Checkout - uses: actions/checkout@main - - name: Select Xcode version - run: | - sudo xcode-select -switch /Applications/Xcode_16.3.app/Contents/Developer - - name: Setup - run: gem install bundler; bundle install - - name: Build - run: | - bundle exec pod lib lint FirebaseAnonymousAuthUI.podspec \ - --include-podspecs=FirebaseAuthUI.podspec diff --git a/.github/workflows/auth.yml b/.github/workflows/auth.yml deleted file mode 100644 index 7b48417b61c..00000000000 --- a/.github/workflows/auth.yml +++ /dev/null @@ -1,72 +0,0 @@ -name: Auth - -on: - push: - branches: [ main ] - paths: - - '.github/workflows/auth.yml' - - 'FirebaseAuthUI/**' - - 'test.sh' - - 'FirebaseAuthUI.podspec' - - 'Package.swift' - pull_request: - branches: [ main ] - paths: - - '.github/workflows/auth.yml' - - 'FirebaseAuthUI/**' - - 'test.sh' - - 'FirebaseAuthUI.podspec' - - 'Package.swift' - - workflow_dispatch: - -jobs: - xcodebuild: - name: xcodebuild - runs-on: macos-15 - - steps: - - name: Checkout - uses: actions/checkout@main - - name: Setup - run: | - cd FirebaseAuthUI - gem install bundler - bundle install - gem install xcpretty - bundle exec pod install --repo-update - - name: Build - run: | - ./test.sh FirebaseAuthUI - spm: - name: spm - runs-on: macos-15 - - steps: - - name: Checkout - uses: actions/checkout@main - - name: Select Xcode version - run: | - sudo xcode-select -switch /Applications/Xcode_16.3.app/Contents/Developer - - name: List - run: | - xcodebuild -list - - name: Build - run: | - xcodebuild -scheme FirebaseAuthUI -sdk iphonesimulator -destination 'platform=iOS Simulator,OS=latest,name=iPhone 16 Pro' - pod: - name: pod lib lint - runs-on: macos-15 - - steps: - - name: Checkout - uses: actions/checkout@main - - name: Select Xcode version - run: | - sudo xcode-select -switch /Applications/Xcode_16.3.app/Contents/Developer - - name: Setup - run: gem install bundler; bundle install - - name: Build - # Allow warnings for deprecated `updateEmail:completion:` API. - run: | - bundle exec pod lib lint FirebaseAuthUI.podspec --allow-warnings diff --git a/.github/workflows/emailauth.yml b/.github/workflows/emailauth.yml deleted file mode 100644 index 1efafed4896..00000000000 --- a/.github/workflows/emailauth.yml +++ /dev/null @@ -1,81 +0,0 @@ -name: Email Auth - -on: - push: - branches: [ main ] - paths: - - 'FirebaseAuthUI/**' - - 'FirebaseAuthUI.podspec' - - '.github/workflows/emailauth.yml' - - 'FirebaseEmailAuthUI/**' - - 'test.sh' - - 'FirebaseEmailAuthUI.podspec' - - 'Package.swift' - pull_request: - branches: [ main ] - paths: - - 'FirebaseAuthUI/**' - - 'FirebaseAuthUI.podspec' - - '.github/workflows/emailauth.yml' - - 'FirebaseEmailAuthUI/**' - - 'test.sh' - - 'FirebaseEmailAuthUI.podspec' - - 'Package.swift' - - workflow_dispatch: - -jobs: - xcodebuild: - name: xcodebuild - runs-on: macos-15 - - steps: - - name: Checkout - uses: actions/checkout@main - - name: Select Xcode version - run: | - sudo xcode-select -switch /Applications/Xcode_16.3.app/Contents/Developer - - name: Setup - run: | - cd FirebaseEmailAuthUI - gem install bundler - bundle install - gem install xcpretty - bundle exec pod install --repo-update - - name: Build - run: | - ./test.sh FirebaseEmailAuthUI - spm: - name: spm - runs-on: macos-15 - - steps: - - name: Checkout - uses: actions/checkout@main - - name: Select Xcode version - run: | - sudo xcode-select -switch /Applications/Xcode_16.3.app/Contents/Developer - - name: List - run: | - xcodebuild -list - - name: Build - run: | - xcodebuild -scheme FirebaseEmailAuthUI -sdk iphonesimulator -destination 'platform=iOS Simulator,OS=latest,name=iPhone 16 Pro' - pod: - name: pod lib lint - runs-on: macos-15 - - steps: - - name: Checkout - uses: actions/checkout@main - - name: Select Xcode version - run: | - sudo xcode-select -switch /Applications/Xcode_16.3.app/Contents/Developer - - name: Setup - run: gem install bundler; bundle install - - name: Build - # Allow warnings for deprecated `updateEmail:completion:` API. - run: | - bundle exec pod lib lint FirebaseEmailAuthUI.podspec \ - --include-podspecs=FirebaseAuthUI.podspec \ - --allow-warnings diff --git a/.github/workflows/facebookauth.yml b/.github/workflows/facebookauth.yml deleted file mode 100644 index 6b3437db183..00000000000 --- a/.github/workflows/facebookauth.yml +++ /dev/null @@ -1,76 +0,0 @@ -name: Facebook Auth - -on: - push: - branches: [ main ] - paths: - - 'FirebaseAuthUI/**' - - 'FirebaseAuthUI.podspec' - - '.github/workflows/facebookauth.yml' - - 'FirebaseFacebookAuthUI/**' - - 'test.sh' - - 'FirebaseFacebookAuthUI.podspec' - - 'Package.swift' - pull_request: - branches: [ main ] - paths: - - 'FirebaseAuthUI/**' - - 'FirebaseAuthUI.podspec' - - '.github/workflows/facebookauth.yml' - - 'FirebaseFacebookAuthUI/**' - - 'test.sh' - - 'FirebaseFacebookAuthUI.podspec' - - 'Package.swift' - - workflow_dispatch: - -jobs: - xcodebuild: - name: xcodebuild - runs-on: macos-15 - - steps: - - name: Checkout - uses: actions/checkout@main - - name: Setup - run: | - cd FirebaseFacebookAuthUI - gem install bundler - bundle install - gem install xcpretty - bundle exec pod install --repo-update - - name: Build - run: | - ./test.sh FirebaseFacebookAuthUI - spm: - name: spm - runs-on: macos-15 - - steps: - - name: Checkout - uses: actions/checkout@main - - name: Select Xcode version - run: | - sudo xcode-select -switch /Applications/Xcode_16.3.app/Contents/Developer - - name: List - run: | - xcodebuild -list - - name: Build - run: | - xcodebuild -scheme FirebaseFacebookAuthUI -sdk iphonesimulator -destination 'platform=iOS Simulator,OS=latest,name=iPhone 16 Pro' - pod: - name: pod lib lint - runs-on: macos-15 - - steps: - - name: Checkout - uses: actions/checkout@main - - name: Select Xcode version - run: | - sudo xcode-select -switch /Applications/Xcode_16.3.app/Contents/Developer - - name: Setup - run: gem install bundler; bundle install - - name: Build - run: | - bundle exec pod lib lint FirebaseFacebookAuthUI.podspec \ - --include-podspecs=FirebaseAuthUI.podspec diff --git a/.github/workflows/googleauth.yml b/.github/workflows/googleauth.yml deleted file mode 100644 index 87324738937..00000000000 --- a/.github/workflows/googleauth.yml +++ /dev/null @@ -1,74 +0,0 @@ -name: Google Auth - -on: - push: - branches: [ main ] - paths: - - 'FirebaseAuthUI/**' - - 'FirebaseAuthUI.podspec' - - '.github/workflows/googleauth.yml' - - 'FirebaseGoogleAuthUI/**' - - 'test.sh' - - 'FirebaseGoogleAuthUI.podspec' - pull_request: - branches: [ main ] - paths: - - 'FirebaseAuthUI/**' - - 'FirebaseAuthUI.podspec' - - '.github/workflows/googleauth.yml' - - 'FirebaseGoogleAuthUI/**' - - 'test.sh' - - 'FirebaseGoogleAuthUI.podspec' - - workflow_dispatch: - -jobs: - build: - name: build - runs-on: macos-15 - - steps: - - name: Checkout - uses: actions/checkout@main - - name: Setup - run: | - cd FirebaseGoogleAuthUI - gem install bundler - bundle install - gem install xcpretty - bundle exec pod install --repo-update - - name: Build - run: | - ./test.sh FirebaseGoogleAuthUI - spm: - name: spm - runs-on: macos-15 - - steps: - - name: Checkout - uses: actions/checkout@main - - name: Select Xcode version - run: | - sudo xcode-select -switch /Applications/Xcode_16.3.app/Contents/Developer - - name: List - run: | - xcodebuild -list - - name: Build - run: | - xcodebuild -scheme FirebaseGoogleAuthUI -sdk iphonesimulator -destination 'platform=iOS Simulator,OS=latest,name=iPhone 16 Pro' - pod: - name: pod lib lint - runs-on: macos-15 - - steps: - - name: Checkout - uses: actions/checkout@main - - name: Select Xcode version - run: | - sudo xcode-select -switch /Applications/Xcode_16.3.app/Contents/Developer - - name: Setup - run: gem install bundler; bundle install - - name: Build - run: | - bundle exec pod lib lint FirebaseGoogleAuthUI.podspec \ - --include-podspecs=FirebaseAuthUI.podspec --skip-import-validation diff --git a/.github/workflows/oauth.yml b/.github/workflows/oauth.yml deleted file mode 100644 index 47f9870d24b..00000000000 --- a/.github/workflows/oauth.yml +++ /dev/null @@ -1,76 +0,0 @@ -name: OAuth - -on: - push: - branches: [ main ] - paths: - - 'FirebaseAuthUI/**' - - 'FirebaseAuthUI.podspec' - - '.github/workflows/oauth.yml' - - 'FirebaseOAuthUI/**' - - 'test.sh' - - 'FirebaseOAuthUI.podspec' - - 'Package.swift' - pull_request: - branches: [ main ] - paths: - - 'FirebaseAuthUI/**' - - 'FirebaseAuthUI.podspec' - - '.github/workflows/oauth.yml' - - 'FirebaseOAuthUI/**' - - 'test.sh' - - 'FirebaseOAuthUI.podspec' - - 'Package.swift' - - workflow_dispatch: - -jobs: - xcodebuild: - name: xcodebuild - runs-on: macos-15 - - steps: - - name: Checkout - uses: actions/checkout@main - - name: Setup - run: | - cd FirebaseOAuthUI - gem install bundler - bundle install - gem install xcpretty - bundle exec pod install --repo-update - - name: Build - run: | - ./test.sh FirebaseOAuthUI - spm: - name: spm - runs-on: macos-15 - - steps: - - name: Checkout - uses: actions/checkout@main - - name: Select Xcode version - run: | - sudo xcode-select -switch /Applications/Xcode_16.3.app/Contents/Developer - - name: List - run: | - xcodebuild -list - - name: Build - run: | - xcodebuild -scheme FirebaseOAuthUI -sdk iphonesimulator -destination 'platform=iOS Simulator,OS=latest,name=iPhone 16 Pro' - pod: - name: pod lib lint - runs-on: macos-15 - - steps: - - name: Checkout - uses: actions/checkout@main - - name: Select Xcode version - run: | - sudo xcode-select -switch /Applications/Xcode_16.3.app/Contents/Developer - - name: Setup - run: gem install bundler; bundle install - - name: Build - run: | - bundle exec pod lib lint FirebaseOAuthUI.podspec \ - --include-podspecs=FirebaseAuthUI.podspec diff --git a/.github/workflows/phoneauth.yml b/.github/workflows/phoneauth.yml deleted file mode 100644 index d9363418bc7..00000000000 --- a/.github/workflows/phoneauth.yml +++ /dev/null @@ -1,77 +0,0 @@ -name: Phone Auth - -on: - push: - branches: [ main ] - paths: - - 'FirebaseAuthUI/**' - - 'FirebaseAuthUI.podspec' - - '.github/workflows/phoneauth.yml' - - 'FirebasePhoneAuthUI/**' - - 'test.sh' - - 'FirebasePhoneAuthUI.podspec' - - 'Package.swift' - pull_request: - branches: [ main ] - paths: - - 'FirebaseAuthUI/**' - - 'FirebaseAuthUI.podspec' - - '.github/workflows/phoneauth.yml' - - 'FirebasePhoneAuthUI/**' - - 'test.sh' - - 'FirebasePhoneAuthUI.podspec' - - 'Package.swift' - - workflow_dispatch: - -jobs: - xcodebuild: - name: xcodebuild - runs-on: macos-15 - - steps: - - name: Checkout - uses: actions/checkout@main - - name: Setup - run: | - cd FirebasePhoneAuthUI - gem install bundler - bundle install - gem install xcpretty - bundle exec pod install --repo-update - - name: Build - run: | - ./test.sh FirebasePhoneAuthUI - spm: - name: spm - runs-on: macos-15 - - steps: - - name: Checkout - uses: actions/checkout@main - - name: Select Xcode version - run: | - sudo xcode-select -switch /Applications/Xcode_16.3.app/Contents/Developer - - name: List - run: | - xcodebuild -list - - name: Build - run: | - xcodebuild -scheme FirebasePhoneAuthUI -sdk iphonesimulator -destination 'platform=iOS Simulator,OS=latest,name=iPhone 16 Pro' - pod: - name: pod lib lint - runs-on: macos-15 - - steps: - - name: Checkout - uses: actions/checkout@main - - name: Setup - run: gem install bundler; bundle install - - name: Select Xcode version - run: | - sudo xcode-select -switch /Applications/Xcode_16.3.app/Contents/Developer - - name: Build - # (#1191) Fix and remove --allow-warnings - run: | - bundle exec pod lib lint FirebasePhoneAuthUI.podspec \ - --include-podspecs=FirebaseAuthUI.podspec --allow-warnings diff --git a/.github/workflows/sample.yml b/.github/workflows/sample.yml index a9592058b95..80493952fb4 100644 --- a/.github/workflows/sample.yml +++ b/.github/workflows/sample.yml @@ -5,20 +5,44 @@ on: branches: [ main ] paths: - '.github/workflows/sample.yml' + - 'FirebaseSwiftUI/**' - 'Firebase*UI/**' + - 'samples/**' + - 'Package.swift' - '*.podspec' pull_request: branches: [ main ] paths: - - '.github/workflows/storage.yml' + - '.github/workflows/sample.yml' + - 'FirebaseSwiftUI/**' - 'Firebase*UI/**' + - 'samples/**' + - 'Package.swift' - '*.podspec' workflow_dispatch: jobs: + swiftui: + name: SwiftUI Sample build + runs-on: macos-15 + + steps: + - name: Checkout + uses: actions/checkout@main + - name: Build SwiftUI Sample + run: | + cd samples/swiftui/FirebaseSwiftUISample + xcodebuild \ + -project FirebaseSwiftUISample.xcodeproj \ + -scheme FirebaseSwiftUISample \ + -sdk iphonesimulator \ + -destination 'platform=iOS Simulator,OS=latest,name=iPhone 16 Pro' \ + clean build \ + ONLY_ACTIVE_ARCH=YES + swift: - name: Swift build + name: Swift UIKit Sample build runs-on: macos-15 steps: @@ -26,6 +50,7 @@ jobs: uses: actions/checkout@main - name: Setup run: | + cp samples/GoogleService-Info-dummy.plist samples/swift/GoogleService-Info.plist cd samples/swift gem install bundler bundle install @@ -38,12 +63,12 @@ jobs: -workspace FirebaseUI-demo-swift.xcworkspace \ -scheme FirebaseUI-demo-swift \ -sdk iphonesimulator \ - -destination 'platform=iOS Simulator,OS=latest,name=iPhone 11 Pro' \ + -destination 'platform=iOS Simulator,OS=latest,name=iPhone 16 Pro' \ clean build test \ ONLY_ACTIVE_ARCH=YES | xcpretty objc: - name: ObjC build + name: ObjC Sample build runs-on: macos-15 steps: @@ -51,21 +76,19 @@ jobs: uses: actions/checkout@main - name: Setup run: | - cp samples/GoogleService-Info-dummy.plist samples/swift/GoogleService-Info.plist + cp samples/GoogleService-Info-dummy.plist samples/objc/GoogleService-Info.plist cd samples/objc gem install bundler bundle install gem install xcpretty bundle exec pod install --repo-update - name: Build - # Note: tests aren't run here because the ObjC sample has no test targets. run: | - cp samples/GoogleService-Info-dummy.plist samples/objc/GoogleService-Info.plist cd samples/objc xcodebuild \ -workspace FirebaseUI-demo-objc.xcworkspace \ -scheme FirebaseUI-demo-objc \ -sdk iphonesimulator \ - -destination 'platform=iOS Simulator,OS=latest,name=iPhone 11 Pro' \ + -destination 'platform=iOS Simulator,OS=latest,name=iPhone 16 Pro' \ clean build \ ONLY_ACTIVE_ARCH=YES | xcpretty diff --git a/.github/workflows/swiftui-auth.yml b/.github/workflows/swiftui-auth.yml index 40ebc5a0235..b19fcba95d0 100644 --- a/.github/workflows/swiftui-auth.yml +++ b/.github/workflows/swiftui-auth.yml @@ -2,17 +2,19 @@ name: SwiftUI Auth on: push: - branches: [ main ] + branches: [ main, development ] paths: - '.github/workflows/swiftui-auth.yml' - 'samples/swiftui/**' + - 'e2eTest/**' - 'FirebaseSwiftUI/**' - 'Package.swift' pull_request: - branches: [ main ] + branches: [ main, development ] paths: - '.github/workflows/swiftui-auth.yml' - 'samples/swiftui/**' + - 'e2eTest/**' - 'FirebaseSwiftUI/**' - 'Package.swift' @@ -22,57 +24,185 @@ permissions: contents: read jobs: - swiftui-auth: - runs-on: macos-15 - timeout-minutes: 30 + format-check: + name: Swift Format Check + runs-on: macos-26 + timeout-minutes: 10 steps: - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 + + - name: Install swiftformat + run: brew install swiftformat + + - name: Check Swift formatting + run: bash lint-swift.sh + + # Package Unit Tests (standalone, no emulator needed) + unit-tests: + name: Package Unit Tests + runs-on: macos-26 + timeout-minutes: 15 + steps: + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 + + - name: Install xcpretty + run: gem install xcpretty + + - name: Select Xcode version + run: sudo xcode-select -switch /Applications/Xcode_26.0.1.app/Contents/Developer + + - name: Run FirebaseSwiftUI Package Unit Tests + run: | + set -o pipefail + xcodebuild test \ + -scheme FirebaseUI-Package \ + -destination 'platform=iOS Simulator,name=iPhone 17' \ + -enableCodeCoverage YES \ + -resultBundlePath FirebaseSwiftUIPackageTests.xcresult | tee FirebaseSwiftUIPackageTests.log | xcpretty --test --color --simple + + - name: Upload test logs + if: failure() + uses: actions/upload-artifact@v4 + with: + name: unit-tests-logs + path: FirebaseSwiftUIPackageTests.log + + - name: Upload test results + if: failure() + uses: actions/upload-artifact@v4 + with: + name: unit-tests-results + path: FirebaseSwiftUIPackageTests.xcresult + + # Integration Tests (requires emulator) + integration-tests: + name: Integration Tests + runs-on: macos-26 + timeout-minutes: 20 + steps: + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 + - uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a name: Install Node.js 20 with: node-version: '20' + - uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b with: distribution: 'temurin' java-version: '17' + - name: Install Firebase - run: | - sudo npm i -g firebase-tools + run: sudo npm i -g firebase-tools + - name: Start Firebase Emulator run: | - sudo chown -R 501:20 "/Users/runner/.npm" && cd ./samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample && ./start-firebase-emulator.sh + sudo chown -R 501:20 "/Users/runner/.npm" + cd ./e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample + ./start-firebase-emulator.sh + - name: Install xcpretty run: gem install xcpretty + - name: Select Xcode version + run: sudo xcode-select -switch /Applications/Xcode_26.0.1.app/Contents/Developer + + - name: Build for Integration Tests run: | - sudo xcode-select -switch /Applications/Xcode_16.3.app/Contents/Developer - - name: Run Integration Tests - run: | - cd ./samples/swiftui/FirebaseSwiftUIExample + cd ./e2eTest/FirebaseSwiftUIExample set -o pipefail - xcodebuild test -scheme FirebaseSwiftUIExampleTests -destination 'platform=iOS Simulator,name=iPhone 16 Pro' -enableCodeCoverage YES -resultBundlePath FirebaseSwiftUIExampleTests.xcresult | tee FirebaseSwiftUIExampleTests.log | xcpretty --test --color --simple - - name: Run View UI Tests + xcodebuild build-for-testing \ + -scheme FirebaseSwiftUIExampleTests \ + -destination 'platform=iOS Simulator,name=iPhone 17' \ + -enableCodeCoverage YES | xcpretty --color --simple + + - name: Run Integration Tests run: | - cd ./samples/swiftui/FirebaseSwiftUIExample + cd ./e2eTest/FirebaseSwiftUIExample set -o pipefail - xcodebuild test -scheme FirebaseSwiftUIExampleUITests -destination 'platform=iOS Simulator,name=iPhone 16 Pro' -enableCodeCoverage YES -resultBundlePath FirebaseSwiftUIExampleUITests.xcresult | tee FirebaseSwiftUIExampleUITests.log | xcpretty --test --color --simple + xcodebuild test-without-building \ + -scheme FirebaseSwiftUIExampleTests \ + -destination 'platform=iOS Simulator,name=iPhone 17' \ + -enableCodeCoverage YES \ + -resultBundlePath FirebaseSwiftUIExampleTests.xcresult | tee FirebaseSwiftUIExampleTests.log | xcpretty --test --color --simple + - name: Upload test logs if: failure() uses: actions/upload-artifact@v4 with: - name: swiftui-auth-test-logs - path: | - samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExampleTests.log - samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests.log - - name: Upload FirebaseSwiftUIExampleUITests.xcresult bundle + name: integration-tests-logs + path: e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExampleTests.log + + - name: Upload test results if: failure() uses: actions/upload-artifact@v4 with: - name: FirebaseSwiftUIExampleUITests.xcresult - path: samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests.xcresult - - name: Upload FirebaseSwiftUIExampleTests.xcresult bundle + name: integration-tests-results + path: e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExampleTests.xcresult + + # UI Tests (requires emulator) + ui-tests: + name: UI Tests + runs-on: macos-26 + timeout-minutes: 40 + steps: + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 + + - uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a + name: Install Node.js 20 + with: + node-version: '20' + + - uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b + with: + distribution: 'temurin' + java-version: '17' + + - name: Install Firebase + run: sudo npm i -g firebase-tools + + - name: Start Firebase Emulator + run: | + sudo chown -R 501:20 "/Users/runner/.npm" + cd ./e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample + ./start-firebase-emulator.sh + + - name: Install xcpretty + run: gem install xcpretty + + - name: Select Xcode version + run: sudo xcode-select -switch /Applications/Xcode_26.0.1.app/Contents/Developer + + - name: Build for UI Tests + run: | + cd ./e2eTest/FirebaseSwiftUIExample + set -o pipefail + xcodebuild build-for-testing \ + -scheme FirebaseSwiftUIExampleUITests \ + -destination 'platform=iOS Simulator,name=iPhone 17' \ + -enableCodeCoverage YES | xcpretty --color --simple + + - name: Run UI Tests + run: | + cd ./e2eTest/FirebaseSwiftUIExample + set -o pipefail + xcodebuild test-without-building \ + -scheme FirebaseSwiftUIExampleUITests \ + -destination 'platform=iOS Simulator,name=iPhone 17' \ + -parallel-testing-enabled NO \ + -enableCodeCoverage YES \ + -resultBundlePath FirebaseSwiftUIExampleUITests.xcresult | tee FirebaseSwiftUIExampleUITests.log | xcpretty --test --color --simple + + - name: Upload Firebase Emulator logs + if: failure() + uses: actions/upload-artifact@v4 + with: + name: firebase-emulator-logs + path: e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/firebase-debug.log + + - name: Upload test results if: failure() uses: actions/upload-artifact@v4 with: - name: FirebaseSwiftUIExampleTests.xcresult - path: samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExampleTests.xcresult \ No newline at end of file + name: FirebaseSwiftUIExampleUITests.xcresult + path: e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests.xcresult diff --git a/FirebaseAnonymousAuthUI.podspec b/FirebaseAnonymousAuthUI.podspec deleted file mode 100644 index 5f4b5190791..00000000000 --- a/FirebaseAnonymousAuthUI.podspec +++ /dev/null @@ -1,29 +0,0 @@ -Pod::Spec.new do |s| - s.name = 'FirebaseAnonymousAuthUI' - s.version = '15.1.0' - s.summary = 'Provides anonymous auth support for FirebaseAuthUI.' - s.homepage = 'https://github.com/firebase/FirebaseUI-iOS' - s.license = { :type => 'Apache 2.0', :file => 'LICENSE' } - s.source = { :git => 'https://github.com/firebase/FirebaseUI-iOS.git', :tag => 'v' + s.version.to_s} - s.author = 'Firebase' - s.platform = :ios - s.ios.deployment_target = '13.0' - s.ios.framework = 'UIKit' - s.requires_arc = true - s.cocoapods_version = '>= 1.8.0' - s.pod_target_xcconfig = { - 'HEADER_SEARCH_PATHS' => '"${PODS_TARGET_SRCROOT}"', - } - s.swift_version = '6.0' - - s.public_header_files = 'FirebaseAnonymousAuthUI/Sources/Public/FirebaseAnonymousAuthUI/*.h' - s.source_files = 'FirebaseAnonymousAuthUI/Sources/**/*.{h,m}' - s.dependency 'FirebaseAuthUI', '~> 15.0' - s.dependency 'FirebaseAuth', '>= 8.0', '< 13.0' - s.dependency 'FirebaseCore' - s.resource_bundles = { - 'FirebaseAnonymousAuthUI' => [ - 'FirebaseAnonymousAuthUI/Sources/{Resources,Strings}/*.{png,lproj}' - ] - } -end diff --git a/FirebaseAnonymousAuthUI/FirebaseAnonymousAuthUI.xcodeproj/project.pbxproj b/FirebaseAnonymousAuthUI/FirebaseAnonymousAuthUI.xcodeproj/project.pbxproj deleted file mode 100644 index d92f95413ce..00000000000 --- a/FirebaseAnonymousAuthUI/FirebaseAnonymousAuthUI.xcodeproj/project.pbxproj +++ /dev/null @@ -1,574 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 54; - objects = { - -/* Begin PBXBuildFile section */ - 8D69E22721DD476D00CFA49B /* FirebaseAnonymousAuthUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8D69E21D21DD476C00CFA49B /* FirebaseAnonymousAuthUI.framework */; }; - 8D69E22C21DD476D00CFA49B /* FirebaseAnonymousAuthUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E22B21DD476D00CFA49B /* FirebaseAnonymousAuthUITests.m */; }; - 8D69E22E21DD476D00CFA49B /* FirebaseAnonymousAuthUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E22021DD476D00CFA49B /* FirebaseAnonymousAuthUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8D69E23921DD47B400CFA49B /* FUIAnonymousAuth.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E23721DD47B400CFA49B /* FUIAnonymousAuth.m */; }; - 8D69E23A21DD47B400CFA49B /* FUIAnonymousAuth.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E23821DD47B400CFA49B /* FUIAnonymousAuth.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8D69E35321DD5C4700CFA49B /* ic_anonymous.png in Resources */ = {isa = PBXBuildFile; fileRef = 8D69E34D21DD5C4700CFA49B /* ic_anonymous.png */; }; - 8D69E35421DD5C4700CFA49B /* ic_anonymous@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8D69E34E21DD5C4700CFA49B /* ic_anonymous@3x.png */; }; - 8D69E35521DD5C4700CFA49B /* ic_anonymous@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8D69E34F21DD5C4700CFA49B /* ic_anonymous@2x.png */; }; - 8D69E35621DD5C4700CFA49B /* FirebaseAnonymousAuthUI.strings in Resources */ = {isa = PBXBuildFile; fileRef = 8D69E35121DD5C4700CFA49B /* FirebaseAnonymousAuthUI.strings */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 8D69E22821DD476D00CFA49B /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 8D69E21421DD476C00CFA49B /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8D69E21C21DD476C00CFA49B; - remoteInfo = FirebaseAnonymousAuthUI; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 8D69E21D21DD476C00CFA49B /* FirebaseAnonymousAuthUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FirebaseAnonymousAuthUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 8D69E22021DD476D00CFA49B /* FirebaseAnonymousAuthUI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FirebaseAnonymousAuthUI.h; sourceTree = ""; }; - 8D69E22121DD476D00CFA49B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 8D69E22621DD476D00CFA49B /* FirebaseAnonymousAuthUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FirebaseAnonymousAuthUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 8D69E22B21DD476D00CFA49B /* FirebaseAnonymousAuthUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FirebaseAnonymousAuthUITests.m; sourceTree = ""; }; - 8D69E22D21DD476D00CFA49B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 8D69E23721DD47B400CFA49B /* FUIAnonymousAuth.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUIAnonymousAuth.m; sourceTree = ""; }; - 8D69E23821DD47B400CFA49B /* FUIAnonymousAuth.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIAnonymousAuth.h; sourceTree = ""; }; - 8D69E34D21DD5C4700CFA49B /* ic_anonymous.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_anonymous.png; sourceTree = ""; }; - 8D69E34E21DD5C4700CFA49B /* ic_anonymous@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ic_anonymous@3x.png"; sourceTree = ""; }; - 8D69E34F21DD5C4700CFA49B /* ic_anonymous@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ic_anonymous@2x.png"; sourceTree = ""; }; - 8D69E35221DD5C4700CFA49B /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/FirebaseAnonymousAuthUI.strings; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 8D69E21A21DD476C00CFA49B /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8D69E22321DD476D00CFA49B /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 8D69E22721DD476D00CFA49B /* FirebaseAnonymousAuthUI.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 8D55F14B261E5BAC0020DFB0 /* Public */ = { - isa = PBXGroup; - children = ( - 8DAB9B46263768C300FF271F /* FirebaseAnonymousAuthUI */, - ); - path = Public; - sourceTree = ""; - }; - 8D69E21321DD476C00CFA49B = { - isa = PBXGroup; - children = ( - 8D69E21F21DD476C00CFA49B /* Sources */, - 8D69E22A21DD476D00CFA49B /* FirebaseAnonymousAuthUITests */, - 8D69E21E21DD476C00CFA49B /* Products */, - BEF4805F13BABCBDD925C264 /* Pods */, - ); - sourceTree = ""; - }; - 8D69E21E21DD476C00CFA49B /* Products */ = { - isa = PBXGroup; - children = ( - 8D69E21D21DD476C00CFA49B /* FirebaseAnonymousAuthUI.framework */, - 8D69E22621DD476D00CFA49B /* FirebaseAnonymousAuthUITests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - 8D69E21F21DD476C00CFA49B /* Sources */ = { - isa = PBXGroup; - children = ( - 8D55F14B261E5BAC0020DFB0 /* Public */, - 8D69E23721DD47B400CFA49B /* FUIAnonymousAuth.m */, - 8D69E22121DD476D00CFA49B /* Info.plist */, - 8D69E34C21DD5C4700CFA49B /* Resources */, - 8D69E35021DD5C4700CFA49B /* Strings */, - ); - path = Sources; - sourceTree = ""; - }; - 8D69E22A21DD476D00CFA49B /* FirebaseAnonymousAuthUITests */ = { - isa = PBXGroup; - children = ( - 8D69E22B21DD476D00CFA49B /* FirebaseAnonymousAuthUITests.m */, - 8D69E22D21DD476D00CFA49B /* Info.plist */, - ); - path = FirebaseAnonymousAuthUITests; - sourceTree = ""; - }; - 8D69E34C21DD5C4700CFA49B /* Resources */ = { - isa = PBXGroup; - children = ( - 8D69E34D21DD5C4700CFA49B /* ic_anonymous.png */, - 8D69E34E21DD5C4700CFA49B /* ic_anonymous@3x.png */, - 8D69E34F21DD5C4700CFA49B /* ic_anonymous@2x.png */, - ); - path = Resources; - sourceTree = ""; - }; - 8D69E35021DD5C4700CFA49B /* Strings */ = { - isa = PBXGroup; - children = ( - 8D69E35121DD5C4700CFA49B /* FirebaseAnonymousAuthUI.strings */, - ); - path = Strings; - sourceTree = ""; - }; - 8DAB9B46263768C300FF271F /* FirebaseAnonymousAuthUI */ = { - isa = PBXGroup; - children = ( - 8D69E22021DD476D00CFA49B /* FirebaseAnonymousAuthUI.h */, - 8D69E23821DD47B400CFA49B /* FUIAnonymousAuth.h */, - ); - path = FirebaseAnonymousAuthUI; - sourceTree = ""; - }; - BEF4805F13BABCBDD925C264 /* Pods */ = { - isa = PBXGroup; - children = ( - ); - path = Pods; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - 8D69E21821DD476C00CFA49B /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 8D69E22E21DD476D00CFA49B /* FirebaseAnonymousAuthUI.h in Headers */, - 8D69E23A21DD47B400CFA49B /* FUIAnonymousAuth.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - 8D69E21C21DD476C00CFA49B /* FirebaseAnonymousAuthUI */ = { - isa = PBXNativeTarget; - buildConfigurationList = 8D69E23121DD476D00CFA49B /* Build configuration list for PBXNativeTarget "FirebaseAnonymousAuthUI" */; - buildPhases = ( - 8D69E21821DD476C00CFA49B /* Headers */, - 8D69E21921DD476C00CFA49B /* Sources */, - 8D69E21A21DD476C00CFA49B /* Frameworks */, - 8D69E21B21DD476C00CFA49B /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = FirebaseAnonymousAuthUI; - productName = FirebaseAnonymousAuthUI; - productReference = 8D69E21D21DD476C00CFA49B /* FirebaseAnonymousAuthUI.framework */; - productType = "com.apple.product-type.framework"; - }; - 8D69E22521DD476D00CFA49B /* FirebaseAnonymousAuthUITests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 8D69E23421DD476D00CFA49B /* Build configuration list for PBXNativeTarget "FirebaseAnonymousAuthUITests" */; - buildPhases = ( - 8D69E22221DD476D00CFA49B /* Sources */, - 8D69E22321DD476D00CFA49B /* Frameworks */, - 8D69E22421DD476D00CFA49B /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 8D69E22921DD476D00CFA49B /* PBXTargetDependency */, - ); - name = FirebaseAnonymousAuthUITests; - productName = FirebaseAnonymousAuthUITests; - productReference = 8D69E22621DD476D00CFA49B /* FirebaseAnonymousAuthUITests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 8D69E21421DD476C00CFA49B /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 1010; - ORGANIZATIONNAME = Firebase; - TargetAttributes = { - 8D69E21C21DD476C00CFA49B = { - CreatedOnToolsVersion = 10.1; - }; - 8D69E22521DD476D00CFA49B = { - CreatedOnToolsVersion = 10.1; - }; - }; - }; - buildConfigurationList = 8D69E21721DD476C00CFA49B /* Build configuration list for PBXProject "FirebaseAnonymousAuthUI" */; - compatibilityVersion = "Xcode 9.3"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - ); - mainGroup = 8D69E21321DD476C00CFA49B; - productRefGroup = 8D69E21E21DD476C00CFA49B /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 8D69E21C21DD476C00CFA49B /* FirebaseAnonymousAuthUI */, - 8D69E22521DD476D00CFA49B /* FirebaseAnonymousAuthUITests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 8D69E21B21DD476C00CFA49B /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8D69E35321DD5C4700CFA49B /* ic_anonymous.png in Resources */, - 8D69E35621DD5C4700CFA49B /* FirebaseAnonymousAuthUI.strings in Resources */, - 8D69E35521DD5C4700CFA49B /* ic_anonymous@2x.png in Resources */, - 8D69E35421DD5C4700CFA49B /* ic_anonymous@3x.png in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8D69E22421DD476D00CFA49B /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 8D69E21921DD476C00CFA49B /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8D69E23921DD47B400CFA49B /* FUIAnonymousAuth.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8D69E22221DD476D00CFA49B /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8D69E22C21DD476D00CFA49B /* FirebaseAnonymousAuthUITests.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 8D69E22921DD476D00CFA49B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 8D69E21C21DD476C00CFA49B /* FirebaseAnonymousAuthUI */; - targetProxy = 8D69E22821DD476D00CFA49B /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - 8D69E35121DD5C4700CFA49B /* FirebaseAnonymousAuthUI.strings */ = { - isa = PBXVariantGroup; - children = ( - 8D69E35221DD5C4700CFA49B /* en */, - ); - name = FirebaseAnonymousAuthUI.strings; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 8D69E22F21DD476D00CFA49B /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../\""; - IPHONEOS_DEPLOYMENT_TARGET = 12.1; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 8D69E23021DD476D00CFA49B /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../\""; - IPHONEOS_DEPLOYMENT_TARGET = 12.1; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 8D69E23221DD476D00CFA49B /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Automatic; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Sources/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.firebase.FirebaseAnonymousAuthUI; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 8D69E23321DD476D00CFA49B /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Automatic; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Sources/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.firebase.FirebaseAnonymousAuthUI; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; - 8D69E23521DD476D00CFA49B /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - INFOPLIST_FILE = Sources/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuth\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuthInterop\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseUI\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/OCMock\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/nanopb\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuthUI\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreInternal\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/RecaptchaInterop\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAppCheckInterop\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreExtension\"", - ); - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - "-framework", - "\"GTMSessionFetcher\"", - "-framework", - "\"GoogleUtilities\"", - "-framework", - "\"OCMock\"", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.firebase.FirebaseAnonymousAuthUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 8D69E23621DD476D00CFA49B /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - INFOPLIST_FILE = Sources/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuth\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuthInterop\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseUI\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/OCMock\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/nanopb\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuthUI\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreInternal\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreExtension\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/RecaptchaInterop\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAppCheckInterop\"", - ); - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - "-framework", - "\"GTMSessionFetcher\"", - "-framework", - "\"GoogleUtilities\"", - "-framework", - "\"OCMock\"", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.firebase.FirebaseAnonymousAuthUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 8D69E21721DD476C00CFA49B /* Build configuration list for PBXProject "FirebaseAnonymousAuthUI" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 8D69E22F21DD476D00CFA49B /* Debug */, - 8D69E23021DD476D00CFA49B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 8D69E23121DD476D00CFA49B /* Build configuration list for PBXNativeTarget "FirebaseAnonymousAuthUI" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 8D69E23221DD476D00CFA49B /* Debug */, - 8D69E23321DD476D00CFA49B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 8D69E23421DD476D00CFA49B /* Build configuration list for PBXNativeTarget "FirebaseAnonymousAuthUITests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 8D69E23521DD476D00CFA49B /* Debug */, - 8D69E23621DD476D00CFA49B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 8D69E21421DD476C00CFA49B /* Project object */; -} diff --git a/FirebaseAnonymousAuthUI/FirebaseAnonymousAuthUI.xcodeproj/xcshareddata/xcschemes/FirebaseAnonymousAuthUI.xcscheme b/FirebaseAnonymousAuthUI/FirebaseAnonymousAuthUI.xcodeproj/xcshareddata/xcschemes/FirebaseAnonymousAuthUI.xcscheme deleted file mode 100644 index e7dd10ee8e9..00000000000 --- a/FirebaseAnonymousAuthUI/FirebaseAnonymousAuthUI.xcodeproj/xcshareddata/xcschemes/FirebaseAnonymousAuthUI.xcscheme +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FirebaseAnonymousAuthUI/FirebaseAnonymousAuthUITests/FirebaseAnonymousAuthUITests.m b/FirebaseAnonymousAuthUI/FirebaseAnonymousAuthUITests/FirebaseAnonymousAuthUITests.m deleted file mode 100644 index 7be0133a705..00000000000 --- a/FirebaseAnonymousAuthUI/FirebaseAnonymousAuthUITests/FirebaseAnonymousAuthUITests.m +++ /dev/null @@ -1,65 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import -#import - -@import FirebaseAuth; -#import - -#import "FUIAnonymousAuth.h" - -@interface FirebaseAnonymousAuthUITests : XCTestCase -@property (nonatomic, strong) FUIAnonymousAuth *provider; -@end - -@implementation FirebaseAnonymousAuthUITests - -- (void)setUp { - [super setUp]; - - id authUIClass = OCMClassMock([FUIAuth class]); - OCMStub(ClassMethod([authUIClass authUIWithAuth:OCMOCK_ANY])). - andReturn(authUIClass); - - id authClass = OCMClassMock([FIRAuth class]); - OCMStub(ClassMethod([authClass auth])). - andReturn(authClass); - - FIRAuth *auth = [FIRAuth auth]; - FUIAuth *authUI = [FUIAuth authUIWithAuth:auth]; - self.provider = [[FUIAnonymousAuth alloc] initWithAuthUI:authUI]; -} - -- (void)tearDown { - self.provider = nil; - [super tearDown]; -} - -- (void)testProviderValidity { - XCTAssertNotNil(self.provider); - XCTAssertNotNil(self.provider.icon); - XCTAssertNotNil(self.provider.signInLabel); - XCTAssertNotNil(self.provider.buttonBackgroundColor); - XCTAssertNotNil(self.provider.buttonTextColor); - XCTAssertNil(self.provider.providerID); - XCTAssertNotNil(self.provider.shortName); - XCTAssertTrue(self.provider.signInLabel.length != 0); - XCTAssertNil(self.provider.accessToken); - XCTAssertNil(self.provider.idToken); -} - -@end diff --git a/FirebaseAnonymousAuthUI/FirebaseAnonymousAuthUITests/Info.plist b/FirebaseAnonymousAuthUI/FirebaseAnonymousAuthUITests/Info.plist deleted file mode 100644 index ba72822e872..00000000000 --- a/FirebaseAnonymousAuthUI/FirebaseAnonymousAuthUITests/Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - - diff --git a/FirebaseAnonymousAuthUI/Podfile b/FirebaseAnonymousAuthUI/Podfile deleted file mode 100644 index 6b14d146c20..00000000000 --- a/FirebaseAnonymousAuthUI/Podfile +++ /dev/null @@ -1,13 +0,0 @@ -platform :ios, '13.0' - -target 'FirebaseAnonymousAuthUI' do - use_frameworks! - - pod 'FirebaseAuthUI', :path => '../' - - target 'FirebaseAnonymousAuthUITests' do - inherit! :search_paths - pod 'OCMock' - end - -end diff --git a/FirebaseAnonymousAuthUI/Sources/FUIAnonymousAuth.m b/FirebaseAnonymousAuthUI/Sources/FUIAnonymousAuth.m deleted file mode 100644 index 14ddf7a26e8..00000000000 --- a/FirebaseAnonymousAuthUI/Sources/FUIAnonymousAuth.m +++ /dev/null @@ -1,169 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -@import FirebaseAuth; - -#import - -#import "FirebaseAnonymousAuthUI/Sources/Public/FirebaseAnonymousAuthUI/FUIAnonymousAuth.h" - -/** @var kTableName - @brief The name of the strings table to search for localized strings. - */ -static NSString *const kTableName = @"FirebaseAnonymousAuthUI"; - -/** @var kBundleName - @brief The name of the bundle to search for resources. - */ -#if SWIFT_PACKAGE -static NSString *const kBundleName = @"FirebaseUI_FirebaseAnonymousAuthUI"; -#else -static NSString *const kBundleName = @"FirebaseAnonymousAuthUI"; -#endif // SWIFT_PACKAGE - -/** @var kSignInAsGuest - @brief The string key for localized button text. - */ -static NSString *const kSignInAsGuest = @"SignInAsGuest"; - -NS_ASSUME_NONNULL_BEGIN - -@implementation FUIAnonymousAuth { - /** The @c FUIAuth instance of the application. */ - FUIAuth *_authUI; - - /** @var _presentingViewController - @brief The presenting view controller for interactive sign-in. - */ - UIViewController *_presentingViewController; -} - -+ (NSBundle *)bundle { - return [FUIAuthUtils bundleNamed:kBundleName - inFrameworkBundle:[NSBundle bundleForClass:[self class]]]; -} - -- (instancetype)init { - return [self initWithAuthUI:[FUIAuth defaultAuthUI]]; -} - -- (instancetype)initWithAuthUI:(FUIAuth *)authUI { - if (self = [super init]) { - _authUI = authUI; - } - return self; -} - -#pragma mark - FUIAuthProvider - -- (nullable NSString *)providerID { - return nil; -} - -/** @fn accessToken: - @brief Anonymous Auth token is matched by FirebaseUI User Access Token - */ -- (nullable NSString *)accessToken { - return nil; -} - -/** @fn idToken: - @brief Anonymous Auth Token Secret is matched by FirebaseUI User Id Token - */ -- (nullable NSString *)idToken { - return nil; -} - -- (NSString *)shortName { - return @"Anonymous"; -} - -- (NSString *)signInLabel { - return FUILocalizedStringFromTableInBundle(kSignInAsGuest, - kTableName, - [FUIAnonymousAuth bundle]); -} - -- (UIImage *)icon { - return [FUIAuthUtils imageNamed:@"ic_anonymous" fromBundle:[FUIAnonymousAuth bundle]]; -} - -- (UIColor *)buttonBackgroundColor { - return [UIColor colorWithRed:244.0f/255.0f green:180.0f/255.0f blue:0.0f/255.0f alpha:1.0f]; -} - -- (UIColor *)buttonTextColor { - return [UIColor whiteColor]; -} - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-implementations" -- (void)signInWithEmail:(nullable NSString *)email - presentingViewController:(nullable UIViewController *)presentingViewController - completion:(nullable FUIAuthProviderSignInCompletionBlock)completion { - [self signInWithDefaultValue:email - presentingViewController:presentingViewController - completion:completion]; -} -#pragma clang diagnostic pop - -- (void)signInWithDefaultValue:(nullable NSString *)defaultValue - presentingViewController:(nullable UIViewController *)presentingViewController - completion:(nullable FUIAuthProviderSignInCompletionBlock)completion { - [_authUI.auth signInAnonymouslyWithCompletion:^(FIRAuthDataResult * _Nullable authResult, - NSError * _Nullable error) { - NSDictionary *userInfo; - if (authResult != nil) { - userInfo = @{ - FUIAuthProviderSignInUserInfoKeyAuthDataResult: authResult, - }; - } - if (error) { - [FUIAuthBaseViewController showAlertWithMessage:error.localizedDescription - presentingViewController:presentingViewController]; - if (completion) { - completion(nil, error, nil, userInfo); - } - return; - } - if (completion) { - completion(nil, error, nil, userInfo); - } - }]; -} - -- (void)signOut { - FIRUser *user = _authUI.auth.currentUser; - __weak UIViewController *weakController = _presentingViewController; - if (user.isAnonymous) { - [user deleteWithCompletion:^(NSError * _Nullable error) { - if (error) { - __strong UIViewController *presentingViewController = weakController; - [FUIAuthBaseViewController showAlertWithMessage:error.localizedDescription - presentingViewController:presentingViewController]; - return; - } - }]; - } -} - -- (BOOL)handleOpenURL:(NSURL *)URL sourceApplication:(nullable NSString *)sourceApplication { - return NO; -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebaseAnonymousAuthUI/Sources/Info.plist b/FirebaseAnonymousAuthUI/Sources/Info.plist deleted file mode 100644 index d3de8eefb69..00000000000 --- a/FirebaseAnonymousAuthUI/Sources/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - NSPrincipalClass - - - diff --git a/FirebaseAnonymousAuthUI/Sources/Public/FirebaseAnonymousAuthUI/FUIAnonymousAuth.h b/FirebaseAnonymousAuthUI/Sources/Public/FirebaseAnonymousAuthUI/FUIAnonymousAuth.h deleted file mode 100644 index a549b066202..00000000000 --- a/FirebaseAnonymousAuthUI/Sources/Public/FirebaseAnonymousAuthUI/FUIAnonymousAuth.h +++ /dev/null @@ -1,48 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** @class FUIAnonymousAuth - @brief AuthUI components for Anonymous Sign In. - */ -@interface FUIAnonymousAuth : NSObject - -/** @property buttonAlignment - @brief The alignment of the icon and text of the button. - */ -@property(nonatomic, readwrite) FUIButtonAlignment buttonAlignment; - -/** @fn bundle - @brief Returns the FirebaseAnonymousAuthUI resource bundle. - */ -+ (NSBundle *)bundle; - -/** @fn init - @brief Initialize the instance with the default AuthUI. - */ -- (instancetype)init; - -/** @fn initWithAuthUI: - @param authUI The @c FUIAuth instance that manages controllers of this provider. - */ -- (instancetype)initWithAuthUI:(FUIAuth *)authUI NS_DESIGNATED_INITIALIZER; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebaseAnonymousAuthUI/Sources/Public/FirebaseAnonymousAuthUI/FirebaseAnonymousAuthUI.h b/FirebaseAnonymousAuthUI/Sources/Public/FirebaseAnonymousAuthUI/FirebaseAnonymousAuthUI.h deleted file mode 100644 index 9e83145590a..00000000000 --- a/FirebaseAnonymousAuthUI/Sources/Public/FirebaseAnonymousAuthUI/FirebaseAnonymousAuthUI.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -//! Project version number for FirebaseAnonymousAuthUI. -FOUNDATION_EXPORT double FirebaseAnonymousAuthUIVersionNumber; - -//! Project version string for FirebaseAnonymousAuthUI. -FOUNDATION_EXPORT const unsigned char FirebaseAnonymousAuthUIVersionString[]; - -#import "FUIAnonymousAuth.h" - - diff --git a/FirebaseAnonymousAuthUI/Sources/Resources/ic_anonymous.png b/FirebaseAnonymousAuthUI/Sources/Resources/ic_anonymous.png deleted file mode 100755 index f00e3f3921d..00000000000 Binary files a/FirebaseAnonymousAuthUI/Sources/Resources/ic_anonymous.png and /dev/null differ diff --git a/FirebaseAnonymousAuthUI/Sources/Resources/ic_anonymous@2x.png b/FirebaseAnonymousAuthUI/Sources/Resources/ic_anonymous@2x.png deleted file mode 100755 index e344ea99325..00000000000 Binary files a/FirebaseAnonymousAuthUI/Sources/Resources/ic_anonymous@2x.png and /dev/null differ diff --git a/FirebaseAnonymousAuthUI/Sources/Resources/ic_anonymous@3x.png b/FirebaseAnonymousAuthUI/Sources/Resources/ic_anonymous@3x.png deleted file mode 100755 index b08402aa7e3..00000000000 Binary files a/FirebaseAnonymousAuthUI/Sources/Resources/ic_anonymous@3x.png and /dev/null differ diff --git a/FirebaseAnonymousAuthUI/Sources/Strings/en.lproj/FirebaseAnonymousAuthUI.strings b/FirebaseAnonymousAuthUI/Sources/Strings/en.lproj/FirebaseAnonymousAuthUI.strings deleted file mode 100644 index 956384c55c6..00000000000 --- a/FirebaseAnonymousAuthUI/Sources/Strings/en.lproj/FirebaseAnonymousAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with guest. */ -"SignInAsGuest" = "Sign in as guest"; diff --git a/FirebaseAuthUI.podspec b/FirebaseAuthUI.podspec deleted file mode 100644 index 99c7b9c9a18..00000000000 --- a/FirebaseAuthUI.podspec +++ /dev/null @@ -1,27 +0,0 @@ -Pod::Spec.new do |s| - s.name = 'FirebaseAuthUI' - s.version = '15.1.0' - s.summary = 'A prebuilt authentication UI flow for Firebase Auth.' - s.homepage = 'https://github.com/firebase/FirebaseUI-iOS' - s.license = { :type => 'Apache 2.0', :file => 'LICENSE' } - s.source = { :git => 'https://github.com/firebase/FirebaseUI-iOS.git', :tag => 'v' + s.version.to_s} - s.author = 'Firebase' - s.platform = :ios - s.ios.deployment_target = '13.0' - s.ios.framework = 'UIKit' - s.requires_arc = true - s.cocoapods_version = '>= 1.8.0' - s.pod_target_xcconfig = { - 'HEADER_SEARCH_PATHS' => '"${PODS_TARGET_SRCROOT}"', - } - s.swift_version = '6.0' - - s.public_header_files = 'FirebaseAuthUI/Sources/Public/FirebaseAuthUI/*.h' - s.source_files = 'FirebaseAuthUI/Sources/**/*.{h,m}' - s.dependency 'FirebaseAuth', '>= 11.0', '< 13.0' - s.dependency 'FirebaseCore' - s.resource_bundles = { - 'FirebaseAuthUI' => ['FirebaseAuthUI/Sources/{Resources,Strings}/*.{xib,png,lproj}'] - } - -end diff --git a/FirebaseAuthUI/FirebaseAuthUI.xcodeproj/project.pbxproj b/FirebaseAuthUI/FirebaseAuthUI.xcodeproj/project.pbxproj deleted file mode 100644 index f7b297bfb9f..00000000000 --- a/FirebaseAuthUI/FirebaseAuthUI.xcodeproj/project.pbxproj +++ /dev/null @@ -1,1047 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 50; - objects = { - -/* Begin PBXBuildFile section */ - 8D69E26321DD4BD100CFA49B /* FirebaseAuthUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8D69E25921DD4BD000CFA49B /* FirebaseAuthUI.framework */; }; - 8D69E26A21DD4BD100CFA49B /* FirebaseAuthUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E25C21DD4BD000CFA49B /* FirebaseAuthUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8D69E29321DD4C5100CFA49B /* FUIAuthSignInButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E27321DD4C5000CFA49B /* FUIAuthSignInButton.h */; }; - 8D69E29421DD4C5100CFA49B /* FUIAuthTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8D69E27421DD4C5000CFA49B /* FUIAuthTableViewCell.xib */; }; - 8D69E29521DD4C5100CFA49B /* FUIAuthStrings.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E27521DD4C5000CFA49B /* FUIAuthStrings.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8D69E29621DD4C5100CFA49B /* FUIAuthErrors.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E27621DD4C5000CFA49B /* FUIAuthErrors.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8D69E29721DD4C5100CFA49B /* FUIAuthErrorUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E27721DD4C5000CFA49B /* FUIAuthErrorUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8D69E29821DD4C5100CFA49B /* FUIAuthTableHeaderView.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E27821DD4C5000CFA49B /* FUIAuthTableHeaderView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8D69E29921DD4C5100CFA49B /* FUIAuthPickerViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8D69E27921DD4C5000CFA49B /* FUIAuthPickerViewController.xib */; }; - 8D69E29A21DD4C5100CFA49B /* FUIAuthUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E27A21DD4C5000CFA49B /* FUIAuthUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8D69E29B21DD4C5100CFA49B /* FUIAuthBaseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E27B21DD4C5000CFA49B /* FUIAuthBaseViewController.m */; }; - 8D69E29C21DD4C5100CFA49B /* FUIAuthUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E27C21DD4C5000CFA49B /* FUIAuthUtils.m */; }; - 8D69E29D21DD4C5100CFA49B /* FUIAuth_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E27D21DD4C5000CFA49B /* FUIAuth_Internal.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8D69E29E21DD4C5100CFA49B /* FUIAuthPickerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E27E21DD4C5000CFA49B /* FUIAuthPickerViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8D69E29F21DD4C5100CFA49B /* FUIAuth.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E27F21DD4C5000CFA49B /* FUIAuth.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8D69E2A021DD4C5100CFA49B /* FUIStaticContentTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E28021DD4C5000CFA49B /* FUIStaticContentTableViewController.m */; }; - 8D69E2A121DD4C5100CFA49B /* FUIAuthTableHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E28121DD4C5000CFA49B /* FUIAuthTableHeaderView.m */; }; - 8D69E2A221DD4C5100CFA49B /* FUIAuthErrors.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E28221DD4C5000CFA49B /* FUIAuthErrors.m */; }; - 8D69E2A321DD4C5100CFA49B /* FUIAuthTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E28321DD4C5000CFA49B /* FUIAuthTableViewCell.m */; }; - 8D69E2A421DD4C5100CFA49B /* FUIStaticContentTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E28421DD4C5000CFA49B /* FUIStaticContentTableViewController.h */; }; - 8D69E2A521DD4C5100CFA49B /* FUIAuth.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E28521DD4C5000CFA49B /* FUIAuth.m */; }; - 8D69E2A621DD4C5100CFA49B /* FUIAuthErrorUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E28621DD4C5000CFA49B /* FUIAuthErrorUtils.m */; }; - 8D69E2A721DD4C5100CFA49B /* FUIStaticContentTableViewManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E28721DD4C5000CFA49B /* FUIStaticContentTableViewManager.h */; }; - 8D69E2A821DD4C5100CFA49B /* FUIAuthSignInButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E28821DD4C5000CFA49B /* FUIAuthSignInButton.m */; }; - 8D69E2A921DD4C5100CFA49B /* FUIPrivacyAndTermsOfServiceView.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E28921DD4C5100CFA49B /* FUIPrivacyAndTermsOfServiceView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8D69E2AA21DD4C5100CFA49B /* FUIAuthBaseViewController_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E28A21DD4C5100CFA49B /* FUIAuthBaseViewController_Internal.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8D69E2AB21DD4C5100CFA49B /* FUIAuthTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E28B21DD4C5100CFA49B /* FUIAuthTableViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8D69E2AC21DD4C5100CFA49B /* FUIAuthStrings.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E28C21DD4C5100CFA49B /* FUIAuthStrings.m */; }; - 8D69E2AD21DD4C5100CFA49B /* FUIAuthPickerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E28D21DD4C5100CFA49B /* FUIAuthPickerViewController.m */; }; - 8D69E2AE21DD4C5100CFA49B /* FUIStaticContentTableViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E28E21DD4C5100CFA49B /* FUIStaticContentTableViewManager.m */; }; - 8D69E2AF21DD4C5100CFA49B /* FUIStaticContentTableViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8D69E28F21DD4C5100CFA49B /* FUIStaticContentTableViewController.xib */; }; - 8D69E2B021DD4C5100CFA49B /* FUIAuthBaseViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E29021DD4C5100CFA49B /* FUIAuthBaseViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8D69E2B121DD4C5100CFA49B /* FUIAuthProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E29121DD4C5100CFA49B /* FUIAuthProvider.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8D69E2B221DD4C5100CFA49B /* FUIPrivacyAndTermsOfServiceView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E29221DD4C5100CFA49B /* FUIPrivacyAndTermsOfServiceView.m */; }; - 8D69E2CB21DD4C5D00CFA49B /* FUIAccountSettingsOperationDeleteAccount.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E2B421DD4C5D00CFA49B /* FUIAccountSettingsOperationDeleteAccount.h */; }; - 8D69E2CC21DD4C5D00CFA49B /* FUIAccountSettingsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E2B521DD4C5D00CFA49B /* FUIAccountSettingsViewController.m */; }; - 8D69E2CD21DD4C5D00CFA49B /* FUIAccountSettingsOperationSignOut.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E2B621DD4C5D00CFA49B /* FUIAccountSettingsOperationSignOut.h */; }; - 8D69E2CE21DD4C5D00CFA49B /* FUIAccountSettingsOperationUpdateEmail.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E2B721DD4C5D00CFA49B /* FUIAccountSettingsOperationUpdateEmail.h */; }; - 8D69E2CF21DD4C5D00CFA49B /* FUIAccountSettingsOperationForgotPassword.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E2B821DD4C5D00CFA49B /* FUIAccountSettingsOperationForgotPassword.h */; }; - 8D69E2D021DD4C5D00CFA49B /* FUIAccountSettingsOperationUnlinkAccount.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E2B921DD4C5D00CFA49B /* FUIAccountSettingsOperationUnlinkAccount.m */; }; - 8D69E2D121DD4C5D00CFA49B /* FUIAccountSettingsOperationUpdatePassword.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E2BA21DD4C5D00CFA49B /* FUIAccountSettingsOperationUpdatePassword.m */; }; - 8D69E2D221DD4C5D00CFA49B /* FUIAccountSettingsOperationUpdateName.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E2BB21DD4C5D00CFA49B /* FUIAccountSettingsOperationUpdateName.h */; }; - 8D69E2D321DD4C5D00CFA49B /* FUIAccountSettingsOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E2BC21DD4C5D00CFA49B /* FUIAccountSettingsOperation.m */; }; - 8D69E2D421DD4C5D00CFA49B /* FUIAccountSettingsOperationType.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E2BD21DD4C5D00CFA49B /* FUIAccountSettingsOperationType.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8D69E2D521DD4C5D00CFA49B /* FUIAccountSettingsOperationSignOut.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E2BE21DD4C5D00CFA49B /* FUIAccountSettingsOperationSignOut.m */; }; - 8D69E2D621DD4C5D00CFA49B /* FUIAccountSettingsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8D69E2BF21DD4C5D00CFA49B /* FUIAccountSettingsViewController.xib */; }; - 8D69E2D721DD4C5D00CFA49B /* FUIAccountSettingsViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E2C021DD4C5D00CFA49B /* FUIAccountSettingsViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8D69E2D821DD4C5D00CFA49B /* FUIAccountSettingsOperationDeleteAccount.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E2C121DD4C5D00CFA49B /* FUIAccountSettingsOperationDeleteAccount.m */; }; - 8D69E2D921DD4C5D00CFA49B /* FUIInputTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8D69E2C221DD4C5D00CFA49B /* FUIInputTableViewCell.xib */; }; - 8D69E2DA21DD4C5D00CFA49B /* FUIAccountSettingsOperationUnlinkAccount.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E2C321DD4C5D00CFA49B /* FUIAccountSettingsOperationUnlinkAccount.h */; }; - 8D69E2DB21DD4C5D00CFA49B /* FUIAccountSettingsOperationForgotPassword.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E2C421DD4C5D00CFA49B /* FUIAccountSettingsOperationForgotPassword.m */; }; - 8D69E2DC21DD4C5D00CFA49B /* FUIAccountSettingsOperationUpdateEmail.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E2C521DD4C5D00CFA49B /* FUIAccountSettingsOperationUpdateEmail.m */; }; - 8D69E2DD21DD4C5D00CFA49B /* FUIAccountSettingsOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E2C621DD4C5D00CFA49B /* FUIAccountSettingsOperation.h */; }; - 8D69E2DE21DD4C5D00CFA49B /* FUIAccountSettingsOperationUpdateName.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E2C721DD4C5D00CFA49B /* FUIAccountSettingsOperationUpdateName.m */; }; - 8D69E2DF21DD4C5D00CFA49B /* FUIAccountSettingsOperationUpdatePassword.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E2C821DD4C5D00CFA49B /* FUIAccountSettingsOperationUpdatePassword.h */; }; - 8D69E2E021DD4C5D00CFA49B /* FUIPasswordTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8D69E2C921DD4C5D00CFA49B /* FUIPasswordTableViewCell.xib */; }; - 8D69E2E121DD4C5D00CFA49B /* FUIAccountSettingsOperation_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E2CA21DD4C5D00CFA49B /* FUIAccountSettingsOperation_Internal.h */; }; - 8D69E34221DD4C6D00CFA49B /* ic_account_circle.png in Resources */ = {isa = PBXBuildFile; fileRef = 8D69E2E321DD4C6D00CFA49B /* ic_account_circle.png */; }; - 8D69E34321DD4C6D00CFA49B /* ic_visibility@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8D69E2E421DD4C6D00CFA49B /* ic_visibility@2x.png */; }; - 8D69E34421DD4C6D00CFA49B /* ic_visibility@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8D69E2E521DD4C6D00CFA49B /* ic_visibility@3x.png */; }; - 8D69E34521DD4C6D00CFA49B /* ic_visibility.png in Resources */ = {isa = PBXBuildFile; fileRef = 8D69E2E621DD4C6D00CFA49B /* ic_visibility.png */; }; - 8D69E34621DD4C6D00CFA49B /* ic_account_circle3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8D69E2E721DD4C6D00CFA49B /* ic_account_circle3x.png */; }; - 8D69E34721DD4C6D00CFA49B /* ic_visibility_off@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8D69E2E821DD4C6D00CFA49B /* ic_visibility_off@3x.png */; }; - 8D69E34821DD4C6D00CFA49B /* ic_visibility_off@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8D69E2E921DD4C6D00CFA49B /* ic_visibility_off@2x.png */; }; - 8D69E34921DD4C6D00CFA49B /* ic_account_circle2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8D69E2EA21DD4C6D00CFA49B /* ic_account_circle2x.png */; }; - 8D69E34A21DD4C6D00CFA49B /* ic_visibility_off.png in Resources */ = {isa = PBXBuildFile; fileRef = 8D69E2EB21DD4C6D00CFA49B /* ic_visibility_off.png */; }; - 8D69E34B21DD4C6D00CFA49B /* FirebaseAuthUI.strings in Resources */ = {isa = PBXBuildFile; fileRef = 8D69E2ED21DD4C6D00CFA49B /* FirebaseAuthUI.strings */; }; - 8D69E35921DD614000CFA49B /* FUIAuthTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E35721DD614000CFA49B /* FUIAuthTest.m */; }; - 8D69E35A21DD614000CFA49B /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 8D69E35821DD614000CFA49B /* GoogleService-Info.plist */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 8D69E26421DD4BD100CFA49B /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 8D69E25021DD4BD000CFA49B /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8D69E25821DD4BD000CFA49B; - remoteInfo = FirebaseAuthUI; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 8D69E25921DD4BD000CFA49B /* FirebaseAuthUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FirebaseAuthUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 8D69E25C21DD4BD000CFA49B /* FirebaseAuthUI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FirebaseAuthUI.h; sourceTree = ""; }; - 8D69E25D21DD4BD000CFA49B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 8D69E26221DD4BD100CFA49B /* FirebaseAuthUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FirebaseAuthUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 8D69E26921DD4BD100CFA49B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 8D69E27321DD4C5000CFA49B /* FUIAuthSignInButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIAuthSignInButton.h; sourceTree = ""; }; - 8D69E27421DD4C5000CFA49B /* FUIAuthTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = FUIAuthTableViewCell.xib; sourceTree = ""; }; - 8D69E27521DD4C5000CFA49B /* FUIAuthStrings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIAuthStrings.h; sourceTree = ""; }; - 8D69E27621DD4C5000CFA49B /* FUIAuthErrors.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIAuthErrors.h; sourceTree = ""; }; - 8D69E27721DD4C5000CFA49B /* FUIAuthErrorUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIAuthErrorUtils.h; sourceTree = ""; }; - 8D69E27821DD4C5000CFA49B /* FUIAuthTableHeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIAuthTableHeaderView.h; sourceTree = ""; }; - 8D69E27921DD4C5000CFA49B /* FUIAuthPickerViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = FUIAuthPickerViewController.xib; sourceTree = ""; }; - 8D69E27A21DD4C5000CFA49B /* FUIAuthUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIAuthUtils.h; sourceTree = ""; }; - 8D69E27B21DD4C5000CFA49B /* FUIAuthBaseViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUIAuthBaseViewController.m; sourceTree = ""; }; - 8D69E27C21DD4C5000CFA49B /* FUIAuthUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUIAuthUtils.m; sourceTree = ""; }; - 8D69E27D21DD4C5000CFA49B /* FUIAuth_Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIAuth_Internal.h; sourceTree = ""; }; - 8D69E27E21DD4C5000CFA49B /* FUIAuthPickerViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIAuthPickerViewController.h; sourceTree = ""; }; - 8D69E27F21DD4C5000CFA49B /* FUIAuth.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIAuth.h; sourceTree = ""; }; - 8D69E28021DD4C5000CFA49B /* FUIStaticContentTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUIStaticContentTableViewController.m; sourceTree = ""; }; - 8D69E28121DD4C5000CFA49B /* FUIAuthTableHeaderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUIAuthTableHeaderView.m; sourceTree = ""; }; - 8D69E28221DD4C5000CFA49B /* FUIAuthErrors.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUIAuthErrors.m; sourceTree = ""; }; - 8D69E28321DD4C5000CFA49B /* FUIAuthTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUIAuthTableViewCell.m; sourceTree = ""; }; - 8D69E28421DD4C5000CFA49B /* FUIStaticContentTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIStaticContentTableViewController.h; sourceTree = ""; }; - 8D69E28521DD4C5000CFA49B /* FUIAuth.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUIAuth.m; sourceTree = ""; }; - 8D69E28621DD4C5000CFA49B /* FUIAuthErrorUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUIAuthErrorUtils.m; sourceTree = ""; }; - 8D69E28721DD4C5000CFA49B /* FUIStaticContentTableViewManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIStaticContentTableViewManager.h; sourceTree = ""; }; - 8D69E28821DD4C5000CFA49B /* FUIAuthSignInButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUIAuthSignInButton.m; sourceTree = ""; }; - 8D69E28921DD4C5100CFA49B /* FUIPrivacyAndTermsOfServiceView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIPrivacyAndTermsOfServiceView.h; sourceTree = ""; }; - 8D69E28A21DD4C5100CFA49B /* FUIAuthBaseViewController_Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIAuthBaseViewController_Internal.h; sourceTree = ""; }; - 8D69E28B21DD4C5100CFA49B /* FUIAuthTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIAuthTableViewCell.h; sourceTree = ""; }; - 8D69E28C21DD4C5100CFA49B /* FUIAuthStrings.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUIAuthStrings.m; sourceTree = ""; }; - 8D69E28D21DD4C5100CFA49B /* FUIAuthPickerViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUIAuthPickerViewController.m; sourceTree = ""; }; - 8D69E28E21DD4C5100CFA49B /* FUIStaticContentTableViewManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUIStaticContentTableViewManager.m; sourceTree = ""; }; - 8D69E28F21DD4C5100CFA49B /* FUIStaticContentTableViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = FUIStaticContentTableViewController.xib; sourceTree = ""; }; - 8D69E29021DD4C5100CFA49B /* FUIAuthBaseViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIAuthBaseViewController.h; sourceTree = ""; }; - 8D69E29121DD4C5100CFA49B /* FUIAuthProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIAuthProvider.h; sourceTree = ""; }; - 8D69E29221DD4C5100CFA49B /* FUIPrivacyAndTermsOfServiceView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUIPrivacyAndTermsOfServiceView.m; sourceTree = ""; }; - 8D69E2B421DD4C5D00CFA49B /* FUIAccountSettingsOperationDeleteAccount.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIAccountSettingsOperationDeleteAccount.h; sourceTree = ""; }; - 8D69E2B521DD4C5D00CFA49B /* FUIAccountSettingsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUIAccountSettingsViewController.m; sourceTree = ""; }; - 8D69E2B621DD4C5D00CFA49B /* FUIAccountSettingsOperationSignOut.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIAccountSettingsOperationSignOut.h; sourceTree = ""; }; - 8D69E2B721DD4C5D00CFA49B /* FUIAccountSettingsOperationUpdateEmail.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIAccountSettingsOperationUpdateEmail.h; sourceTree = ""; }; - 8D69E2B821DD4C5D00CFA49B /* FUIAccountSettingsOperationForgotPassword.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIAccountSettingsOperationForgotPassword.h; sourceTree = ""; }; - 8D69E2B921DD4C5D00CFA49B /* FUIAccountSettingsOperationUnlinkAccount.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUIAccountSettingsOperationUnlinkAccount.m; sourceTree = ""; }; - 8D69E2BA21DD4C5D00CFA49B /* FUIAccountSettingsOperationUpdatePassword.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUIAccountSettingsOperationUpdatePassword.m; sourceTree = ""; }; - 8D69E2BB21DD4C5D00CFA49B /* FUIAccountSettingsOperationUpdateName.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIAccountSettingsOperationUpdateName.h; sourceTree = ""; }; - 8D69E2BC21DD4C5D00CFA49B /* FUIAccountSettingsOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUIAccountSettingsOperation.m; sourceTree = ""; }; - 8D69E2BD21DD4C5D00CFA49B /* FUIAccountSettingsOperationType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIAccountSettingsOperationType.h; sourceTree = ""; }; - 8D69E2BE21DD4C5D00CFA49B /* FUIAccountSettingsOperationSignOut.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUIAccountSettingsOperationSignOut.m; sourceTree = ""; }; - 8D69E2BF21DD4C5D00CFA49B /* FUIAccountSettingsViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = FUIAccountSettingsViewController.xib; sourceTree = ""; }; - 8D69E2C021DD4C5D00CFA49B /* FUIAccountSettingsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIAccountSettingsViewController.h; sourceTree = ""; }; - 8D69E2C121DD4C5D00CFA49B /* FUIAccountSettingsOperationDeleteAccount.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUIAccountSettingsOperationDeleteAccount.m; sourceTree = ""; }; - 8D69E2C221DD4C5D00CFA49B /* FUIInputTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = FUIInputTableViewCell.xib; sourceTree = ""; }; - 8D69E2C321DD4C5D00CFA49B /* FUIAccountSettingsOperationUnlinkAccount.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIAccountSettingsOperationUnlinkAccount.h; sourceTree = ""; }; - 8D69E2C421DD4C5D00CFA49B /* FUIAccountSettingsOperationForgotPassword.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUIAccountSettingsOperationForgotPassword.m; sourceTree = ""; }; - 8D69E2C521DD4C5D00CFA49B /* FUIAccountSettingsOperationUpdateEmail.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUIAccountSettingsOperationUpdateEmail.m; sourceTree = ""; }; - 8D69E2C621DD4C5D00CFA49B /* FUIAccountSettingsOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIAccountSettingsOperation.h; sourceTree = ""; }; - 8D69E2C721DD4C5D00CFA49B /* FUIAccountSettingsOperationUpdateName.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUIAccountSettingsOperationUpdateName.m; sourceTree = ""; }; - 8D69E2C821DD4C5D00CFA49B /* FUIAccountSettingsOperationUpdatePassword.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIAccountSettingsOperationUpdatePassword.h; sourceTree = ""; }; - 8D69E2C921DD4C5D00CFA49B /* FUIPasswordTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = FUIPasswordTableViewCell.xib; sourceTree = ""; }; - 8D69E2CA21DD4C5D00CFA49B /* FUIAccountSettingsOperation_Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIAccountSettingsOperation_Internal.h; sourceTree = ""; }; - 8D69E2E321DD4C6D00CFA49B /* ic_account_circle.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_account_circle.png; sourceTree = ""; }; - 8D69E2E421DD4C6D00CFA49B /* ic_visibility@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ic_visibility@2x.png"; sourceTree = ""; }; - 8D69E2E521DD4C6D00CFA49B /* ic_visibility@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ic_visibility@3x.png"; sourceTree = ""; }; - 8D69E2E621DD4C6D00CFA49B /* ic_visibility.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_visibility.png; sourceTree = ""; }; - 8D69E2E721DD4C6D00CFA49B /* ic_account_circle3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_account_circle3x.png; sourceTree = ""; }; - 8D69E2E821DD4C6D00CFA49B /* ic_visibility_off@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ic_visibility_off@3x.png"; sourceTree = ""; }; - 8D69E2E921DD4C6D00CFA49B /* ic_visibility_off@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ic_visibility_off@2x.png"; sourceTree = ""; }; - 8D69E2EA21DD4C6D00CFA49B /* ic_account_circle2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_account_circle2x.png; sourceTree = ""; }; - 8D69E2EB21DD4C6D00CFA49B /* ic_visibility_off.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_visibility_off.png; sourceTree = ""; }; - 8D69E2EE21DD4C6D00CFA49B /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/FirebaseAuthUI.strings; sourceTree = ""; }; - 8D69E2EF21DD4C6D00CFA49B /* ur */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ur; path = ur.lproj/FirebaseAuthUI.strings; sourceTree = ""; }; - 8D69E2F021DD4C6D00CFA49B /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/FirebaseAuthUI.strings; sourceTree = ""; }; - 8D69E2F121DD4C6D00CFA49B /* es-SV */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-SV"; path = "es-SV.lproj/FirebaseAuthUI.strings"; sourceTree = ""; }; - 8D69E2F221DD4C6D00CFA49B /* zh-Hant-TW */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant-TW"; path = "zh-Hant-TW.lproj/FirebaseAuthUI.strings"; sourceTree = ""; }; - 8D69E2F321DD4C6D00CFA49B /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/FirebaseAuthUI.strings; sourceTree = ""; }; - 8D69E2F421DD4C6D00CFA49B /* el */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = el; path = el.lproj/FirebaseAuthUI.strings; sourceTree = ""; }; - 8D69E2F521DD4C6D00CFA49B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/FirebaseAuthUI.strings"; sourceTree = ""; }; - 8D69E2F621DD4C6D00CFA49B /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/FirebaseAuthUI.strings; sourceTree = ""; }; - 8D69E2F721DD4C6D00CFA49B /* fa */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fa; path = fa.lproj/FirebaseAuthUI.strings; sourceTree = ""; }; - 8D69E2F821DD4C6D00CFA49B /* mr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = mr; path = mr.lproj/FirebaseAuthUI.strings; sourceTree = ""; }; - 8D69E2F921DD4C6D00CFA49B /* es-GT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-GT"; path = "es-GT.lproj/FirebaseAuthUI.strings"; sourceTree = ""; }; - 8D69E2FA21DD4C6D00CFA49B /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/FirebaseAuthUI.strings; sourceTree = ""; }; - 8D69E2FB21DD4C6D00CFA49B /* en-CA */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-CA"; path = "en-CA.lproj/FirebaseAuthUI.strings"; sourceTree = ""; }; - 8D69E2FC21DD4C6D00CFA49B /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/FirebaseAuthUI.strings; sourceTree = ""; }; - 8D69E2FD21DD4C6D00CFA49B /* es-PY */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-PY"; path = "es-PY.lproj/FirebaseAuthUI.strings"; sourceTree = ""; }; - 8D69E2FE21DD4C6D00CFA49B /* gu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = gu; path = gu.lproj/FirebaseAuthUI.strings; sourceTree = ""; }; - 8D69E2FF21DD4C6D00CFA49B /* kn */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = kn; path = kn.lproj/FirebaseAuthUI.strings; sourceTree = ""; }; - 8D69E30021DD4C6D00CFA49B /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/FirebaseAuthUI.strings; sourceTree = ""; }; - 8D69E30121DD4C6D00CFA49B /* es-US */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-US"; path = "es-US.lproj/FirebaseAuthUI.strings"; sourceTree = ""; }; - 8D69E30221DD4C6D00CFA49B /* en-GB */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-GB"; path = "en-GB.lproj/FirebaseAuthUI.strings"; sourceTree = ""; }; - 8D69E30321DD4C6D00CFA49B /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/FirebaseAuthUI.strings; sourceTree = ""; }; - 8D69E30421DD4C6D00CFA49B /* es-VE */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-VE"; path = "es-VE.lproj/FirebaseAuthUI.strings"; sourceTree = ""; }; - 8D69E30521DD4C6D00CFA49B /* es-CL */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-CL"; path = "es-CL.lproj/FirebaseAuthUI.strings"; sourceTree = ""; }; - 8D69E30621DD4C6D00CFA49B /* sl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sl; path = sl.lproj/FirebaseAuthUI.strings; sourceTree = ""; }; - 8D69E30721DD4C6D00CFA49B /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/FirebaseAuthUI.strings; sourceTree = ""; }; - 8D69E30821DD4C6D00CFA49B /* es-419 */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-419"; path = "es-419.lproj/FirebaseAuthUI.strings"; sourceTree = ""; }; - 8D69E30921DD4C6D00CFA49B /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/FirebaseAuthUI.strings; sourceTree = ""; }; - 8D69E30A21DD4C6D00CFA49B /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bg; path = bg.lproj/FirebaseAuthUI.strings; sourceTree = ""; }; - 8D69E30B21DD4C6D00CFA49B /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/FirebaseAuthUI.strings; sourceTree = ""; }; - 8D69E30C21DD4C6D00CFA49B /* sr-Latn */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "sr-Latn"; path = "sr-Latn.lproj/FirebaseAuthUI.strings"; sourceTree = ""; }; - 8D69E30D21DD4C6D00CFA49B /* nn-NO */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "nn-NO"; path = "nn-NO.lproj/FirebaseAuthUI.strings"; sourceTree = ""; }; - 8D69E30E21DD4C6D00CFA49B /* es-PA */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-PA"; path = "es-PA.lproj/FirebaseAuthUI.strings"; sourceTree = ""; }; - 8D69E30F21DD4C6D00CFA49B /* en-SG */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-SG"; path = "en-SG.lproj/FirebaseAuthUI.strings"; sourceTree = ""; }; - 8D69E31021DD4C6D00CFA49B /* sr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sr; path = sr.lproj/FirebaseAuthUI.strings; sourceTree = ""; }; - 8D69E31121DD4C6D00CFA49B /* ms */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ms; path = ms.lproj/FirebaseAuthUI.strings; sourceTree = ""; }; - 8D69E31221DD4C6D00CFA49B /* es-CR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-CR"; path = "es-CR.lproj/FirebaseAuthUI.strings"; sourceTree = ""; }; - 8D69E31321DD4C6D00CFA49B /* ta */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ta; path = ta.lproj/FirebaseAuthUI.strings; sourceTree = ""; }; - 8D69E31421DD4C6D00CFA49B /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/FirebaseAuthUI.strings; sourceTree = ""; }; - 8D69E31521DD4C6D00CFA49B /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/FirebaseAuthUI.strings; sourceTree = ""; }; - 8D69E31621DD4C6D00CFA49B /* es-AR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-AR"; path = "es-AR.lproj/FirebaseAuthUI.strings"; sourceTree = ""; }; - 8D69E31721DD4C6D00CFA49B /* es-PE */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-PE"; path = "es-PE.lproj/FirebaseAuthUI.strings"; sourceTree = ""; }; - 8D69E31821DD4C6D00CFA49B /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/FirebaseAuthUI.strings; sourceTree = ""; }; - 8D69E31921DD4C6D00CFA49B /* en-IE */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-IE"; path = "en-IE.lproj/FirebaseAuthUI.strings"; sourceTree = ""; }; - 8D69E31A21DD4C6D00CFA49B /* fil */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fil; path = fil.lproj/FirebaseAuthUI.strings; sourceTree = ""; }; - 8D69E31B21DD4C6D00CFA49B /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/FirebaseAuthUI.strings"; sourceTree = ""; }; - 8D69E31C21DD4C6D00CFA49B /* es-CO */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-CO"; path = "es-CO.lproj/FirebaseAuthUI.strings"; sourceTree = ""; }; - 8D69E31D21DD4C6D00CFA49B /* gsw */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = gsw; path = gsw.lproj/FirebaseAuthUI.strings; sourceTree = ""; }; - 8D69E31E21DD4C6D00CFA49B /* en-ZA */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-ZA"; path = "en-ZA.lproj/FirebaseAuthUI.strings"; sourceTree = ""; }; - 8D69E31F21DD4C6D00CFA49B /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/FirebaseAuthUI.strings; sourceTree = ""; }; - 8D69E32021DD4C6D00CFA49B /* es-PR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-PR"; path = "es-PR.lproj/FirebaseAuthUI.strings"; sourceTree = ""; }; - 8D69E32121DD4C6D00CFA49B /* de-AT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "de-AT"; path = "de-AT.lproj/FirebaseAuthUI.strings"; sourceTree = ""; }; - 8D69E32221DD4C6D00CFA49B /* en-AU */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-AU"; path = "en-AU.lproj/FirebaseAuthUI.strings"; sourceTree = ""; }; - 8D69E32321DD4C6D00CFA49B /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/FirebaseAuthUI.strings; sourceTree = ""; }; - 8D69E32421DD4C6D00CFA49B /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/FirebaseAuthUI.strings; sourceTree = ""; }; - 8D69E32521DD4C6D00CFA49B /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/FirebaseAuthUI.strings"; sourceTree = ""; }; - 8D69E32621DD4C6D00CFA49B /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/FirebaseAuthUI.strings; sourceTree = ""; }; - 8D69E32721DD4C6D00CFA49B /* lv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = lv; path = lv.lproj/FirebaseAuthUI.strings; sourceTree = ""; }; - 8D69E32821DD4C6D00CFA49B /* es-MX */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-MX"; path = "es-MX.lproj/FirebaseAuthUI.strings"; sourceTree = ""; }; - 8D69E32921DD4C6D00CFA49B /* lt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = lt; path = lt.lproj/FirebaseAuthUI.strings; sourceTree = ""; }; - 8D69E32A21DD4C6D00CFA49B /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/FirebaseAuthUI.strings; sourceTree = ""; }; - 8D69E32B21DD4C6D00CFA49B /* es-DO */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-DO"; path = "es-DO.lproj/FirebaseAuthUI.strings"; sourceTree = ""; }; - 8D69E32C21DD4C6D00CFA49B /* fr-CH */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "fr-CH"; path = "fr-CH.lproj/FirebaseAuthUI.strings"; sourceTree = ""; }; - 8D69E32D21DD4C6D00CFA49B /* es-NI */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-NI"; path = "es-NI.lproj/FirebaseAuthUI.strings"; sourceTree = ""; }; - 8D69E32E21DD4C6D00CFA49B /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/FirebaseAuthUI.strings; sourceTree = ""; }; - 8D69E32F21DD4C6D00CFA49B /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/FirebaseAuthUI.strings; sourceTree = ""; }; - 8D69E33021DD4C6D00CFA49B /* id */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = id; path = id.lproj/FirebaseAuthUI.strings; sourceTree = ""; }; - 8D69E33121DD4C6D00CFA49B /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/FirebaseAuthUI.strings; sourceTree = ""; }; - 8D69E33221DD4C6D00CFA49B /* th */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = th; path = th.lproj/FirebaseAuthUI.strings; sourceTree = ""; }; - 8D69E33321DD4C6D00CFA49B /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = pt.lproj/FirebaseAuthUI.strings; sourceTree = ""; }; - 8D69E33421DD4C6D00CFA49B /* de-CH */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "de-CH"; path = "de-CH.lproj/FirebaseAuthUI.strings"; sourceTree = ""; }; - 8D69E33521DD4C6D00CFA49B /* bn */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bn; path = bn.lproj/FirebaseAuthUI.strings; sourceTree = ""; }; - 8D69E33621DD4C6D00CFA49B /* es-EC */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-EC"; path = "es-EC.lproj/FirebaseAuthUI.strings"; sourceTree = ""; }; - 8D69E33721DD4C6D00CFA49B /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-PT"; path = "pt-PT.lproj/FirebaseAuthUI.strings"; sourceTree = ""; }; - 8D69E33821DD4C6D00CFA49B /* es-BO */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-BO"; path = "es-BO.lproj/FirebaseAuthUI.strings"; sourceTree = ""; }; - 8D69E33921DD4C6D00CFA49B /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/FirebaseAuthUI.strings; sourceTree = ""; }; - 8D69E33A21DD4C6D00CFA49B /* ln */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ln; path = ln.lproj/FirebaseAuthUI.strings; sourceTree = ""; }; - 8D69E33B21DD4C6D00CFA49B /* es-UY */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-UY"; path = "es-UY.lproj/FirebaseAuthUI.strings"; sourceTree = ""; }; - 8D69E33C21DD4C6D00CFA49B /* es-HN */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-HN"; path = "es-HN.lproj/FirebaseAuthUI.strings"; sourceTree = ""; }; - 8D69E33D21DD4C6D00CFA49B /* hr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hr; path = hr.lproj/FirebaseAuthUI.strings; sourceTree = ""; }; - 8D69E33E21DD4C6D00CFA49B /* hi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hi; path = hi.lproj/FirebaseAuthUI.strings; sourceTree = ""; }; - 8D69E33F21DD4C6D00CFA49B /* ca */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ca; path = ca.lproj/FirebaseAuthUI.strings; sourceTree = ""; }; - 8D69E34021DD4C6D00CFA49B /* zh */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = zh; path = zh.lproj/FirebaseAuthUI.strings; sourceTree = ""; }; - 8D69E34121DD4C6D00CFA49B /* en-IN */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-IN"; path = "en-IN.lproj/FirebaseAuthUI.strings"; sourceTree = ""; }; - 8D69E35721DD614000CFA49B /* FUIAuthTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUIAuthTest.m; sourceTree = ""; }; - 8D69E35821DD614000CFA49B /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 8D69E25621DD4BD000CFA49B /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8D69E25F21DD4BD100CFA49B /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 8D69E26321DD4BD100CFA49B /* FirebaseAuthUI.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 8D55F14E261E5F3F0020DFB0 /* Public */ = { - isa = PBXGroup; - children = ( - 8DAB9B49263768D900FF271F /* FirebaseAuthUI */, - ); - path = Public; - sourceTree = ""; - }; - 8D69E24F21DD4BD000CFA49B = { - isa = PBXGroup; - children = ( - 8D69E25B21DD4BD000CFA49B /* Sources */, - 8D69E26621DD4BD100CFA49B /* FirebaseAuthUITests */, - 8D69E25A21DD4BD000CFA49B /* Products */, - ACF63AA832F9F7882BC43A9D /* Pods */, - ); - sourceTree = ""; - }; - 8D69E25A21DD4BD000CFA49B /* Products */ = { - isa = PBXGroup; - children = ( - 8D69E25921DD4BD000CFA49B /* FirebaseAuthUI.framework */, - 8D69E26221DD4BD100CFA49B /* FirebaseAuthUITests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - 8D69E25B21DD4BD000CFA49B /* Sources */ = { - isa = PBXGroup; - children = ( - 8D55F14E261E5F3F0020DFB0 /* Public */, - 8D69E2CA21DD4C5D00CFA49B /* FUIAccountSettingsOperation_Internal.h */, - 8D69E2C621DD4C5D00CFA49B /* FUIAccountSettingsOperation.h */, - 8D69E2BC21DD4C5D00CFA49B /* FUIAccountSettingsOperation.m */, - 8D69E2B421DD4C5D00CFA49B /* FUIAccountSettingsOperationDeleteAccount.h */, - 8D69E2C121DD4C5D00CFA49B /* FUIAccountSettingsOperationDeleteAccount.m */, - 8D69E2B821DD4C5D00CFA49B /* FUIAccountSettingsOperationForgotPassword.h */, - 8D69E2C421DD4C5D00CFA49B /* FUIAccountSettingsOperationForgotPassword.m */, - 8D69E2B621DD4C5D00CFA49B /* FUIAccountSettingsOperationSignOut.h */, - 8D69E2BE21DD4C5D00CFA49B /* FUIAccountSettingsOperationSignOut.m */, - 8D69E2C321DD4C5D00CFA49B /* FUIAccountSettingsOperationUnlinkAccount.h */, - 8D69E2B921DD4C5D00CFA49B /* FUIAccountSettingsOperationUnlinkAccount.m */, - 8D69E2B721DD4C5D00CFA49B /* FUIAccountSettingsOperationUpdateEmail.h */, - 8D69E2C521DD4C5D00CFA49B /* FUIAccountSettingsOperationUpdateEmail.m */, - 8D69E2BB21DD4C5D00CFA49B /* FUIAccountSettingsOperationUpdateName.h */, - 8D69E2C721DD4C5D00CFA49B /* FUIAccountSettingsOperationUpdateName.m */, - 8D69E2C821DD4C5D00CFA49B /* FUIAccountSettingsOperationUpdatePassword.h */, - 8D69E2BA21DD4C5D00CFA49B /* FUIAccountSettingsOperationUpdatePassword.m */, - 8D69E2B521DD4C5D00CFA49B /* FUIAccountSettingsViewController.m */, - 8D69E28521DD4C5000CFA49B /* FUIAuth.m */, - 8D69E27B21DD4C5000CFA49B /* FUIAuthBaseViewController.m */, - 8D69E28221DD4C5000CFA49B /* FUIAuthErrors.m */, - 8D69E28621DD4C5000CFA49B /* FUIAuthErrorUtils.m */, - 8D69E28D21DD4C5100CFA49B /* FUIAuthPickerViewController.m */, - 8D69E27321DD4C5000CFA49B /* FUIAuthSignInButton.h */, - 8D69E28821DD4C5000CFA49B /* FUIAuthSignInButton.m */, - 8D69E28C21DD4C5100CFA49B /* FUIAuthStrings.m */, - 8D69E28121DD4C5000CFA49B /* FUIAuthTableHeaderView.m */, - 8D69E28321DD4C5000CFA49B /* FUIAuthTableViewCell.m */, - 8D69E27C21DD4C5000CFA49B /* FUIAuthUtils.m */, - 8D69E29221DD4C5100CFA49B /* FUIPrivacyAndTermsOfServiceView.m */, - 8D69E28421DD4C5000CFA49B /* FUIStaticContentTableViewController.h */, - 8D69E28021DD4C5000CFA49B /* FUIStaticContentTableViewController.m */, - 8D69E28721DD4C5000CFA49B /* FUIStaticContentTableViewManager.h */, - 8D69E28E21DD4C5100CFA49B /* FUIStaticContentTableViewManager.m */, - 8D69E25D21DD4BD000CFA49B /* Info.plist */, - 8D69E2E221DD4C6D00CFA49B /* Resources */, - 8D69E2EC21DD4C6D00CFA49B /* Strings */, - ); - path = Sources; - sourceTree = ""; - }; - 8D69E26621DD4BD100CFA49B /* FirebaseAuthUITests */ = { - isa = PBXGroup; - children = ( - 8D69E35721DD614000CFA49B /* FUIAuthTest.m */, - 8D69E35821DD614000CFA49B /* GoogleService-Info.plist */, - 8D69E26921DD4BD100CFA49B /* Info.plist */, - ); - path = FirebaseAuthUITests; - sourceTree = ""; - }; - 8D69E2E221DD4C6D00CFA49B /* Resources */ = { - isa = PBXGroup; - children = ( - 8D69E2BF21DD4C5D00CFA49B /* FUIAccountSettingsViewController.xib */, - 8D69E2C221DD4C5D00CFA49B /* FUIInputTableViewCell.xib */, - 8D69E2C921DD4C5D00CFA49B /* FUIPasswordTableViewCell.xib */, - 8D69E27921DD4C5000CFA49B /* FUIAuthPickerViewController.xib */, - 8D69E27421DD4C5000CFA49B /* FUIAuthTableViewCell.xib */, - 8D69E28F21DD4C5100CFA49B /* FUIStaticContentTableViewController.xib */, - 8D69E2E321DD4C6D00CFA49B /* ic_account_circle.png */, - 8D69E2E421DD4C6D00CFA49B /* ic_visibility@2x.png */, - 8D69E2E521DD4C6D00CFA49B /* ic_visibility@3x.png */, - 8D69E2E621DD4C6D00CFA49B /* ic_visibility.png */, - 8D69E2E721DD4C6D00CFA49B /* ic_account_circle3x.png */, - 8D69E2E821DD4C6D00CFA49B /* ic_visibility_off@3x.png */, - 8D69E2E921DD4C6D00CFA49B /* ic_visibility_off@2x.png */, - 8D69E2EA21DD4C6D00CFA49B /* ic_account_circle2x.png */, - 8D69E2EB21DD4C6D00CFA49B /* ic_visibility_off.png */, - ); - path = Resources; - sourceTree = ""; - }; - 8D69E2EC21DD4C6D00CFA49B /* Strings */ = { - isa = PBXGroup; - children = ( - 8D69E2ED21DD4C6D00CFA49B /* FirebaseAuthUI.strings */, - ); - path = Strings; - sourceTree = ""; - }; - 8DAB9B49263768D900FF271F /* FirebaseAuthUI */ = { - isa = PBXGroup; - children = ( - 8D69E25C21DD4BD000CFA49B /* FirebaseAuthUI.h */, - 8D69E2BD21DD4C5D00CFA49B /* FUIAccountSettingsOperationType.h */, - 8D69E2C021DD4C5D00CFA49B /* FUIAccountSettingsViewController.h */, - 8D69E27D21DD4C5000CFA49B /* FUIAuth_Internal.h */, - 8D69E27F21DD4C5000CFA49B /* FUIAuth.h */, - 8D69E28A21DD4C5100CFA49B /* FUIAuthBaseViewController_Internal.h */, - 8D69E29021DD4C5100CFA49B /* FUIAuthBaseViewController.h */, - 8D69E27621DD4C5000CFA49B /* FUIAuthErrors.h */, - 8D69E27721DD4C5000CFA49B /* FUIAuthErrorUtils.h */, - 8D69E27E21DD4C5000CFA49B /* FUIAuthPickerViewController.h */, - 8D69E29121DD4C5100CFA49B /* FUIAuthProvider.h */, - 8D69E27521DD4C5000CFA49B /* FUIAuthStrings.h */, - 8D69E27821DD4C5000CFA49B /* FUIAuthTableHeaderView.h */, - 8D69E28B21DD4C5100CFA49B /* FUIAuthTableViewCell.h */, - 8D69E27A21DD4C5000CFA49B /* FUIAuthUtils.h */, - 8D69E28921DD4C5100CFA49B /* FUIPrivacyAndTermsOfServiceView.h */, - ); - path = FirebaseAuthUI; - sourceTree = ""; - }; - ACF63AA832F9F7882BC43A9D /* Pods */ = { - isa = PBXGroup; - children = ( - ); - path = Pods; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - 8D69E25421DD4BD000CFA49B /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 8D69E2DD21DD4C5D00CFA49B /* FUIAccountSettingsOperation.h in Headers */, - 8D69E29821DD4C5100CFA49B /* FUIAuthTableHeaderView.h in Headers */, - 8D69E2B021DD4C5100CFA49B /* FUIAuthBaseViewController.h in Headers */, - 8D69E29721DD4C5100CFA49B /* FUIAuthErrorUtils.h in Headers */, - 8D69E2CB21DD4C5D00CFA49B /* FUIAccountSettingsOperationDeleteAccount.h in Headers */, - 8D69E29D21DD4C5100CFA49B /* FUIAuth_Internal.h in Headers */, - 8D69E29621DD4C5100CFA49B /* FUIAuthErrors.h in Headers */, - 8D69E2E121DD4C5D00CFA49B /* FUIAccountSettingsOperation_Internal.h in Headers */, - 8D69E2CD21DD4C5D00CFA49B /* FUIAccountSettingsOperationSignOut.h in Headers */, - 8D69E2AA21DD4C5100CFA49B /* FUIAuthBaseViewController_Internal.h in Headers */, - 8D69E29A21DD4C5100CFA49B /* FUIAuthUtils.h in Headers */, - 8D69E26A21DD4BD100CFA49B /* FirebaseAuthUI.h in Headers */, - 8D69E2A921DD4C5100CFA49B /* FUIPrivacyAndTermsOfServiceView.h in Headers */, - 8D69E29321DD4C5100CFA49B /* FUIAuthSignInButton.h in Headers */, - 8D69E2CE21DD4C5D00CFA49B /* FUIAccountSettingsOperationUpdateEmail.h in Headers */, - 8D69E2A421DD4C5100CFA49B /* FUIStaticContentTableViewController.h in Headers */, - 8D69E2B121DD4C5100CFA49B /* FUIAuthProvider.h in Headers */, - 8D69E2DF21DD4C5D00CFA49B /* FUIAccountSettingsOperationUpdatePassword.h in Headers */, - 8D69E29F21DD4C5100CFA49B /* FUIAuth.h in Headers */, - 8D69E2D421DD4C5D00CFA49B /* FUIAccountSettingsOperationType.h in Headers */, - 8D69E2A721DD4C5100CFA49B /* FUIStaticContentTableViewManager.h in Headers */, - 8D69E2CF21DD4C5D00CFA49B /* FUIAccountSettingsOperationForgotPassword.h in Headers */, - 8D69E29E21DD4C5100CFA49B /* FUIAuthPickerViewController.h in Headers */, - 8D69E2AB21DD4C5100CFA49B /* FUIAuthTableViewCell.h in Headers */, - 8D69E2DA21DD4C5D00CFA49B /* FUIAccountSettingsOperationUnlinkAccount.h in Headers */, - 8D69E2D721DD4C5D00CFA49B /* FUIAccountSettingsViewController.h in Headers */, - 8D69E2D221DD4C5D00CFA49B /* FUIAccountSettingsOperationUpdateName.h in Headers */, - 8D69E29521DD4C5100CFA49B /* FUIAuthStrings.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - 8D69E25821DD4BD000CFA49B /* FirebaseAuthUI */ = { - isa = PBXNativeTarget; - buildConfigurationList = 8D69E26D21DD4BD100CFA49B /* Build configuration list for PBXNativeTarget "FirebaseAuthUI" */; - buildPhases = ( - 8D69E25421DD4BD000CFA49B /* Headers */, - 8D69E25521DD4BD000CFA49B /* Sources */, - 8D69E25621DD4BD000CFA49B /* Frameworks */, - 8D69E25721DD4BD000CFA49B /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = FirebaseAuthUI; - productName = FirebaseAuthUI; - productReference = 8D69E25921DD4BD000CFA49B /* FirebaseAuthUI.framework */; - productType = "com.apple.product-type.framework"; - }; - 8D69E26121DD4BD100CFA49B /* FirebaseAuthUITests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 8D69E27021DD4BD100CFA49B /* Build configuration list for PBXNativeTarget "FirebaseAuthUITests" */; - buildPhases = ( - 8D69E25E21DD4BD100CFA49B /* Sources */, - 8D69E25F21DD4BD100CFA49B /* Frameworks */, - 8D69E26021DD4BD100CFA49B /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 8D69E26521DD4BD100CFA49B /* PBXTargetDependency */, - ); - name = FirebaseAuthUITests; - productName = FirebaseAuthUITests; - productReference = 8D69E26221DD4BD100CFA49B /* FirebaseAuthUITests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 8D69E25021DD4BD000CFA49B /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 1320; - ORGANIZATIONNAME = Firebase; - TargetAttributes = { - 8D69E25821DD4BD000CFA49B = { - CreatedOnToolsVersion = 10.1; - }; - 8D69E26121DD4BD100CFA49B = { - CreatedOnToolsVersion = 10.1; - }; - }; - }; - buildConfigurationList = 8D69E25321DD4BD000CFA49B /* Build configuration list for PBXProject "FirebaseAuthUI" */; - compatibilityVersion = "Xcode 9.3"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - de, - ur, - he, - "es-SV", - "zh-Hant-TW", - ar, - el, - "zh-Hans", - ja, - fa, - mr, - "es-GT", - "en-CA", - uk, - "es-PY", - gu, - kn, - nb, - "es-US", - "en-GB", - es, - "es-VE", - "es-CL", - sl, - da, - "es-419", - it, - bg, - sk, - "sr-Latn", - "nn-NO", - "es-PA", - "en-SG", - sr, - ms, - "es-CR", - ta, - sv, - cs, - "es-AR", - "es-PE", - ko, - "en-IE", - fil, - "zh-Hant", - "es-CO", - gsw, - "en-ZA", - hu, - "es-PR", - "de-AT", - "en-AU", - tr, - pl, - "pt-BR", - vi, - lv, - "es-MX", - lt, - ru, - "es-DO", - "fr-CH", - "es-NI", - fr, - fi, - id, - nl, - th, - pt, - "de-CH", - bn, - "es-EC", - "pt-PT", - "es-BO", - ro, - ln, - "es-UY", - "es-HN", - hr, - hi, - ca, - zh, - "en-IN", - ); - mainGroup = 8D69E24F21DD4BD000CFA49B; - productRefGroup = 8D69E25A21DD4BD000CFA49B /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 8D69E25821DD4BD000CFA49B /* FirebaseAuthUI */, - 8D69E26121DD4BD100CFA49B /* FirebaseAuthUITests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 8D69E25721DD4BD000CFA49B /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8D69E34421DD4C6D00CFA49B /* ic_visibility@3x.png in Resources */, - 8D69E34921DD4C6D00CFA49B /* ic_account_circle2x.png in Resources */, - 8D69E29421DD4C5100CFA49B /* FUIAuthTableViewCell.xib in Resources */, - 8D69E2E021DD4C5D00CFA49B /* FUIPasswordTableViewCell.xib in Resources */, - 8D69E29921DD4C5100CFA49B /* FUIAuthPickerViewController.xib in Resources */, - 8D69E34A21DD4C6D00CFA49B /* ic_visibility_off.png in Resources */, - 8D69E2D621DD4C5D00CFA49B /* FUIAccountSettingsViewController.xib in Resources */, - 8D69E34521DD4C6D00CFA49B /* ic_visibility.png in Resources */, - 8D69E34321DD4C6D00CFA49B /* ic_visibility@2x.png in Resources */, - 8D69E34221DD4C6D00CFA49B /* ic_account_circle.png in Resources */, - 8D69E34621DD4C6D00CFA49B /* ic_account_circle3x.png in Resources */, - 8D69E34821DD4C6D00CFA49B /* ic_visibility_off@2x.png in Resources */, - 8D69E2D921DD4C5D00CFA49B /* FUIInputTableViewCell.xib in Resources */, - 8D69E2AF21DD4C5100CFA49B /* FUIStaticContentTableViewController.xib in Resources */, - 8D69E34721DD4C6D00CFA49B /* ic_visibility_off@3x.png in Resources */, - 8D69E34B21DD4C6D00CFA49B /* FirebaseAuthUI.strings in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8D69E26021DD4BD100CFA49B /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8D69E35A21DD614000CFA49B /* GoogleService-Info.plist in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 8D69E25521DD4BD000CFA49B /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8D69E2A021DD4C5100CFA49B /* FUIStaticContentTableViewController.m in Sources */, - 8D69E2DB21DD4C5D00CFA49B /* FUIAccountSettingsOperationForgotPassword.m in Sources */, - 8D69E2D521DD4C5D00CFA49B /* FUIAccountSettingsOperationSignOut.m in Sources */, - 8D69E2A121DD4C5100CFA49B /* FUIAuthTableHeaderView.m in Sources */, - 8D69E2A321DD4C5100CFA49B /* FUIAuthTableViewCell.m in Sources */, - 8D69E2DE21DD4C5D00CFA49B /* FUIAccountSettingsOperationUpdateName.m in Sources */, - 8D69E2A221DD4C5100CFA49B /* FUIAuthErrors.m in Sources */, - 8D69E2A521DD4C5100CFA49B /* FUIAuth.m in Sources */, - 8D69E2AC21DD4C5100CFA49B /* FUIAuthStrings.m in Sources */, - 8D69E2D021DD4C5D00CFA49B /* FUIAccountSettingsOperationUnlinkAccount.m in Sources */, - 8D69E2CC21DD4C5D00CFA49B /* FUIAccountSettingsViewController.m in Sources */, - 8D69E2D321DD4C5D00CFA49B /* FUIAccountSettingsOperation.m in Sources */, - 8D69E29C21DD4C5100CFA49B /* FUIAuthUtils.m in Sources */, - 8D69E2DC21DD4C5D00CFA49B /* FUIAccountSettingsOperationUpdateEmail.m in Sources */, - 8D69E2AD21DD4C5100CFA49B /* FUIAuthPickerViewController.m in Sources */, - 8D69E2B221DD4C5100CFA49B /* FUIPrivacyAndTermsOfServiceView.m in Sources */, - 8D69E29B21DD4C5100CFA49B /* FUIAuthBaseViewController.m in Sources */, - 8D69E2A821DD4C5100CFA49B /* FUIAuthSignInButton.m in Sources */, - 8D69E2AE21DD4C5100CFA49B /* FUIStaticContentTableViewManager.m in Sources */, - 8D69E2D821DD4C5D00CFA49B /* FUIAccountSettingsOperationDeleteAccount.m in Sources */, - 8D69E2A621DD4C5100CFA49B /* FUIAuthErrorUtils.m in Sources */, - 8D69E2D121DD4C5D00CFA49B /* FUIAccountSettingsOperationUpdatePassword.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8D69E25E21DD4BD100CFA49B /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8D69E35921DD614000CFA49B /* FUIAuthTest.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 8D69E26521DD4BD100CFA49B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 8D69E25821DD4BD000CFA49B /* FirebaseAuthUI */; - targetProxy = 8D69E26421DD4BD100CFA49B /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - 8D69E2ED21DD4C6D00CFA49B /* FirebaseAuthUI.strings */ = { - isa = PBXVariantGroup; - children = ( - 8D69E2EE21DD4C6D00CFA49B /* de */, - 8D69E2EF21DD4C6D00CFA49B /* ur */, - 8D69E2F021DD4C6D00CFA49B /* he */, - 8D69E2F121DD4C6D00CFA49B /* es-SV */, - 8D69E2F221DD4C6D00CFA49B /* zh-Hant-TW */, - 8D69E2F321DD4C6D00CFA49B /* ar */, - 8D69E2F421DD4C6D00CFA49B /* el */, - 8D69E2F521DD4C6D00CFA49B /* zh-Hans */, - 8D69E2F621DD4C6D00CFA49B /* ja */, - 8D69E2F721DD4C6D00CFA49B /* fa */, - 8D69E2F821DD4C6D00CFA49B /* mr */, - 8D69E2F921DD4C6D00CFA49B /* es-GT */, - 8D69E2FA21DD4C6D00CFA49B /* en */, - 8D69E2FB21DD4C6D00CFA49B /* en-CA */, - 8D69E2FC21DD4C6D00CFA49B /* uk */, - 8D69E2FD21DD4C6D00CFA49B /* es-PY */, - 8D69E2FE21DD4C6D00CFA49B /* gu */, - 8D69E2FF21DD4C6D00CFA49B /* kn */, - 8D69E30021DD4C6D00CFA49B /* nb */, - 8D69E30121DD4C6D00CFA49B /* es-US */, - 8D69E30221DD4C6D00CFA49B /* en-GB */, - 8D69E30321DD4C6D00CFA49B /* es */, - 8D69E30421DD4C6D00CFA49B /* es-VE */, - 8D69E30521DD4C6D00CFA49B /* es-CL */, - 8D69E30621DD4C6D00CFA49B /* sl */, - 8D69E30721DD4C6D00CFA49B /* da */, - 8D69E30821DD4C6D00CFA49B /* es-419 */, - 8D69E30921DD4C6D00CFA49B /* it */, - 8D69E30A21DD4C6D00CFA49B /* bg */, - 8D69E30B21DD4C6D00CFA49B /* sk */, - 8D69E30C21DD4C6D00CFA49B /* sr-Latn */, - 8D69E30D21DD4C6D00CFA49B /* nn-NO */, - 8D69E30E21DD4C6D00CFA49B /* es-PA */, - 8D69E30F21DD4C6D00CFA49B /* en-SG */, - 8D69E31021DD4C6D00CFA49B /* sr */, - 8D69E31121DD4C6D00CFA49B /* ms */, - 8D69E31221DD4C6D00CFA49B /* es-CR */, - 8D69E31321DD4C6D00CFA49B /* ta */, - 8D69E31421DD4C6D00CFA49B /* sv */, - 8D69E31521DD4C6D00CFA49B /* cs */, - 8D69E31621DD4C6D00CFA49B /* es-AR */, - 8D69E31721DD4C6D00CFA49B /* es-PE */, - 8D69E31821DD4C6D00CFA49B /* ko */, - 8D69E31921DD4C6D00CFA49B /* en-IE */, - 8D69E31A21DD4C6D00CFA49B /* fil */, - 8D69E31B21DD4C6D00CFA49B /* zh-Hant */, - 8D69E31C21DD4C6D00CFA49B /* es-CO */, - 8D69E31D21DD4C6D00CFA49B /* gsw */, - 8D69E31E21DD4C6D00CFA49B /* en-ZA */, - 8D69E31F21DD4C6D00CFA49B /* hu */, - 8D69E32021DD4C6D00CFA49B /* es-PR */, - 8D69E32121DD4C6D00CFA49B /* de-AT */, - 8D69E32221DD4C6D00CFA49B /* en-AU */, - 8D69E32321DD4C6D00CFA49B /* tr */, - 8D69E32421DD4C6D00CFA49B /* pl */, - 8D69E32521DD4C6D00CFA49B /* pt-BR */, - 8D69E32621DD4C6D00CFA49B /* vi */, - 8D69E32721DD4C6D00CFA49B /* lv */, - 8D69E32821DD4C6D00CFA49B /* es-MX */, - 8D69E32921DD4C6D00CFA49B /* lt */, - 8D69E32A21DD4C6D00CFA49B /* ru */, - 8D69E32B21DD4C6D00CFA49B /* es-DO */, - 8D69E32C21DD4C6D00CFA49B /* fr-CH */, - 8D69E32D21DD4C6D00CFA49B /* es-NI */, - 8D69E32E21DD4C6D00CFA49B /* fr */, - 8D69E32F21DD4C6D00CFA49B /* fi */, - 8D69E33021DD4C6D00CFA49B /* id */, - 8D69E33121DD4C6D00CFA49B /* nl */, - 8D69E33221DD4C6D00CFA49B /* th */, - 8D69E33321DD4C6D00CFA49B /* pt */, - 8D69E33421DD4C6D00CFA49B /* de-CH */, - 8D69E33521DD4C6D00CFA49B /* bn */, - 8D69E33621DD4C6D00CFA49B /* es-EC */, - 8D69E33721DD4C6D00CFA49B /* pt-PT */, - 8D69E33821DD4C6D00CFA49B /* es-BO */, - 8D69E33921DD4C6D00CFA49B /* ro */, - 8D69E33A21DD4C6D00CFA49B /* ln */, - 8D69E33B21DD4C6D00CFA49B /* es-UY */, - 8D69E33C21DD4C6D00CFA49B /* es-HN */, - 8D69E33D21DD4C6D00CFA49B /* hr */, - 8D69E33E21DD4C6D00CFA49B /* hi */, - 8D69E33F21DD4C6D00CFA49B /* ca */, - 8D69E34021DD4C6D00CFA49B /* zh */, - 8D69E34121DD4C6D00CFA49B /* en-IN */, - ); - name = FirebaseAuthUI.strings; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 8D69E26B21DD4BD100CFA49B /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../\""; - IPHONEOS_DEPLOYMENT_TARGET = 12.1; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreInternal\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreExtension\"", - ); - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 8D69E26C21DD4BD100CFA49B /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../\""; - IPHONEOS_DEPLOYMENT_TARGET = 12.1; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreInternal\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreExtension\"", - ); - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 8D69E26E21DD4BD100CFA49B /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Automatic; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Sources/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.firebase.FirebaseAuthUI; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 8D69E26F21DD4BD100CFA49B /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Automatic; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Sources/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.firebase.FirebaseAuthUI; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; - 8D69E27121DD4BD100CFA49B /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - INFOPLIST_FILE = FirebaseAuthUITests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuth", - "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore", - "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuthInterop", - "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher", - "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport", - "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities", - "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC", - "${PODS_CONFIGURATION_BUILD_DIR}/nanopb", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAppCheckInterop\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/RecaptchaInterop\"", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.firebase.FirebaseAuthUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 8D69E27221DD4BD100CFA49B /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - INFOPLIST_FILE = Sources/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuth", - "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore", - "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuthInterop", - "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher", - "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport", - "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities", - "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC", - "${PODS_CONFIGURATION_BUILD_DIR}/nanopb", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAppCheckInterop\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/RecaptchaInterop\"", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.firebase.FirebaseAuthUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 8D69E25321DD4BD000CFA49B /* Build configuration list for PBXProject "FirebaseAuthUI" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 8D69E26B21DD4BD100CFA49B /* Debug */, - 8D69E26C21DD4BD100CFA49B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 8D69E26D21DD4BD100CFA49B /* Build configuration list for PBXNativeTarget "FirebaseAuthUI" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 8D69E26E21DD4BD100CFA49B /* Debug */, - 8D69E26F21DD4BD100CFA49B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 8D69E27021DD4BD100CFA49B /* Build configuration list for PBXNativeTarget "FirebaseAuthUITests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 8D69E27121DD4BD100CFA49B /* Debug */, - 8D69E27221DD4BD100CFA49B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 8D69E25021DD4BD000CFA49B /* Project object */; -} diff --git a/FirebaseAuthUI/FirebaseAuthUI.xcodeproj/xcshareddata/xcschemes/FirebaseAuthUI.xcscheme b/FirebaseAuthUI/FirebaseAuthUI.xcodeproj/xcshareddata/xcschemes/FirebaseAuthUI.xcscheme deleted file mode 100644 index 504a9f1fb2c..00000000000 --- a/FirebaseAuthUI/FirebaseAuthUI.xcodeproj/xcshareddata/xcschemes/FirebaseAuthUI.xcscheme +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FirebaseAuthUI/FirebaseAuthUITests/FUIAuthTest.m b/FirebaseAuthUI/FirebaseAuthUITests/FUIAuthTest.m deleted file mode 100644 index 0df7f4d0d3a..00000000000 --- a/FirebaseAuthUI/FirebaseAuthUITests/FUIAuthTest.m +++ /dev/null @@ -1,166 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -@import XCTest; -@import FirebaseAuth; -@import FirebaseCore; - -#import "FUIAuth.h" -#import "FUIAuthUtils.h" -#import "FUIAuthPickerViewController.h" -#import - -@interface FUILoginProvider : NSObject -@property (nonatomic, assign) BOOL canHandleURLs; -@end - -@implementation FUILoginProvider - -- (NSString *)providerID { return @"provider id"; } -- (NSString *)shortName { return @"login provider"; } -- (NSString *)signInLabel { return @"sign in label"; } -- (NSString *)accessToken { return @"accessToken"; } -- (NSString *)idToken { return @"idToken"; } - -- (UIImage *)icon { - return [[UIImage alloc] init]; -} - -- (UIColor *)buttonBackgroundColor { - return [UIColor clearColor]; -} - -- (UIColor *)buttonTextColor { - return [UIColor whiteColor]; -} - -- (FUIButtonAlignment)buttonAlignment { - return FUIButtonAlignmentCenter; -} - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-implementations" -- (void)signInWithEmail:(NSString *)email - presentingViewController:(UIViewController *)presentingViewController - completion:(FUIAuthProviderSignInCompletionBlock)completion {} -#pragma clang diagnostic pop - -- (void)signOut {} - -- (BOOL)handleOpenURL:(NSURL *)URL sourceApplication:(NSString *)sourceApplication { - return self.canHandleURLs; -} - -- (void)signInWithDefaultValue:(nullable NSString *)defaultValue - presentingViewController:(nullable UIViewController *)presentingViewController - completion:(nullable FUIAuthProviderSignInCompletionBlock)completion {} - - -@end - -@interface FUIAuthUIDelegate : NSObject -@end - -@implementation FUIAuthUIDelegate -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-implementations" -- (void)authUI:(FUIAuth *)authUI didSignInWithUser:(FIRUser *)user error:(NSError *)error { -} -#pragma clang diagnostic pop - -- (FUIAuthPickerViewController *)authPickerViewControllerForAuthUI:(FUIAuth *)authUI { - Class controllerClass = [FUIAuthPickerViewController class]; - NSString *classString = NSStringFromClass(controllerClass); - NSBundle *bundle = [NSBundle bundleForClass:controllerClass]; - return [[FUIAuthPickerViewController alloc] initWithNibName:classString - bundle:bundle - authUI:authUI]; -} -@end - -@interface FUIAuthTest : XCTestCase -@property (nonatomic) FIRAuth *auth; -@property (nonatomic) FUIAuth *authUI; -@property (nonatomic) FUIAuthUIDelegate *delegate; -@end - -@implementation FUIAuthTest - -- (void)setUp { - [super setUp]; - - if ([FIRApp defaultApp] == nil) { - FIROptions *options = [[FIROptions alloc] initWithGoogleAppID:@"1:1069647793992:ios:91eecf4730fc920b" - GCMSenderID:@"1069647793992"]; - options.APIKey = @"fakeAPIKey"; - [FIRApp configureWithOptions:options]; - } - - self.auth = [FIRAuth authWithApp:[FIRApp defaultApp]]; - self.authUI = [FUIAuth authUIWithAuth:self.auth]; - self.delegate = [[FUIAuthUIDelegate alloc] init]; -} - -- (void)tearDown { - [super tearDown]; - self.delegate = nil; -} - -- (void)testItExists { - XCTAssert(self.auth != nil, @"expected default auth instance to exist"); - XCTAssert(self.authUI != nil, @"expected default authUI instance to exist"); -} - -- (void)testItProducesAViewController { - self.authUI.delegate = self.delegate; - UIViewController *controller = [self.authUI authViewController]; - XCTAssert(controller != nil, @"expected authUI to produce nonnull view controller"); -} - -- (void)testItAsksAuthProvidersWhenHandlingURLs { - FUILoginProvider *provider = [[FUILoginProvider alloc] init]; - self.authUI.providers = @[provider]; - provider.canHandleURLs = NO; - BOOL handled = [self.authUI handleOpenURL:[NSURL URLWithString:@"https://google.com/"] - sourceApplication:nil]; - XCTAssert(handled == NO, @"expected authUI with no providers that can handle open URLs to not handle opening URL"); - - provider.canHandleURLs = YES; - handled = [self.authUI handleOpenURL:[NSURL URLWithString:@"https://google.com/"] - sourceApplication:nil]; - XCTAssert(handled == YES, @"expected authUI with providers that can handle open URLs to handle opening URL"); -} - -- (void)testUseEmulatorSetsFIRAuthEmulator { - id mockAuth = OCMClassMock([FIRAuth class]); - OCMStub(ClassMethod([mockAuth auth])).andReturn(mockAuth); - - self.authUI = [FUIAuth authUIWithAuth:mockAuth]; - [self.authUI useEmulatorWithHost:@"host" port:12345]; - - OCMVerify([mockAuth useEmulatorWithHost:@"host" port:12345]); -} - -- (void)testStringBySHA256HashingString { - NSString *inputString = @"abc-123.ZYX_987"; - NSString *expectedSHA256HashedString = @"d858d78754a50c8ccdc414946f656fe854e6ba76bf09a79a7e7d9ca135e4b58d"; - - NSString *actualSHA256HashedString = [FUIAuthUtils stringBySHA256HashingString:inputString]; - - XCTAssertEqualObjects(actualSHA256HashedString, expectedSHA256HashedString); -} - -@end diff --git a/FirebaseAuthUI/FirebaseAuthUITests/GoogleService-Info.plist b/FirebaseAuthUI/FirebaseAuthUITests/GoogleService-Info.plist deleted file mode 100644 index 332d92983f7..00000000000 --- a/FirebaseAuthUI/FirebaseAuthUITests/GoogleService-Info.plist +++ /dev/null @@ -1,38 +0,0 @@ - - - - - CLIENT_ID - 0000000000000000000000000.apps.googleusercontent.com - REVERSED_CLIENT_ID - com.googleusercontent.apps.0000000000000000000000000 - ANDROID_CLIENT_ID - 0000000000000000000000000.apps.googleusercontent.com - API_KEY - 0000000000000000000000000 - GCM_SENDER_ID - 0000000000000000000000000 - PLIST_VERSION - 1 - BUNDLE_ID - com.firebase.firebaseui.tests - PROJECT_ID - 0000000000000000000000000 - STORAGE_BUCKET - 0000000000000000000000000.appspot.com - IS_ADS_ENABLED - - IS_ANALYTICS_ENABLED - - IS_APPINVITE_ENABLED - - IS_GCM_ENABLED - - IS_SIGNIN_ENABLED - - GOOGLE_APP_ID - 0000000000000000000000000 - DATABASE_URL - https://0000000000000000000000000.firebaseio.com - - \ No newline at end of file diff --git a/FirebaseAuthUI/FirebaseAuthUITests/Info.plist b/FirebaseAuthUI/FirebaseAuthUITests/Info.plist deleted file mode 100644 index 0b3caea4471..00000000000 --- a/FirebaseAuthUI/FirebaseAuthUITests/Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - - diff --git a/FirebaseAuthUI/Podfile b/FirebaseAuthUI/Podfile deleted file mode 100644 index 256128c02ac..00000000000 --- a/FirebaseAuthUI/Podfile +++ /dev/null @@ -1,16 +0,0 @@ -# source 'sso://cpdc-internal/firebase' -source 'https://github.com/CocoaPods/Specs.git' - -platform :ios, '13.0' - -target 'FirebaseAuthUI' do - use_frameworks! - - pod 'Firebase/Auth' - - target 'FirebaseAuthUITests' do - inherit! :search_paths - pod 'OCMock' - end - -end diff --git a/FirebaseAuthUI/README.md b/FirebaseAuthUI/README.md deleted file mode 100644 index 6b190abcb14..00000000000 --- a/FirebaseAuthUI/README.md +++ /dev/null @@ -1,442 +0,0 @@ -# FirebaseUI for iOS — Auth - -FirebaseUI is an open-source library for iOS that provides simple, customizable UI -bindings on top of [Firebase](https://firebase.google.com) SDKs to eliminate -boilerplate code and promote best practices. - -FirebaseUI provides a drop-in auth solution that handles the UI flows for -signing in users with email addresses and passwords, and federated identity -providers such as Google Sign-In and Facebook Login. It is built on top of -[Firebase Auth](https://firebase.google.com/docs/auth). - -The FirebaseUI Auth component implement best practices for authentication on -mobile devices and websites, which can maximize sign-in and sign-up conversion -for your app. It also handles edge cases like account recovery and account -linking that can be security sensitive and error-prone to handle correctly. - -FirebaseUI can be easily customized to fit in with the rest of your app's visual -style, and it is open source, so you aren't constrained in realizing the user -experience you want. - -Compatible FirebaseUI Auth clients are also available for -[Android](https://github.com/firebase/firebaseui-android/tree/main/auth) -and [Web](https://github.com/firebase/firebaseui-web/). - -## Table of Contents - -1. [Installation](#installation) -1. [Usage instructions](#using-firebaseui-for-authentication) -1. [Customization](#customizing-firebaseui-for-authentication) - -## Installation -### Importing FirebaseUI components for auth -Add the following to your `Podfile`: -```ruby -pod 'FirebaseUI/Auth' - -pod 'FirebaseUI/Email' -pod 'FirebaseUI/Google' -pod 'FirebaseUI/Facebook' -pod 'FirebaseUI/Phone' -pod 'FirebaseUI/OAuth' -``` - -### Configuring sign-in providers -To use FirebaseUI to authenticate users you first need to configure each provider you want to use in -their own developer app settings. Please read the *Before you begin* section of the Firebase -Auth guides at the following links: - -- [Email and password](https://firebase.google.com/docs/auth/ios/password-auth#before_you_begin) -- [Google](https://firebase.google.com/docs/auth/ios/google-signin#before_you_begin) -- [Facebook](https://firebase.google.com/docs/auth/ios/facebook-login#before_you_begin) -- [Phone](https://firebase.google.com/docs/auth/ios/phone-auth#before_you_begin) -- [Sign in with Apple](https://firebase.google.com/docs/auth/ios/apple#before_you_begin) - - For Sign in with Apple, read the [Comply with Apple anonymized data requirements](https://firebase.google.com/docs/auth/ios/apple#comply-with-apple-anonymized-data-requirements) section as well. - -## Using FirebaseUI for Authentication - -### Configuration - -All operations, callbacks, UI customizations are done through an `FUIAuth` -instance. The `FUIAuth` instance associated with the default Firebase Auth -instance can be accessed as follows: - -```swift -// Swift -import FirebaseAuthUI - -/* ... */ - -FirebaseApp.configure() -let authUI = FUIAuth.defaultAuthUI() -// You need to adopt a FUIAuthDelegate protocol to receive callback -authUI?.delegate = self -``` - -```objective-c -// Objective-C -@import FirebaseAuthUI; - -/* ... */ - -[FIRApp configure]; -FUIAuth *authUI = [FUIAuth defaultAuthUI]; -// You need to adopt a FUIAuthDelegate protocol to receive callback -authUI.delegate = self; -``` - -This instance can then be configured with the providers you wish to support: - -```swift -// Swift -import FirebaseAuthUI - -/* ... */ - -let providers: [FUIAuthProvider] = [ - FUIEmailAuth(), - FUIGoogleAuth(), - FUIFacebookAuth(), - FUIPhoneAuth(authUI: FUIAuth.defaultAuthUI()), - FUIOAuth.appleAuthProvider(), - FUIOAuth.twitterAuthProvider(), - FUIOAuth.githubAuthProvider(), - FUIOAuth.microsoftAuthProvider(), - FUIOAuth.yahooAuthProvider(), -] -authUI?.providers = providers -``` - -```objective-c -// Objective-C -@import FirebaseAuthUI; - -/* ... */ - -NSArray> *providers = @[ - [[FUIEmailAuth alloc] init], - [[FUIGoogleAuth alloc] init], - [[FUIFacebookAuth alloc] init], - [[FUIPhoneAuth alloc] initWithAuthUI:[FUIAuth defaultAuthUI]], - [FUIOAuth appleAuthProvider], - [FUIOAuth twitterAuthProvider], - [FUIOAuth githubAuthProvider], - [FUIOAuth microsoftAuthProvider], - [FUIOAuth yahooAuthProvider] -]; -self.authUI.providers = providers; -``` - -For Google Sign-in support, add custom URL schemes to your Xcode project -(step 1 of the [implement Google Sign-In documentation](https://developers.google.com/firebase/docs/auth/ios/google-signin#2_implement_google_sign-in)). - -For Sign in with Apple support, add the Sign in with Apple capability to your entitlements file. - -For Facebook Login support, follow step 3 and 4 of -[Facebook login documentation](https://developers.google.com/firebase/docs/auth/ios/facebook-login#before_you_begin), -and follow the [Facebook SDK for iOS Getting started documentation](https://developers.facebook.com/docs/ios/getting-started). - -Finally, add a call to handle the URL that your application receives at the end -of the Google/Facebook authentication process. - -```swift -// Swift -func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool { - let sourceApplication = options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String? - if FUIAuth.defaultAuthUI()?.handleOpen(url, sourceApplication: sourceApplication) ?? false { - return true - } - // other URL handling goes here. - return false -} -``` - -```objective-c -// Objective-C -- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options { - NSString *sourceApplication = options[UIApplicationOpenURLOptionsSourceApplicationKey]; - return [[FUIAuth defaultAuthUI] handleOpenURL:url sourceApplication:sourceApplication]; -} -``` - -### Sign In - -To start the authentication flow, obtain an `authViewController` instance from -`FUIAuth`. In order to leverage FirebaseUI for iOS you must display the -`authViewController`; you can present it as the first view controller of your -app or present it from another view controller within your app. In order to -present the `authViewController` obtain as instance as follows: - -```swift -// Swift - -// Present the auth view controller and then implement the sign in callback. -let authViewController = authUI!.authViewController() - -func authUI(_ authUI: FUIAuth, didSignInWithAuthDataResult authDataResult: AuthDataResult?, error: Error?) { - // handle user (`authDataResult.user`) and error as necessary -} -``` - -```objective-c -// Objective-C -UINavigationController *authViewController = [authUI authViewController]; -// Use authViewController as your root view controller, -// or present it on top of an existing view controller. - -- (void)authUI:(FUIAuth *)authUI - didSignInWithAuthDataResult:(nullable FIRAuthDataResult *)authDataResult - error:(nullable NSError *)error { - // Implement this method to handle signed in user (`authDataResult.user`) or error if any. -} -``` - -### Configuring Email Link Sign In -To use email link sign in, you will first need to enable it in the Firebase Console. -Additionally, you will also have to enable Firebase Dynamic Links. - -You can enable email link sign in by initializing an `FUIEmailAuth` instance with -`FIREmailLinkAuthSignInMethod`. You will also need to provide a valid -`FIRActionCodeSettings` object with `handleCodeInApp` set to true. Additionally, you -need to allowlist the URL you pass to the initializer; you can do so in the Firebase -Console (Authentication -> Sign in Methods -> Authorized domains). - -```objective-c -// Objective-C -FIRActionCodeSettings *actionCodeSettings = [[FIRActionCodeSettings alloc] init]; -actionCodeSettings.URL = [NSURL URLWithString:@"https://example.appspot.com"]; -actionCodeSettings.handleCodeInApp = YES; -[actionCodeSettings setAndroidPackageName:@"com.firebase.example" - installIfNotAvailable:NO - minimumVersion:@"12"]; -``` - -```swift -// Swift -var actionCodeSettings = ActionCodeSettings() -actionCodeSettings.url = URL(string: "https://example.appspot.com") -actionCodeSettings.handleCodeInApp = true -actionCodeSettings.setAndroidPackageName("com.firebase.example", installIfNotAvailable: false, minimumVersion: "12") -``` - -Once you catch the deep link, you will need to pass it to the auth UI so it can be handled. - -```objective-c -// Objective-C -[FUIAuth.defaultAuthUI handleOpenURL:url sourceApplication:sourceApplication]; -``` - -```swift -// Swift -Auth.defaultAuthUI.handleOpenURL(url, sourceApplication: sourceApplication) -``` -We support cross device email link sign in for the normal flows. It is not supported with anonymous user upgrade. By default, cross device support is enabled. You can disable it setting `forceSameDevice` to false in the `FUIEmailAuth` initializer. - -## Customizing FirebaseUI for authentication -### Custom Terms of Service (ToS) and privacy policy URLs - -The Terms of Service URL for your application, which is displayed on the -email/password account creation screen, can be specified as follows: - -```swift -// Swift -let kFirebaseTermsOfService = URL(string: "https://firebase.google.com/terms/")! -authUI?.tosurl = kFirebaseTermsOfService -``` - -```objective-c -// Objective-C -authUI.TOSURL = [NSURL URLWithString:@"https://example.com/tos"]; -``` - -The same applies to the URL of your privacy policy: -```swift -// Swift -let kFirebasePrivacyPolicy = URL(string: "https://policies.google.com/privacy")! -authUI?.privacyPolicyURL = kFirebasePrivacyPolicy -``` - -### Custom strings - -You can override the default messages and prompts shown to your users. This can -be useful for things such as adding support for languages other than English. - -In order to do so: - -```swift -// Swift -authUI?.customStringsBundle = NSBundle.mainBundle() // Or any custom bundle. -``` - -```objective-c -// Objective-C -authUI.customStringsBundle = [NSBundle mainBundle]; // Or any custom bundle. -``` - -The bundle should include [.strings](https://github.com/firebase/FirebaseUI-iOS/blob/main/FirebaseAuthUI/Strings/en.lproj/FirebaseAuthUI.strings) -files that have the same names as the default files, namely `FirebaseAuthUI`, -`FirebaseGoogleAuthUI`, and `FirebaseFacebookAuthUI`. Each string in these files -should have the same key as its counterpart in the default `.strings` files. - -### Custom sign-in screen - -You can customize everything about the authentication method picker screen, -except for the actual sign-in buttons and their position. - -In order to do so, create a subclass of `FUIAuthPickerViewController` and -customize it to your needs. Provide `FUIAuth` with an instance of your -subclass by implementing the delegate method -`authPickerViewControllerForAuthUI:` as follows: - -```swift -// Swift -func authPickerViewController(for authUI: FUIAuth) -> FUIAuthPickerViewController { - return CustomAuthPickerViewController(authUI: authUI) -} -``` - -```objective-c -// Objective-C -- (FUIAuthPickerViewController *)authPickerViewControllerForAuthUI:(FUIAuth *)authUI { - return [[CustomAuthPickerViewController alloc] initWithAuthUI:authUI]; -} -``` - -### Custom email/password screens - -You can customize all email/password screens, including but not limited to: -- Hiding the top `UINavigationBar` -- Adding a `Cancel` button -- Use a UI view other than `UITableView` - -Things that are not customizable: -- `UIAlertController` popups (showing error labels instead) -- Modifying the screen flow (combining screens or skipping particular screens) -- Disabling validation, including email validation - -To customize the email/password screens, create a subclass of appropriate -controller and implement it to your needs. Then set up `FUIAuth` with an -instance of your subclass by implementing the following delegate methods: -```swift -// Swift -func emailEntryViewController(for authUI: FUIAuth) -> FUIEmailEntryViewController { - return CustomEmailEntryViewController(authUI: authUI) -} - -func passwordSignInViewController(for authUI: FUIAuth, email: String) -> FUIPasswordSignInViewController { - return CustomPasswordSignInViewController(authUI: authUI, email: email) -} - -func passwordSignUpViewController(for authUI: FUIAuth, email: String) -> FUIPasswordSignUpViewController { - return CustomPasswordSignUpViewController(authUI: authUI, email: email) -} - -func passwordRecoveryViewController(for authUI: FUIAuth, email: String) -> FUIPasswordRecoveryViewController { - return CustomPasswordRecoveryViewController(authUI: authUI, email: email) -} - -func passwordVerificationViewController(for authUI: FUIAuth, email: String, newCredential: AuthCredential) -> FUIPasswordVerificationViewController { - return CustomPasswordVerificationViewController(authUI: authUI, email: email, newCredential: newCredential) -} -``` - -```objective-c -// Objective-C -- (FUIEmailEntryViewController *)emailEntryViewControllerForAuthUI:(FUIAuth *)authUI { - return [[CustomEmailEntryViewController alloc] initWithAuthUI:authUI]; - -} - -- (FUIPasswordSignInViewController *)passwordSignInViewControllerForAuthUI:(FUIAuth *)authUI - email:(NSString *)email { - return [[CustomPasswordSignInViewController alloc] initWithAuthUI:authUI - email:email]; - -} - -- (FUIPasswordSignUpViewController *)passwordSignUpViewControllerForAuthUI:(FUIAuth *)authUI - email:(NSString *)email { - return [[CustomPasswordSignUpViewController alloc] initWithAuthUI:authUI - email:email]; - -} - -- (FUIPasswordRecoveryViewController *)passwordRecoveryViewControllerForAuthUI:(FUIAuth *)authUI - email:(NSString *)email { - return [[CustomPasswordRecoveryViewController alloc] initWithAuthUI:authUI - email:email]; - -} - -- (FUIPasswordVerificationViewController *)passwordVerificationViewControllerForAuthUI:(FUIAuth *)authUI - email:(NSString *)email - newCredential:(FIRAuthCredential *)newCredential { - return [[CustomPasswordVerificationViewController alloc] initWithAuthUI:authUI - email:email - newCredential:newCredential]; -} -``` - -In your custom view controllers, call the same FirebaseUI methods as their -parent classes. For example: -- `- (void)onNext:(NSString *)textFieldValue; // Or any action that leads to the next screen` -- `- (void)didChangeTextField:(NSString *)textFieldValue; // Usually called in viewWillAppear and after modification of text entry field` -- `- (void)onBack;` -- `- (void)cancelAuthorization;` - -Refer to the Objective-C and Swift samples for examples of how you can customize -these views. - -## Handling auto-upgrade of anonymous users -By default, the auto-upgrade of anonymous users is disabled. You can enable it -by simply changing the associated attribute of your Firebase Auth instance: -```swift -authUI?.shouldAutoUpgradeAnonymousUsers = true -``` - -Enabling auto-upgrade of anonymous users increases the complexity of your auth -flow by adding several more edge cases that need to be handled. As opposed to -normal auth, which only involves one step, auto-upgrade presents three steps -with four possibilities total: -- At app launch, anonymously authenticate the user. User state can be - accumulated on the anonymous user and linked to the non-anonymous account - later. -- At some point in your app, present the auth flow and authenticate the user - using a non-anonymous auth method. -- Following a successful auth attempt, if the user signs in to a new account, - the anonymous account and the new account can be linked together without - issue. -- Otherwise, if logging into an existing user, FirebaseUI will return a merge - conflict error containing the resulting `FIRAuthDataResult` corresponding to - the existing account. This value should be used to login to the existing - account without linking to the anonymous user, as the two accounts may have - conflicting state (the anonymous account state will be discarded). - -```swift -func authUI(_ authUI: FUIAuth, didSignInWith authDataResult: AuthDataResult?, error: Error?) { - if let error = error as NSError?, - error.code == FUIAuthErrorCode.mergeConflict.rawValue { - // Merge conflict error, discard the anonymous user and login as the existing - // non-anonymous user. - guard let credential = error.userInfo[FUIAuthCredentialKey] as? AuthCredential else { - print("Received merge conflict error without auth credential!") - return - } - - Auth.auth().signInAndRetrieveData(with: credential) { (dataResult, error) in - if let error = error as NSError? { - print("Failed to re-login: \(error)") - return - } - - // Handle successful login - } - } else if let error = error { - // Some non-merge conflict error happened. - print("Failed to log in: \(error)") - return - } - - // Handle successful login -} -``` diff --git a/FirebaseAuthUI/Sources/FUIAccountSettingsOperation.h b/FirebaseAuthUI/Sources/FUIAccountSettingsOperation.h deleted file mode 100644 index a06342d6a72..00000000000 --- a/FirebaseAuthUI/Sources/FUIAccountSettingsOperation.h +++ /dev/null @@ -1,103 +0,0 @@ -// -// Copyright (c) 2017 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -@class FIRAuth; -@class FIRUser; -@class FUIAuth; -@class UIViewController; - -NS_ASSUME_NONNULL_BEGIN - -/** @protocol FUIAccountSettingsOperationUIDelegate - @brief A delegate that provides UI methods for @c FUIAccountSettingsOperation. - */ -@protocol FUIAccountSettingsOperationUIDelegate - -/** @property auth - @brief The @c FIRAuth instance of the application. - */ -@property(nonatomic, strong, readonly) FIRAuth *auth; - -/** @property authUI - @brief The @c FUIAuth instance of the application. - */ -@property(nonatomic, strong, readonly) FUIAuth *authUI; - -/** @fn incrementActivity - @brief Increment the current activity count. If there's positive number of activities, display - and animate the activity indicator with a short period of delay. - @remarks Calls to @c incrementActivity and @c decrementActivity should be balanced. - */ -- (void)incrementActivity; - -/** @fn decrementActivity - @brief Decrement the current activity count. If the count reaches 0, stop and hide the - activity indicator. - @remarks Calls to @c incrementActivity and @c decrementActivity should be balanced. - */ -- (void)decrementActivity; - -/** @fn presentBaseController - @brief Called when initial Account Settings controller needs to be presented. - */ -- (void)presentBaseController; - -/** @fn presentViewController: - @brief Presents (pops) @c UIViewController from navigation stack. - */ -- (void)presentViewController:(UIViewController *)controller; - -/** @fn pushViewController: - @brief Adds (pushes) @c UIViewController to navigation stack. - */ -- (void)pushViewController:(UIViewController *)controller; - -/** @fn presentingController - @brief Provides access to presenting controller. - */ -- (UIViewController *)presentingController; - -@end - -/** @class FUIAccountSettingsOperation - @brief Handles logic for every specific user operation. - */ -@interface FUIAccountSettingsOperation : NSObject - -/** @fn executeOperationWithDelegate:showDialog: - @brief Creates new instance of @c FUIAccountSettingsOperation and executes logic - associated with it. - @param delegate UI delegate which handles all UI related logic. - @param showDialog Determines if operation specific UI should be started with confirmation - dialog. - @return Instance of the executed operation. - */ -+ (instancetype)executeOperationWithDelegate:(id)delegate - showDialog:(BOOL)showDialog; - -/** @fn executeOperationWithDelegate: - @brief Creates new instance of @c FUIAccountSettingsOperation and executes logic - associated with it. New flow is started with new view. - @param delegate UI delegate which handles all UI related logic. - @return Instance of the executed operation. - */ -+ (instancetype)executeOperationWithDelegate:(id)delegate; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebaseAuthUI/Sources/FUIAccountSettingsOperation.m b/FirebaseAuthUI/Sources/FUIAccountSettingsOperation.m deleted file mode 100644 index c4dffd439b2..00000000000 --- a/FirebaseAuthUI/Sources/FUIAccountSettingsOperation.m +++ /dev/null @@ -1,274 +0,0 @@ -// -// Copyright (c) 2017 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebaseAuthUI/Sources/FUIAccountSettingsOperation_Internal.h" - -#import "FirebaseAuthUI/Sources/FUIAccountSettingsOperationDeleteAccount.h" -#import "FirebaseAuthUI/Sources/FUIAccountSettingsOperationForgotPassword.h" -#import "FirebaseAuthUI/Sources/FUIAccountSettingsOperationSignOut.h" -#import "FirebaseAuthUI/Sources/FUIAccountSettingsOperationUnlinkAccount.h" -#import "FirebaseAuthUI/Sources/FUIAccountSettingsOperationUpdateEmail.h" -#import "FirebaseAuthUI/Sources/FUIAccountSettingsOperationUpdateName.h" -#import "FirebaseAuthUI/Sources/FUIAccountSettingsOperationUpdatePassword.h" -#import "FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthBaseViewController_Internal.h" -#import "FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthErrorUtils.h" -#import "FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuth_Internal.h" - -NS_ASSUME_NONNULL_BEGIN - -@implementation FUIAccountSettingsOperation - -+ (instancetype)executeOperationWithDelegate:(id)delegate - showDialog:(BOOL)showDialog { - FUIAccountSettingsOperation *operation = [[self alloc] initWithDelegate:delegate]; - [operation execute:showDialog]; - return operation; -} - -+ (instancetype)executeOperationWithDelegate:(id)delegate { - FUIAccountSettingsOperation *operation = [[self alloc] initWithDelegate:delegate]; - [operation execute:NO]; - return operation; -} - -- (instancetype)initWithDelegate:(id)operationDelegate { - if (self = [super init]) { - _delegate = operationDelegate; - } - return self; -} - -- (void)execute:(BOOL)showDialog { - NSAssert(NO, @"Expected execute: to be overwritten by subclass"); -} - -- (FUIAccountSettingsOperationType)operationType { - NSAssert(NO, @"Expected execute: to be overwritten by subclass"); - return FUIAccountSettingsOperationTypeUnsupported; -} - -#pragma mark - protected methods - -- (void)finishOperationWithError:(nullable NSError *)error { - if (error) { - switch (error.code) { - case FIRAuthErrorCodeEmailAlreadyInUse: - [self showAlertWithMessage:FUILocalizedString(kStr_EmailAlreadyInUseError)]; - break; - case FIRAuthErrorCodeInvalidEmail: - [self showAlertWithMessage:FUILocalizedString(kStr_InvalidEmailError)]; - break; - case FIRAuthErrorCodeWeakPassword: - [self showAlertWithMessage:FUILocalizedString(kStr_WeakPasswordError)]; - break; - case FIRAuthErrorCodeTooManyRequests: - [self showAlertWithMessage:FUILocalizedString(kStr_SignUpTooManyTimesError)]; - break; - case FIRAuthErrorCodeWrongPassword: - [self showAlertWithMessage:FUILocalizedString(kStr_WrongPasswordError)]; - break; - case FIRAuthErrorCodeUserNotFound: - [self showAlertWithMessage:FUILocalizedString(kStr_UserNotFoundError)]; - break; - case FIRAuthErrorCodeUserDisabled: - [self showAlertWithMessage:FUILocalizedString(kStr_AccountDisabledError)]; - break; - case FUIAuthErrorCodeCantFindProvider: { - NSString *message = [NSString stringWithFormat:FUILocalizedString(kStr_CantFindProvider), - error.userInfo[FUIAuthErrorUserInfoProviderIDKey]]; - [self showAlertWithMessage:message]; - break; - } - case FIRAuthErrorCodeUserMismatch: - [self showAlertWithMessage:FUILocalizedString(kStr_EmailsDontMatch)]; - break; - } - } - - [self.delegate.authUI invokeOperationCallback:[self operationType] error:error]; -} - -- (void)showSelectProviderDialogWithAlertTitle:(nullable NSString *)title - alertMessage:(nullable NSString *)message - alertCloseButton:(nullable NSString *)closeActionTitle - providerHandler:(nullable FUIAccountSettingsChooseProviderHandler) - handler; { - UIAlertController *alert = - [UIAlertController alertControllerWithTitle:title - message:message - preferredStyle:UIAlertControllerStyleAlert]; - for (id provider in self.delegate.auth.currentUser.providerData) { - NSString *providerTitle = - [NSString stringWithFormat:FUILocalizedString(kStr_SignInWithProvider), - [FUIAuthBaseViewController providerLocalizedName:provider.providerID]]; - UIAlertAction* action = [UIAlertAction actionWithTitle:providerTitle - style:UIAlertActionStyleDefault - handler:^(UIAlertAction *_Nonnull action) { - if (handler) { - handler(provider); - } - }]; - [alert addAction:action]; - } - UIAlertAction* closeButton = [UIAlertAction actionWithTitle:closeActionTitle - style:UIAlertActionStyleCancel - handler:nil]; - [alert addAction:closeButton]; - [self.delegate presentViewController:alert]; -} - -- (void)showAlertWithMessage:(NSString *)message { - UIAlertController *alertController = - [UIAlertController alertControllerWithTitle:nil - message:message - preferredStyle:UIAlertControllerStyleAlert]; - UIAlertAction *okAction = [UIAlertAction actionWithTitle:FUILocalizedString(kStr_OK) - style:UIAlertActionStyleDefault - handler:nil]; - [alertController addAction:okAction]; - [self.delegate presentViewController:alertController]; -} - -- (void)reauthenticateWithProvider:(NSString *)providerID - actionHandler:(nullable FUIAccountSettingsReauthenticateHandler)handler { - - id providerUI; - for (id authProvider in self.delegate.authUI.providers) { - if ([providerID isEqualToString:authProvider.providerID]) { - providerUI = authProvider; - break; - } - } - - if (!providerUI) { - NSError *error = [FUIAuthErrorUtils errorWithCode:FUIAuthErrorCodeCantFindProvider - userInfo:@{ - FUIAuthErrorUserInfoProviderIDKey : providerID - }]; - [self finishOperationWithError:error]; - return; - } - - [self.delegate incrementActivity]; - // Sign out first to make sure sign in starts with a clean state. - [providerUI signOut]; - [providerUI signInWithDefaultValue:self.delegate.auth.currentUser.email - presentingViewController:[self.delegate presentingController] - completion:^(FIRAuthCredential *_Nullable credential, - NSError *_Nullable error, - _Nullable FIRAuthResultCallback result, - NSDictionary *_Nullable userInfo) { - if (error) { - [self.delegate decrementActivity]; - [self finishOperationWithError:error]; - if (result) { - result(nil, error); - } - return; - } - [self.delegate.auth.currentUser - reauthenticateWithCredential:credential - completion:^(FIRAuthDataResult *_Nullable authResult, - NSError *_Nullable reauthError) { - [self.delegate decrementActivity]; - if (result) { - result(self.delegate.auth.currentUser, reauthError); - } - if (error) { - [self finishOperationWithError:error]; - } else { - if (handler) { - handler(); - [self finishOperationWithError:error]; - } - } - }]; - }]; -} - -- (void)reauthenticateWithPassword:(NSString *)password - actionHandler:(nullable FUIAccountSettingsReauthenticateHandler)handler { - if (password.length <= 0) { - [self showAlertWithMessage:FUILocalizedString(kStr_InvalidPasswordError)]; - return; - } - - [self.delegate incrementActivity]; - - if (self.delegate.auth.currentUser.email == nil) { - NSLog(@"FirebaseUI: Expected nonnull email during email/password reauthentication"); - return; - } - [self.delegate.auth signInWithEmail:self.delegate.auth.currentUser.email - password:password - completion:^(FIRAuthDataResult *authResult, NSError *error) { - [self.delegate decrementActivity]; - - [self finishOperationWithError:error]; - if (!error && handler) { - handler(); - } - }]; -} - -- (void)showVerifyDialogWithMessage:(NSString *)message - providerHandler:(nullable FUIAccountSettingsReauthenticateHandler)handler { - [self showSelectProviderDialogWithAlertTitle:FUILocalizedString(kStr_VerifyItsYou) - alertMessage:message - alertCloseButton:FUILocalizedString(kStr_Cancel) - providerHandler:^(id provider) { - if (![provider.providerID isEqualToString:@"password"]) { - [self reauthenticateWithProvider:provider.providerID actionHandler:handler]; - } else { - [self showVerifyPasswordViewWithMessage:message providerHandler:handler]; - } - }]; -} - -- (void)showVerifyPasswordViewWithMessage:(NSString *)message - providerHandler:(nullable FUIAccountSettingsReauthenticateHandler) - handler { - __block FUIStaticContentTableViewCell *passwordCell = - [FUIStaticContentTableViewCell cellWithTitle:FUILocalizedString(kStr_Password) - value:nil - placeholder:FUILocalizedString(kStr_PlaceholderEnterPassword) - type:FUIStaticContentTableViewCellTypePassword - action:nil]; - FUIStaticContentTableViewContent *contents = - [FUIStaticContentTableViewContent contentWithSections:@[ - [FUIStaticContentTableViewSection sectionWithTitle:nil - cells:@[passwordCell]], - ]]; - - UIViewController *controller = - [[FUIStaticContentTableViewController alloc] initWithContents:contents - nextTitle:FUILocalizedString(kStr_Next) - nextAction:^{ - [self reauthenticateWithPassword:passwordCell.value actionHandler:handler]; - } - headerText:message - footerText: - FUILocalizedString(kStr_ForgotPassword) - footerAction:^{ - [FUIAccountSettingsOperationForgotPassword executeOperationWithDelegate:self.delegate]; - }]; - controller.title = FUILocalizedString(kStr_VerifyItsYou); - [self.delegate pushViewController:controller]; -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebaseAuthUI/Sources/FUIAccountSettingsOperationDeleteAccount.h b/FirebaseAuthUI/Sources/FUIAccountSettingsOperationDeleteAccount.h deleted file mode 100644 index c1a0507a05e..00000000000 --- a/FirebaseAuthUI/Sources/FUIAccountSettingsOperationDeleteAccount.h +++ /dev/null @@ -1,36 +0,0 @@ -// -// Copyright (c) 2017 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebaseAuthUI/Sources/FUIAccountSettingsOperation.h" - -NS_ASSUME_NONNULL_BEGIN - -/** @class FUIAccountSettingsOperationDeleteAccount - @brief Handles logic of account deletion operation. - */ -@interface FUIAccountSettingsOperationDeleteAccount : FUIAccountSettingsOperation - -/** @fn executeOperationWithDelegate: - @brief Instead use @c executeOperationWithDelegate:showDialog: - @param delegate UI delegate which handles all UI related logic. - @return Instance of the executed operation. - */ -+ (instancetype)executeOperationWithDelegate:(id)delegate - NS_UNAVAILABLE; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebaseAuthUI/Sources/FUIAccountSettingsOperationDeleteAccount.m b/FirebaseAuthUI/Sources/FUIAccountSettingsOperationDeleteAccount.m deleted file mode 100644 index 65269bd1c5f..00000000000 --- a/FirebaseAuthUI/Sources/FUIAccountSettingsOperationDeleteAccount.m +++ /dev/null @@ -1,138 +0,0 @@ -// -// Copyright (c) 2017 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebaseAuthUI/Sources/FUIAccountSettingsOperationDeleteAccount.h" - -#import "FirebaseAuthUI/Sources/FUIAccountSettingsOperation_Internal.h" -#import "FirebaseAuthUI/Sources/FUIAccountSettingsOperationForgotPassword.h" - -@import FirebaseAuth; - -NS_ASSUME_NONNULL_BEGIN - -@implementation FUIAccountSettingsOperationDeleteAccount - -- (FUIAccountSettingsOperationType)operationType { - return FUIAccountSettingsOperationTypeDeleteAccount; -} - -- (void)execute:(BOOL)showDialog { - if (showDialog) { - [self showDeleteAccountDialog]; - } else { - [self showDeleteAccountViewWithPassword]; - } -} - -- (void)showDeleteAccountDialog { - [self showSelectProviderDialogWithAlertTitle: - FUILocalizedString(kStr_DeleteAccountConfirmationTitle) - alertMessage:FUILocalizedString(kStr_DeleteAccountBody) - alertCloseButton:FUILocalizedString(kStr_Cancel) - providerHandler:^(id provider) { - // TODO: Use public API after Firebase 11 minimum. - if (![provider.providerID isEqualToString:@"password"]) { - [self reauthenticateWithProvider:provider.providerID actionHandler:^{ - [self showDeleteAccountView]; - }]; - } else { - [self showDeleteAccountViewWithPassword]; - } - }]; -} - -- (void)showDeleteAccountViewWithPassword { - __block FUIStaticContentTableViewCell *passwordCell = - [FUIStaticContentTableViewCell cellWithTitle:FUILocalizedString(kStr_Password) - value:nil - placeholder:FUILocalizedString(kStr_PlaceholderEnterPassword) - type:FUIStaticContentTableViewCellTypePassword - action:nil]; - FUIStaticContentTableViewContent *contents = - [FUIStaticContentTableViewContent contentWithSections:@[ - [FUIStaticContentTableViewSection sectionWithTitle:nil cells:@[passwordCell]], - ]]; - - NSString *message = FUILocalizedString(kStr_DeleteAccountConfirmationMessage); - UIViewController *controller = - [[FUIStaticContentTableViewController alloc] - initWithContents:contents - nextTitle:FUILocalizedString(kStr_Delete) - nextAction:^{ [self deleteCurrentAccountWithPassword:passwordCell.value]; } - headerText:message - footerText:FUILocalizedString(kStr_ForgotPassword) - footerAction:^{ - [FUIAccountSettingsOperationForgotPassword executeOperationWithDelegate:self.delegate]; - }]; - controller.title = FUILocalizedString(kStr_DeleteAccountControllerTitle); - [self.delegate pushViewController:controller]; -} - -- (void)showDeleteAccountView { - NSString *message = FUILocalizedString(kStr_DeleteAccountConfirmationMessage); - UIViewController *controller = - [[FUIStaticContentTableViewController alloc] initWithContents:nil - nextTitle:FUILocalizedString(kStr_Delete) - nextAction:^{ - [self onDeleteAccountViewNextAction]; - } - headerText:message]; - controller.title = FUILocalizedString(kStr_DeleteAccountControllerTitle); - [self.delegate pushViewController:controller]; - -} - -- (void)onDeleteAccountViewNextAction { - UIAlertController *alertController = - [UIAlertController alertControllerWithTitle:FUILocalizedString(kStr_DeleteAccountConfirmationTitle) - message:FUILocalizedString(kStr_ActionCantBeUndone) - preferredStyle:UIAlertControllerStyleAlert]; - UIAlertAction *deleteAction = - [UIAlertAction actionWithTitle:FUILocalizedString(kStr_DeleteAccountControllerTitle) - style:UIAlertActionStyleDestructive - handler:^(UIAlertAction *_Nonnull action) { - [self deleteCurrentAccount]; - }]; - UIAlertAction *action = - [UIAlertAction actionWithTitle:FUILocalizedString(kStr_Cancel) - style:UIAlertActionStyleCancel - handler:nil]; - [alertController addAction:deleteAction]; - [alertController addAction:action]; - [self.delegate presentViewController:alertController]; - -} - -- (void)deleteCurrentAccountWithPassword:(NSString *)password { - [self reauthenticateWithPassword:password actionHandler:^{ - [self deleteCurrentAccount]; - }]; -} - -- (void)deleteCurrentAccount { - [self.delegate incrementActivity]; - [self.delegate.auth.currentUser deleteWithCompletion:^(NSError *_Nullable error) { - [self.delegate decrementActivity]; - [self finishOperationWithError:error]; - if (!error) { - [self.delegate presentBaseController]; - } - }]; -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebaseAuthUI/Sources/FUIAccountSettingsOperationForgotPassword.h b/FirebaseAuthUI/Sources/FUIAccountSettingsOperationForgotPassword.h deleted file mode 100644 index 492dad70568..00000000000 --- a/FirebaseAuthUI/Sources/FUIAccountSettingsOperationForgotPassword.h +++ /dev/null @@ -1,38 +0,0 @@ -// -// Copyright (c) 2017 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebaseAuthUI/Sources/FUIAccountSettingsOperation.h" - -NS_ASSUME_NONNULL_BEGIN - -/** @class FUIAccountSettingsOperationForgotPassword - @brief Handles logic of 'forgot password' operation. - */ -@interface FUIAccountSettingsOperationForgotPassword : FUIAccountSettingsOperation - -/** @fn executeOperationWithDelegate:showDialog: - @brief Instead use @c executeOperationWithDelegate: - @param delegate UI delegate which handles all UI related logic. - @param showDialog Determines if operation specific UI should be started with confirmation - dialog. - @return Instance of the executed operation. - */ -+ (instancetype)executeOperationWithDelegate:(id)delegate - showDialog:(BOOL)showDialog NS_UNAVAILABLE; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebaseAuthUI/Sources/FUIAccountSettingsOperationForgotPassword.m b/FirebaseAuthUI/Sources/FUIAccountSettingsOperationForgotPassword.m deleted file mode 100644 index 889bf8c49d8..00000000000 --- a/FirebaseAuthUI/Sources/FUIAccountSettingsOperationForgotPassword.m +++ /dev/null @@ -1,95 +0,0 @@ -// -// Copyright (c) 2017 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebaseAuthUI/Sources/FUIAccountSettingsOperationForgotPassword.h" - -#import "FirebaseAuthUI/Sources/FUIAccountSettingsOperation_Internal.h" -#import "FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthBaseViewController_Internal.h" - -@import FirebaseAuth; - -NS_ASSUME_NONNULL_BEGIN - -@implementation FUIAccountSettingsOperationForgotPassword - -- (FUIAccountSettingsOperationType)operationType { - return FUIAccountSettingsOperationTypeForgotPassword; -} - -- (void)execute:(BOOL)showDialog { - [self onForgotPassword]; -} - -- (void)onForgotPassword { - __block FUIStaticContentTableViewCell *inputCell = - [FUIStaticContentTableViewCell cellWithTitle:FUILocalizedString(kStr_Email) - value:self.delegate.auth.currentUser.email - placeholder:FUILocalizedString(kStr_PlaceholderEnterEmail) - type:FUIStaticContentTableViewCellTypeInput - action:nil]; - FUIStaticContentTableViewContent *contents = - [FUIStaticContentTableViewContent - contentWithSections:@[ - [FUIStaticContentTableViewSection sectionWithTitle:nil - cells:@[inputCell]], - ]]; - - UIViewController *controller = - [[FUIStaticContentTableViewController alloc] - initWithContents:contents - nextTitle:FUILocalizedString(kStr_Send) - nextAction:^{ [self onPasswordRecovery:inputCell.value]; } - headerText:FUILocalizedString(kStr_PasswordRecoveryMessage)]; - controller.title = FUILocalizedString(kStr_PasswordRecoveryTitle); - [self.delegate pushViewController:controller]; -} - -- (void)onPasswordRecovery:(NSString *)email { - if (![[FUIAuthBaseViewController class] isValidEmail:email]) { - [self showAlertWithMessage:FUILocalizedString(kStr_InvalidEmailError)]; - return; - } - - [self.delegate incrementActivity]; - - [self.delegate.auth sendPasswordResetWithEmail:email - completion:^(NSError *_Nullable error) { - [self.delegate decrementActivity]; - - if (error) { - [self finishOperationWithError:error]; - return; - } - - NSString *message = [NSString stringWithFormat: - FUILocalizedString(kStr_PasswordRecoveryEmailSentMessage), email]; - UIAlertController *alertController = - [UIAlertController alertControllerWithTitle:nil - message:message - preferredStyle:UIAlertControllerStyleAlert]; - UIAlertAction *okAction = [UIAlertAction actionWithTitle:FUILocalizedString(kStr_OK) - style:UIAlertActionStyleDefault - handler:^(UIAlertAction *_Nonnull action) { - [self finishOperationWithError:error]; - }]; - [alertController addAction:okAction]; - [self.delegate presentViewController:alertController]; - }]; -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebaseAuthUI/Sources/FUIAccountSettingsOperationSignOut.h b/FirebaseAuthUI/Sources/FUIAccountSettingsOperationSignOut.h deleted file mode 100644 index 5b033292023..00000000000 --- a/FirebaseAuthUI/Sources/FUIAccountSettingsOperationSignOut.h +++ /dev/null @@ -1,37 +0,0 @@ -// -// Copyright (c) 2017 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebaseAuthUI/Sources/FUIAccountSettingsOperation.h" - -NS_ASSUME_NONNULL_BEGIN - -/** @class FUIAccountSettingsOperationSignOut - @brief Handles logic of signing-out operation. - */ -@interface FUIAccountSettingsOperationSignOut : FUIAccountSettingsOperation - -/** @fn executeOperationWithDelegate:showDialog: - @brief Instead use @c executeOperationWithDelegate: - @param delegate UI delegate which handles all UI related logic. - @param showDialog Determines if operation specific UI should be started with confirmation - dialog. - @return Instance of the executed operation. - */ -+ (instancetype)executeOperationWithDelegate:(id)delegate - showDialog:(BOOL)showDialog NS_UNAVAILABLE; -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebaseAuthUI/Sources/FUIAccountSettingsOperationSignOut.m b/FirebaseAuthUI/Sources/FUIAccountSettingsOperationSignOut.m deleted file mode 100644 index 08a18eab6cb..00000000000 --- a/FirebaseAuthUI/Sources/FUIAccountSettingsOperationSignOut.m +++ /dev/null @@ -1,45 +0,0 @@ -// -// Copyright (c) 2017 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebaseAuthUI/Sources/FUIAccountSettingsOperationSignOut.h" - -#import "FirebaseAuthUI/Sources/FUIAccountSettingsOperation_Internal.h" - -NS_ASSUME_NONNULL_BEGIN - -@implementation FUIAccountSettingsOperationSignOut - -- (FUIAccountSettingsOperationType)operationType { - return FUIAccountSettingsOperationTypeSignOut; -} - -- (void)execute:(BOOL)showDialog { - [self signOut]; -} - -- (void)signOut{ - NSError *error; - [self.delegate.authUI signOutWithError:&error]; - [self finishOperationWithError:error]; - if (!error) { - [self.delegate presentBaseController]; - } - -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebaseAuthUI/Sources/FUIAccountSettingsOperationUnlinkAccount.h b/FirebaseAuthUI/Sources/FUIAccountSettingsOperationUnlinkAccount.h deleted file mode 100644 index 831600cfa7f..00000000000 --- a/FirebaseAuthUI/Sources/FUIAccountSettingsOperationUnlinkAccount.h +++ /dev/null @@ -1,61 +0,0 @@ -// -// Copyright (c) 2017 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebaseAuthUI/Sources/FUIAccountSettingsOperation.h" - -@protocol FIRUserInfo; - -NS_ASSUME_NONNULL_BEGIN - -/** @class FUIAccountSettingsOperationUnlinkAccount - @brief Handles logic of unlinking from 3P provider operation. - */ -@interface FUIAccountSettingsOperationUnlinkAccount : FUIAccountSettingsOperation - -/** @fn executeOperationWithDelegate:showDialog: - @brief Instead use @c executeOperationWithDelegate:showDialog:provider: - @param delegate UI delegate which handles all UI related logic. - @param showDialog Determines if operation specific UI should be started with confirmation - dialog. - @return Instance of the executed operation. - */ -+ (instancetype)executeOperationWithDelegate:(id)delegate - showDialog:(BOOL)showDialog NS_UNAVAILABLE; - -/** @fn executeOperationWithDelegate: - @brief Instead use @c executeOperationWithDelegate:showDialog:provider: - @param delegate UI delegate which handles all UI related logic. - @return Instance of the executed operation. - */ -+ (instancetype)executeOperationWithDelegate:(id)delegate - NS_UNAVAILABLE; - -/** @fn executeOperationWithDelegate:showDialog:provider: - @brief Creates new instance of @c FUIAccountSettingsOperationUnlinkAccount and executes logic - associated with it. - @param delegate UI delegate which handles all UI related logic. - @param showDialog Determines if operation specific UI should be started with confirmation - dialog. - @param provider Instance of 3P provider retrieved from currently logged in @c FIRUser. - @return Instance of the executed operation. - */ -+ (instancetype)executeOperationWithDelegate:(id)delegate - showDialog:(BOOL)showDialog - provider:(id)provider; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebaseAuthUI/Sources/FUIAccountSettingsOperationUnlinkAccount.m b/FirebaseAuthUI/Sources/FUIAccountSettingsOperationUnlinkAccount.m deleted file mode 100644 index a97995646b5..00000000000 --- a/FirebaseAuthUI/Sources/FUIAccountSettingsOperationUnlinkAccount.m +++ /dev/null @@ -1,108 +0,0 @@ -// -// Copyright (c) 2017 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebaseAuthUI/Sources/FUIAccountSettingsOperationUnlinkAccount.h" - -#import "FirebaseAuthUI/Sources/FUIAccountSettingsOperation_Internal.h" -#import "FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthBaseViewController_Internal.h" - -@import FirebaseAuth; - -NS_ASSUME_NONNULL_BEGIN - -@interface FUIAccountSettingsOperationUnlinkAccount () -{ - id _provider; -} -@end - -@implementation FUIAccountSettingsOperationUnlinkAccount - -+ (instancetype)executeOperationWithDelegate:(id)delegate - showDialog:(BOOL)showDialog - provider:(id)provider { - FUIAccountSettingsOperationUnlinkAccount *operation = - [[self alloc] initWithDelegate:delegate provider:provider]; - [operation execute:showDialog]; - return operation; -} - -- (instancetype)initWithDelegate:(id)delegate - provider:(id) provider { - if (self = [super initWithDelegate:delegate]) { - _provider = provider; - } - return self; -} - -- (FUIAccountSettingsOperationType)operationType { - return FUIAccountSettingsOperationTypeUnlinkAccount; -} - -- (void)execute:(BOOL)showDialog { - __block FUIStaticContentTableViewCell *cell = - [FUIStaticContentTableViewCell cellWithTitle: - [FUIAuthBaseViewController providerLocalizedName:_provider.providerID] - value:_provider.displayName - type:FUIStaticContentTableViewCellTypeDefault - action:nil]; - FUIStaticContentTableViewContent *contents = - [FUIStaticContentTableViewContent contentWithSections:@[ - [FUIStaticContentTableViewSection sectionWithTitle:nil - cells:@[cell]], - ]]; - - UIViewController *controller = - [[FUIStaticContentTableViewController alloc] initWithContents:contents - nextTitle: - FUILocalizedString(kStr_UnlinkAction) - nextAction:^{ - [self showUnlinkConfirmationDialog]; - }]; - controller.title = FUILocalizedString(kStr_UnlinkTitle); - [self.delegate pushViewController:controller]; -} - -- (void)showUnlinkConfirmationDialog { - UIAlertController *alertController = - [UIAlertController alertControllerWithTitle:FUILocalizedString(kStr_UnlinkConfirmationTitle) - message:FUILocalizedString(kStr_UnlinkConfirmationMessage) - preferredStyle:UIAlertControllerStyleAlert]; - UIAlertAction *action = - [UIAlertAction actionWithTitle:FUILocalizedString(kStr_UnlinkConfirmationActionTitle) - style:UIAlertActionStyleDestructive - handler:^(UIAlertAction *_Nonnull action) { [self unlinkAcount]; }]; - [alertController addAction:action]; - UIAlertAction *cancelAction = - [UIAlertAction actionWithTitle:FUILocalizedString(kStr_Cancel) - style:UIAlertActionStyleCancel - handler:nil]; - [alertController addAction:cancelAction]; - [self.delegate presentViewController:alertController]; -} - -- (void)unlinkAcount { - [self.delegate.auth.currentUser unlinkFromProvider:_provider.providerID - completion:^(FIRUser *_Nullable user, - NSError *_Nullable error) { - [self finishOperationWithError:error]; - [self.delegate presentBaseController]; - }]; -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebaseAuthUI/Sources/FUIAccountSettingsOperationUpdateEmail.h b/FirebaseAuthUI/Sources/FUIAccountSettingsOperationUpdateEmail.h deleted file mode 100644 index e03f4e82bfb..00000000000 --- a/FirebaseAuthUI/Sources/FUIAccountSettingsOperationUpdateEmail.h +++ /dev/null @@ -1,38 +0,0 @@ -// -// Copyright (c) 2017 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebaseAuthUI/Sources/FUIAccountSettingsOperation.h" - -NS_ASSUME_NONNULL_BEGIN - -/** @class FUIAccountSettingsOperationUpdateEmail - @brief Handles logic of updating email operation. - */ -@interface FUIAccountSettingsOperationUpdateEmail : FUIAccountSettingsOperation - -/** @fn executeOperationWithDelegate:showDialog: - @brief Instead use @c executeOperationWithDelegate: - @param delegate UI delegate which handles all UI related logic. - @param showDialog Determines if operation specific UI should be started with confirmation - dialog. - @return Instance of the executed operation. - */ -+ (instancetype)executeOperationWithDelegate:(id)delegate - showDialog:(BOOL)showDialog NS_UNAVAILABLE; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebaseAuthUI/Sources/FUIAccountSettingsOperationUpdateEmail.m b/FirebaseAuthUI/Sources/FUIAccountSettingsOperationUpdateEmail.m deleted file mode 100644 index 4bf7e94b3e2..00000000000 --- a/FirebaseAuthUI/Sources/FUIAccountSettingsOperationUpdateEmail.m +++ /dev/null @@ -1,94 +0,0 @@ -// -// Copyright (c) 2017 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebaseAuthUI/Sources/FUIAccountSettingsOperationUpdateEmail.h" - -#import "FirebaseAuthUI/Sources/FUIAccountSettingsOperation_Internal.h" -#import "FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthBaseViewController_Internal.h" - -@import FirebaseAuth; - -NS_ASSUME_NONNULL_BEGIN - -@implementation FUIAccountSettingsOperationUpdateEmail - -- (FUIAccountSettingsOperationType)operationType { - return FUIAccountSettingsOperationTypeUpdateEmail; -} - -- (void)execute:(BOOL)showDialog { - if (showDialog) { - [self showUpdateEmailDialog]; - } else { - [self showUpdateEmailView]; - } -} - -- (void)showUpdateEmailDialog { - NSString *message; - message = FUILocalizedString(kStr_UpdateEmailAlertMessage); - [self showVerifyDialogWithMessage:message providerHandler:^{ [self showUpdateEmail]; }]; - -} - -- (void)showUpdateEmailView { - [self showVerifyPasswordViewWithMessage: - FUILocalizedString(kStr_UpdateEmailVerificationAlertMessage) - providerHandler:^{ [self showUpdateEmail]; }]; -} - -- (void)showUpdateEmail { - __block FUIStaticContentTableViewCell *cell = - [FUIStaticContentTableViewCell cellWithTitle:FUILocalizedString(kStr_Email) - value:self.delegate.auth.currentUser.email - placeholder:FUILocalizedString(kStr_PlaceholderEnterEmail) - type:FUIStaticContentTableViewCellTypeInput - action:nil]; - FUIStaticContentTableViewContent *contents = - [FUIStaticContentTableViewContent contentWithSections:@[ - [FUIStaticContentTableViewSection sectionWithTitle:nil - cells:@[cell]], - ]]; - - UIViewController *controller = - [[FUIStaticContentTableViewController alloc] initWithContents:contents - nextTitle:FUILocalizedString(kStr_Save) - nextAction:^{ - [self updateEmailForCurrentUser:cell.value]; - }]; - controller.title = FUILocalizedString(kStr_EditEmailTitle); - [self.delegate pushViewController:controller]; - -} - -- (void)updateEmailForCurrentUser:(NSString *)email { - if (![[FUIAuthBaseViewController class] isValidEmail:email]) { - [self showAlertWithMessage:FUILocalizedString(kStr_InvalidEmailError)]; - } else { - [self.delegate incrementActivity]; - [self.delegate.auth.currentUser updateEmail:email completion:^(NSError *_Nullable error) { - [self.delegate decrementActivity]; - [self finishOperationWithError:error]; - if (!error) { - [self.delegate presentBaseController]; - } - }]; - } -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebaseAuthUI/Sources/FUIAccountSettingsOperationUpdateName.h b/FirebaseAuthUI/Sources/FUIAccountSettingsOperationUpdateName.h deleted file mode 100644 index 4a3b469163a..00000000000 --- a/FirebaseAuthUI/Sources/FUIAccountSettingsOperationUpdateName.h +++ /dev/null @@ -1,36 +0,0 @@ -// -// Copyright (c) 2017 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebaseAuthUI/Sources/FUIAccountSettingsOperation.h" - -NS_ASSUME_NONNULL_BEGIN - -/** @class FUIAccountSettingsOperationUpdateName - @brief Handles logic of updating name operation. - */ -@interface FUIAccountSettingsOperationUpdateName : FUIAccountSettingsOperation - -/** @fn executeOperationWithDelegate: - @brief Instead use @c executeOperationWithDelegate:showDialog: - @param delegate UI delegate which handles all UI related logic. - @return Instance of the executed operation. - */ -+ (instancetype)executeOperationWithDelegate:(id)delegate - NS_UNAVAILABLE; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebaseAuthUI/Sources/FUIAccountSettingsOperationUpdateName.m b/FirebaseAuthUI/Sources/FUIAccountSettingsOperationUpdateName.m deleted file mode 100644 index 0f0e34f0ec8..00000000000 --- a/FirebaseAuthUI/Sources/FUIAccountSettingsOperationUpdateName.m +++ /dev/null @@ -1,67 +0,0 @@ -// -// Copyright (c) 2017 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebaseAuthUI/Sources/FUIAccountSettingsOperationUpdateName.h" - -#import "FirebaseAuthUI/Sources/FUIAccountSettingsOperation_Internal.h" - -@import FirebaseAuth; - -NS_ASSUME_NONNULL_BEGIN - -@implementation FUIAccountSettingsOperationUpdateName - -- (FUIAccountSettingsOperationType)operationType { - return FUIAccountSettingsOperationTypeUpdateName; -} - -- (void)execute:(BOOL)showDialog { - __block FUIStaticContentTableViewCell *cell = - [FUIStaticContentTableViewCell cellWithTitle:FUILocalizedString(kStr_Name) - value:self.delegate.auth.currentUser.displayName - placeholder:FUILocalizedString(kStr_PlaceholderEnterName) - type:FUIStaticContentTableViewCellTypeInput - action:nil]; - FUIStaticContentTableViewContent *contents = - [FUIStaticContentTableViewContent contentWithSections:@[ - [FUIStaticContentTableViewSection sectionWithTitle:nil - cells:@[cell]], - ]]; - - UIViewController *controller = - [[FUIStaticContentTableViewController alloc] initWithContents:contents - nextTitle:FUILocalizedString(kStr_Save) - nextAction:^{ - [self onUpdateName:cell.value]; - }]; - controller.title = FUILocalizedString(kStr_EditNameTitle); - [self.delegate pushViewController:controller]; -} - -- (void)onUpdateName:(NSString *)username { - [self.delegate incrementActivity]; - FIRUserProfileChangeRequest *request = [self.delegate.auth.currentUser profileChangeRequest]; - request.displayName = username; - [request commitChangesWithCompletion:^(NSError *_Nullable error) { - [self.delegate decrementActivity]; - [self finishOperationWithError:error]; - [self.delegate presentBaseController]; - }]; -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebaseAuthUI/Sources/FUIAccountSettingsOperationUpdatePassword.h b/FirebaseAuthUI/Sources/FUIAccountSettingsOperationUpdatePassword.h deleted file mode 100644 index 10e67240b53..00000000000 --- a/FirebaseAuthUI/Sources/FUIAccountSettingsOperationUpdatePassword.h +++ /dev/null @@ -1,59 +0,0 @@ -// -// Copyright (c) 2017 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebaseAuthUI/Sources/FUIAccountSettingsOperation.h" - -NS_ASSUME_NONNULL_BEGIN - -/** @class FUIAccountSettingsOperationUpdatePassword - @brief Handles logic of updating password operation. - */ -@interface FUIAccountSettingsOperationUpdatePassword : FUIAccountSettingsOperation - -/** @fn executeOperationWithDelegate:showDialog: - @brief Instead use @c executeOperationWithDelegate:showDialog:newPassword: - @param delegate UI delegate which handles all UI related logic. - @param showDialog Determines if operation specific UI should be started with confirmation - dialog. - @return Instance of the executed operation. - */ -+ (instancetype)executeOperationWithDelegate:(id)delegate - showDialog:(BOOL)showDialog NS_UNAVAILABLE; - -/** @fn executeOperationWithDelegate: - @brief Instead use @c executeOperationWithDelegate:showDialog:newPassword: - @param delegate UI delegate which handles all UI related logic. - @return Instance of the executed operation. - */ -+ (instancetype)executeOperationWithDelegate:(id)delegate - NS_UNAVAILABLE; - -/** @fn executeOperationWithDelegate:showDialog:newPassword: - @brief Creates new instance of @c FUIAccountSettingsOperationUnlinkAccount and executes logic - associated with it. - @param delegate UI delegate which handles all UI related logic. - @param showDialog Determines if operation specific UI should be started with confirmation - dialog. - @param newPassword Defines if this is add password (pass YES) or update password operation. - @return Instance of the executed operation. - */ -+ (instancetype)executeOperationWithDelegate:(id)delegate - showDialog:(BOOL)showDialog - newPassword:(BOOL)newPassword; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebaseAuthUI/Sources/FUIAccountSettingsOperationUpdatePassword.m b/FirebaseAuthUI/Sources/FUIAccountSettingsOperationUpdatePassword.m deleted file mode 100644 index 120491524df..00000000000 --- a/FirebaseAuthUI/Sources/FUIAccountSettingsOperationUpdatePassword.m +++ /dev/null @@ -1,128 +0,0 @@ -// -// Copyright (c) 2017 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebaseAuthUI/Sources/FUIAccountSettingsOperationUpdatePassword.h" - -#import "FirebaseAuthUI/Sources/FUIAccountSettingsOperation_Internal.h" - -@import FirebaseAuth; - -NS_ASSUME_NONNULL_BEGIN - -@interface FUIAccountSettingsOperationUpdatePassword () -{ - BOOL _newPassword; -} -@end - -@implementation FUIAccountSettingsOperationUpdatePassword - -+ (instancetype)executeOperationWithDelegate:(id)delegate - showDialog:(BOOL)showDialog - newPassword:(BOOL)newPassword { - FUIAccountSettingsOperationUpdatePassword *operation = - [[self alloc] initWithDelegate:delegate newPassword:newPassword]; - [operation execute:showDialog]; - return operation; -} - -- (instancetype)initWithDelegate:(id)delegate - newPassword:(BOOL)newPassword { - if (self = [super initWithDelegate:delegate]) { - _newPassword = newPassword; - } - return self; -} - -- (FUIAccountSettingsOperationType)operationType { - return FUIAccountSettingsOperationTypeUpdatePassword; -} - -- (void)execute:(BOOL)showDialog { - if (showDialog) { - [self showUpdatePasswordDialog:_newPassword]; - } else { - [self showUpdatePasswordView]; - } -} - -- (void)showUpdatePasswordDialog:(BOOL)newPassword { - NSString *message; - if (newPassword) { - message = FUILocalizedString(kStr_AddPasswordAlertMessage); - } else { - message = FUILocalizedString(kStr_EditPasswordAlertMessage); - } - - [self showVerifyDialogWithMessage:message - providerHandler:^{ [self showUpdatePassword:newPassword]; }]; - -} - -- (void)showUpdatePasswordView { - [self showVerifyPasswordViewWithMessage: - FUILocalizedString(kStr_ReauthenticateEditPasswordAlertMessage) - providerHandler:^{ [self showUpdatePassword:NO]; }]; -} - -- (void)showUpdatePassword:(BOOL)newPassword { - NSString *placeHolder = newPassword ? FUILocalizedString(kStr_PlaceholderChosePassword) : - FUILocalizedString(kStr_PlaceholderNewPassword); - __block FUIStaticContentTableViewCell *passwordCell = - [FUIStaticContentTableViewCell cellWithTitle:FUILocalizedString(kStr_Password) - value:nil - placeholder:placeHolder - type:FUIStaticContentTableViewCellTypePassword - action:nil]; - FUIStaticContentTableViewContent *contents = - [FUIStaticContentTableViewContent contentWithSections:@[ - [FUIStaticContentTableViewSection sectionWithTitle:nil - cells:@[passwordCell]], - ]]; - - UIViewController *controller = - [[FUIStaticContentTableViewController alloc] initWithContents:contents - nextTitle:FUILocalizedString(kStr_Save) - nextAction:^{ - [self updatePasswordForCurrentUser:passwordCell.value]; - }]; - if (newPassword) { - controller.title = FUILocalizedString(kStr_AddPasswordTitle); - } else { - controller.title = FUILocalizedString(kStr_EditPasswordTitle); - } - [self.delegate pushViewController:controller]; - -} - -- (void)updatePasswordForCurrentUser:(NSString *)password { - if (!password.length) { - [self showAlertWithMessage:FUILocalizedString(kStr_WeakPasswordError)]; - } else { - [self.delegate incrementActivity]; - [self.delegate.auth.currentUser updatePassword:password completion:^(NSError *_Nullable error) { - [self.delegate decrementActivity]; - [self finishOperationWithError:error]; - if (!error) { - [self.delegate presentBaseController]; - } - }]; - } -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebaseAuthUI/Sources/FUIAccountSettingsOperation_Internal.h b/FirebaseAuthUI/Sources/FUIAccountSettingsOperation_Internal.h deleted file mode 100644 index 33a989d6c09..00000000000 --- a/FirebaseAuthUI/Sources/FUIAccountSettingsOperation_Internal.h +++ /dev/null @@ -1,109 +0,0 @@ -// -// Copyright (c) 2017 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebaseAuthUI/Sources/FUIAccountSettingsOperation.h" - -@import FirebaseAuth; - -#import "FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAccountSettingsOperationType.h" -#import "FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthStrings.h" -#import "FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuth_Internal.h" -#import "FirebaseAuthUI/Sources/FUIStaticContentTableViewController.h" - -NS_ASSUME_NONNULL_BEGIN - -/** @typedef FUIAccountSettingsChooseProviderHandler - @brief The type of block invoked when a select provider dialog button is tapped. - */ -typedef void(^FUIAccountSettingsChooseProviderHandler)(id provider); - -/** @typedef FUIAccountSettingsReauthenticateHandler - @brief The type of block invoked when reathentication operation is finished. - */ -typedef void(^FUIAccountSettingsReauthenticateHandler)(void); - -/** Internal methods which are not exposed for public usage. */ -@interface FUIAccountSettingsOperation () - -/** @fn initWithDelegate: - @brief Creates new instance of @c FUIAccountSettingsOperation. - */ -- (instancetype)initWithDelegate:(id)delegate; - -/** @fn finishOperationWithError: - @brief Callback which is used for notification of operation result. - */ -- (void)finishOperationWithError:(nullable NSError *)error; - -/** @fn reauthenticateWithProvider:actionHandler: - @brief Reauthenticates currently logged-in user with specified 3P porviderID. - @param providerID The ID of third party provider. - @param handler Block which is called when user was re-authenticated. - */ -- (void)reauthenticateWithProvider:(NSString *)providerID - actionHandler:(nullable FUIAccountSettingsReauthenticateHandler)handler; - -/** @fn reauthenticateWithPassword:actionHandler: - @brief Reauthenticates currently logged-in user with 'password' auth provider. - @param password Value of the password used for re-authentication of currently loggen-in user. - @param handler Block which is called when user was re-authenticated. - */ -- (void)reauthenticateWithPassword:(NSString *)password - actionHandler:(nullable FUIAccountSettingsReauthenticateHandler)handler; - -/** @fn showSelectProviderDialogWithAlertTitle:alertMessage:alertCloseButton:providerHandler: - @brief Displays alert dialog with all available 3P providers. - @param title The title of the dialog - @param message The message displayed in the alert body. - @param closeActionTitle The title of the close button. - @param handler Block which is called when user selects any of 3P providers. - */ -- (void)showSelectProviderDialogWithAlertTitle:(nullable NSString *)title - alertMessage:(nullable NSString *)message - alertCloseButton:(nullable NSString *)closeActionTitle - providerHandler:(nullable FUIAccountSettingsChooseProviderHandler) - handler; - -/** @fn showVerifyDialogWithMessage:providerHandler: - @brief Displays alert dialog when user need to verify it's identity. - @param message The message displayed in the alert body. - @param handler Block which is called when user selects any of 3P providers. - */ -- (void)showVerifyDialogWithMessage:(NSString *)message - providerHandler:(nullable FUIAccountSettingsReauthenticateHandler)handler; - -/** @fn showVerifyPasswordViewWithMessage:providerHandler: - @brief Displays view with password input field when user need to verify it's identity. - @param message The message displayed in the alert body. - @param handler Block which is called when user selects any of 3P providers. - */ -- (void)showVerifyPasswordViewWithMessage:(NSString *)message - providerHandler:(nullable FUIAccountSettingsReauthenticateHandler)handler; - -/** @fn showAlertWithMessage:message: - @brief Displays alert view with with specified message and OK button. - @param message The message displayed in the alert body. - */ -- (void)showAlertWithMessage:(NSString *)message; - -/** @property delegate - @brief The operation UI delegate which handles all UI callbacks. - */ -@property(nonatomic, weak, readonly) id delegate; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebaseAuthUI/Sources/FUIAccountSettingsViewController.m b/FirebaseAuthUI/Sources/FUIAccountSettingsViewController.m deleted file mode 100644 index 059b026cee6..00000000000 --- a/FirebaseAuthUI/Sources/FUIAccountSettingsViewController.m +++ /dev/null @@ -1,431 +0,0 @@ -// -// Copyright (c) 2017 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAccountSettingsViewController.h" - -@import FirebaseAuth; - -#import "FirebaseAuthUI/Sources/FUIAccountSettingsOperation.h" -#import "FirebaseAuthUI/Sources/FUIAccountSettingsOperationDeleteAccount.h" -#import "FirebaseAuthUI/Sources/FUIAccountSettingsOperationForgotPassword.h" -#import "FirebaseAuthUI/Sources/FUIAccountSettingsOperationSignOut.h" -#import "FirebaseAuthUI/Sources/FUIAccountSettingsOperationUnlinkAccount.h" -#import "FirebaseAuthUI/Sources/FUIAccountSettingsOperationUpdateEmail.h" -#import "FirebaseAuthUI/Sources/FUIAccountSettingsOperationUpdateName.h" -#import "FirebaseAuthUI/Sources/FUIAccountSettingsOperationUpdatePassword.h" -#import "FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthBaseViewController_Internal.h" -#import "FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthStrings.h" -#import "FirebaseAuthUI/Sources/FUIStaticContentTableViewController.h" - -NS_ASSUME_NONNULL_BEGIN - -/** @var FUIASAccountState - @brief Defines all possible states of current loogged-in @c FIRUser. - */ -typedef NS_ENUM(NSInteger, FUIASAccountState) { - FUIASAccountStateUnknown = 0, - FUIASAccountStateEmailPassword, - FUIASAccountStateLinkedAccountWithEmail, - FUIASAccountStateLinkedAccountWithoutEmail, - FUIASAccountStateLinkedAccountWithEmailPassword -}; - -/** @var kUserAccountImage - @brief Name of icon to show default user account. - */ -static NSString *const kUserAccountImage = @"ic_account_circle.png"; - -@interface FUIAccountSettingsViewController () -@end - -@implementation FUIAccountSettingsViewController { - __weak UITableView *_tableView; - FUIStaticContentTableViewManager *_tableViewManager; - FUIASAccountState _accountState; -} - -- (void)viewDidLoad { - [super viewDidLoad]; - _tableViewManager = [[FUIStaticContentTableViewManager alloc] init]; - _tableViewManager.tableView = _tableView; - _tableView.dataSource = _tableViewManager; - _tableView.delegate = _tableViewManager; - [self updateUI]; -} - -#pragma mark - Helpers - -- (FUIASAccountState)accountState { - NSArray> *providers = self.auth.currentUser.providerData; - if (!providers || providers.count == 0) { - return FUIASAccountStateUnknown; - } - - BOOL hasPasswordProvider = NO; - BOOL hasEmailInLinkedProvider = NO; - - for (id userInfo in providers) { - if (userInfo.email.length > 0 && - ![userInfo.providerID isEqualToString:@"password"]) { - hasEmailInLinkedProvider = YES; - } - - if ([userInfo.providerID isEqualToString:@"password"]) { - hasPasswordProvider = YES; - } - } - - if (providers.count == 1 && hasPasswordProvider) { - return FUIASAccountStateEmailPassword; - } else if (!hasPasswordProvider && !hasEmailInLinkedProvider) { - return FUIASAccountStateLinkedAccountWithoutEmail; - } else if (!hasPasswordProvider && hasEmailInLinkedProvider) { - return FUIASAccountStateLinkedAccountWithEmail; - } else if (hasPasswordProvider && hasEmailInLinkedProvider) { - return FUIASAccountStateLinkedAccountWithEmailPassword; - } else if (hasPasswordProvider && !hasEmailInLinkedProvider) { - return FUIASAccountStateLinkedAccountWithEmailPassword; - } - - return FUIASAccountStateUnknown; -} - -- (void)populateTableHeader { - - if (!self.auth.currentUser) { - _tableViewManager.tableView.tableHeaderView = nil; - return; - } - - CGFloat profileHeight = 60; - UIImageView *headerImage = - [[UIImageView alloc] initWithImage:[UIImage imageNamed:kUserAccountImage]]; - headerImage.layer.cornerRadius = profileHeight / 2; - headerImage.clipsToBounds = YES; - UIView *wrapper = [[UIView alloc] init]; - [wrapper addSubview:headerImage]; - headerImage.translatesAutoresizingMaskIntoConstraints = NO; - [headerImage addConstraint: - [NSLayoutConstraint constraintWithItem:headerImage - attribute:NSLayoutAttributeWidth - relatedBy:NSLayoutRelationEqual - toItem:nil - attribute:NSLayoutAttributeNotAnAttribute - multiplier:1 - constant:profileHeight]]; - [headerImage addConstraint: - [NSLayoutConstraint constraintWithItem:headerImage - attribute:NSLayoutAttributeHeight - relatedBy:NSLayoutRelationEqual - toItem:nil - attribute:NSLayoutAttributeNotAnAttribute - multiplier:1 - constant:profileHeight]]; - [wrapper addConstraint: - [NSLayoutConstraint constraintWithItem:headerImage - attribute:NSLayoutAttributeCenterX - relatedBy:NSLayoutRelationEqual - toItem:wrapper - attribute:NSLayoutAttributeCenterX - multiplier:1 - constant:0]]; - [wrapper addConstraint: - [NSLayoutConstraint constraintWithItem:headerImage - attribute:NSLayoutAttributeCenterY - relatedBy:NSLayoutRelationEqual - toItem:wrapper - attribute:NSLayoutAttributeCenterY - multiplier:1 - constant:0]]; - - _tableViewManager.tableView.tableHeaderView = wrapper; - CGRect frame = _tableViewManager.tableView.tableHeaderView.frame; - frame.size.height = 90; - _tableViewManager.tableView.tableHeaderView.frame = frame; - - NSURL *photoURL = self.auth.currentUser.photoURL; - if (photoURL) { - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - NSData *imageData = [NSData dataWithContentsOfURL:photoURL]; - UIImage *image = [UIImage imageWithData:imageData]; - dispatch_async(dispatch_get_main_queue(), ^{ - headerImage.image = image; - }); - }); - - } -} - -- (void)updateTable { - switch (_accountState) { - case FUIASAccountStateEmailPassword: - [self updateTableStateEmailPassword]; - break; - case FUIASAccountStateLinkedAccountWithEmail: - [self updateTableStateLinkedAccountWithEmail]; - break; - case FUIASAccountStateLinkedAccountWithoutEmail: - [self updateTableStateLinkedAccountWithoutEmail]; - break; - case FUIASAccountStateLinkedAccountWithEmailPassword: - [self updateTableStateLinkedAccountWithEmailPassword]; - break; - - default: - _tableViewManager.contents = nil; - break; - } -} - -- (void)updateTableStateEmailPassword { - _tableViewManager.contents = - [FUIStaticContentTableViewContent contentWithSections:@[ - [FUIStaticContentTableViewSection sectionWithTitle: - FUILocalizedString(kStr_ASSectionTitleProfile) - cells:@[ - [FUIStaticContentTableViewCell cellWithTitle:FUILocalizedString(kStr_ASCellName) - value:self.auth.currentUser.displayName - action:^{ - [FUIAccountSettingsOperationUpdateName executeOperationWithDelegate:self showDialog:NO]; - }], - [FUIStaticContentTableViewCell cellWithTitle:FUILocalizedString(kStr_ASCellEmail) - value:self.auth.currentUser.email - action:^{ - [FUIAccountSettingsOperationUpdateEmail executeOperationWithDelegate:self]; - }] - ]], - [FUIStaticContentTableViewSection sectionWithTitle: - FUILocalizedString(kStr_ASSectionTitleSecurity) - cells:@[ - [FUIStaticContentTableViewCell cellWithTitle:FUILocalizedString(kStr_ASCellChangePassword) - action:^{ - [FUIAccountSettingsOperationUpdatePassword executeOperationWithDelegate:self - showDialog:YES - newPassword:NO]; - }] - ]], - [self createActionsSection] - ]]; -} - -- (void)updateTableStateLinkedAccountWithoutEmail { - NSMutableArray *linkedAccounts = - [[NSMutableArray alloc] initWithCapacity:self.auth.currentUser.providerData.count]; - for (id userInfo in self.auth.currentUser.providerData) { - if ([userInfo.providerID isEqualToString:@"password"]) { - continue; - } - FUIStaticContentTableViewCell *cell = - [FUIStaticContentTableViewCell cellWithTitle: - [FUIAuthBaseViewController providerLocalizedName:userInfo.providerID] - value:userInfo.displayName]; - [linkedAccounts addObject:cell]; - } - - _tableViewManager.contents = - [FUIStaticContentTableViewContent contentWithSections:@[ - [FUIStaticContentTableViewSection sectionWithTitle: - FUILocalizedString(kStr_ASSectionTitleProfile) - cells:@[ - [FUIStaticContentTableViewCell cellWithTitle:FUILocalizedString(kStr_ASCellName) - value:self.auth.currentUser.displayName - action:^{ - [FUIAccountSettingsOperationUpdateName executeOperationWithDelegate:self showDialog:NO]; - }], - [FUIStaticContentTableViewCell cellWithTitle:FUILocalizedString(kStr_ASCellEmail) - value:self.auth.currentUser.email - action:^{ - [FUIAccountSettingsOperationUpdateEmail executeOperationWithDelegate:self]; - }] - ]], - [FUIStaticContentTableViewSection sectionWithTitle: - FUILocalizedString(kStr_ASSectionTitleLinkedAccounts) - cells:linkedAccounts], - [self createActionsSection] - ]]; -} - -- (void)updateTableStateLinkedAccountWithEmail { - NSMutableArray *linkedAccounts = - [[NSMutableArray alloc] initWithCapacity:self.auth.currentUser.providerData.count]; - for (id userInfo in self.auth.currentUser.providerData) { - if ([userInfo.providerID isEqualToString:@"password"]) { - continue; - } - FUIStaticContentTableViewCell *cell = - [FUIStaticContentTableViewCell cellWithTitle: - [FUIAuthBaseViewController providerLocalizedName:userInfo.providerID] - value:userInfo.displayName]; - [linkedAccounts addObject:cell]; - } - - _tableViewManager.contents = - [FUIStaticContentTableViewContent contentWithSections:@[ - [FUIStaticContentTableViewSection sectionWithTitle: - FUILocalizedString(kStr_ASSectionTitleProfile) - cells:@[ - [FUIStaticContentTableViewCell cellWithTitle:FUILocalizedString(kStr_ASCellName) - value:self.auth.currentUser.displayName - action:^{ - [FUIAccountSettingsOperationUpdateName executeOperationWithDelegate:self showDialog:NO]; - }], - [FUIStaticContentTableViewCell cellWithTitle:FUILocalizedString(kStr_ASCellEmail) - value:self.auth.currentUser.email - action:^{ - [FUIAccountSettingsOperationUpdateEmail executeOperationWithDelegate:self]; - }] - ]], - [FUIStaticContentTableViewSection sectionWithTitle: - FUILocalizedString(kStr_ASSectionTitleSecurity) - cells:@[ - [FUIStaticContentTableViewCell cellWithTitle:FUILocalizedString(kStr_ASCellAddPassword) - action:^{ - [FUIAccountSettingsOperationUpdatePassword executeOperationWithDelegate:self - showDialog:YES - newPassword:YES]; - }] - ]], - [FUIStaticContentTableViewSection sectionWithTitle: - FUILocalizedString(kStr_ASSectionTitleLinkedAccounts) - cells:linkedAccounts], - [self createActionsSection] - ]]; -} - -- (void)updateTableStateLinkedAccountWithEmailPassword { - NSMutableArray *linkedAccounts = - [[NSMutableArray alloc] initWithCapacity:self.auth.currentUser.providerData.count]; - for (id userInfo in self.auth.currentUser.providerData) { - if ([userInfo.providerID isEqualToString:@"password"]) { - continue; - } - FUIStaticContentTableViewCell *cell = - [FUIStaticContentTableViewCell cellWithTitle: - [FUIAuthBaseViewController providerLocalizedName:userInfo.providerID] - value:userInfo.displayName - action:^{ - [FUIAccountSettingsOperationUnlinkAccount executeOperationWithDelegate:self - showDialog:NO - provider:userInfo]; - }]; - [linkedAccounts addObject:cell]; - } - - _tableViewManager.contents = - [FUIStaticContentTableViewContent contentWithSections:@[ - [FUIStaticContentTableViewSection sectionWithTitle: - FUILocalizedString(kStr_ASSectionTitleProfile) - cells:@[ - [FUIStaticContentTableViewCell cellWithTitle:FUILocalizedString(kStr_ASCellName) - value:self.auth.currentUser.displayName - action:^{ - [FUIAccountSettingsOperationUpdateName executeOperationWithDelegate:self showDialog:NO]; - }], - [FUIStaticContentTableViewCell cellWithTitle:FUILocalizedString(kStr_ASCellEmail) - value:self.auth.currentUser.email - action:^{ - [FUIAccountSettingsOperationUpdateEmail executeOperationWithDelegate:self]; - }] - ]], - [FUIStaticContentTableViewSection sectionWithTitle: - FUILocalizedString(kStr_ASSectionTitleSecurity) - cells:@[ - [FUIStaticContentTableViewCell cellWithTitle:FUILocalizedString(kStr_ASCellChangePassword) - action:^{ - [FUIAccountSettingsOperationUpdatePassword executeOperationWithDelegate:self - showDialog:YES - newPassword:NO]; - }] - ]], - [FUIStaticContentTableViewSection sectionWithTitle: - FUILocalizedString(kStr_ASSectionTitleLinkedAccounts) - cells:linkedAccounts], - [self createActionsSection] - ]]; -} - -- (FUIStaticContentTableViewSection *)createActionsSection { - FUIStaticContentTableViewCell *signOutCell = - [FUIStaticContentTableViewCell cellWithTitle:FUILocalizedString(kStr_ASCellSignOut) - type:FUIStaticContentTableViewCellTypeButton - action:^{ - [FUIAccountSettingsOperationSignOut executeOperationWithDelegate:self]; - } -]; - NSMutableArray *cells = [NSMutableArray arrayWithObject:signOutCell]; - if (!_deleteAccountActionDisabled) { - FUIStaticContentTableViewCell *deleteCell = - [FUIStaticContentTableViewCell cellWithTitle:FUILocalizedString(kStr_ASCellDeleteAccount) - type:FUIStaticContentTableViewCellTypeButton - action:^{ - [FUIAccountSettingsOperationDeleteAccount executeOperationWithDelegate:self - showDialog:YES]; - } -]; - [cells addObject:deleteCell]; - } - return [FUIStaticContentTableViewSection sectionWithTitle:nil cells:cells]; -} - -- (void)updateUI { - _accountState = [self accountState]; - [self populateTableHeader]; - [self updateTable]; -} - -- (void)popToRoot { - [self.navigationController popToViewController:self animated:YES]; -} - -#pragma mark - FUIAccountSettingsOperationUIDelegate - -- (void)presentViewController:(UIViewController *)controller { - [self.navigationController presentViewController:controller animated:YES completion:nil]; -} - -- (void)pushViewController:(UIViewController *)controller { - [super pushViewController:controller]; -} - -- (void)presentBaseController { - [self popToRoot]; - [self updateUI]; -} - -- (void)incrementActivity { - UIViewController *controller = self.navigationController.topViewController; - if (controller == self) { - [super incrementActivity]; - } else if ([controller isKindOfClass:[FUIAuthBaseViewController class]]) { - [(FUIAuthBaseViewController *)controller incrementActivity]; - } -} - -- (void)decrementActivity { - UIViewController *controller = self.navigationController.topViewController; - if (controller == self) { - [super decrementActivity]; - } else if ([controller isKindOfClass:[FUIAuthBaseViewController class]]) { - [(FUIAuthBaseViewController *)controller decrementActivity]; - } -} - -- (UIViewController *)presentingController { - return self; -} -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebaseAuthUI/Sources/FUIAuth.m b/FirebaseAuthUI/Sources/FUIAuth.m deleted file mode 100644 index abf91240325..00000000000 --- a/FirebaseAuthUI/Sources/FUIAuth.m +++ /dev/null @@ -1,423 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuth_Internal.h" - -#import - -#import -#import -#import "FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthBaseViewController_Internal.h" -#import "FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthErrors.h" -#import "FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthErrorUtils.h" -#import "FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthPickerViewController.h" -#import "FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthStrings.h" - -@import FirebaseAuth; - -/** @var kAppNameCodingKey - @brief The key used to encode the app Name for NSCoding. - */ -static NSString *const kAppNameCodingKey = @"appName"; - -/** @var kAuthAssociationKey - @brief The address of this variable is used as the key for associating FUIAuth instances with - root FIRAuth objects. - */ -static const char kAuthAssociationKey; - -/** @var kErrorUserInfoEmailKey - @brief The key for the email address in the userInfo dictionary of a sign in error. - */ -static NSString *const kErrorUserInfoEmailKey = @"FIRAuthErrorUserInfoEmailKey"; - -/** @var kFirebaseAuthUIFrameworkMarker - @brief The marker in the HTTP header that indicates the presence of Firebase Auth UI. - */ -static NSString *const kFirebaseAuthUIFrameworkMarker = @"FirebaseUI-iOS"; - -/** @category FIRAuth(InternalInterface) - @brief Redeclares the internal interface not publicly exposed in FIRAuth. - */ -@interface FIRAuth (InternalInterface) - -/** @property additionalFrameworkMarker - @brief Additional framework marker that will be added as part of the header of every request. - */ -@property(nonatomic, copy, nullable) NSString *additionalFrameworkMarker; - -@end - -@interface FUIAuth () - -/** @fn initWithAuth: - @brief auth The @c FIRAuth to associate the @c FUIAuth instance with. - */ -- (instancetype)initWithAuth:(FIRAuth *)auth NS_DESIGNATED_INITIALIZER; - -@end - -@implementation FUIAuth { - id __weak _emailAuthProvider; -} - -+ (nullable FUIAuth *)defaultAuthUI { - FIRAuth *defaultAuth = [FIRAuth auth]; - if (!defaultAuth) { - return nil; - } - return [self authUIWithAuth:defaultAuth]; -} - -+ (nullable FUIAuth *)authUIWithAuth:(FIRAuth *)auth { - NSParameterAssert(auth != nil); - @synchronized (self) { - // Let the FIRAuth instance retain the FUIAuth instance. - FUIAuth *authUI = objc_getAssociatedObject(auth, &kAuthAssociationKey); - if (!authUI) { - authUI = [[FUIAuth alloc] initWithAuth:auth]; - objc_setAssociatedObject(auth, &kAuthAssociationKey, authUI, - OBJC_ASSOCIATION_RETAIN_NONATOMIC); - if ([auth respondsToSelector:@selector(setAdditionalFrameworkMarker:)]) { - auth.additionalFrameworkMarker = kFirebaseAuthUIFrameworkMarker; - } - // Update auth with the actual language used in the app. - // If localization is not provided by developer, the first localization available, - // ordered by the user's preferred order, is used. - auth.languageCode = [NSBundle mainBundle].preferredLocalizations.firstObject; - } - return authUI; - } -} - -- (instancetype)initWithAuth:(FIRAuth *)auth { - self = [super init]; - if (self) { - _auth = auth; - _interactiveDismissEnabled = YES; - } - return self; -} - -- (BOOL)handleOpenURL:(NSURL *)URL - sourceApplication:(NSString *)sourceApplication { - // Complete IDP-based sign-in flow. - for (id provider in _providers) { - if ([provider handleOpenURL:URL sourceApplication:sourceApplication]) { - return YES; - } - } - // The URL was not meant for us. - return NO; -} - -- (UINavigationController *)authViewController { - static UINavigationController *authViewController; - - UIViewController *controller; - if ([self.delegate respondsToSelector:@selector(authPickerViewControllerForAuthUI:)]) { - controller = [self.delegate authPickerViewControllerForAuthUI:self]; - } else { - controller = [[FUIAuthPickerViewController alloc] initWithAuthUI:self]; - } - authViewController = [[UINavigationController alloc] initWithRootViewController:controller]; - - return authViewController; -} - -- (BOOL)signOutWithError:(NSError *_Nullable *_Nullable)error { - // sign out from Firebase - BOOL success = [self.auth signOut:error]; - if (success) { - // sign out from all providers (wipes provider tokens too) - for (id provider in _providers) { - [provider signOut]; - } - } - - return success; -} - -- (void)signInWithProviderUI:(id)providerUI - presentingViewController:(FUIAuthBaseViewController *)presentingViewController - defaultValue:(nullable NSString *)defaultValue { - - // Sign out first to make sure sign in starts with a clean state. - [providerUI signOut]; - [providerUI signInWithDefaultValue:defaultValue - presentingViewController:presentingViewController - completion:^(FIRAuthCredential *_Nullable credential, - NSError *_Nullable error, - _Nullable FIRAuthResultCallback result, - NSDictionary *_Nullable userInfo) { - BOOL isAuthPickerShown = - [presentingViewController isKindOfClass:[FUIAuthPickerViewController class]]; - if (error) { - if (!isAuthPickerShown || error.code != FUIAuthErrorCodeUserCancelledSignIn) { - [self invokeResultCallbackWithAuthDataResult:nil URL:nil error:error]; - } - if (result) { - result(nil, error); - } - return; - } - - // Test if it's an anonymous login. - if (self.auth.currentUser.isAnonymous && !credential) { - if (result) { - result(self.auth.currentUser, nil); - } - // Hide Auth Picker Controller which was presented modally. - if (isAuthPickerShown && presentingViewController.presentingViewController) { - [presentingViewController dismissViewControllerAnimated:YES completion:nil]; - } - FIRAuthDataResult *authResult = userInfo[FUIAuthProviderSignInUserInfoKeyAuthDataResult]; - if (authResult != nil) { - [self invokeResultCallbackWithAuthDataResult:authResult URL:nil error:error]; - } - return; - } - - // Check for the presence of an anonymous user and whether automatic upgrade is enabled. - if (self.auth.currentUser.isAnonymous && self.shouldAutoUpgradeAnonymousUsers) { - [self autoUpgradeAccountWithProviderUI:providerUI - presentingViewController:presentingViewController - credential:credential - resultCallback:result]; - } else { - [self.auth signInWithCredential:credential - completion:^(FIRAuthDataResult *_Nullable authResult, - NSError *_Nullable error) { - if (self.emailAuthProvider && error - && error.code == FIRAuthErrorCodeAccountExistsWithDifferentCredential) { - NSString *email = error.userInfo[kErrorUserInfoEmailKey]; - [self.emailAuthProvider handleAccountLinkingForEmail:email - newCredential:credential - presentingViewController:presentingViewController - signInResult:result]; - - return; - } - if (error) { - if (result) { - result(nil, error); - } - [self invokeResultCallbackWithAuthDataResult:nil URL:nil error:error]; - return; - } - [self completeSignInWithResult:authResult - error:nil - presentingViewController:presentingViewController - callback:result]; - }]; - } - }]; -} - -- (void)autoUpgradeAccountWithProviderUI:(id)providerUI - presentingViewController:(FUIAuthBaseViewController *)presentingViewController - credential:(nullable FIRAuthCredential *)credential - resultCallback:(nullable FIRAuthResultCallback)callback { - [self.auth.currentUser - linkWithCredential:credential - completion:^(FIRAuthDataResult *_Nullable authResult, - NSError * _Nullable error) { - if (error) { - // Check for "credential in use" conflict error and handle appropriately. - if (error.code == FIRAuthErrorCodeCredentialAlreadyInUse) { - // TODO: When Firebase 11 is minimum update string to - // FIRAuthErrors.userInfoUpdatedCredentialKey - FIRAuthCredential *newCredential = - error.userInfo[@"FIRAuthErrorUserInfoUpdatedCredentialKey"]; - NSDictionary *userInfo = @{ }; - if (newCredential) { - userInfo = @{ FUIAuthCredentialKey : newCredential }; - } - NSError *mergeError = [FUIAuthErrorUtils mergeConflictErrorWithUserInfo:userInfo - underlyingError:error]; - [self completeSignInWithResult:authResult - error:mergeError - presentingViewController:presentingViewController - callback:callback]; - } else if (error.code == FIRAuthErrorCodeEmailAlreadyInUse) { - if ([providerUI respondsToSelector:@selector(email)]) { - // Link federated providers - [self.emailAuthProvider signInWithEmailHint:[providerUI email] - presentingViewController:presentingViewController - originalError:error - completion: - ^(FIRAuthDataResult *_Nullable authResult, - NSError *_Nullable emailError, - FIRAuthCredential *_Nullable existingCredential) { - if (emailError) { - [self completeSignInWithResult:nil - error:emailError - presentingViewController:presentingViewController - callback:callback]; - return; - } - - if (![authResult.user.email isEqualToString:[providerUI email]] - && credential != nil) { - NSDictionary *userInfo = @{ - FUIAuthCredentialKey : credential, - }; - NSError *mergeError = [FUIAuthErrorUtils mergeConflictErrorWithUserInfo:userInfo - underlyingError:error]; - [self completeSignInWithResult:authResult - error:mergeError - presentingViewController:presentingViewController - callback:callback]; - return; - } - - [authResult.user linkWithCredential:credential - completion:^(FIRAuthDataResult *authResult, - NSError *linkError) { - if (linkError) { - [self completeSignInWithResult:nil - error:linkError - presentingViewController:presentingViewController - callback:callback]; - return; - } - FIRAuthCredential *newCredential = credential; - NSDictionary *userInfo = @{ - FUIAuthCredentialKey : newCredential, - }; - NSError *mergeError = [FUIAuthErrorUtils mergeConflictErrorWithUserInfo:userInfo - underlyingError:error]; - [self completeSignInWithResult:authResult - error:mergeError - presentingViewController:presentingViewController - callback:callback]; - }]; - }]; - } - } else { - [self completeSignInWithResult:nil - error:error - presentingViewController:presentingViewController - callback:callback]; - } - } else { - [self completeSignInWithResult:authResult - error:nil - presentingViewController:presentingViewController - callback:callback]; - } - }]; -} - -- (void)completeSignInWithResult:(nullable FIRAuthDataResult *)authResult - error:(nullable NSError *)error - presentingViewController:(FUIAuthBaseViewController *)presentingViewController - callback:(nullable FIRAuthResultCallback)callback { - BOOL isAuthPickerShown = - [presentingViewController isKindOfClass:[FUIAuthPickerViewController class]]; - if (callback) { - callback(authResult.user, error); - } - // Hide Auth Picker Controller which was presented modally. - if (isAuthPickerShown && presentingViewController.presentingViewController) { - [presentingViewController dismissViewControllerAnimated:YES completion:^{ - [self invokeResultCallbackWithAuthDataResult:authResult URL:nil error:error]; - }]; - } else { - [self invokeResultCallbackWithAuthDataResult:authResult URL:nil error:error]; - } -} - -- (void)useEmulatorWithHost:(NSString *)host port:(NSInteger)port { - [self.auth useEmulatorWithHost:host port:port]; - self.emulatorEnabled = YES; -} - -#pragma mark - Internal Methods - -- (void)invokeResultCallbackWithAuthDataResult:(nullable FIRAuthDataResult *)authDataResult - URL:(nullable NSURL *)url - error:(nullable NSError *)error { - dispatch_async(dispatch_get_main_queue(), ^{ - if ([self.delegate respondsToSelector:@selector(authUI:didSignInWith:URL:error:)]) { - [self.delegate authUI:self didSignInWith:authDataResult URL:url error:error]; - } - if ([self.delegate respondsToSelector:@selector(authUI:didSignInWith:error:)]) { - [self.delegate authUI:self didSignInWith:authDataResult error:error]; - } -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - if ([self.delegate respondsToSelector:@selector(authUI:didSignInWithUser:error:)]) { - [self.delegate authUI:self didSignInWithUser:authDataResult.user error:error]; - } -#pragma clang diagnostic pop - }); -} - -- (void)invokeOperationCallback:(FUIAccountSettingsOperationType)operation - error:(NSError *_Nullable)error { - dispatch_async(dispatch_get_main_queue(), ^{ - if ([self.delegate respondsToSelector:@selector(authUI:didFinishOperation:error:)]) { - [self.delegate authUI:self didFinishOperation:operation error:error]; - } - }); -} - -- (nullable id)providerWithID:(NSString *)providerID { - NSArray> *providers = self.providers; - for (id provider in providers) { - if ([provider.providerID isEqual:providerID]) { - return provider; - } - } - return nil; -} - -- (void)setEmailAuthProvider:(id)emailAuthProvider { - _emailAuthProvider = emailAuthProvider; -} - -- (id)emailAuthProvider { - return _emailAuthProvider; -} - -#pragma mark - NSSecureCoding - -+ (BOOL)supportsSecureCoding { - return YES; -} - -- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder { - NSString *appName = [aDecoder decodeObjectOfClass:[NSString class] forKey:kAppNameCodingKey]; - if (!appName) { - return nil; - } - FIRApp *app = [FIRApp appNamed:appName]; - if (!app) { - return nil; - } - FIRAuth *auth = [FIRAuth authWithApp:app]; - if (!auth) { - return nil; - } - return [self initWithAuth:auth]; -} - -- (void)encodeWithCoder:(NSCoder *)aCoder { - [aCoder encodeObject:_auth.app.name forKey:kAppNameCodingKey]; -} - -@end diff --git a/FirebaseAuthUI/Sources/FUIAuthBaseViewController.m b/FirebaseAuthUI/Sources/FUIAuthBaseViewController.m deleted file mode 100644 index 8899a87a29c..00000000000 --- a/FirebaseAuthUI/Sources/FUIAuthBaseViewController.m +++ /dev/null @@ -1,451 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthBaseViewController_Internal.h" - -@import FirebaseAuth; -#import - -#import "FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthErrorUtils.h" -#import "FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthStrings.h" -#import "FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthUtils.h" -#import "FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuth_Internal.h" - - -/** @var kActivityIndiactorPadding - @brief The padding between the activity indiactor and its overlay. - */ -static const CGFloat kActivityIndiactorPadding = 20.0f; - -/** @var kActivityIndiactorOverlayCornerRadius - @brief The corner radius of the overlay of the activity indicator. - */ -static const CGFloat kActivityIndiactorOverlayCornerRadius = 20.0f; - -/** @var kActivityIndiactorOverlayOpacity - @brief The opacity of the overlay of the activity indicator. - */ -static const CGFloat kActivityIndiactorOverlayOpacity = 0.8f; - -/** @var kActivityIndiactorAnimationDelay - @brief The time delay before the activity indicator is actually animated. - */ -static const NSTimeInterval kActivityIndiactorAnimationDelay = 0.5f; - -/** @var kUITableViewCellHeight - @brief Height of all table view cells used in subclasses of the controller. - */ -static const CGFloat kUITableViewCellHeight = 44.f; - -/** @var kEmailRegex - @brief Regular expression for matching email addresses. - */ -static NSString *const kEmailRegex = @".+@([a-zA-Z0-9\\-]+\\.)+[a-zA-Z0-9]{2,63}"; - -/** @var kAuthUICodingKey - @brief The key used to encode @c FUIAuth instance for NSCoding. - */ -static NSString *const kAuthUICodingKey = @"authUI"; - -@implementation FUIAuthBaseViewController { - /** @var _activityIndicator - @brief A spinner that is displayed when there's an ongoing activity. - */ - UIActivityIndicatorView *_activityIndicator; - - /** @var _activityCount - @brief Count of current ongoing activities. - */ - NSInteger _activityCount; -} - -- (instancetype)initWithNibName:(NSString *)nibNameOrNil - bundle:(NSBundle *)nibBundleOrNil - authUI:(FUIAuth *)authUI { - self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; - if (self) { - _auth = authUI.auth; - _authUI = authUI; - - _activityIndicator = [[self class] addActivityIndicator:self.view]; - } - return self; -} - -- (instancetype)initWithAuthUI:(FUIAuth *)authUI { - return [self initWithNibName:NSStringFromClass([self class]) - bundle:[FUIAuthUtils authUIBundle] - authUI:authUI]; -} - -- (void)viewDidLayoutSubviews { - [super viewDidLayoutSubviews]; - - CGPoint activityIndicatorCenter = self.view.center; - // Compensate for bounds adjustment if any. - activityIndicatorCenter.y += self.view.bounds.origin.y; - _activityIndicator.center = activityIndicatorCenter; -} - -#pragma mark - NSCoding - -- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder { - FUIAuth *authUI = [aDecoder decodeObjectOfClass:[FUIAuth class] forKey:kAuthUICodingKey]; - if (!authUI) { - return nil; - } - return [self initWithAuthUI:authUI]; -} - -- (void)encodeWithCoder:(NSCoder *)aCoder { - [aCoder encodeObject:_authUI forKey:kAuthUICodingKey]; -} - -#pragma mark - Utilities - -+ (BOOL)isValidEmail:(NSString *)email { - static dispatch_once_t onceToken; - static NSPredicate *emailPredicate; - dispatch_once(&onceToken, ^{ - emailPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", kEmailRegex]; - }); - return [emailPredicate evaluateWithObject:email]; -} - -+ (UIActivityIndicatorView *)addActivityIndicator:(UIView *)view { - if (!view) { - return nil; - } - UIActivityIndicatorView *activityIndicator = - [[UIActivityIndicatorView alloc] - initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleLarge]; - activityIndicator.color = [UIColor colorWithWhite:1 alpha:1]; - UIView *tintView = [[UIView alloc] initWithFrame:CGRectInset(activityIndicator.frame, - -kActivityIndiactorPadding, - -kActivityIndiactorPadding)]; - tintView.backgroundColor = - [UIColor colorWithWhite:0 alpha:kActivityIndiactorOverlayOpacity]; - tintView.layer.cornerRadius = kActivityIndiactorOverlayCornerRadius; - [activityIndicator addSubview:tintView]; - - // Align tintView (transparent background). - tintView.translatesAutoresizingMaskIntoConstraints = NO; - [activityIndicator addConstraint: - [NSLayoutConstraint constraintWithItem:tintView - attribute:NSLayoutAttributeWidth - relatedBy:NSLayoutRelationEqual - toItem:nil - attribute:NSLayoutAttributeNotAnAttribute - multiplier:1 - constant:CGRectGetWidth(tintView.frame)]]; - [activityIndicator addConstraint: - [NSLayoutConstraint constraintWithItem:tintView - attribute:NSLayoutAttributeCenterX - relatedBy:NSLayoutRelationEqual - toItem:activityIndicator - attribute:NSLayoutAttributeCenterX - multiplier:1 - constant:0]]; - - [activityIndicator addConstraint: - [NSLayoutConstraint constraintWithItem:tintView - attribute:NSLayoutAttributeHeight - relatedBy:NSLayoutRelationEqual - toItem:nil - attribute:NSLayoutAttributeNotAnAttribute - multiplier:1 - constant:CGRectGetHeight(tintView.frame)]]; - [activityIndicator addConstraint: - [NSLayoutConstraint constraintWithItem:tintView - attribute:NSLayoutAttributeCenterY - relatedBy:NSLayoutRelationEqual - toItem:activityIndicator - attribute:NSLayoutAttributeCenterY - multiplier:1 - constant:0]]; - - [activityIndicator sendSubviewToBack:tintView]; - - [view addSubview:activityIndicator]; - // Align activity indicator. - activityIndicator.translatesAutoresizingMaskIntoConstraints = NO; - [view addConstraint: - [NSLayoutConstraint constraintWithItem:activityIndicator - attribute:NSLayoutAttributeWidth - relatedBy:NSLayoutRelationEqual - toItem:view - attribute:NSLayoutAttributeWidth - multiplier:1 - constant:0]]; - [view addConstraint: - [NSLayoutConstraint constraintWithItem:activityIndicator - attribute:NSLayoutAttributeCenterX - relatedBy:NSLayoutRelationEqual - toItem:view - attribute:NSLayoutAttributeCenterX - multiplier:1 - constant:0]]; - - [view addConstraint: - [NSLayoutConstraint constraintWithItem:activityIndicator - attribute:NSLayoutAttributeHeight - relatedBy:NSLayoutRelationEqual - toItem:view - attribute:NSLayoutAttributeHeight - multiplier:1 - constant:0]]; - [view addConstraint: - [NSLayoutConstraint constraintWithItem:activityIndicator - attribute:NSLayoutAttributeCenterY - relatedBy:NSLayoutRelationEqual - toItem:view - attribute:NSLayoutAttributeCenterY - multiplier:1 - constant:0]]; - return activityIndicator; -} - -- (void)showAlertWithMessage:(NSString *)message { - [[self class] showAlertWithMessage:message presentingViewController:self]; -} - -+ (void)showAlertWithMessage:(NSString *)message { - [[self class] showAlertWithMessage:message presentingViewController:nil]; -} - -+ (void)showAlertWithMessage:(NSString *)message - presentingViewController:(nullable UIViewController *)presentingViewController { - [[self class] showAlertWithTitle:message - message:nil - presentingViewController:presentingViewController]; -} - -+ (void)showAlertWithTitle:(nullable NSString *)title - message:(nullable NSString *)message - presentingViewController:(nullable UIViewController *)presentingViewController { - [[self class] showAlertWithTitle:title - message:message - actionTitle:nil - actionHandler:nil - dismissTitle:FUILocalizedString(kStr_OK) - dismissHandler:nil - presentingViewController:presentingViewController]; -} - -+ (void)showAlertWithTitle:(nullable NSString *)title - message:(nullable NSString *)message - actionTitle:(nullable NSString *)actionTitle - actionHandler:(nullable FUIAuthAlertActionHandler)actionHandler - dismissTitle:(nullable NSString *)dismissTitle - dismissHandler:(nullable FUIAuthAlertActionHandler)dismissHandler - presentingViewController:(nullable UIViewController *)presentingViewController { - UIAlertController *alertController = - [UIAlertController alertControllerWithTitle:title - message:message - preferredStyle:UIAlertControllerStyleAlert]; - - if (actionTitle) { - UIAlertAction *action = - [UIAlertAction actionWithTitle:actionTitle - style:UIAlertActionStyleDefault - handler:^(UIAlertAction *_Nonnull action) { - if (actionHandler) { - actionHandler(); - } - }]; - [alertController addAction:action]; - } - - if (dismissTitle) { - UIAlertAction *dismissAction = - [UIAlertAction actionWithTitle:dismissTitle - style:UIAlertActionStyleCancel - handler:^(UIAlertAction * _Nonnull action) { - if (dismissHandler) { - dismissHandler(); - } - }]; - [alertController addAction:dismissAction]; - } - - if (presentingViewController) { - [presentingViewController presentViewController:alertController animated:YES completion:nil]; - } else { - UIViewController *viewController = [[UIViewController alloc] init]; - viewController.view.backgroundColor = UIColor.clearColor; - UIWindow *window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds]; - window.rootViewController = viewController; - window.windowLevel = UIWindowLevelAlert + 1; - [window makeKeyAndVisible]; - [viewController presentViewController:alertController animated:YES completion:nil]; - - if (@available(iOS 13.0, *)) { - /* - Earlier iOS versions established a strong reference to the window when makeKeyAndVisible was called. - Now we add one from the alert controller, to prevent objects from getting garbage collected right away. - */ - static char key; - objc_setAssociatedObject(alertController, &key, window, OBJC_ASSOCIATION_RETAIN_NONATOMIC); - } - } -} - -+ (void)showSignInAlertWithEmail:(NSString *)email - provider:(id)provider - presentingViewController:(UIViewController *)presentingViewController - signinHandler:(FUIAuthAlertActionHandler)signinHandler - cancelHandler:(FUIAuthAlertActionHandler)cancelHandler { - [self showSignInAlertWithEmail:email - providerShortName:provider.shortName - providerSignInLabel:provider.signInLabel - presentingViewController:presentingViewController - signinHandler:signinHandler - cancelHandler:cancelHandler]; -} - -+ (void)showSignInAlertWithEmail:(NSString *)email - providerShortName:(NSString *)providerShortName - providerSignInLabel:(NSString *)providerSignInLabel - presentingViewController:(UIViewController *)presentingViewController - signinHandler:(FUIAuthAlertActionHandler)signinHandler - cancelHandler:(FUIAuthAlertActionHandler)cancelHandler { - NSString *message = - [NSString stringWithFormat:FUILocalizedString(kStr_ProviderUsedPreviouslyMessage), - email, providerShortName]; - UIAlertController *alertController = - [UIAlertController alertControllerWithTitle:FUILocalizedString(kStr_ExistingAccountTitle) - message:message - preferredStyle:UIAlertControllerStyleAlert]; - UIAlertAction *signInAction = - [UIAlertAction actionWithTitle:providerSignInLabel - style:UIAlertActionStyleDefault - handler:^(UIAlertAction *_Nonnull action) { - if (signinHandler) { - signinHandler(); - } - }]; - [alertController addAction:signInAction]; - UIAlertAction *cancelAction = - [UIAlertAction actionWithTitle:FUILocalizedString(kStr_Cancel) - style:UIAlertActionStyleCancel - handler:^(UIAlertAction * _Nonnull action) { - if (cancelHandler) { - cancelHandler(); - } - }]; - [alertController addAction:cancelAction]; - [presentingViewController presentViewController:alertController animated:YES completion:nil]; -} - -- (void)pushViewController:(UIViewController *)viewController { - [[self class] pushViewController:viewController - navigationController:self.navigationController]; -} - -- (void)dismissNavigationControllerAnimated:(BOOL)animated completion:(void (^)(void))completion { - if (self.navigationController.presentingViewController == nil){ - if (completion){ - completion(); - } - } else { - [self.navigationController dismissViewControllerAnimated:animated completion:completion]; - } -} - -+ (void)pushViewController:(UIViewController *)viewController - navigationController:(UINavigationController *)navigationController { - // Override the back button title with "Back". - viewController.navigationItem.backBarButtonItem = - [[UIBarButtonItem alloc] initWithTitle:FUILocalizedString(kStr_Back) - style:UIBarButtonItemStylePlain - target:nil - action:nil]; - [navigationController pushViewController:viewController animated:YES]; -} - - -+ (UIBarButtonItem *)barItemWithTitle:(NSString *)title - target:(nullable id)target - action:(SEL)action { - UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc] initWithTitle:title - style:UIBarButtonItemStylePlain - target:target - action:action]; - return buttonItem; -} - -- (void)onBack { - if (self.navigationController.viewControllers.count > 1) { - [self.navigationController popViewControllerAnimated:YES]; - } else { - [self cancelAuthorization]; - } -} - -- (void)incrementActivity { - _activityCount++; - - // Delay the display of acitivty indiactor for a short period of time. - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, - (int64_t)(kActivityIndiactorAnimationDelay * NSEC_PER_SEC)), - dispatch_get_main_queue(), ^{ - [self->_activityIndicator.superview bringSubviewToFront:self->_activityIndicator]; - if (self->_activityCount > 0) { - [self->_activityIndicator startAnimating]; - } - }); -} - -- (void)decrementActivity { - _activityCount--; - - if (_activityCount < 0) { - NSLog(@"Unbalanced calls to incrementActivity and decrementActivity."); - _activityCount = 0; - } - - if (_activityCount == 0) { - [_activityIndicator.superview sendSubviewToBack:_activityIndicator]; - [_activityIndicator stopAnimating]; - } -} - -- (void)cancelAuthorization { - [self dismissNavigationControllerAnimated:YES completion:^{ - NSError *error = [FUIAuthErrorUtils userCancelledSignInError]; - [self.authUI invokeResultCallbackWithAuthDataResult:nil URL:nil error:error]; - }]; -} - -+ (NSString *)providerLocalizedName:(NSString *)providerId { - if ([providerId isEqualToString:@"password"]) { - return FUILocalizedString(kStr_ProviderTitlePassword); - } else if ([providerId isEqualToString:@"google.com"]) { - return FUILocalizedString(kStr_ProviderTitleGoogle); - } else if ([providerId isEqualToString:@"facebook.com"]) { - return FUILocalizedString(kStr_ProviderTitleFacebook); - } else if ([providerId isEqualToString:@"twitter.com"]) { - return FUILocalizedString(kStr_ProviderTitleTwitter); - } - return @""; -} - -- (void)enableDynamicCellHeightForTableView:(UITableView *)tableView { - tableView.rowHeight = UITableViewAutomaticDimension; - tableView.estimatedRowHeight = kUITableViewCellHeight; -} - -@end diff --git a/FirebaseAuthUI/Sources/FUIAuthErrorUtils.m b/FirebaseAuthUI/Sources/FUIAuthErrorUtils.m deleted file mode 100644 index 0f82bf633df..00000000000 --- a/FirebaseAuthUI/Sources/FUIAuthErrorUtils.m +++ /dev/null @@ -1,49 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthErrorUtils.h" - -@implementation FUIAuthErrorUtils - -+ (NSError *)errorWithCode:(FUIAuthErrorCode)code userInfo:(NSDictionary *)userInfo { - return [NSError errorWithDomain:FUIAuthErrorDomain code:code userInfo:userInfo]; -} - -+ (NSError *)userCancelledSignInError { - return [self errorWithCode:FUIAuthErrorCodeUserCancelledSignIn userInfo:nil]; -} - -+ (NSError *)mergeConflictErrorWithUserInfo:(NSDictionary *)userInfo - underlyingError:(NSError *)underlyingError { - NSMutableDictionary *errorInfo = [userInfo mutableCopy]; - if (underlyingError != nil) { - errorInfo[NSUnderlyingErrorKey] = underlyingError; - } - errorInfo[NSLocalizedDescriptionKey] = @"Unable to merge accounts. Check the userInfo dictionary" - @" for the auth credential of the logged-in account."; - return [self errorWithCode:FUIAuthErrorCodeMergeConflict userInfo:[errorInfo copy]]; -} - -+ (NSError *)providerErrorWithUnderlyingError:(NSError *)underlyingError - providerID:(NSString *)providerID { - return [self errorWithCode:FUIAuthErrorCodeProviderError - userInfo:@{ - NSUnderlyingErrorKey : underlyingError, - FUIAuthErrorUserInfoProviderIDKey : providerID - }]; -} - -@end diff --git a/FirebaseAuthUI/Sources/FUIAuthErrors.m b/FirebaseAuthUI/Sources/FUIAuthErrors.m deleted file mode 100644 index e03a0b81438..00000000000 --- a/FirebaseAuthUI/Sources/FUIAuthErrors.m +++ /dev/null @@ -1,23 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthErrors.h" - -NSString *const FUIAuthErrorDomain = @"FUIAuthErrorDomain"; - -NSString *const FUIAuthErrorUserInfoProviderIDKey = @"FUIAuthErrorUserInfoProviderIDKey"; - -NSString *const FUIAuthCredentialKey = @"FUIAuthCredentialKey"; diff --git a/FirebaseAuthUI/Sources/FUIAuthPickerViewController.m b/FirebaseAuthUI/Sources/FUIAuthPickerViewController.m deleted file mode 100644 index 51bee95e89b..00000000000 --- a/FirebaseAuthUI/Sources/FUIAuthPickerViewController.m +++ /dev/null @@ -1,201 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthPickerViewController.h" - -#import -@import FirebaseAuth; - -#import "FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthBaseViewController_Internal.h" -#import "FirebaseAuthUI/Sources/FUIAuthSignInButton.h" -#import "FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthStrings.h" -#import "FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthUtils.h" -#import "FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuth_Internal.h" -#import "FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIPrivacyAndTermsOfServiceView.h" - -/** @var kSignInButtonWidth - @brief The width of the sign in buttons. - */ -static const CGFloat kSignInButtonWidth = 220.0f; - -/** @var kSignInButtonHeight - @brief The height of the sign in buttons. - */ -static const CGFloat kSignInButtonHeight = 40.0f; - -/** @var kSignInButtonVerticalMargin - @brief The vertical margin between sign in buttons. - */ -static const CGFloat kSignInButtonVerticalMargin = 24.0f; - -/** @var kButtonContainerBottomMargin - @brief The magin between sign in buttons and the bottom of the content view. - */ -static const CGFloat kButtonContainerBottomMargin = 48.0f; - -/** @var kButtonContainerTopMargin - @brief The margin between sign in buttons and the top of the content view. - */ -static const CGFloat kButtonContainerTopMargin = 16.0f; - -/** @var kTOSViewBottomMargin - @brief The margin between privacy policy and TOS view and the bottom of the content view. - */ -static const CGFloat kTOSViewBottomMargin = 24.0f; - -/** @var kTOSViewHorizontalMargin - @brief The margin between privacy policy and TOS view and the left or right of the content view. - */ -static const CGFloat kTOSViewHorizontalMargin = 16.0f; - -@implementation FUIAuthPickerViewController { - UIView *_buttonContainerView; - - IBOutlet FUIPrivacyAndTermsOfServiceView *_privacyPolicyAndTOSView; - - IBOutlet UIView *_contentView; - - IBOutlet UIScrollView *_scrollView; -} - -- (instancetype)initWithAuthUI:(FUIAuth *)authUI { - return [self initWithNibName:@"FUIAuthPickerViewController" - bundle:[FUIAuthUtils authUIBundle] - authUI:authUI]; -} - -- (instancetype)initWithNibName:(NSString *)nibNameOrNil - bundle:(NSBundle *)nibBundleOrNil - authUI:(FUIAuth *)authUI { - - self = [super initWithNibName:nibNameOrNil - bundle:nibBundleOrNil - authUI:authUI]; - if (self) { - self.title = FUILocalizedString(kStr_AuthPickerTitle); - } - return self; -} - -- (void)viewDidLoad { - [super viewDidLoad]; - - // Makes sure that embedded scroll view properly handles translucent navigation bar - if (!self.navigationController.navigationBar.isTranslucent) { - self.extendedLayoutIncludesOpaqueBars = true; - } - - if (!self.authUI.shouldHideCancelButton) { - UIBarButtonItem *cancelBarButton = - [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel - target:self - action:@selector(cancelAuthorization)]; - self.navigationItem.leftBarButtonItem = cancelBarButton; - } - if (@available(iOS 13, *)) { - if (!self.authUI.interactiveDismissEnabled) { - self.modalInPresentation = YES; - } - } - - self.navigationItem.backBarButtonItem = - [[UIBarButtonItem alloc] initWithTitle:FUILocalizedString(kStr_Back) - style:UIBarButtonItemStylePlain - target:nil - action:nil]; - - NSInteger numberOfButtons = self.authUI.providers.count; - - CGFloat buttonContainerViewHeight = - kSignInButtonHeight * numberOfButtons + kSignInButtonVerticalMargin * (numberOfButtons); - CGRect buttonContainerViewFrame = CGRectMake(0, 0, kSignInButtonWidth, buttonContainerViewHeight); - _buttonContainerView = [[UIView alloc] initWithFrame:buttonContainerViewFrame]; - if (_scrollView) { - [_contentView addSubview:_buttonContainerView]; - } else { - // For backward compatibility. The old auth picker view does not have a scroll view and its - // customized class put the button container view directly into self.view. - [self.view addSubview:_buttonContainerView]; - } - - CGRect buttonFrame = CGRectMake(0, 0, kSignInButtonWidth, kSignInButtonHeight); - for (id providerUI in self.authUI.providers) { - UIButton *providerButton = - [[FUIAuthSignInButton alloc] initWithFrame:buttonFrame providerUI:providerUI]; - [providerButton addTarget:self - action:@selector(didTapSignInButton:) - forControlEvents:UIControlEventTouchUpInside]; - [_buttonContainerView addSubview:providerButton]; - - // Make the frame for the new button. - buttonFrame.origin.y += (kSignInButtonHeight + kSignInButtonVerticalMargin); - } - - _privacyPolicyAndTOSView.authUI = self.authUI; - [_privacyPolicyAndTOSView useFullMessage]; - [_contentView bringSubviewToFront:_privacyPolicyAndTOSView]; -} - -- (void)viewDidLayoutSubviews { - [super viewDidLayoutSubviews]; - - // For backward compatibility. The old auth picker view does not have a scroll view and its - // customized class put the button container view directly into self.view. The following is the - // old layout behavior. - if (!_scrollView) { - CGFloat distanceFromCenterToBottom = - CGRectGetHeight(_buttonContainerView.frame) / 2.0f + kButtonContainerBottomMargin + kTOSViewBottomMargin; - CGFloat centerY = CGRectGetHeight(self.view.bounds) - distanceFromCenterToBottom; - // Compensate for bounds adjustment if any. - centerY += self.view.bounds.origin.y; - _buttonContainerView.center = CGPointMake(self.view.center.x, centerY); - return; - } - - CGFloat buttonContainerHeight = CGRectGetHeight(_buttonContainerView.frame); - CGFloat buttonContainerWidth = CGRectGetWidth(_buttonContainerView.frame); - CGFloat contentViewHeight = kButtonContainerTopMargin + buttonContainerHeight - + kButtonContainerBottomMargin + kTOSViewBottomMargin; - CGFloat contentViewWidth = CGRectGetWidth(self.view.bounds); - _scrollView.frame = self.view.frame; - CGFloat scrollViewHeight = CGRectGetHeight(_scrollView.frame) - _scrollView.safeAreaInsets.top; - CGFloat contentViewY = scrollViewHeight - contentViewHeight; - if (contentViewY < 0) { - contentViewY = 0; - } - _contentView.frame = CGRectMake(0, contentViewY, contentViewWidth, contentViewHeight); - _scrollView.contentSize = CGSizeMake(contentViewWidth, contentViewY + contentViewHeight); - CGFloat buttonContainerLeftMargin = (contentViewWidth - buttonContainerWidth) / 2.0f; - _buttonContainerView.frame =CGRectMake(buttonContainerLeftMargin, - kButtonContainerTopMargin, - buttonContainerWidth, - buttonContainerHeight); - CGFloat privacyViewHeight = CGRectGetHeight(_privacyPolicyAndTOSView.frame); - _privacyPolicyAndTOSView.frame = CGRectMake(kTOSViewHorizontalMargin, contentViewHeight - - privacyViewHeight - kTOSViewBottomMargin, - contentViewWidth - kTOSViewHorizontalMargin*2, - privacyViewHeight); -} - -#pragma mark - Actions - -- (void)didTapSignInButton:(FUIAuthSignInButton *)button { - [self.authUI signInWithProviderUI:button.providerUI - presentingViewController:self - defaultValue:nil]; -} - -@end diff --git a/FirebaseAuthUI/Sources/FUIAuthSignInButton.h b/FirebaseAuthUI/Sources/FUIAuthSignInButton.h deleted file mode 100644 index c4063eb59f7..00000000000 --- a/FirebaseAuthUI/Sources/FUIAuthSignInButton.h +++ /dev/null @@ -1,68 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -#import "FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthProvider.h" - -NS_ASSUME_NONNULL_BEGIN - -/** @class FUIAuthSignInButton - @brief Button representing an identity provider on the auth picker screen that starts - authentication with the provider when touched. - */ -@interface FUIAuthSignInButton : UIButton - -/** @property provider - @brief The provider UI instance associated with this button. Can be nil. - */ -@property(nonatomic, strong, readonly, nullable) id providerUI; - -/** @fn initWithFrame: - @brief Please use initWithFrame:image:text:backgroundColor:textColor:. - */ -- (id)initWithFrame:(CGRect)frame NS_UNAVAILABLE; - -/** @fn initWithCoder: - @brief Please use initWithFrame:image:text:backgroundColor:textColor:. - */ -- (id)initWithCoder:(NSCoder *)aDecoder NS_UNAVAILABLE; - -/** @fn initWithFrame:image:text:backgroundColor:textColor: - @brief Designated initializer. - @param frame The initial frame for the button. - @param image Logo image for the button. - @param text Button text. - @param backgroundColor Background color of the button in the normal state. - @param textColor Color of the button text. - */ -- (id)initWithFrame:(CGRect)frame - image:(UIImage *)image - text:(NSString *)text - backgroundColor:(UIColor *)backgroundColor - textColor:(UIColor *)textColor - buttonAlignment:(FUIButtonAlignment)buttonAlignment NS_DESIGNATED_INITIALIZER; - -/** @fn initWithFrame:providerUI: - @brief Convenience initalizer. - @param frame The initial frame for the button. - @param providerUI The provider UI instance associated with this button. - */ -- (id)initWithFrame:(CGRect)frame providerUI:(id)providerUI; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebaseAuthUI/Sources/FUIAuthSignInButton.m b/FirebaseAuthUI/Sources/FUIAuthSignInButton.m deleted file mode 100644 index 263ad07f065..00000000000 --- a/FirebaseAuthUI/Sources/FUIAuthSignInButton.m +++ /dev/null @@ -1,116 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebaseAuthUI/Sources/FUIAuthSignInButton.h" - -#import "FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthProvider.h" -#import "FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthUtils.h" - -NS_ASSUME_NONNULL_BEGIN - -/** @var kCornerRadius - @brief Corner radius of the button. - */ -static const int kCornerRadius = 2.0f; - -/** @var kDropShadowAlpha - @brief Opacity of the drop shadow of the button. - */ -static const CGFloat kDropShadowAlpha = 0.24f; - -/** @var kDropShadowRadius - @brief Radius of the drop shadow of the button. - */ -static const CGFloat kDropShadowRadius = 2.0f; - -/** @var kDropShadowYOffset - @brief Vertical offset of the drop shadow of the button. - */ -static const CGFloat kDropShadowYOffset = 2.0f; - -/** @var kFontSize - @brief Button text font size. - */ -static const CGFloat kFontSize = 12.0f; - -@implementation FUIAuthSignInButton - -- (instancetype)initWithFrame:(CGRect)frame - image:(UIImage *)image - text:(NSString *)text - backgroundColor:(UIColor *)backgroundColor - textColor:(UIColor *)textColor - buttonAlignment:(FUIButtonAlignment)buttonAlignment { - self = [super initWithFrame:frame]; - if (!self) { - return nil; - } - - self.backgroundColor = backgroundColor; - [self setTitle:text forState:UIControlStateNormal]; - [self setTitleColor:textColor forState:UIControlStateNormal]; - self.titleLabel.font = [UIFont boldSystemFontOfSize:kFontSize]; - self.titleLabel.lineBreakMode = NSLineBreakByWordWrapping; - [self setImage:image forState:UIControlStateNormal]; - - CGFloat paddingTitle = 8.0f; - CGFloat contentWidth = self.imageView.frame.size.width + paddingTitle + self.titleLabel.frame.size.width; - CGFloat paddingImage = 8.0f; - if (buttonAlignment == FUIButtonAlignmentCenter) { - paddingImage = (frame.size.width - contentWidth) / 2 - 4.0f; - } - BOOL isLTRLayout = [[UIApplication sharedApplication] userInterfaceLayoutDirection] == - UIUserInterfaceLayoutDirectionLeftToRight; - if (isLTRLayout) { - [self setTitleEdgeInsets:UIEdgeInsetsMake(0, paddingTitle, 0, paddingImage + paddingTitle)]; - [self setContentEdgeInsets:UIEdgeInsetsMake(0, paddingImage, 0, -paddingImage - paddingTitle)]; - [self setContentHorizontalAlignment:UIControlContentHorizontalAlignmentLeft]; - } else { - [self setTitleEdgeInsets:UIEdgeInsetsMake(0, paddingImage + paddingTitle, 0, paddingTitle)]; - [self setContentEdgeInsets:UIEdgeInsetsMake(0, -paddingImage - paddingTitle, 0, paddingImage)]; - [self setContentHorizontalAlignment:UIControlContentHorizontalAlignmentRight]; - } - - - - self.layer.cornerRadius = kCornerRadius; - - // Add a drop shadow. - self.layer.masksToBounds = NO; - self.layer.shadowColor = [UIColor blackColor].CGColor; - self.layer.shadowOpacity = kDropShadowAlpha; - self.layer.shadowRadius = kDropShadowRadius; - self.layer.shadowOffset = CGSizeMake(0, kDropShadowYOffset); - - self.adjustsImageWhenHighlighted = NO; - - return self; -} - -- (instancetype)initWithFrame:(CGRect)frame providerUI:(id)providerUI { - _providerUI = providerUI; - return [self initWithFrame:frame - image:providerUI.icon - text:providerUI.signInLabel - backgroundColor:providerUI.buttonBackgroundColor - textColor:providerUI.buttonTextColor - buttonAlignment:providerUI.buttonAlignment]; -} - -@end - -NS_ASSUME_NONNULL_END - diff --git a/FirebaseAuthUI/Sources/FUIAuthStrings.m b/FirebaseAuthUI/Sources/FUIAuthStrings.m deleted file mode 100644 index 2ada2d22d82..00000000000 --- a/FirebaseAuthUI/Sources/FUIAuthStrings.m +++ /dev/null @@ -1,159 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -#import "FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthStrings.h" - -#import "FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuth.h" -#import "FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthUtils.h" - -NS_ASSUME_NONNULL_BEGIN - -// AuthUI string keys. -NSString *const kStr_ASCellAddPassword = @"AS_AddPassword"; -NSString *const kStr_ASCellChangePassword = @"AS_ChangePassword"; -NSString *const kStr_ASCellDeleteAccount = @"AS_DeleteAccount"; -NSString *const kStr_ASCellEmail = @"AS_Email"; -NSString *const kStr_ASCellName = @"AS_Name"; -NSString *const kStr_ASCellSignOut = @"AS_SignOut"; -NSString *const kStr_ASSectionTitleLinkedAccounts = @"AS_SectionLinkedAccounts"; -NSString *const kStr_ASSectionTitleProfile = @"AS_SectionProfile"; -NSString *const kStr_ASSectionTitleSecurity = @"AS_SectionSecurity"; -NSString *const kStr_AccountDisabledError = @"AccountDisabledError"; -NSString *const kStr_AuthPickerTitle = @"AuthPickerTitle"; -NSString *const kStr_Back = @"Back"; -NSString *const kStr_Cancel = @"Cancel"; -NSString *const kStr_CannotAuthenticateError = @"CannotAuthenticateError"; -NSString *const kStr_ChoosePassword = @"ChoosePassword"; -NSString *const kStr_Close = @"Close"; -NSString *const kStr_ConfirmEmail = @"ConfirmEmail"; -NSString *const kStr_Email = @"Email"; -NSString *const kStr_EmailAlreadyInUseError = @"EmailAlreadyInUseError"; -NSString *const kStr_EmailSentConfirmationMessage = @"EmailSentConfirmationMessage"; -NSString *const kStr_EnterYourEmail = @"EnterYourEmail"; -NSString *const kStr_EnterYourPassword = @"EnterYourPassword"; -NSString *const kStr_Error = @"Error"; -NSString *const kStr_ExistingAccountTitle = @"ExistingAccountTitle"; -NSString *const kStr_FirstAndLastName = @"FirstAndLastName"; -NSString *const kStr_ForgotPassword = @"ForgotPassword"; -NSString *const kStr_InvalidEmailError = @"InvalidEmailError"; -NSString *const kStr_InvalidPasswordError = @"InvalidPasswordError"; -NSString *const kStr_Name = @"Name"; -NSString *const kStr_Next = @"Next"; -NSString *const kStr_OK = @"OK"; -NSString *const kStr_Password = @"Password"; -NSString *const kStr_PasswordRecoveryEmailSentMessage = @"PasswordRecoveryEmailSentMessage"; -NSString *const kStr_PasswordRecoveryEmailSentTitle = @"PasswordRecoveryEmailSentTitle"; -NSString *const kStr_PasswordRecoveryMessage = @"PasswordRecoveryMessage"; -NSString *const kStr_PasswordRecoveryTitle = @"PasswordRecoveryTitle"; -NSString *const kStr_PasswordVerificationMessage = @"PasswordVerificationMessage"; -NSString *const kStr_ProviderUsedPreviouslyMessage = @"ProviderUsedPreviouslyMessage"; -NSString *const kStr_Save = @"Save"; -NSString *const kStr_Send = @"Send"; -NSString *const kStr_Resend = @"Resend"; -NSString *const kStr_SignedIn = @"SignedIn"; -NSString *const kStr_SignInTitle = @"SignInTitle"; -NSString *const kStr_SignInTooManyTimesError = @"SignInTooManyTimesError"; -NSString *const kStr_SignInWithEmail = @"SignInWithEmail"; -NSString *const kStr_SignInEmailSent = @"SignInEmailSent"; -NSString *const kStr_SignUpTitle = @"SignUpTitle"; -NSString *const kStr_SignUpTooManyTimesError = @"SignUpTooManyTimesError"; -NSString *const kStr_TermsOfService = @"TermsOfService"; -NSString *const kStr_TroubleGettingEmailTitle = @"TroubleGettingEmailTitle"; -NSString *const kStr_TroubleGettingEmailMessage = @"TroubleGettingEmailMessage"; -NSString *const kStr_PrivacyPolicy = @"PrivacyPolicy"; -NSString *const kStr_TermsOfServiceMessage = @"TermsOfServiceMessage"; -NSString *const kStr_UserNotFoundError = @"UserNotFoundError"; -NSString *const kStr_WeakPasswordError = @"WeakPasswordError"; -NSString *const kStr_WrongPasswordError = @"WrongPasswordError"; -NSString *const kStr_CantFindProvider = @"CantFindProvider"; -NSString *const kStr_EmailsDontMatch = @"EmailsDontMatch"; -NSString *const kStr_VerifyItsYou = @"VerifyItsYou"; -NSString *const kStr_DeleteAccountConfirmationTitle = @"DeleteAccountConfirmationTitle"; -NSString *const kStr_DeleteAccountBody = @"DeleteAccountBody"; -NSString *const kStr_DeleteAccountConfirmationMessage = @"DeleteAccountConfirmationMessage"; -NSString *const kStr_Delete = @"Delete"; -NSString *const kStr_DeleteAccountControllerTitle = @"DeleteAccountControllerTitle"; -NSString *const kStr_ActionCantBeUndone = @"ActionCantBeUndone"; -NSString *const kStr_UnlinkTitle = @"UnlinkTitle"; -NSString *const kStr_UnlinkAction = @"UnlinkAction"; -NSString *const kStr_UnlinkConfirmationTitle = @"UnlinkConfirmationTitle"; -NSString *const kStr_UnlinkConfirmationMessage = @"UnlinkConfirmationMessage"; -NSString *const kStr_UnlinkConfirmationActionTitle = @"UnlinkConfirmationActionTitle"; -NSString *const kStr_UpdateEmailAlertMessage = @"UpdateEmailAlertMessage"; -NSString *const kStr_UpdateEmailVerificationAlertMessage = @"UpdateEmailVerificationAlertMessage"; -NSString *const kStr_EditEmailTitle = @"EditEmailTitle"; -NSString *const kStr_EditNameTitle = @"EditNameTitle"; -NSString *const kStr_AddPasswordAlertMessage = @"AddPasswordAlertMessage"; -NSString *const kStr_EditPasswordAlertMessage = @"EditPasswordAlertMessage"; -NSString *const kStr_ReauthenticateEditPasswordAlertMessage = @"ReauthenticateEditPasswordAlertMessage"; -NSString *const kStr_AddPasswordTitle = @"AddPasswordTitle"; -NSString *const kStr_EditPasswordTitle = @"EditPasswordTitle"; -NSString *const kStr_ProviderTitlePassword = @"ProviderTitlePassword"; -NSString *const kStr_ProviderTitleGoogle = @"ProviderTitleGoogle"; -NSString *const kStr_ProviderTitleFacebook = @"ProviderTitleFacebook"; -NSString *const kStr_ProviderTitleTwitter = @"ProviderTitleTwitter"; -NSString *const kStr_SignInWithProvider = @"SignInWithProvider"; -NSString *const kStr_PlaceholderEnterName = @"PlaceholderEnterName"; -NSString *const kStr_PlaceholderEnterEmail = @"PlaceholderEnterEmail"; -NSString *const kStr_PlaceholderEnterPassword = @"PlaceholderEnterPassword"; -NSString *const kStr_PlaceholderChosePassword = @"PlaceholderChosePassword"; -NSString *const kStr_PlaceholderNewPassword = @"PlaceholderNewPassword"; -NSString *const kStr_ForgotPasswordTitle = @"ForgotPasswordTitle"; - -/** @var kKeyNotFound - @brief The value returned if the key is not found in the table. - */ -NSString *const kKeyNotFound = @"KeyNotFound"; - -/** @var kTableName - @brief The name of the strings table to search for localized strings. - */ -static NSString *const kTableName = @"FirebaseAuthUI"; - -NSString *FUILocalizedString(NSString *key) { - return FUILocalizedStringFromTable(key, kTableName); -} - -NSString *FUILocalizedStringFromTable(NSString *key, NSString *table) { - return FUILocalizedStringFromTableInBundle(key, table, [FUIAuthUtils authUIBundle]); -} - -NSString *FUILocalizedStringFromTableInBundle(NSString *key, - NSString *table, - NSBundle *_Nullable bundle) { - // Don't load defaultAuthUI if the default app isn't configured. We don't recommend - // people do this in our docs, but if for whatever reason they want to use a custom - // app, this code shouldn't crash. - if ([FIRApp defaultApp] != nil) { - NSBundle *customStringsBundle = [FUIAuth defaultAuthUI].customStringsBundle; - if (customStringsBundle) { - NSString *localizedString = [customStringsBundle localizedStringForKey:key - value:kKeyNotFound - table:table]; - if (![kKeyNotFound isEqual:localizedString]) { - return localizedString; - } - } - } - if (bundle == nil) { - bundle = [NSBundle mainBundle]; - } - return [bundle localizedStringForKey:key value:nil table:table]; -} - -NS_ASSUME_NONNULL_END diff --git a/FirebaseAuthUI/Sources/FUIAuthTableHeaderView.m b/FirebaseAuthUI/Sources/FUIAuthTableHeaderView.m deleted file mode 100644 index c0554225d73..00000000000 --- a/FirebaseAuthUI/Sources/FUIAuthTableHeaderView.m +++ /dev/null @@ -1,83 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthTableHeaderView.h" - -/** @var kLabelHorizontalMargin - @brief The horizontal margin around any @c UILabel. - */ -static const CGFloat kLabelHorizontalMargin = 8.0f; - -/** @var kLabelVerticalMargin - @brief The veritcal margin around any @c UILabel. - */ -static const CGFloat kLabelVerticalMargin = 16.0f; - -@implementation FUIAuthTableHeaderView - -- (instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - _titleLabel = [[UILabel alloc] init]; - _titleLabel.font = [UIFont boldSystemFontOfSize:16.0f]; - [self addSubview:_titleLabel]; - - _detailLabel = [[UILabel alloc] init]; - _detailLabel.font = [UIFont systemFontOfSize:14.0f]; - _detailLabel.numberOfLines = 0; - [self addSubview:_detailLabel]; - } - return self; -} - -- (void)layoutSubviews { - [super layoutSubviews]; - - [_titleLabel sizeToFit]; - - CGRect contentRect = CGRectInset(self.bounds, kLabelHorizontalMargin, kLabelVerticalMargin); - CGRect titleLabelFrame, detailLabelFrame, space; - CGRectDivide(contentRect, &titleLabelFrame, &contentRect, - CGRectGetHeight(_titleLabel.frame), CGRectMinYEdge); - CGRectDivide(contentRect, &space, &detailLabelFrame, kLabelVerticalMargin, CGRectMinYEdge); - - _titleLabel.frame = titleLabelFrame; - _detailLabel.frame = detailLabelFrame; -} - -- (CGSize)sizeThatFits:(CGSize)size { - CGFloat labelWidth = size.width - kLabelHorizontalMargin * 2; - CGFloat titleLabelHeight = [[self class] sizeForLabel:_titleLabel maxWidth:labelWidth].height; - CGFloat detailLabelHeight = [[self class] sizeForLabel:_detailLabel maxWidth:labelWidth].height; - CGFloat height = titleLabelHeight + detailLabelHeight + kLabelVerticalMargin * 3; - return CGSizeMake(size.width, height); -} - -#pragma mark - Utility - -/** @fn sizeForLabel:maxWidth: - @brief Calculate the with of the @c UILabel with the given maximum width. - @return The calculated size. - */ -+ (CGSize)sizeForLabel:(UILabel *)label maxWidth:(CGFloat)maxWidth { - CGRect rect = [label.text boundingRectWithSize:CGSizeMake(maxWidth, CGFLOAT_MAX) - options:NSStringDrawingUsesLineFragmentOrigin - attributes:@{ NSFontAttributeName : label.font } - context:nil]; - return CGRectIntegral(rect).size; -} - -@end diff --git a/FirebaseAuthUI/Sources/FUIAuthTableViewCell.m b/FirebaseAuthUI/Sources/FUIAuthTableViewCell.m deleted file mode 100644 index 13b612667e7..00000000000 --- a/FirebaseAuthUI/Sources/FUIAuthTableViewCell.m +++ /dev/null @@ -1,35 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthTableViewCell.h" - -@implementation FUIAuthTableViewCell - -- (void)awakeFromNib { - [super awakeFromNib]; - - if (@available(iOS 13.0, *)) { - self.textField.textColor = [UIColor labelColor]; - self.label.textColor = [UIColor labelColor]; - } -} - -- (void)setLabel:(UILabel *)label { - _label = label; - [self layoutIfNeeded]; -} - -@end diff --git a/FirebaseAuthUI/Sources/FUIAuthUtils.m b/FirebaseAuthUI/Sources/FUIAuthUtils.m deleted file mode 100644 index b389fb863dd..00000000000 --- a/FirebaseAuthUI/Sources/FUIAuthUtils.m +++ /dev/null @@ -1,126 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthUtils.h" - -#import - -#if SWIFT_PACKAGE -NSString *const FUIAuthBundleName = @"FirebaseUI_FirebaseAuthUI"; -#else -NSString *const FUIAuthBundleName = @"FirebaseAuthUI"; -#endif // SWIFT_PACKAGE - -@implementation FUIAuthUtils - -+ (NSBundle *)authUIBundle { - return [self bundleNamed:FUIAuthBundleName - inFrameworkBundle:[NSBundle bundleForClass:[self class]]]; -} - -+ (nullable NSBundle *)bundleNamed:(nullable NSString *)bundleName - inFrameworkBundle:(nullable NSBundle *)framework { - NSBundle *returnBundle = nil; - if (!bundleName) { - bundleName = FUIAuthBundleName; - } - // Use the main bundle as a default if the framework wasn't provided. - NSBundle *frameworkBundle = framework; - if (frameworkBundle == nil) { - // If frameworkBundle is unspecified, assume main bundle/static linking. - frameworkBundle = [NSBundle mainBundle]; - } - // If using static frameworks, the bundle will be included directly in the main - // bundle. - NSString *path = [[NSBundle mainBundle] pathForResource:bundleName ofType:@"bundle"]; - - // Otherwise, check the appropriate framework bundle. - if (!path) { - path = [frameworkBundle pathForResource:bundleName ofType:@"bundle"]; - } - if (!path) { - NSLog(@"Warning: Unable to find bundle %@ in framework %@.", bundleName, framework); - // Fall back on the root module. - return frameworkBundle; - } - returnBundle = [NSBundle bundleWithPath:path]; - return returnBundle; -} - -+ (nullable UIImage *)imageNamed:(NSString *)name fromBundle:(nullable NSBundle *)bundle { - if (!bundle) { - bundle = [self authUIBundle]; - } - if (@available(iOS 13.0, *)) { - return [UIImage imageNamed:name inBundle:bundle withConfiguration:nil]; - } else { - NSString *path = [bundle pathForResource:name ofType:@"png"]; - if (!path) { - NSLog(@"Warning: Unable to find asset %@ in bundle %@.", name, bundle); - return nil; - } - return [UIImage imageWithContentsOfFile:path]; - } -} - -+ (NSString *)randomNonce { - // Adapted from https://auth0.com/docs/api-auth/tutorials/nonce#generate-a-cryptographically-random-nonce - NSString *characterSet = @"0123456789ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvwxyz-._"; - NSMutableString *result = [NSMutableString string]; - NSInteger remainingLength = 32; - - while (remainingLength > 0) { - NSMutableArray *randoms = [NSMutableArray arrayWithCapacity:16]; - for (NSInteger i = 0; i < 16; i++) { - uint8_t random = 0; - int errorCode = SecRandomCopyBytes(kSecRandomDefault, 1, &random); - if (errorCode != errSecSuccess) { - [NSException raise:@"FUIAuthGenerateRandomNonce" - format:@"Unable to generate nonce: OSStatus %i", errorCode]; - } - - [randoms addObject:@(random)]; - } - - for (NSNumber *random in randoms) { - if (remainingLength == 0) { - break; - } - - if (random.unsignedIntValue < characterSet.length) { - unichar character = [characterSet characterAtIndex:random.unsignedIntValue]; - [result appendFormat:@"%C", character]; - remainingLength--; - } - } - } - - return result; -} - -+ (NSString *)stringBySHA256HashingString:(NSString *)input { - const char *string = [input UTF8String]; - unsigned char result[CC_SHA256_DIGEST_LENGTH]; - CC_SHA256(string, (CC_LONG)strlen(string), result); - - NSMutableString *hashed = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH * 2]; - for (NSInteger i = 0; i < CC_SHA256_DIGEST_LENGTH; i++) { - [hashed appendFormat:@"%02x", result[i]]; - } - return hashed; -} - -@end diff --git a/FirebaseAuthUI/Sources/FUIPrivacyAndTermsOfServiceView.m b/FirebaseAuthUI/Sources/FUIPrivacyAndTermsOfServiceView.m deleted file mode 100644 index 10a7efb5ce8..00000000000 --- a/FirebaseAuthUI/Sources/FUIPrivacyAndTermsOfServiceView.m +++ /dev/null @@ -1,98 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIPrivacyAndTermsOfServiceView.h" - -@import FirebaseAuth; -#import "FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuth.h" -#import "FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthStrings.h" - -NS_ASSUME_NONNULL_BEGIN - -@implementation FUIPrivacyAndTermsOfServiceView - -#pragma mark - Public - -- (void)useFullMessage { - NSAttributedString *fullMessage = [self fullPrivacyPolicyAndTOSMessage]; - self.attributedText = fullMessage; - self.textAlignment = NSTextAlignmentLeft; -} - -- (void)useFooterMessage { - NSAttributedString *footerMessage = [self footerPrivacyPolicyAndTOSMessage]; - self.attributedText = footerMessage; - self.textAlignment = NSTextAlignmentRight; -} - -#pragma mark - Protected - -- (nullable NSAttributedString *)privacyPolicyAndTOSMessageFromFormat:(NSString *)format { - FUIAuth *authUI = self.authUI ?: [FUIAuth defaultAuthUI]; - NSURL *TOSURL = authUI.TOSURL; - NSURL *privacyPolicyURL = authUI.privacyPolicyURL; - NSUInteger TOSURLStringLength = TOSURL.absoluteString.length; - NSUInteger privacyPolicyURLStringLength = privacyPolicyURL.absoluteString.length; - - if (!TOSURLStringLength && !privacyPolicyURLStringLength) { - return nil; - } - if (!TOSURLStringLength || !privacyPolicyURLStringLength) { - NSLog(@"The terms of service and privacy policy URLs for your app must be provided together. Pl" - "ease set the terms of service policy using [FUIAuth defaultAuthUI].TOSURL and the privacy" - " policy URL using [FUIAuth defaultAuthUI].privacyPolicyURL"); - return nil; - } - NSString *termsOfServiceString = FUILocalizedString(kStr_TermsOfService); - NSString *privacyPolicyString = FUILocalizedString(kStr_PrivacyPolicy); - NSString *privacyPolicyAndTOSString = - [NSString stringWithFormat:format, termsOfServiceString, privacyPolicyString]; - NSMutableAttributedString *attributedLinkText = nil; - - if (@available(iOS 13.0, *)) { - attributedLinkText = [[NSMutableAttributedString alloc] initWithString:privacyPolicyAndTOSString - attributes:@{NSForegroundColorAttributeName: [UIColor labelColor]}]; - } else { - attributedLinkText = [[NSMutableAttributedString alloc] initWithString:privacyPolicyAndTOSString]; - } - - NSRange TOSRange = [privacyPolicyAndTOSString rangeOfString:termsOfServiceString]; - if (TOSRange.length) { - [attributedLinkText addAttribute:NSLinkAttributeName value:TOSURL range:TOSRange]; - } - - NSRange privacyPolicyRange = [privacyPolicyAndTOSString rangeOfString:privacyPolicyString]; - if (privacyPolicyRange.length) { - [attributedLinkText addAttribute:NSLinkAttributeName - value:privacyPolicyURL - range:privacyPolicyRange]; - } - return attributedLinkText; -} - -#pragma mark - Private - -- (NSAttributedString *)fullPrivacyPolicyAndTOSMessage { - return [self privacyPolicyAndTOSMessageFromFormat:FUILocalizedString(kStr_TermsOfServiceMessage)]; -} - -- (NSAttributedString *)footerPrivacyPolicyAndTOSMessage { - return [self privacyPolicyAndTOSMessageFromFormat:@"%@ %@"]; -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebaseAuthUI/Sources/FUIStaticContentTableViewController.h b/FirebaseAuthUI/Sources/FUIStaticContentTableViewController.h deleted file mode 100644 index 62330aafe18..00000000000 --- a/FirebaseAuthUI/Sources/FUIStaticContentTableViewController.h +++ /dev/null @@ -1,98 +0,0 @@ -// -// Copyright (c) 2017 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -#import "FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthBaseViewController.h" -#import "FirebaseAuthUI/Sources/FUIStaticContentTableViewManager.h" - -NS_ASSUME_NONNULL_BEGIN - -/** @class FUIStaticContentTableViewController - @brief The view controller which presents contents of @c FUIStaticContentTableViewContent. - controller has footer and header views. - */ -@interface FUIStaticContentTableViewController : FUIAuthBaseViewController - -/** @fn initWithContents:nextTitle:nextAction - @brief Convenience initializer. View controller doesn't have header and footer sections. - @param contents The contents of the table view presented in the controller. - @param nextTitle Text displayed on the navigation bar title. - @param nextAction Action triggered on the right bar item of @C UINavigationController - */ -- (instancetype)initWithContents:(nullable FUIStaticContentTableViewContent *)contents - nextTitle:(nullable NSString *)nextTitle - nextAction:(nullable FUIStaticContentTableViewCellAction)nextAction; - -// TODO: set nextAction param last arg -/** @fn initWithContents:nextTitle:nextAction:headerText: - @brief Convenience initializer. View controller doesn't have footer section. - @param contents The contents of the table view presented in the controller. - @param nextTitle Text displayed on the navigation bar title. - @param nextAction Action triggered on the right bar item of @C UINavigationController - @param headerText Text displayed at the header view controller. - */ -- (instancetype)initWithContents:(nullable FUIStaticContentTableViewContent *)contents - nextTitle:(nullable NSString *)nextTitle - nextAction:(nullable FUIStaticContentTableViewCellAction)nextAction - headerText:(nullable NSString *)headerText; - -/** @fn initWithContents:nextTitle:nextAction:headerText:footerText:footerAction: - @brief Designated initializer. - @param contents The contents of the table view presented in the controller. - @param actionTitle Text displayed on the navigation bar title. - @param nextAction Action triggered on the right bar item of @C UINavigationController - @param headerText Text displayed at the header view controller. - @param footerText Text displayed at the footer of view controller. - @param footerAction Action triggered when user taps on the footer. - */ -- (instancetype)initWithContents:(nullable FUIStaticContentTableViewContent *)contents - nextTitle:(nullable NSString *)actionTitle - nextAction:(nullable FUIStaticContentTableViewCellAction)nextAction - headerText:(nullable NSString *)headerText - footerText:(nullable NSString *)footerText - footerAction:(nullable FUIStaticContentTableViewCellAction)footerAction - NS_DESIGNATED_INITIALIZER; - -/** @fn init - @brief Please use @c initWithContents:nextTitle:nextAction:headerText:footerText:footerAction:. - */ -- (instancetype)init NS_UNAVAILABLE; - -/** @fn initWithNibName:bundle: - @brief Please use @c initWithContents:nextTitle:nextAction:headerText:footerText:footerAction:. - */ -- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil - bundle:(nullable NSBundle *)nibBundleOrNil NS_UNAVAILABLE; - -/** @fn initWithCoder: - @brief Please use @c initWithContents:nextTitle:nextAction:headerText:footerText:footerAction:. - */ -- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder NS_UNAVAILABLE; - -/** @fn initWithNibName:bundle:authUI: - @brief Please use @c initWithContents:nextTitle:nextAction:headerText:footerText:footerAction:. - @param nibNameOrNil The name of the nib file to associate with the view controller. - @param nibBundleOrNil The bundle in which to search for the nib file. - @param authUI The @c FUIAuth instance that manages this view controller. - */ -- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil - bundle:(nullable NSBundle *)nibBundleOrNil - authUI:(FUIAuth *)authUI NS_UNAVAILABLE; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebaseAuthUI/Sources/FUIStaticContentTableViewController.m b/FirebaseAuthUI/Sources/FUIStaticContentTableViewController.m deleted file mode 100644 index a019d443739..00000000000 --- a/FirebaseAuthUI/Sources/FUIStaticContentTableViewController.m +++ /dev/null @@ -1,137 +0,0 @@ -// -// Copyright (c) 2017 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebaseAuthUI/Sources/FUIStaticContentTableViewController.h" - -#import "FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuth.h" -#import "FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthBaseViewController_Internal.h" -#import "FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthUtils.h" - -NS_ASSUME_NONNULL_BEGIN - -/** @var kSaveButtonAccessibilityID - @brief The Accessibility Identifier for the @c next button. - */ -static NSString *const kNextButtonAccessibilityID = @"NextButtonAccessibilityID"; - -@interface FUIStaticContentTableViewController () -{ - NSString *_headerText; - NSString *_footerText; - NSString *_actionTitle; - __weak IBOutlet UILabel *_headerLabel; - __weak IBOutlet UITableView *_tableView; - __weak IBOutlet UIButton *_footerButton; - FUIStaticContentTableViewManager *_tableViewManager; - FUIStaticContentTableViewCellAction _nextAction; - FUIStaticContentTableViewCellAction _footerAction; -} -@end - -@implementation FUIStaticContentTableViewController - -- (instancetype)initWithContents:(nullable FUIStaticContentTableViewContent *)contents - nextTitle:(nullable NSString *)nextTitle - nextAction:(nullable FUIStaticContentTableViewCellAction)nextAction { - return [self initWithContents:contents nextTitle:nextTitle nextAction:nextAction headerText:nil]; -} - -- (instancetype)initWithContents:(nullable FUIStaticContentTableViewContent *)contents - nextTitle:(nullable NSString *)nextTitle - nextAction:(nullable FUIStaticContentTableViewCellAction)nextAction - headerText:(nullable NSString *)headerText { - return [self initWithContents:contents - nextTitle:nextTitle - nextAction:nextAction - headerText:headerText - footerText:nil - footerAction:nil]; -} - -- (instancetype)initWithContents:(nullable FUIStaticContentTableViewContent *)contents - nextTitle:(nullable NSString *)actionTitle - nextAction:(nullable FUIStaticContentTableViewCellAction)nextAction - headerText:(nullable NSString *)headerText - footerText:(nullable NSString *)footerText - footerAction:(nullable FUIStaticContentTableViewCellAction)footerAction { - if (self = [super initWithNibName:NSStringFromClass([self class]) - bundle:[FUIAuthUtils authUIBundle] - authUI:[FUIAuth defaultAuthUI]]) { - _tableViewManager.contents = contents; - _nextAction = [nextAction copy]; - _footerAction = [footerAction copy]; - _headerText = [headerText copy]; - _footerText = [footerText copy]; - _actionTitle = [actionTitle copy]; - - UIBarButtonItem *actionButtonItem = - [FUIAuthBaseViewController barItemWithTitle:_actionTitle - target:self - action:@selector(onNext)]; - actionButtonItem.accessibilityIdentifier = kNextButtonAccessibilityID; - self.navigationItem.rightBarButtonItem = actionButtonItem; - } - return self; -} - -- (void)viewDidLoad { - [super viewDidLoad]; - _tableViewManager = [[FUIStaticContentTableViewManager alloc] init]; - _tableViewManager.tableView = _tableView; - _tableView.delegate = _tableViewManager; - _tableView.dataSource = _tableViewManager; - if (_headerText) { - _headerLabel.text = _headerText; - } else { - _tableView.tableHeaderView = nil; - } - if (!_footerText) { - _tableView.tableFooterView.hidden = YES; - } else { - [_footerButton setTitle:_footerText forState:UIControlStateNormal]; - } - - [self enableDynamicCellHeightForTableView:_tableView]; -} - -- (void)viewDidLayoutSubviews { - [super viewDidLayoutSubviews]; - [self updateHeaderSize]; -} - -- (void)updateHeaderSize { - _headerLabel.preferredMaxLayoutWidth = _headerLabel.bounds.size.width; - CGFloat height = [_tableView.tableHeaderView - systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height; - CGRect frame = _tableView.tableHeaderView.frame; - frame.size.height = height; - _tableView.tableHeaderView.frame = frame; -} - -- (void)onNext { - if (_nextAction) { - _nextAction(); - } -} -- (IBAction)onFooterAction:(id)sender { - if (_footerAction) { - _footerAction(); - } -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebaseAuthUI/Sources/FUIStaticContentTableViewManager.h b/FirebaseAuthUI/Sources/FUIStaticContentTableViewManager.h deleted file mode 100644 index fe0df2cc9fb..00000000000 --- a/FirebaseAuthUI/Sources/FUIStaticContentTableViewManager.h +++ /dev/null @@ -1,311 +0,0 @@ -// -// Copyright (c) 2017 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -#pragma mark - Forward Declarations - -@class FUIStaticContentTableViewCell; -@class FUIStaticContentTableViewContent; -@class FUIStaticContentTableViewSection; - -NS_ASSUME_NONNULL_BEGIN - -#pragma mark - Block Type Definitions - -/** @typedef FUIStaticContentTableViewCellAction - @brief The type of block invoked when a cell is tapped. - */ -typedef void(^FUIStaticContentTableViewCellAction)(void); - -#pragma mark - - -/** @class FUIStaticContentTableViewManager - @brief Generic class useful for populating a @c UITableView with static content. - */ -@interface FUIStaticContentTableViewManager : NSObject - -/** @property contents - @brief The static contents of the @c UITableView. - @remarks Setting this property will reload the @c UITableView. - */ -@property(nonatomic, strong, nullable) FUIStaticContentTableViewContent *contents; - -/** @property tableView - @brief A reference to the managed @c UITableView. - @remarks This is needed to automatically reload the table view when the @c contents are changed. - */ -@property(nonatomic, weak, nullable) IBOutlet UITableView *tableView; - -@end - -#pragma mark - - -/** @class FUIStaticContentTableViewContent - @brief Represents the contents of a @c UITableView. - */ -@interface FUIStaticContentTableViewContent : NSObject - -/** @property sections - @brief The sections for the @c UITableView. - */ -@property(nonatomic, copy, readonly, nullable) - NSArray *sections; - -/** @fn contentWithSections: - @brief Convenience factory method for creating a new instance of - @c FUIStaticContentTableViewContent. - @param sections The sections for the @c UITableView. - */ -+ (instancetype)contentWithSections:(nullable NSArray *)sections; - -/** @fn init - @brief Please use initWithSections: - */ -- (instancetype)init NS_UNAVAILABLE; - -/** @fn initWithSections: - @brief Designated initializer. - @param sections The sections in the @c UITableView. - */ -- (instancetype)initWithSections:(nullable NSArray *)sections; - -@end - -#pragma mark - - -/** @class FUIStaticContentTableViewSection - @brief Represents a section in a @c UITableView. - @remarks Each section has a title (used for the section title in the @c UITableView) and an - array of cells. - */ -@interface FUIStaticContentTableViewSection : NSObject - -/** @property title - @brief The title of the section in the @c UITableView. - */ -@property(nonatomic, copy, readonly, nullable) NSString *title; - -/** @property cells - @brief The cells in this section of the @c UITableView. - */ -@property(nonatomic, copy, readonly, nullable) NSArray *cells; - -/** @fn sectionWithTitle:cells: - @brief Convenience factory method for creating a new instance of - @c FUIStaticContentTableViewSection. - @param title The title of the section in the @c UITableView. - @param cells The cells in this section of the @c UITableView. - */ -+ (instancetype) sectionWithTitle:(nullable NSString *)title - cells:(nullable NSArray *)cells; - -/** @fn init - @brief Please use initWithTitle:cells: - */ -- (instancetype)init NS_UNAVAILABLE; - -/** @fn initWithTitle:cells: - @brief Designated initializer. - @param title The title of the section in the @c UITableView. - @param cells The cells in this section of the @c UITableView. - */ -- (instancetype)initWithTitle:(nullable NSString *)title - cells:(nullable NSArray *)cells; - -@end - -#pragma mark - - -/** @typedef FUIStaticContentTableViewCellType - @brief Defines all possible styles of @c FUIStaticContentTableViewCell. - */ -typedef NS_ENUM(NSInteger, FUIStaticContentTableViewCellType) { - FUIStaticContentTableViewCellTypeDefault = 0, - FUIStaticContentTableViewCellTypeButton, - FUIStaticContentTableViewCellTypeInput, - FUIStaticContentTableViewCellTypePassword -}; - -/** @class FUIStaticContentTableViewCell - @brief Represents a cell in a @c UITableView. - */ -@interface FUIStaticContentTableViewCell : NSObject - -/** @property title - @brief The text of the @c titleLabel of the @c FUIStaticContentTableViewCell. - */ -@property(nonatomic, copy, readonly, nullable) NSString *title; - -/** @property value - @brief The text of the @c detailTextLabel of the @c FUIStaticContentTableViewCell. - */ -@property(nonatomic, copy, nullable) NSString *value; - -/** @property placeholder - @brief The text of the placeholder or hint of the @c FUIStaticContentTableViewCell. - */ -@property(nonatomic, copy, nullable) NSString *placeholder; - -/** @property type - @brief Style of displaying cell. Default value is @c FUIStaticContentTableViewCellTypeDefault - */ -@property(nonatomic, assign) FUIStaticContentTableViewCellType type; - -/** @property action - @brief A block which is executed when the cell is selected. - @remarks Avoid retain cycles. Since these blocked are retained here, and your - @c UIViewController's object graph likely retains this object, you don't want these blocks - to retain your @c UIViewController. The easiest thing is just to create a weak reference to - your @c UIViewController and pass it a message as the only thing the block does. - */ -@property(nonatomic, copy, readonly, nullable) FUIStaticContentTableViewCellAction action; - -/** @fn cellWithTitle: - @brief Convenience factory method for a new instance of @c FUIStaticContentTableViewCell. - @param title The text of the @c titleLabel of the @c FUIStaticContentTableViewCell. - */ -+ (instancetype)cellWithTitle:(nullable NSString *)title; - -/** @fn cellWithTitle:value: - @brief Convenience factory method for a new instance of @c FUIStaticContentTableViewCell. - @param title The text of the @c titleLabel of the @c FUIStaticContentTableViewCell. - @param value The text of the @c detailTextLabel of the @c FUIStaticContentTableViewCell. - */ -+ (instancetype)cellWithTitle:(nullable NSString *)title - value:(nullable NSString *)value; - -/** @fn cellWithTitle:action: - @brief Convenience factory method for a new instance of @c FUIStaticContentTableViewCell. - @param title The text of the @c titleLabel of the @c FUIStaticContentTableViewCell. - @param action A block which is executed when the cell is selected. - */ -+ (instancetype)cellWithTitle:(nullable NSString *)title - action:(nullable FUIStaticContentTableViewCellAction)action; - -/** @fn cellWithTitle:action:type: - @brief Convenience factory method for a new instance of @c FUIStaticContentTableViewCell. - @param title The text of the @c titleLabel of the @c FUIStaticContentTableViewCell. - @param type Style of displaying cell. - @param action A block which is executed when the cell is selected. - */ -+ (instancetype)cellWithTitle:(nullable NSString *)title - type:(FUIStaticContentTableViewCellType) type - action:(nullable FUIStaticContentTableViewCellAction)action; - -/** @fn cellWithTitle:value:action: - @brief Convenience factory method for a new instance of @c FUIStaticContentTableViewCell. - @param title The text of the @c titleLabel of the @c FUIStaticContentTableViewCell. - @param value The text of the @c detailTextLabel of the @c FUIStaticContentTableViewCell. - @param action A block which is executed when the cell is selected. - */ -+ (instancetype)cellWithTitle:(nullable NSString *)title - value:(nullable NSString *)value - action:(nullable FUIStaticContentTableViewCellAction)action; - -/** @fn cellWithTitle:value:type:action: - @brief Convenience factory method for a new instance of @c FUIStaticContentTableViewCell. - @param title The text of the @c titleLabel of the @c FUIStaticContentTableViewCell. - @param value The text of the @c detailTextLabel of the @c FUIStaticContentTableViewCell. - @param type Style of displaying cell. - @param action A block which is executed when the cell is selected. - */ -+ (instancetype)cellWithTitle:(nullable NSString *)title - value:(nullable NSString *)value - type:(FUIStaticContentTableViewCellType) type - action:(nullable FUIStaticContentTableViewCellAction)action; - -/** @fn cellWithTitle:value:type:action: - @brief Convenience factory method for a new instance of @c FUIStaticContentTableViewCell. - @param title The text of the @c titleLabel of the @c FUIStaticContentTableViewCell. - @param value The text of the @c detailTextLabel of the @c FUIStaticContentTableViewCell. - @param placeholder The placeholder of input filed, if any. - @param action A block which is executed when the cell is selected. - @param type Style of displaying cell. - */ -+ (instancetype)cellWithTitle:(nullable NSString *)title - value:(nullable NSString *)value - placeholder:(nullable NSString *)placeholder - type:(FUIStaticContentTableViewCellType) type - action:(nullable FUIStaticContentTableViewCellAction)action; - -/** @fn initWithTitle:value:action:type: - @brief Designated initializer. - @param title The text of the @c titleLabel of the @c FUIStaticContentTableViewCell. - @param value The text of the @c detailTextLabel of the @c FUIStaticContentTableViewCell. - @param placeholder The placeholder of input filed, if any. - @param type Style of displaying cell. - @param action A block which is executed when the cell is selected. - */ -- (instancetype)initWithTitle:(nullable NSString *)title - value:(nullable NSString *)value - placeholder:(nullable NSString *)placeholder - type:(FUIStaticContentTableViewCellType) type - action:(nullable FUIStaticContentTableViewCellAction)action - NS_DESIGNATED_INITIALIZER; - -/** @fn init - @brief Please use initWithTitle:value:action:type: - */ -- (instancetype)init NS_UNAVAILABLE; - -@end - -/** @class FUIPasswordTableViewCell - @brief Represents a cell in a @c UITableView. This cell has password input field. - */ -@interface FUIPasswordTableViewCell : UITableViewCell - -/** @var cellData - @brief Used to retrieve modified value of the cell. - */ -@property (nonatomic) FUIStaticContentTableViewCell *cellData; - -/** @var title - @brief The title label of the cell. - */ -@property (weak, nonatomic) IBOutlet UILabel *title; - -/** @var password - @brief The password inout field of the cell. - */ -@property (weak, nonatomic) IBOutlet UITextField *password; - -@end - -/** @class FUIInputTableViewCell - @brief Represents a cell in a @c UITableView. This cell has regular input field. - */ -@interface FUIInputTableViewCell : UITableViewCell - -/** @var cellData - @brief Used to retrieve modified value of the cell. - */ -@property (nonatomic) FUIStaticContentTableViewCell *cellData; - -/** @var title - @brief The title label of the cell. - */ -@property (weak, nonatomic) IBOutlet UILabel *title; - -/** @var password - @brief The inout field of the cell. - */ -@property (weak, nonatomic) IBOutlet UITextField *input; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebaseAuthUI/Sources/FUIStaticContentTableViewManager.m b/FirebaseAuthUI/Sources/FUIStaticContentTableViewManager.m deleted file mode 100644 index 8c67539c1c8..00000000000 --- a/FirebaseAuthUI/Sources/FUIStaticContentTableViewManager.m +++ /dev/null @@ -1,319 +0,0 @@ -// -// Copyright (c) 2017 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebaseAuthUI/Sources/FUIStaticContentTableViewManager.h" - -#import "FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthUtils.h" - -NS_ASSUME_NONNULL_BEGIN - -/** @var kCellReuseIdentitfier - @brief The reuse identifier for default style table view cell. - */ -static NSString *const kCellReuseIdentitfier = @"reuseIdentifier"; - -/** @var kValueCellReuseIdentitfier - @brief The reuse identifier for value style table view cell. - */ -static NSString *const kValueCellReuseIdentitfier = @"reuseValueIdentifier"; - -/** @var kPasswordCellReuseIdentitfier - @brief The reuse identifier for password style table view cell. - */ -static NSString *const kPasswordCellReuseIdentitfier = @"passwordCellReuseIdentitfier"; - -/** @var kInputCellReuseIdentitfier - @brief The reuse identifier for input style table view cell. - */ -static NSString *const kInputCellReuseIdentitfier = @"inputCellReuseIdentitfier"; - -/** @var kVisibilityOffImage - @brief Name of icon to show current password in secure input field. - */ -static NSString *const kVisibilityOffImage = @"ic_visibility_off.png"; - -/** @var kVisibilityOnImage - @brief Name of icon to show current password in secure input field. - */ -static NSString *const kVisibilityOnImage = @"ic_visibility.png"; - -#pragma mark - - -@implementation FUIStaticContentTableViewManager - -- (void)setContents:(nullable FUIStaticContentTableViewContent *)contents { - _contents = contents; - [self.tableView reloadData]; -} - -- (void)setTableView:(nullable UITableView *)tableView { - _tableView = tableView; - [tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:kCellReuseIdentitfier]; - - UINib *passwordCellNib = [UINib nibWithNibName:NSStringFromClass([FUIPasswordTableViewCell class]) - bundle:[FUIAuthUtils authUIBundle]]; - [tableView registerNib:passwordCellNib forCellReuseIdentifier:kPasswordCellReuseIdentitfier]; - - UINib *inputCellNib = [UINib nibWithNibName:NSStringFromClass([FUIInputTableViewCell class]) - bundle:[FUIAuthUtils authUIBundle]]; - [tableView registerNib:inputCellNib forCellReuseIdentifier:kInputCellReuseIdentitfier]; -} - -#pragma mark - UITableViewDataSource - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { - return _contents.sections.count; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - return _contents.sections[section].cells.count; -} - -- (nullable NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { - return _contents.sections[section].title; -} - -- (UITableViewCell *)tableView:(UITableView *)tableView - cellForRowAtIndexPath:(NSIndexPath *)indexPath{ - FUIStaticContentTableViewCell *cellData = - _contents.sections[indexPath.section].cells[indexPath.row]; - UITableViewCell *cell; - if (cellData.type == FUIStaticContentTableViewCellTypePassword) { - return [self dequeuePasswordCell:cellData tableView:tableView]; - } else if (cellData.type == FUIStaticContentTableViewCellTypeInput) { - return [self dequeueInputCell:cellData tableView:tableView]; - } else if (cellData.value.length) { - cell = [tableView dequeueReusableCellWithIdentifier:kValueCellReuseIdentitfier]; - if (!cell) { - cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 - reuseIdentifier:kValueCellReuseIdentitfier]; - cell.detailTextLabel.adjustsFontSizeToFitWidth = YES; - cell.detailTextLabel.minimumScaleFactor = 0.5; - } - } else { - // kCellReuseIdentitfier has already been registered. - cell = [tableView dequeueReusableCellWithIdentifier:kCellReuseIdentitfier - forIndexPath:indexPath]; - } - cell.textLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleSubheadline]; - cell.detailTextLabel.text = cellData.value; - cell.textLabel.text = cellData.title; - cell.accessoryType = cellData.action && - cellData.type == FUIStaticContentTableViewCellTypeDefault ? - UITableViewCellAccessoryDisclosureIndicator : UITableViewCellAccessoryNone; - cell.textLabel.textColor = cellData.type == FUIStaticContentTableViewCellTypeButton ? - [UIColor blueColor] : [UIColor blackColor]; - cell.selectionStyle = cellData.action ? UITableViewCellSelectionStyleDefault : - UITableViewCellSelectionStyleNone; - return cell; -} - -- (UITableViewCell *)dequeuePasswordCell:(FUIStaticContentTableViewCell *)cellData - tableView:(UITableView *)tableView{ - FUIPasswordTableViewCell *cell = - [tableView dequeueReusableCellWithIdentifier:kPasswordCellReuseIdentitfier]; - cell.title.text = cellData.title; - cell.password.text = cellData.value; - cell.password.placeholder = cellData.placeholder; - cell.cellData = cellData; - cell.title.font = [UIFont preferredFontForTextStyle:UIFontTextStyleSubheadline]; - return cell; -} - -- (UITableViewCell *)dequeueInputCell:(FUIStaticContentTableViewCell *)cellData - tableView:(UITableView *)tableView{ - FUIInputTableViewCell *cell = - [tableView dequeueReusableCellWithIdentifier:kInputCellReuseIdentitfier]; - cell.title.text = cellData.title; - cell.input.text = cellData.value; - cell.input.placeholder = cellData.placeholder; - cell.cellData = cellData; - cell.title.font = [UIFont preferredFontForTextStyle:UIFontTextStyleSubheadline]; - return cell; -} - -#pragma mark - UITableViewDelegate - -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { - FUIStaticContentTableViewCell *cellData = - _contents.sections[indexPath.section].cells[indexPath.row]; - BOOL hasAssociatedAction = cellData.action != nil; - if (hasAssociatedAction) { - cellData.action(); - } - [tableView deselectRowAtIndexPath:indexPath animated:hasAssociatedAction]; -} - -@end - -#pragma mark - - -@implementation FUIStaticContentTableViewContent - -+ (instancetype)contentWithSections: - (nullable NSArray *)sections { - return [[self alloc] initWithSections:sections]; -} - -- (instancetype)initWithSections:(nullable NSArray *)sections { - self = [super init]; - if (self) { - _sections = [sections copy]; - } - return self; -} - -@end - -#pragma mark - - -@implementation FUIStaticContentTableViewSection - -+ (instancetype)sectionWithTitle:(nullable NSString *)title - cells:(nullable NSArray *)cells { - return [[self alloc] initWithTitle:title cells:cells]; -} - -- (instancetype)initWithTitle:(nullable NSString *)title - cells:(nullable NSArray *)cells { - self = [super init]; - if (self) { - _title = [title copy]; - _cells = [cells copy]; - } - return self; -} - -@end - -#pragma mark - - -@implementation FUIStaticContentTableViewCell - -+ (instancetype)cellWithTitle:(nullable NSString *)title { - return [[self alloc] initWithTitle:title - value:nil - placeholder:nil - type:FUIStaticContentTableViewCellTypeDefault - action:nil]; -} - -+ (instancetype)cellWithTitle:(nullable NSString *)title - value:(nullable NSString *)value { - return [[self alloc] initWithTitle:title - value:value - placeholder:nil - type:FUIStaticContentTableViewCellTypeDefault - action:nil]; -} - -+ (instancetype)cellWithTitle:(nullable NSString *)title - action:(nullable FUIStaticContentTableViewCellAction)action { - return [[self alloc] initWithTitle:title - value:nil - placeholder:nil - type:FUIStaticContentTableViewCellTypeDefault - action:action]; -} - -+ (instancetype)cellWithTitle:(nullable NSString *)title - type:(FUIStaticContentTableViewCellType) type - action:(nullable FUIStaticContentTableViewCellAction)action { - return [[self alloc] initWithTitle:title - value:nil - placeholder:nil - type:type - action:action]; -} - -+ (instancetype)cellWithTitle:(nullable NSString *)title - value:(nullable NSString *)value - action:(nullable FUIStaticContentTableViewCellAction)action { - return [[self alloc] initWithTitle:title - value:value - placeholder:nil - type:FUIStaticContentTableViewCellTypeDefault - action:action]; -} - -+ (instancetype)cellWithTitle:(nullable NSString *)title - value:(nullable NSString *)value - type:(FUIStaticContentTableViewCellType) type - action:(nullable FUIStaticContentTableViewCellAction)action { - return [[self alloc] initWithTitle:title - value:value - placeholder:nil - type:type - action:action]; -} - -+ (instancetype)cellWithTitle:(nullable NSString *)title - value:(nullable NSString *)value - placeholder:(nullable NSString *)placeholder - type:(FUIStaticContentTableViewCellType) type - action:(nullable FUIStaticContentTableViewCellAction)action { - return [[self alloc] initWithTitle:title - value:value - placeholder:placeholder - type:type - action:action]; -} - -- (instancetype)initWithTitle:(nullable NSString *)title - value:(nullable NSString *)value - placeholder:(nullable NSString *)placeholder - type:(FUIStaticContentTableViewCellType) type - action:(nullable FUIStaticContentTableViewCellAction)action { - self = [super init]; - if (self) { - _title = [title copy]; - _value = [value copy]; - _action = [action copy]; - _placeholder = [placeholder copy]; - _type = type; - } - return self; -} - -@end - -@interface FUIPasswordTableViewCell () -@property (weak, nonatomic) IBOutlet UIButton *visibilityButton; -@end - -@implementation FUIPasswordTableViewCell - -- (IBAction)onPasswordVisibilitySelected:(id)sender { - self.password.secureTextEntry = ! self.password.secureTextEntry; - UIImage *image = self.password.secureTextEntry ? [UIImage imageNamed:kVisibilityOnImage] - : [UIImage imageNamed:kVisibilityOffImage]; - [self.visibilityButton setImage:image forState:UIControlStateNormal]; -} -- (IBAction)onPasswordChanged:(id)sender { - self.cellData.value = self.password.text; -} - -@end - -@implementation FUIInputTableViewCell - -- (IBAction)onInputChanged:(id)sender { - self.cellData.value = self.input.text; -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebaseAuthUI/Sources/Info.plist b/FirebaseAuthUI/Sources/Info.plist deleted file mode 100644 index e688d8b94f8..00000000000 --- a/FirebaseAuthUI/Sources/Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - FMWK - CFBundleShortVersionString - 0.5 - CFBundleSignature - ???? - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - NSPrincipalClass - - - diff --git a/FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAccountSettingsOperationType.h b/FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAccountSettingsOperationType.h deleted file mode 100644 index 796d110f211..00000000000 --- a/FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAccountSettingsOperationType.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// Copyright (c) 2017 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -/** @typedef FUIAccountSettingsOperationType - @brief List of all possible Account management operations. - */ -typedef NS_ENUM(NSInteger, FUIAccountSettingsOperationType) { - FUIAccountSettingsOperationTypeUnsupported = 0, - FUIAccountSettingsOperationTypeUpdateName, - FUIAccountSettingsOperationTypeUpdatePassword, - FUIAccountSettingsOperationTypeForgotPassword, - FUIAccountSettingsOperationTypeUpdateEmail, - FUIAccountSettingsOperationTypeUnlinkAccount, - FUIAccountSettingsOperationTypeSignOut, - FUIAccountSettingsOperationTypeDeleteAccount, -}; diff --git a/FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAccountSettingsViewController.h b/FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAccountSettingsViewController.h deleted file mode 100644 index 472ebb387d7..00000000000 --- a/FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAccountSettingsViewController.h +++ /dev/null @@ -1,35 +0,0 @@ -// -// Copyright (c) 2017 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FUIAuthBaseViewController.h" - -NS_ASSUME_NONNULL_BEGIN - -/** @class FUIAccountSettingsViewController - @brief Represents View Controller for Account Management UI. This controller should be embedded - in @c UINavigationController in order to present it's internal views. - */ -@interface FUIAccountSettingsViewController : FUIAuthBaseViewController - -/** @property deleteAccountActionDisabled - @brief Whether to hide "Delete account" button, defaults to NO. - */ -@property(nonatomic, assign, getter=isDeleteAccountActionDisabled) - BOOL deleteAccountActionDisabled; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuth.h b/FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuth.h deleted file mode 100644 index f7033b21a72..00000000000 --- a/FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuth.h +++ /dev/null @@ -1,276 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -#import "FUIAccountSettingsOperationType.h" -#import "FUIAuthProvider.h" - -@class FIRAuth; -@class FIRAuthDataResult; -@class FUIAuthPickerViewController; -@class FUIAuth; -@class FIRUser; -@class FUIEmailEntryViewController; -@class FUIPasswordSignInViewController; -@class FUIPasswordSignUpViewController; -@class FUIPasswordRecoveryViewController; -@class FUIPasswordVerificationViewController; - -NS_ASSUME_NONNULL_BEGIN - -/** @typedef FUIAuthResultCallback - @brief The type of block invoked when sign-in related events complete. - @param user The user signed in, if any. - @param error The error which occurred, if any. - */ -typedef void (^FUIAuthResultCallback)(FIRUser *_Nullable user, NSError *_Nullable error); - -/** @protocol FUIAuthDelegate - @brief A delegate that receives callbacks or provides custom UI for @c FUIAuth. - */ -@protocol FUIAuthDelegate - -@optional - -/** @fn authUI:didSignInWithAuthDataResult:error: - @brief Message sent after the sign in process has completed to report the signed in user or - error encountered. Use this variation with Firebase 11 and later. Swift implementations - should be marked with `@objc`. - @param authUI The @c FUIAuth instance sending the message. - @param authDataResult The data result if the sign in attempt was successful. - @param url pass the deep link associated with an email link sign-in completion. It is useful - for the developer to access the state before the sign-in attempt was triggered. - @param error The error that occurred during sign in, if any. - */ -- (void)authUI:(FUIAuth *)authUI - didSignInWith:(nullable FIRAuthDataResult *)authDataResult - URL:(nullable NSURL *)url - error:(nullable NSError *)error; - -/** @fn authUI:didSignInWithAuthDataResult:error: - @brief Message sent after the sign in process has completed to report the signed in user or - error encountered. Use this variation with Firebase 11 and later. Swift implementations - should be marked with `@objc`. - @param authUI The @c FUIAuth instance sending the message. - @param authDataResult The data result if the sign in attempt was successful. - @param error The error that occurred during sign in, if any. - */ -- (void)authUI:(FUIAuth *)authUI - didSignInWith:(nullable FIRAuthDataResult *)authDataResult - error:(nullable NSError *)error; - -/** @fn authUI:didSignInWithUser:error: - @brief This is deprecated API and will be removed in a future release. - Use @c authUI:didSignInWithAuthDataResult:error: - Both sign in call backs are called (@c authUI:didSignInWithAuthDataResult:error: - and @c authUI:didSignInWithUser:error:). - This message is sent after the sign in process has completed to report the signed in user or - error encountered. - @param authUI The @c FUIAuth instance sending the message. - @param user The signed in user if the sign in attempt was successful. - @param error The error that occurred during sign in, if any. - */ -- (void)authUI:(FUIAuth *)authUI - didSignInWithUser:(nullable FIRUser *)user - error:(nullable NSError *)error -__attribute__((deprecated("Instead use authUI:didSignInWithAuthDataResult:error:"))); - - -/** @fn authUI:didFinishOperation:error: - @brief Message sent after finishing Account Management operation. - @param authUI The @c FUIAuth instance sending the message. - @param operation The operation type that was just completed. - @param error The error that occurred during operation, if any. -*/ -- (void)authUI:(FUIAuth *)authUI - didFinishOperation:(FUIAccountSettingsOperationType)operation - error:(nullable NSError *)error; - -/** @fn authPickerViewControllerForAuthUI: - @brief Sent to the receiver to ask for an instance of @c FUIAuthPickerViewController subclass - to allow UI customizations. - @param authUI The @c FUIAuth instance sending the message. - @return an instance of @c FUIAuthPickerViewController subclass. - */ -- (FUIAuthPickerViewController *)authPickerViewControllerForAuthUI:(FUIAuth *)authUI; - -/** @fn emailEntryViewControllerForAuthUI: - @brief Sent to the receiver to ask for an instance of @c FUIEmailEntryViewController subclass - to allow UI customizations. - @param authUI The @c FUIAuth instance sending the message. - @return an instance of @c FUIEmailEntryViewController subclass. - */ -- (FUIEmailEntryViewController *)emailEntryViewControllerForAuthUI:(FUIAuth *)authUI; - -/** @fn passwordSignInViewControllerForAuthUI:email: - @brief Sent to the receiver to ask for an instance of @c FUIPasswordSignInViewController subclass - to allow sign-in UI customizations. - @param authUI The @c FUIAuth instance sending the message. - @param email The email user is using for sin-in. - @return an instance of @c FUIPasswordSignInViewController subclass. - */ -- (FUIPasswordSignInViewController *)passwordSignInViewControllerForAuthUI:(FUIAuth *)authUI - email:(nullable NSString *)email; - -/** @fn passwordSignInViewControllerForAuthUI:email: - @brief Sent to the receiver to ask for an instance of @c FUIPasswordSignUpViewController subclass - to allow sign-up UI customizations. - @param authUI The @c FUIAuth instance sending the message. - @param email The email user is using for sin-in. - @param requireDisplayName Whether the displayname field is required . - @return an instance of @c FUIPasswordSignUpViewController subclass. - */ -- (FUIPasswordSignUpViewController *)passwordSignUpViewControllerForAuthUI:(FUIAuth *)authUI - email:(nullable NSString *)email - requireDisplayName:(BOOL)requireDisplayName; - -/** @fn passwordRecoveryViewControllerForAuthUI:email: - @brief Sent to the receiver to ask for an instance of @c FUIPasswordRecoveryViewController subclass - to allow sign-up UI customizations. - @param authUI The @c FUIAuth instance sending the message. - @param email The email user is using for password recovery. - @return an instance of @c FUIPasswordRecoveryViewController subclass. - */ -- (FUIPasswordRecoveryViewController *)passwordRecoveryViewControllerForAuthUI:(FUIAuth *)authUI - email:(nullable NSString *)email; - -/** @fn passwordVerificationViewControllerForAuthUI:email:newCredential: - @brief Sent to the receiver to ask for an instance of @c FUIPasswordVerificationViewController subclass - to allow password verification UI customizations. - @param authUI The @c FUIAuth instance sending the message. - @param email The email user is using for sin-in. - @param newCredential This @c FIRAuthCredential obtained from linked account. - @return an instance of @c FUIPasswordVerificationViewController subclass. - */ -- (FUIPasswordVerificationViewController *)passwordVerificationViewControllerForAuthUI:(FUIAuth *)authUI - email:(nullable NSString *)email - newCredential:(FIRAuthCredential *)newCredential; -@end - -/** @class FUIAuth - @brief Provides various iOS UIs for Firebase Auth. - */ -@interface FUIAuth : NSObject - -/** @fn defaultAuthUI - @brief Gets the @c FUIAuth object for the default FirebaseApp. - @remarks Thread safe. - */ -+ (nullable FUIAuth *)defaultAuthUI; - -/** @fn authUIWithAuth: - @brief Gets the @c FUIAuth instance for a @c FIRAuth. - @param auth The @c FIRAuth for which to retrieve the associated @c FUIAuth instance. - @return The @c FUIAuth instance associated with the given @c FIRAuth. - @remarks Thread safe. - */ -+ (nullable FUIAuth *)authUIWithAuth:(FIRAuth *)auth; - -/** @property app - @brief Gets the @c FIRAuth this auth UI object is connected to. - */ -@property(nonatomic, weak, readonly, nullable) FIRAuth *auth; - -/** @property providers - @brief The @c FUIAuthProvider implementations to use for sign-in. - */ -@property(nonatomic, copy) NSArray> *providers; - -/** @property shouldHideCancelButton - @brief Whether to hide the cancel button, defaults to NO. - */ -@property(nonatomic, assign) BOOL shouldHideCancelButton; - -/** @property interactiveDismissEnabled - @brief Whether or not interactive dismiss should be enabled on iOS 13 and above devices. - */ -@property(nonatomic, assign, getter=isInteractiveDismissEnabled) BOOL interactiveDismissEnabled API_AVAILABLE(ios(13)); - -/** @property customStringsBundle - @brief Custom strings bundle supplied by the developer. Nil when there is no custom strings - bundle set. In which case the default bundle will be used. - @remarks Set this property to nil in order to remove the custom strings bundle and revert to - using the default bundle. - */ -@property(nonatomic, strong, nullable) NSBundle *customStringsBundle; - -/** @property TOSURL - @brief The URL of your app's Terms of Service. If not nil, a Terms of Service notice is - displayed on the initial sign-in screen and potentially the phone number auth and - email/password account creation screen. - */ -@property(nonatomic, copy, nullable) NSURL *TOSURL; - -/** @property shouldAutoUpgradeAnonymousUsers - @brief Whether to enable auto upgrading of anonymous accounts, defaults to NO. - */ -@property(nonatomic, assign, getter=shouldAutoUpgradeAnonymousUsers) BOOL autoUpgradeAnonymousUsers; - -/** @property privacyPolicyURL - @brief The URL of your app's Privacy Policy. If not nil, a privacy policy notice is - displayed on the initial sign-in screen and potentially the phone number auth and - email/password account creation screen. - */ -@property(nonatomic, copy, nullable) NSURL *privacyPolicyURL; - -/** @property delegate - @brief A delegate that receives callbacks or provides custom UI for @c FUIAuth. - */ -@property(nonatomic, weak) id delegate; - -/** @fn init - @brief Please use @c FUIAuth.authUIWithAuth to get a @c FUIAuth instance. - */ -- (instancetype)init NS_UNAVAILABLE; - -/** @fn handleOpenURL: - @brief Should be called from your @c UIApplicationDelegate in - @c UIApplicationDelegate.application:openURL:options: to finish sign-in flows. - @param URL The URL which may be handled by Firebase Auth UI if an URL is expected. - @param sourceApplication The application which tried opening the URL. - @return YES if Firebase Auth UI handled the URL. NO otherwise. - */ -- (BOOL)handleOpenURL:(NSURL *)URL - sourceApplication:(nullable NSString *)sourceApplication; - -/** @fn authViewController - @brief Returns an instance of the initial navigation view controller of AuthUI. - @return An instance of the the initial navigation view controller of AuthUI. - */ -- (UINavigationController *)authViewController; - -/** @fn signOutWithError: - @brief Signs out the current user from Firebase and all providers. - @param error Optionally; if an error occurs during Firebase sign out, upon return contains an - NSError object that describes the problem; is nil otherwise. If Firebase error occurs all - providers are not logged-out and sign-out should be retried. - @return @YES when the sign out request was successful. @NO otherwise. - @remarks Possible error codes: - - @c FIRAuthErrorCodeKeychainError Indicates an error occurred when accessing the keychain. - The @c NSLocalizedFailureReasonErrorKey field in the @c NSError.userInfo dictionary - will contain more information about the error encountered. - */ -- (BOOL)signOutWithError:(NSError *_Nullable *_Nullable)error; - -/** @fn useEmulatorWithHost:port - @brief Configures Firebase Auth to connect to an emulated host instead of the remote backend. - */ -- (void)useEmulatorWithHost:(NSString *)host port:(NSInteger)port; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthBaseViewController.h b/FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthBaseViewController.h deleted file mode 100644 index 6354c95edd2..00000000000 --- a/FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthBaseViewController.h +++ /dev/null @@ -1,124 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -@class FIRAuth; -@class FUIAuth; -@protocol FUIAuthProvider; - -NS_ASSUME_NONNULL_BEGIN - -/** @class FUIAuthBaseViewController - @brief The base view controller that provides common methods for all subclasses. - */ -@interface FUIAuthBaseViewController : UIViewController - -/** @typedef FUIAuthAlertActionHandler - @brief The type of block called when an alert view is dismissed by a user action. - */ -typedef void (^FUIAuthAlertActionHandler)(void); - -/** @property auth - @brief The @c FIRAuth instance of the application. - */ -@property(nonatomic, strong, readonly) FIRAuth *auth; - -/** @property authUI - @brief The @c FUIAuth instance of the application. - */ -@property(nonatomic, strong, readonly) FUIAuth *authUI; - -/** @fn init - @brief Please use @c initWithNibName:bundle:authUI:. - */ -- (instancetype)init NS_UNAVAILABLE; - -/** @fn initWithStyle: - @brief Please use @c initWithNibName:bundle:authUI:. - */ -- (instancetype)initWithStyle:(UITableViewStyle)style NS_UNAVAILABLE; - -/** @fn initWithNibName:bundle: - @brief Please use @c initWithNibName:bundle:authUI:. - */ -- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil - bundle:(nullable NSBundle *)nibBundleOrNil NS_UNAVAILABLE; - -/** @fn initWithNibName:bundle:authUI: - @brief Designated initializer. - @param nibNameOrNil The name of the nib file to associate with the view controller. - @param nibBundleOrNil The bundle in which to search for the nib file. - @param authUI The @c FUIAuth instance that manages this view controller. - */ -- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil - bundle:(nullable NSBundle *)nibBundleOrNil - authUI:(FUIAuth *)authUI NS_DESIGNATED_INITIALIZER; - -/** @fn initWithAuthUI: - @brief Convenience initializer. If your custom auth picker controller is using its - own nib file, this initializer should be overwritten. - @param authUI The @c FUIAuth instance that manages this view controller. - */ -- (instancetype)initWithAuthUI:(FUIAuth *)authUI; - -/** @fn onBack - @brief Pops the view controller from navigation stack. If current controller is root - works as @c cancelAuthorization - */ -- (void)onBack; - -/** @fn cancelAuthorization - @brief Cancels Authorization flow, calls UI delegate callbacks and hides UI - */ -- (void)cancelAuthorization; - -/** @fn showSignInAlertWithEmail:provider:handler: - @brief Displays an alert asking the user to confirm whether or not they want to proceed with the selected provider. - @param email The email address to sign in with. - @param provider The identity provider to sign in with. - @param signinHandler Handler for the sign in action of the alert. - @param cancelHandler Handler for the cancel action of the alert. - */ -+ (void)showSignInAlertWithEmail:(NSString *)email - provider:(id)provider - presentingViewController:(UIViewController *)presentingViewController - signinHandler:(FUIAuthAlertActionHandler)signinHandler - cancelHandler:(FUIAuthAlertActionHandler)cancelHandler; - -/** @fn incrementActivity - @brief Increment the current activity count. If there's positive number of activities, display - and animate the activity indicator with a short delay. - @remarks Calls to @c incrementActivity and @c decrementActivity should be balanced. - */ -- (void)incrementActivity; - -/** @fn decrementActivity - @brief Decrement the current activity count. If the count reaches 0, stop and hide the - activity indicator. - @remarks Calls to @c incrementActivity and @c decrementActivity should be balanced. - */ -- (void)decrementActivity; - -/** @fn addActivityIndicator: - @brief Creates and adds an activity indicator to the center of the specified view. - @param view The view where indicator is shown. - */ -+ (UIActivityIndicatorView *)addActivityIndicator:(UIView *)view; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthBaseViewController_Internal.h b/FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthBaseViewController_Internal.h deleted file mode 100644 index fa5b505f34d..00000000000 --- a/FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthBaseViewController_Internal.h +++ /dev/null @@ -1,150 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FUIAuthBaseViewController.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - * The methods in this category are exposed so that the FirebaseUI provider frameworks - * can make use of them. They may change in non-breaking releases and should not be - * used publicly. - */ -@interface FUIAuthBaseViewController (Internal) - -/** @fn isValidEmail: - @brief Statically validates email address. - @param email The email address to validate. - */ -+ (BOOL)isValidEmail:(NSString *)email; - -/** @fn showAlertWithMessage: - @brief Displays an alert view with given title and message on top of the current view - controller. - @param message The message of the alert. - */ -- (void)showAlertWithMessage:(NSString *)message; - -/** @fn showAlertWithMessage: - @brief Displays an alert view with given title and message on top of the current view - controller. - @param message The message of the alert. - */ -+ (void)showAlertWithMessage:(NSString *)message; - -/** @fn showAlertWithMessage:presentingViewController: - @brief Displays an alert view with given title and message on top of the current view - controller. - @param message The message of the alert. - @param presentingViewController The controller which shows alert. - */ -+ (void)showAlertWithMessage:(NSString *)message - presentingViewController:(nullable UIViewController *)presentingViewController; - -/** @fn showAlertWithTitle:message: - @brief Displays an alert view with given title, message and action title on top of the - specified view controller. - @param title The title of the alert. - @param message The message of the alert. - @param presentingViewController The controller which shows alert. -*/ -+ (void)showAlertWithTitle:(nullable NSString *)title - message:(nullable NSString *)message - presentingViewController:(nullable UIViewController *)presentingViewController; - -/** @fn showAlertWithTitle:message:actionTitle:actionHandler:dismissTitle:dismissHandler: - @brief Displays an alert view with given title, message and action title on top of the - specified view controller. - @param title The title of the alert. - @param message The message of the alert. - @param actionTitle The title of the action button. - @param actionHandler The block to execute if the action button is tapped. - @param dismissTitle The title of the dismiss button. - @param dismissHandler The block to execute if the cancel button is tapped. - @param presentingViewController The controller which shows alert. -*/ -+ (void)showAlertWithTitle:(nullable NSString *)title - message:(nullable NSString *)message - actionTitle:(nullable NSString *)actionTitle - actionHandler:(nullable FUIAuthAlertActionHandler)actionHandler - dismissTitle:(nullable NSString *)dismissTitle - dismissHandler:(nullable FUIAuthAlertActionHandler)dismissHandler - presentingViewController:(nullable UIViewController *)presentingViewController; - -/** @fn showSignInAlertWithEmail:providerShortName:providerSignInLabel:handler: - @brief Displays an alert to conform with user whether she wants to proceed with the provider. - @param email The email address to sign in with. - @param providerShortName The name of the provider as displayed in the sign-in alert message. - @param providerSignInLabel The name of the provider as displayed in the sign-in alert button. - @param signinHandler Handler for the sign in action of the alert. - @param cancelHandler Handler for the cancel action of the alert. - */ -+ (void)showSignInAlertWithEmail:(NSString *)email - providerShortName:(NSString *)providerShortName - providerSignInLabel:(NSString *)providerSignInLabel - presentingViewController:(UIViewController *)presentingViewController - signinHandler:(FUIAuthAlertActionHandler)signinHandler - cancelHandler:(FUIAuthAlertActionHandler)cancelHandler; - -/** @fn pushViewController: - @brief Push the view controller to the navigation controller of the current view controller - with animation. The pushed view controller will have a fixed "Back" title for back button. - @param viewController The view controller to be pushed. - */ -- (void)pushViewController:(UIViewController *)viewController; - -/** @fn dismissNavigationControllerAnimated:completion: - @brief dismiss navigation controller if it is not the rootViewController. If it is set as - the rootViewController only perform the completion block. - @param animated Use animation when dismissing the ViewControler. - @param completion Code to be executed upon completion - */ -- (void)dismissNavigationControllerAnimated:(BOOL)animated - completion:(void (^)(void))completion; - -/** @fn pushViewController: - @brief Push the view controller to the navigation controller of the current view controller - with animation. The pushed view controller will have a fixed "Back" title for back button. - @param viewController The view controller to be pushed. - @param navigationController The controller where view controller is pushed. - */ -+ (void)pushViewController:(UIViewController *)viewController - navigationController:(UINavigationController *)navigationController; - -/** @fn providerLocalizedName: - @brief Maps provider Id to localized provider name. - */ -+ (NSString *)providerLocalizedName:(NSString *)providerId; - -/** @fn barItemWithTitle:target:action: - @brief Creates multiline @c UIBarButtonItem of fixed width. - @param title The title of the button. - @param target The target object of the @c UIBarButtonItem . - @param action The action called when button is selected. - */ -+ (UIBarButtonItem *)barItemWithTitle:(NSString *)title - target:(nullable id)target - action:(SEL)action; - -/** @fn enableDynamicCellHeightForTableView: - @brief Configures table view in the way than it resizes rows according to their height. - @param tableView The tableView which is going to be configured. - */ -- (void)enableDynamicCellHeightForTableView:(UITableView *)tableView; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthErrorUtils.h b/FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthErrorUtils.h deleted file mode 100644 index 0e4aa07009b..00000000000 --- a/FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthErrorUtils.h +++ /dev/null @@ -1,62 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FUIAuthErrors.h" - -NS_ASSUME_NONNULL_BEGIN - -/** @class FUIAuthErrorUtils - @brief Utility class used to construct @c NSError instances. - */ -@interface FUIAuthErrorUtils : NSObject - -/** @fn errorWithCode: - @brief Creates an error with the specified code. - @param code The error code. - @param userInfo The dictionary containing the error description if available. - @return An @c NSError with the correct code and corresponding description if available. - */ -+ (NSError *)errorWithCode:(FUIAuthErrorCode)code userInfo:(nullable NSDictionary *)userInfo; - -/** @fn userCancelledSignInError - @brief Constructs an @c NSError with the @c FUIAuthErrorCodeUserCancelledSignIn code. - */ -+ (NSError *)userCancelledSignInError; - -/** @fn mergeConflictErrorWithUserInfo:underlyingError: - @brief Constructs an @c NSError with the @c FUIAuthErrorCodeMergeConflict code. - @param userInfo The userInfo dictionary to add to the NSError object. - @param underlyingError The error that was raised by FirebaseAuth while merging accounts. - @return The merge conflict error. - */ -+ (NSError *)mergeConflictErrorWithUserInfo:(NSDictionary *)userInfo - underlyingError:(nullable NSError *)underlyingError; - -/** @fn providerErrorWithUnderlyingError:providerID: - @brief Constructs an @c NSError with the @c FUIAuthErrorCodeProviderError code and a populated - @c NSUnderlyingErrorKey and @c FUIAuthErrorUserInfoProviderIDKey in the - @c NSError.userInfo dictionary. - @param underlyingError The value of the @c NSUnderlyingErrorKey. - @param providerID The value of the @c FUIAuthErrorUserInfoProviderIDKey. - @remarks This error is used when an error from the identity provider cannot be immediately - handled, and should be forwarded to the client. - */ -+ (NSError *)providerErrorWithUnderlyingError:(NSError *)underlyingError - providerID:(NSString *)providerID; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthErrors.h b/FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthErrors.h deleted file mode 100644 index 3b6acb9220e..00000000000 --- a/FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthErrors.h +++ /dev/null @@ -1,68 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** @var FUIAuthErrorDomain - @brief The standard Firebase error domain. - */ -extern NSString *const FUIAuthErrorDomain; - -/** @var FUIAuthErrorUserInfoProviderIDKey - @brief The ID of the identity provider. - */ -extern NSString *const FUIAuthErrorUserInfoProviderIDKey; - -/** @var FUIAuthCredentialKey - @brief The key used to obtain the credential stored within the userInfo dictionary of the - error, if available. - */ -extern NSString *const FUIAuthCredentialKey; - -/** @var FUIAuthErrorCode - @brief Error codes used by FUIAuth. - */ -typedef NS_ENUM(NSUInteger, FUIAuthErrorCode) { - - /** @var FUIAuthErrorCodeUserCancelledSignIn - @brief Indicates the user cancelled a sign-in flow. - */ - FUIAuthErrorCodeUserCancelledSignIn = 1, - - /** @var FUIAuthErrorCodeProviderError - @brief Indicates there's an error from the identity provider. The - @c FUIAuthErrorUserInfoProviderIDKey field in the @c NError.userInfo dictionary will - contain the ID of the identity provider. - */ - FUIAuthErrorCodeProviderError = 2, - - /** @var FUIAuthErrorCodeCantFindProvider - @brief Indicates that @FUIAuth.providers doen't contain current provider (see NSError.userInfo - key @c FUIAuthErrorUserInfoProviderIDKey). - */ - FUIAuthErrorCodeCantFindProvider = 3, - - /** @var FUIAuthErrorCodeMergeConflict - @brief Indicates that a merge conflict occurred while trying to automatically upgrade an - anonymous user. The non-anonymous credential can be obtained from the userInfo dictionary - of the corresponding NSError using the @c FUIAuthCredentialKey. - */ - FUIAuthErrorCodeMergeConflict = 4, -}; - -NS_ASSUME_NONNULL_END diff --git a/FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthPickerViewController.h b/FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthPickerViewController.h deleted file mode 100644 index d81a2b2ec39..00000000000 --- a/FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthPickerViewController.h +++ /dev/null @@ -1,30 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -#import "FUIAuthBaseViewController.h" - -NS_ASSUME_NONNULL_BEGIN - -/** @class FUIAuthPickerViewController - @brief The view controller that displays sign in options to the user. - */ -@interface FUIAuthPickerViewController : FUIAuthBaseViewController - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthProvider.h b/FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthProvider.h deleted file mode 100644 index df02263d89b..00000000000 --- a/FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthProvider.h +++ /dev/null @@ -1,180 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -@class FIRAuth; -@class FIRAuthCredential; -@class FIRUser; -@class FIRUserInfo; - -typedef void (^FIRAuthResultCallback)(FIRUser *_Nullable user, NSError *_Nullable error); - -NS_ASSUME_NONNULL_BEGIN - -/** @typedef FUIAuthProviderSignInCompletionBlock - @brief The type of block used to notify the auth system of the result of a sign-in flow. - @see FUIAuthProvider.signInWithDefaultValue:presentingViewController:completion: - @param credential The @c FIRAuthCredential object created after user interaction with third - party provider. - @param error The error which may happen during creation of The @c FIRAuthCredential object. - @param result The result of sign-in operation using provided @c FIRAuthCredential object. - @see @c FIRAuth.signInWithCredential:completion: - @param userInfo A dictionary containing additional information about the sign in operation. - @see FUIAuthProviderSignInUserInfoKey - */ -typedef void (^FUIAuthProviderSignInCompletionBlock) ( - FIRAuthCredential *_Nullable credential, - NSError *_Nullable error, - _Nullable FIRAuthResultCallback result, - NSDictionary *_Nullable userInfo); - -/** - @typedef FUIAuthProviderSignInUserInfoKey - @brief A key in a userInfo dictionary corresponding to some supplemental value from - the sign-in operation. - @see FUIAuthProviderSignInCompletionBlock - */ -typedef NSString *FUIAuthProviderSignInUserInfoKey NS_TYPED_ENUM; - -/** - @typedef FUIButtonAlignment - @brief The alignment of the icon and text of the button. -*/ -typedef NS_ENUM(NSInteger, FUIButtonAlignment) { - FUIButtonAlignmentLeading, - FUIButtonAlignmentCenter, -}; - -/** - For Firebase-based authentication operations, use this key to obtain the original auth result - that was returned from the sign-in operation. - */ -static FUIAuthProviderSignInUserInfoKey FUIAuthProviderSignInUserInfoKeyAuthDataResult = - @"FUIAuthProviderSignInUserInfoKeyAuthDataResult"; - -/** @protocol FUIAuthProvider - @brief Represents an authentication provider (such as Google Sign In or Facebook Login) which - can be used with the AuthUI classes (like @c FUIAuthPickerViewController). - @remarks @c FUIAuth.signInProviders is populated with a list of @c FUIAuthProvider instances - to provide users with sign-in options. - */ -@protocol FUIAuthProvider - -/** @property providerID - @brief A unique identifier for the provider. - */ -@property(nonatomic, copy, readonly, nullable) NSString *providerID; - -/** @property shortName - @brief A short display name for the provider. - */ -@property(nonatomic, copy, readonly) NSString *shortName; - -/** @property signInLabel - @brief A localized label for the provider's sign-in button. - */ -@property(nonatomic, copy, readonly) NSString *signInLabel; - -/** @property icon - @brief The icon image of the provider. - */ -@property(nonatomic, strong, readonly) UIImage *icon; - -/** @property buttonBackgroundColor - @brief The background color that should be used for the sign in button of the provider. - */ -@property(nonatomic, strong, readonly) UIColor *buttonBackgroundColor; - -/** @property buttonTextColor - @brief The text color that should be used for the sign in button of the provider. - */ -@property(nonatomic, strong, readonly) UIColor *buttonTextColor; - -/** @property buttonAlignment - @brief The alignment of the icon and text of the button. - */ -@property(nonatomic, readwrite) FUIButtonAlignment buttonAlignment; - -/** @fn signInWithEmail:presentingViewController:completion: - @brief Called when the user wants to sign in using this auth provider. - @remarks Implementors should invoke the completion block when the sign-in process has terminated - or is canceled. There are two valid combinations of parameters; either @c credentials and - @c userInfo are both non-nil, or @c error is non-nil. Errors must specify an error code - which is one of the @c FIRAuthErrorCode codes. It is very important that all possible code - paths eventually call this method to inform the auth system of the result of the sign-in - flow. - @param email The email address of the user if it's known. - @param presentingViewController The view controller used to present the UI. - @param completion See remarks. A block which should be invoked when the sign-in process - (using @c FIRAuthCredential) completes. - */ -- (void)signInWithEmail:(nullable NSString *)email - presentingViewController:(nullable UIViewController *)presentingViewController - completion:(nullable FUIAuthProviderSignInCompletionBlock)completion -__attribute__((deprecated("This is deprecated API and will be removed in a future release." - "Use signInWithDefaultValue:presentingViewController:completion:"))); - -/** @fn signInWithDefaultValue:presentingViewController:completion: - @brief Called when the user wants to sign in using this auth provider. - @remarks Implementors should invoke the completion block when the sign-in process has terminated - or is canceled. There are two valid combinations of parameters; either @c credentials and - @c userInfo are both non-nil, or @c error is non-nil. Errors must specify an error code - which is one of the @c FIRAuthErrorCode codes. It is very important that all possible code - paths eventually call this method to inform the auth system of the result of the sign-in - flow. - @param defaultValue The default initialization value of the provider (email, phone number etc.). - @param presentingViewController The view controller used to present the UI. - @param completion See remarks. A block which should be invoked when the sign-in process - (using @c FIRAuthCredential) completes. - */ -- (void)signInWithDefaultValue:(nullable NSString *)defaultValue - presentingViewController:(nullable UIViewController *)presentingViewController - completion:(nullable FUIAuthProviderSignInCompletionBlock)completion; - -/** @fn signOut - @brief Called when the user wants to sign out. - */ -- (void)signOut; - -/** @property accessToken - @brief User Access Token obtained during sign in. - */ -@property(nonatomic, copy, readonly, nullable) NSString *accessToken; - -@optional; - -/** @property idToken - @brief User Id Token obtained during sign in. Not all providers can return, thus it's optional. - */ -@property(nonatomic, copy, readonly, nullable) NSString *idToken; - -/** @fn email - @brief The email address associated with this provider, if any. - */ -- (NSString *)email; - -/** @fn handleOpenURL: - @brief May be used to help complete a sign-in flow which requires a callback from Safari. - @param URL The URL which may be handled by the auth provider if an URL is expected. - @param sourceApplication The application which tried opening the URL. - @return YES if your auth provider handled the URL. NO otherwise. - */ -- (BOOL)handleOpenURL:(NSURL *)URL sourceApplication:(nullable NSString *)sourceApplication; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthStrings.h b/FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthStrings.h deleted file mode 100644 index 700ab911ce7..00000000000 --- a/FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthStrings.h +++ /dev/null @@ -1,147 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -extern NSString *const kStr_ASCellAddPassword; -extern NSString *const kStr_ASCellChangePassword; -extern NSString *const kStr_ASCellDeleteAccount; -extern NSString *const kStr_ASCellEmail; -extern NSString *const kStr_ASCellName; -extern NSString *const kStr_ASCellSignOut; -extern NSString *const kStr_ASSectionTitleLinkedAccounts; -extern NSString *const kStr_ASSectionTitleProfile; -extern NSString *const kStr_ASSectionTitleSecurity; -extern NSString *const kStr_AccountDisabledError; -extern NSString *const kStr_AuthPickerTitle; -extern NSString *const kStr_Back; -extern NSString *const kStr_Cancel; -extern NSString *const kStr_CannotAuthenticateError; -extern NSString *const kStr_ChoosePassword; -extern NSString *const kStr_Close; -extern NSString *const kStr_ConfirmEmail; -extern NSString *const kStr_Email; -extern NSString *const kStr_EmailAlreadyInUseError; -extern NSString *const kStr_EmailSentConfirmationMessage; -extern NSString *const kStr_EnterYourEmail; -extern NSString *const kStr_EnterYourPassword; -extern NSString *const kStr_Error; -extern NSString *const kStr_ExistingAccountTitle; -extern NSString *const kStr_FirstAndLastName; -extern NSString *const kStr_ForgotPassword; -extern NSString *const kStr_InvalidEmailError; -extern NSString *const kStr_InvalidPasswordError; -extern NSString *const kStr_Name; -extern NSString *const kStr_Next; -extern NSString *const kStr_OK; -extern NSString *const kStr_Password; -extern NSString *const kStr_PasswordRecoveryEmailSentMessage; -extern NSString *const kStr_PasswordRecoveryEmailSentTitle; -extern NSString *const kStr_PasswordRecoveryMessage; -extern NSString *const kStr_PasswordRecoveryTitle; -extern NSString *const kStr_PasswordVerificationMessage; -extern NSString *const kStr_ProviderUsedPreviouslyMessage; -extern NSString *const kStr_Save; -extern NSString *const kStr_Send; -extern NSString *const kStr_Resend; -extern NSString *const kStr_SignedIn; -extern NSString *const kStr_SignInTitle; -extern NSString *const kStr_SignInTooManyTimesError; -extern NSString *const kStr_SignInWithEmail; -extern NSString *const kStr_SignInEmailSent; -extern NSString *const kStr_SignUpTitle; -extern NSString *const kStr_SignUpTooManyTimesError; -extern NSString *const kStr_TermsOfService; -extern NSString *const kStr_TroubleGettingEmailTitle; -extern NSString *const kStr_TroubleGettingEmailMessage; -extern NSString *const kStr_PrivacyPolicy; -extern NSString *const kStr_TermsOfServiceMessage; -extern NSString *const kStr_UserNotFoundError; -extern NSString *const kStr_WeakPasswordError; -extern NSString *const kStr_WrongPasswordError; -extern NSString *const kStr_CantFindProvider; -extern NSString *const kStr_EmailsDontMatch; -extern NSString *const kStr_ForgotPassword; -extern NSString *const kStr_VerifyItsYou; -extern NSString *const kStr_DeleteAccountConfirmationTitle; -extern NSString *const kStr_DeleteAccountBody; -extern NSString *const kStr_DeleteAccountConfirmationMessage; -extern NSString *const kStr_Delete; -extern NSString *const kStr_DeleteAccountControllerTitle; -extern NSString *const kStr_ActionCantBeUndone; -extern NSString *const kStr_UnlinkTitle; -extern NSString *const kStr_UnlinkAction; -extern NSString *const kStr_UnlinkConfirmationTitle; -extern NSString *const kStr_UnlinkConfirmationMessage; -extern NSString *const kStr_UnlinkConfirmationActionTitle; -extern NSString *const kStr_UpdateEmailAlertMessage; -extern NSString *const kStr_UpdateEmailVerificationAlertMessage; -extern NSString *const kStr_AddPasswordAlertMessage; -extern NSString *const kStr_EditPasswordAlertMessage; -extern NSString *const kStr_ReauthenticateEditPasswordAlertMessage; -extern NSString *const kStr_AddPasswordTitle; -extern NSString *const kStr_EditPasswordTitle; -extern NSString *const kStr_EditNameTitle; -extern NSString *const kStr_EditEmailTitle; -extern NSString *const kStr_ProviderTitlePassword; -extern NSString *const kStr_ProviderTitleGoogle; -extern NSString *const kStr_ProviderTitleFacebook; -extern NSString *const kStr_ProviderTitleTwitter; -extern NSString *const kStr_SignInWithProvider; -extern NSString *const kStr_PlaceholderEnterName; -extern NSString *const kStr_PlaceholderEnterEmail; -extern NSString *const kStr_PlaceholderEnterPassword; -extern NSString *const kStr_PlaceholderChosePassword; -extern NSString *const kStr_PlaceholderNewPassword; -extern NSString *const kStr_ForgotPasswordTitle; - -#ifdef __cplusplus -extern "C" { -#endif - -/** @fn FUILocalizedString - @brief Gets a localized string from a name. - @param key The key value of the string. - @return The string by the key localized in the current locale located in default table. - */ -NSString *FUILocalizedString(NSString *key); - -/** @fn FUILocalizedStringFromTable - @brief Gets a localized string from a name. - @param key The key value of the string. - @param table The localization table name. - @return The string by the key localized in the current locale. -*/ -NSString *FUILocalizedStringFromTable(NSString *key, NSString *table); - -/** @fn FUILocalizedStringFromTableInBundle - @brief Gets a localized string from a name. - @param key The key value of the string. - @param table The localization table name. - @param bundle The bundle containing the strings. If nil is provided, this function searches the main app bundle. - @return The string by the key localized in the current locale. -*/ -NSString *FUILocalizedStringFromTableInBundle(NSString *key, - NSString *table, - NSBundle *_Nullable bundle); - -#ifdef __cplusplus -} -#endif - -NS_ASSUME_NONNULL_END diff --git a/FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthTableHeaderView.h b/FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthTableHeaderView.h deleted file mode 100644 index ed6ffd43bdb..00000000000 --- a/FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthTableHeaderView.h +++ /dev/null @@ -1,34 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -/** @class FUIAuthTableHeaderView - @brief A table header view that contains a title label and a detail label. - */ -@interface FUIAuthTableHeaderView : UIView - -/** @property titleLabel - @brief The title label in this table header view. - */ -@property(nonatomic, strong) UILabel *titleLabel; - -/** @property detailLabel - @brief The detail label in this table header view. - */ -@property(nonatomic, strong) UILabel *detailLabel; - -@end diff --git a/FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthTableViewCell.h b/FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthTableViewCell.h deleted file mode 100644 index e8357c5de37..00000000000 --- a/FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthTableViewCell.h +++ /dev/null @@ -1,38 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** @class FUIAuthTableViewCell - @brief A common table view cell that can be used in multiple view controllers. - */ -@interface FUIAuthTableViewCell : UITableViewCell - -/** @property label - @brief The label that describes the purpose of @c textField. - */ -@property(nonatomic, strong) IBOutlet UILabel *label; - -/** @property textField - @brief The text field that collects user's input. - */ -@property(nonatomic, strong) IBOutlet UITextField *textField; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthUtils.h b/FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthUtils.h deleted file mode 100644 index cafebe8fe4e..00000000000 --- a/FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuthUtils.h +++ /dev/null @@ -1,63 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -/* Name of the FirebaseAuthUI resource bundle. */ -extern NSString *const FUIAuthBundleName; - -/** @class FUIAuthUtils - @brief Provides utility methods for Firebase Auth UI. - */ -@interface FUIAuthUtils : NSObject - -- (instancetype)init NS_UNAVAILABLE; - -+ (NSBundle *)authUIBundle; - -/** @fn bundleNamed: - @brief Gets the framework bundle for specified name - @param bundleName Name of the bundle to retreive. If nil, this returns the default bundle for - FirebaseUI. - @param framework The name of the framework module the resource bundle should be present in. - */ -+ (nullable NSBundle *)bundleNamed:(nullable NSString *)bundleName - inFrameworkBundle:(nullable NSBundle *)framework; - -/** @fn imageNamed:fromBundle: - @brief Gets a UIImage with the given name, assuming it's a png. - @param name Name of the image to retreive. - @param bundle The bundle to retrieve the image from. If nil, this method will look into the - default FirebaseAuthUI framework bundle. - */ -+ (nullable UIImage *)imageNamed:(NSString *)name fromBundle:(nullable NSBundle *)bundle; - -/** @fn randomNonce - @brief Generates a random 32-character nonce. - */ -+ (NSString *)randomNonce; - -/** @fn stringBySHA256HashingString: - @brief Generates the SHA-256 hash of the input string. - @param input The input string to be hashed. - */ -+ (NSString *)stringBySHA256HashingString:(NSString *)input; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuth_Internal.h b/FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuth_Internal.h deleted file mode 100644 index 12e10231d28..00000000000 --- a/FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIAuth_Internal.h +++ /dev/null @@ -1,105 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FUIAuth.h" - -@class FUIAuthBaseViewController; - -/** @typedef FUIEmailHintSignInCallback - @brief The type of block invoked when an emailHint sign-in event completes. - - @param authResult Optionally; Result of sign-in request containing both the user and - the additional user info associated with the user. - @param error Optionally; the error which occurred - or nil if the request was successful. - @param credential Optionally; The credential used to sign-in. - */ -typedef void (^FUIEmailHintSignInCallback)(FIRAuthDataResult *_Nullable authResult, - NSError *_Nullable error, - FIRAuthCredential *_Nullable credential); - -NS_ASSUME_NONNULL_BEGIN - - -/** - * The methods defined in this file are for use in the FirebaseUI provider libraries. - * They may break in non-major releases and are not for public use. - */ -@protocol FUIEmailAuthProvider - -- (void)handleAccountLinkingForEmail:(NSString *)email - newCredential:(FIRAuthCredential *)newCredential - presentingViewController:(UIViewController *)presentingViewController - signInResult:(_Nullable FIRAuthResultCallback)result; - -- (void)signInWithEmailHint:(NSString *)emailHint - presentingViewController:(FUIAuthBaseViewController *)presentingViewController - originalError:(NSError *)originalError - completion:(FUIEmailHintSignInCallback)completion; - -@end - -@interface FUIAuth () - -/** @fn invokeResultCallbackWithAuthDataResult:error: - @brief Invokes the auth UI result callback. - @param authDataResult The sign in data result, if any. - @param url The url, if any. - @param error The error which occurred, if any. - */ -- (void)invokeResultCallbackWithAuthDataResult:(nullable FIRAuthDataResult *)authDataResult - URL:(nullable NSURL *)url - error:(nullable NSError *)error; - -/** @fn invokeOperationCallback:error: - @brief Invokes the auth UI operation callback. - @param operation The executed operation. - @param error The error which occurred, if any. - */ -- (void)invokeOperationCallback:(FUIAccountSettingsOperationType)operation - error:(NSError *_Nullable)error; - - -/** @fn providerWithID: - @brief Returns first provider (if it exists) with specified provider ID. - @param providerID The ID of the provider. - */ -- (nullable id)providerWithID:(NSString *)providerID; - -/** @fn signInWithProviderUI:presentingViewController:defaultValue: - @brief Signs in with specified provider. - @see FUIAuthDelegate.authUI:didSignInWithAuthDataResult:URL:error: for method callback. - @param providerUI The authentication provider used for signing in. - @param presentingViewController The view controller used to present the UI. - @param defaultValue The provider default initialization value (e.g. email or phone number) - used for signing in. - */ -- (void)signInWithProviderUI:(id)providerUI - presentingViewController:(UIViewController *)presentingViewController - defaultValue:(nullable NSString *)defaultValue; - -/** @property emailAuthProvider - @brief The email auth provider, if any, that will be displayed in the default sign-in UI. - */ -@property(nonatomic, weak, nullable) id emailAuthProvider; - -/** @property emulatorEnabled - @brief Whether or not the auth emulator is being used. - */ -@property(nonatomic, assign, getter=isEmulatorEnabled) BOOL emulatorEnabled; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIPrivacyAndTermsOfServiceView.h b/FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIPrivacyAndTermsOfServiceView.h deleted file mode 100644 index 6119828d6c2..00000000000 --- a/FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FUIPrivacyAndTermsOfServiceView.h +++ /dev/null @@ -1,56 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -@class FUIAuth; - -NS_ASSUME_NONNULL_BEGIN - -@interface FUIPrivacyAndTermsOfServiceView : UITextView - -/** @fn useFullMessage - @brief Display Privacy and Terms of Service message in full form. - */ -- (void)useFullMessage; - -/** @fn useFooterMessage - @brief Display Privacy and Terms of Service link, which usually are placed as footer. - */ -- (void)useFooterMessage; - -/** @property authUI - @brief the @c FUIAuth instance whose bundle will be used to populate the view's terms of service and - privacy policy content. If this property is nil, the default @c FUIAuth instance's terms of service and - privacy policy will be used. - */ -@property(nonatomic, strong, nullable) FUIAuth *authUI; - -@end - -@interface FUIPrivacyAndTermsOfServiceView (Protected) - -/** @fn privacyPolicyAndTOSMessageFromFormat: - @brief produce the Privacy and Terms of Service attributed string based on a customized format. - @param format the customized format with two placeholder for Privacy and Terms of Service - respectively. - @return the Privacy and Terms of Service attributed string. - */ -- (nullable NSAttributedString *)privacyPolicyAndTOSMessageFromFormat:(NSString *)format; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FirebaseAuthUI.h b/FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FirebaseAuthUI.h deleted file mode 100644 index 3746a12b5de..00000000000 --- a/FirebaseAuthUI/Sources/Public/FirebaseAuthUI/FirebaseAuthUI.h +++ /dev/null @@ -1,39 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -//! Project version number for FirebaseAuthUI. -FOUNDATION_EXPORT double FirebaseAuthUIVersionNumber; - -//! Project version string for FirebaseAuthUI. -FOUNDATION_EXPORT const unsigned char FirebaseAuthUIVersionString[]; - -#import "FUIAccountSettingsOperationType.h" -#import "FUIAccountSettingsViewController.h" - -#import "FUIAuth.h" -#import "FUIAuth_Internal.h" -#import "FUIAuthBaseViewController.h" -#import "FUIAuthBaseViewController_Internal.h" -#import "FUIAuthErrorUtils.h" -#import "FUIAuthPickerViewController.h" -#import "FUIAuthProvider.h" -#import "FUIAuthUtils.h" -#import "FUIAuthStrings.h" -#import "FUIPrivacyAndTermsOfServiceView.h" -#import "FUIAuthTableViewCell.h" -#import "FUIAuthTableHeaderView.h" diff --git a/FirebaseAuthUI/Sources/Resources/FUIAccountSettingsViewController.xib b/FirebaseAuthUI/Sources/Resources/FUIAccountSettingsViewController.xib deleted file mode 100644 index e9bf85ffb85..00000000000 --- a/FirebaseAuthUI/Sources/Resources/FUIAccountSettingsViewController.xib +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FirebaseAuthUI/Sources/Resources/FUIAuthPickerViewController.xib b/FirebaseAuthUI/Sources/Resources/FUIAuthPickerViewController.xib deleted file mode 100644 index 740cc32c5cc..00000000000 --- a/FirebaseAuthUI/Sources/Resources/FUIAuthPickerViewController.xib +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FirebaseAuthUI/Sources/Resources/FUIAuthTableViewCell.xib b/FirebaseAuthUI/Sources/Resources/FUIAuthTableViewCell.xib deleted file mode 100644 index 4060491f351..00000000000 --- a/FirebaseAuthUI/Sources/Resources/FUIAuthTableViewCell.xib +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FirebaseAuthUI/Sources/Resources/FUIInputTableViewCell.xib b/FirebaseAuthUI/Sources/Resources/FUIInputTableViewCell.xib deleted file mode 100644 index 872fa477818..00000000000 --- a/FirebaseAuthUI/Sources/Resources/FUIInputTableViewCell.xib +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FirebaseAuthUI/Sources/Resources/FUIPasswordTableViewCell.xib b/FirebaseAuthUI/Sources/Resources/FUIPasswordTableViewCell.xib deleted file mode 100644 index bd8b11c49d0..00000000000 --- a/FirebaseAuthUI/Sources/Resources/FUIPasswordTableViewCell.xib +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FirebaseAuthUI/Sources/Resources/FUIStaticContentTableViewController.xib b/FirebaseAuthUI/Sources/Resources/FUIStaticContentTableViewController.xib deleted file mode 100644 index 04a2b42bd9d..00000000000 --- a/FirebaseAuthUI/Sources/Resources/FUIStaticContentTableViewController.xib +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FirebaseAuthUI/Sources/Resources/ic_account_circle.png b/FirebaseAuthUI/Sources/Resources/ic_account_circle.png deleted file mode 100755 index 93082c336f7..00000000000 Binary files a/FirebaseAuthUI/Sources/Resources/ic_account_circle.png and /dev/null differ diff --git a/FirebaseAuthUI/Sources/Resources/ic_account_circle2x.png b/FirebaseAuthUI/Sources/Resources/ic_account_circle2x.png deleted file mode 100755 index ea280fe6347..00000000000 Binary files a/FirebaseAuthUI/Sources/Resources/ic_account_circle2x.png and /dev/null differ diff --git a/FirebaseAuthUI/Sources/Resources/ic_account_circle3x.png b/FirebaseAuthUI/Sources/Resources/ic_account_circle3x.png deleted file mode 100755 index 5d488d08dfe..00000000000 Binary files a/FirebaseAuthUI/Sources/Resources/ic_account_circle3x.png and /dev/null differ diff --git a/FirebaseAuthUI/Sources/Resources/ic_visibility.png b/FirebaseAuthUI/Sources/Resources/ic_visibility.png deleted file mode 100644 index 58597e91b97..00000000000 Binary files a/FirebaseAuthUI/Sources/Resources/ic_visibility.png and /dev/null differ diff --git a/FirebaseAuthUI/Sources/Resources/ic_visibility@2x.png b/FirebaseAuthUI/Sources/Resources/ic_visibility@2x.png deleted file mode 100644 index 1f7b4cc8f24..00000000000 Binary files a/FirebaseAuthUI/Sources/Resources/ic_visibility@2x.png and /dev/null differ diff --git a/FirebaseAuthUI/Sources/Resources/ic_visibility@3x.png b/FirebaseAuthUI/Sources/Resources/ic_visibility@3x.png deleted file mode 100644 index c816ab49dca..00000000000 Binary files a/FirebaseAuthUI/Sources/Resources/ic_visibility@3x.png and /dev/null differ diff --git a/FirebaseAuthUI/Sources/Resources/ic_visibility_off.png b/FirebaseAuthUI/Sources/Resources/ic_visibility_off.png deleted file mode 100644 index 3efdf49225d..00000000000 Binary files a/FirebaseAuthUI/Sources/Resources/ic_visibility_off.png and /dev/null differ diff --git a/FirebaseAuthUI/Sources/Resources/ic_visibility_off@2x.png b/FirebaseAuthUI/Sources/Resources/ic_visibility_off@2x.png deleted file mode 100644 index 46bf0c931a0..00000000000 Binary files a/FirebaseAuthUI/Sources/Resources/ic_visibility_off@2x.png and /dev/null differ diff --git a/FirebaseAuthUI/Sources/Resources/ic_visibility_off@3x.png b/FirebaseAuthUI/Sources/Resources/ic_visibility_off@3x.png deleted file mode 100644 index 13eb65df37f..00000000000 Binary files a/FirebaseAuthUI/Sources/Resources/ic_visibility_off@3x.png and /dev/null differ diff --git a/FirebaseAuthUI/Sources/Strings/ar.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/ar.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 86c2a466b22..00000000000 --- a/FirebaseAuthUI/Sources/Strings/ar.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "مرحبًا"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "تسجيل الدخول عبر البريد الإلكتروني"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "إدخال عنوان بريدك الإلكتروني"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "إنّ عنوان البريد الإلكتروني هذا غير صحيح."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "لا يتيح هذا التطبيق استخدام هذا النوع من الحساب"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "لديك حساب حاليًا"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "سبق أن استخدمت %@. يُرجى تسجيل الدخول باسم %@ للمتابعة."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "تسجيل الدخول"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "إدخال كلمة المرور"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "لا يمكن أن يكون حقل كلمة المرور فارغًا."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "إنّ البريد الإلكتروني وكلمة المرور اللذين أدخلتهما ليسا متطابقين."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "لا يتطابق عنوان البريد الإلكتروني هذا مع حساب حالي."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "إنّ عنوان البريد الإلكتروني هذا تابع لحساب سبق أن تم إيقافه."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "لقد أدخلت كلمة مرور غير صحيحة لمرات كثيرة جدًا. يُرجى المحاولة مجددًا بعد بضع دقائق."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "تعذّر الحصول على مزوّد %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "لا تتطابق رسالتا البريد الإلكتروني"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "استرداد كلمة المرور"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "تم إرسال تعليمات إلى البريد الإلكتروني هذا تشرح كيفية إعادة تعيين كلمة المرور."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "إثبات ملكية بريدك الإلكتروني"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "اتبع التعليمات التي تم إرسالها إلى %@ لاسترداد كلمة المرور."; - -/* Title for sign up screen. */ -"SignUpTitle" = "إنشاء حساب"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "الاسم الأول واسم العائلة"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "اختيار كلمة المرور"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "بنود الخدمة"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "سياسة الخصوصية"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "تشير المتابعة إلى موافقتك على %@ و%@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "يستخدم حساب آخر عنوان البريد الإلكتروني."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "تتضمن كلمات المرور القوية 6 أرقام على الأقل ومزيجًا من الأحرف والأرقام."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "ثمة عدد كبير جدًا من الطلبات الواردة من عنوان IP التابع لك. يُرجى المحاولة مجددًا بعد بضع دقائق."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "لقد سبق أن استخدمت %@ لتسجيل الدخول. يُرجى إدخال كلمة المرور لهذا الحساب."; - -/* OK button title. */ -"OK" = "موافق"; - -/* Cancel button title. */ -"Cancel" = "إلغاء"; - -/* Back button title. */ -"Back" = "رجوع"; - -/* Next button title. */ -"Next" = "التالي"; - -/* Save button title. */ -"Save" = "حفظ"; - -/* Send button title. */ -"Send" = "إرسال"; - -/* Resend button title. */ -"Resend" = "إعادة إرسال الرسالة"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "البريد الإلكتروني"; - -/* Label next to a password text field. */ -"Password" = "كلمة المرور"; - -/* Label next to a name text field. */ -"Name" = "الاسم"; - -/* Alert title Error. */ -"Error" = "خطأ"; - -/* Alert button title Close. */ -"Close" = "إغلاق"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "الملف الشخصي"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "الأمان"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "الحسابات المرتبطة"; - -/* Account Settings cell title Name. */ -"AS_Name" = "الاسم"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "البريد الإلكتروني"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "إضافة كلمة مرور"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "تغيير كلمة المرور"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "تسجيل الخروج"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "حذف الحساب"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "هل نسيت كلمة المرور؟"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "تأكيد ملكية الحساب"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "هل تريد حذف الحساب؟"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "سيؤدي هذا الإجراء إلى حذف كل البيانات المقترنة بحسابك ولا يمكن التراجع عنه. يجب تسجيل الدخول مجددًا لإكمال هذا الإجراء"; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "سيؤدي هذا الإجراء إلى حذف كل البيانات المقترنة بحسابك ولا يمكن التراجع عنه. هل تريد بالتأكيد حذف حسابك؟"; - -/* Text of Delete action button. */ -"Delete" = "حذف"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "حذف الحساب"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "لا يمكن التراجع عن هذا الإجراء"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "إلغاء الربط"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "حساب مرتبط"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "هل تريد إلغاء ربط الحساب؟"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "لن تتمكن بعد الآن من تسجيل الدخول باستخدام حسابك"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "إلغاء ربط الحساب"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "لتغيير عنوان البريد الإلكتروني المقترن بحسابك، سيلزمك تسجيل الدخول مرة أخرى."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "لتغيير كلمة المرور، يجب أولاً إدخال كلمة المرور الحالية."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "تعديل الرسالة"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "تعديل الاسم"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "لإضافة كلمة مرور إلى حسابك، يجب تسجيل الدخول من جديد."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "لتغيير كلمة المرور في حسابك، يجب تسجيل الدخول من جديد."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "لتغيير كلمة المرور، يجب أولاً إدخال كلمة المرور الحالية."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "إضافة كلمة مرور"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "تغيير كلمة المرور"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "البريد الإلكتروني"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "تسجيل الدخول عبر %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "إدخال اسمك"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "إدخال عنوان بريدك الإلكتروني"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "إدخال كلمة المرور"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "كلمة المرور الجديدة"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "اختيار كلمة المرور"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "هل تواجه مشكلة في تسجيل الدخول؟"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "تأكيد عنوان البريد الإلكتروني"; - -/* Title of successfully signed in label. */ -"SignedIn" = "تمّ تسجيل الدخول."; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "هل تواجه مشكلة في استلام الرسائل الإلكترونية؟"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "يمكنك تجربة الحلول الشائعة التالية: \n - التأكّد ممّا إذا تمّ وضع علامة على الرسالة الإلكترونية بأنها \"غير مرغوب فيها\" أو نقلها تلقائيًا إلى مجلّد آخر\n - التحقّق من اتصال الإنترنت\n - التأكّد من كتابة عنوان البريد الإلكتروني بالشكل الصحيح\n - التأكّد من توفّر مساحة فارغة في البريد الوارد أو من عدم حدوث أي مشاكل أخرى في إعدادات البريد الوارد\n إذا لم تنجح الخطوات أعلاه، يمكنك إعادة إرسال الرسالة الإلكترونية. ستؤدي هذه الخطوة إلى إلغاء الرابط المضمّن في الرسالة السابقة."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "تمّ إرسال رسالة إلكترونية لتسجيل الدخول تتضمّن تعليمات إضافية إلى %@. يُرجى التحقق من بريدك الإلكتروني لإكمال عملية تسجيل الدخول."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "تمّ إرسال رسالة إلكترونية لتسجيل الدخول"; diff --git a/FirebaseAuthUI/Sources/Strings/bg.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/bg.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 7ab6fe66789..00000000000 --- a/FirebaseAuthUI/Sources/Strings/bg.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Добре дошли"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Вход с имейл"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Въвеждане на имейл адреса ви"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "Този имейл адрес е неправилен."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "Този тип профил не се поддържа от това приложение"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Вече имате профил"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Вече използвахте %@. За да продължите, влезте с %@."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Вход"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Въведете паролата си"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "Трябва да въведете парола."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "Имейл адресът и паролата, които въведохте, не си съответстват."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "Този имейл адрес не съответства на съществуващ профил."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "Този имейл адрес е за профил, който е деактивиран."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Въведохте неправилна парола твърде много пъти. Опитайте отново след няколко минути."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "Не може да се намери доставчик за %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Имейл адресите не съвпадат"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Възстановяване на паролата"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "На този имейл адрес ще получите инструкции за повторно задаване на паролата."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Проверете електронната си поща"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "За да възстановите паролата си, изпълнете инструкциите, изпратени до %@."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Създаване на профил"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Име и фамилия"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Изберете парола"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Общите условия"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Декларация за поверителност"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Продължавайки, приемате нашите %@ и %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "Имейл адресът вече се използва от друг профил."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Надеждните пароли съдържат поне 6 знака и комбинация от букви и цифри."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "От IP адреса ви се изпращат твърде много заявки за профил. Опитайте отново след няколко минути."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Вече използвахте %@ за вход. Въведете паролата си за този профил."; - -/* OK button title. */ -"OK" = "ОК"; - -/* Cancel button title. */ -"Cancel" = "Отказ"; - -/* Back button title. */ -"Back" = "Назад"; - -/* Next button title. */ -"Next" = "Напред"; - -/* Save button title. */ -"Save" = "Запазване"; - -/* Send button title. */ -"Send" = "Изпращане"; - -/* Resend button title. */ -"Resend" = "Повторно изпращане"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "Имейл"; - -/* Label next to a password text field. */ -"Password" = "Парола"; - -/* Label next to a name text field. */ -"Name" = "Име"; - -/* Alert title Error. */ -"Error" = "Грешка"; - -/* Alert button title Close. */ -"Close" = "Затваряне"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Потребителски профил"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Сигурност"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Свързани профили"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Име"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "Имейл"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Добавяне на парола"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Промяна на паролата"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Изход"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Изтриване на профила"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "Забравили сте паролата си?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Потвърждаване на самоличността ви"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "Да се изтрие ли профилът?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Това действие ще изтрие всички свързани с профила ви данни и не може да се отмени. За да го завършите, ще трябва отново да влезете в профила"; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Това действие ще изтрие всички свързани с профила ви данни и не може да се отмени. Наистина ли искате да изтриете профила?"; - -/* Text of Delete action button. */ -"Delete" = "Изтриване"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Изтриване на профила"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Това действие не може да се отмени"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Прекратяване на връзката"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Свързан профил"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "Да се прекрати ли връзката с профила?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Вече няма да можете да влизате с профила си"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Прекратяване на връзката с профила"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "За да промените имейл адреса, свързан с профила ви, ще трябва да влезете отново."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "За да промените паролата си, първо трябва да въведете текущата."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Редактиране на имейла"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Редактиране на името"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "За да добавите парола към профила си, ще трябва да влезете отново."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "За да промените паролата за профила си, ще трябва да влезете отново."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "За да промените паролата си, първо трябва да въведете текущата."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Добавяне на парола"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Промяна на паролата"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "Имейл"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Вход с %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Въведете името си"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Въведете имейла си"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Въведете паролата си"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Нова парола"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Изберете парола"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "Имате проблем при влизането?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Потвърждаване на имейл адреса"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Влязохте в профила!"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "Имате проблеми с получаването на имейла?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Изпробвайте следните често използвани решения: \n – Проверете дали имейлът не е обозначен и филтриран като спам.\n – Проверете връзката си с интернет.\n – Проверете дали имейлът е изписан правилно.\n – Проверете дали в пощенската ви кутия има достатъчно пространство, или не е налице друг проблем с настройките й.\n Ако стъпките по-горе не разрешат проблема, можете отново да изпратите имейла. Имайте предвид, че това ще деактивира връзката в предходното съобщение."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "Изпратихме имейл до %@ за вход в профила с допълнителни инструкции. Проверете входящата си поща, за да завършите процеса."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Изпратен е имейл за вход в профила"; diff --git a/FirebaseAuthUI/Sources/Strings/bn.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/bn.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 58426fe0413..00000000000 --- a/FirebaseAuthUI/Sources/Strings/bn.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "স্বাগতম"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "ইমেল দিয়ে সাইন-ইন করুন"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "আপনার ইমেল লিখুন"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "ইমেল অ্যাড্রেসটি সঠিক নয়।"; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "এই ধরনের অ্যাকাউন্ট এই অ্যাপে ব্যবহার করা যায় না"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "আপনার আগে থেকেই একটি অ্যাকাউন্ট আছে"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "আপনি আগেই %@ ব্যবহার করেছেন। চালিয়ে যেতে %@ দিয়ে সাইন-ইন করুন।"; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "সাইন-ইন করুন"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "আপনার পাসওয়ার্ডটি লিখুন"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "পাসওয়ার্ডটি খালি রাখা যাবে না।"; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "আপনার দেওয়া ইমেল এবং পাসওয়ার্ডটি মিলছে না।"; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "আগে থেকে থাকা অ্যাকাউন্টের সাথে ইমেল অ্যাড্রেসটি মিলছে না।"; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "এই ইমেল অ্যাড্রেসটি এমন একটি অ্যাকাউন্টের জন্য যেটি অক্ষম করা হয়েছে।"; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "আপনি অনেকবার ভুল পাসওয়ার্ড লিখেছেন। কিছুক্ষণের মধ্যে আবার চেষ্টা করুন।"; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "%@ এর জন্য প্রদানকারী পাওয়া যাচ্ছে না।"; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "ইমেলটি মেল হচ্ছে না"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "পাসওয়ার্ড পুনরুদ্ধার করুন"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "কীভাবে পাসওয়ার্ড রিসেট করবেন তা জানতে এই ইমেলে নির্দেশাবলী পাঠান।"; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "আপনার ইমেল দেখুন"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "আপনার পাসওয়ার্ড পুনরুদ্ধার করতে %@ তে পাঠানো নির্দেশ অনুসরণ করুন।"; - -/* Title for sign up screen. */ -"SignUpTitle" = "অ্যাকাউন্ট তৈরি করুন"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "নাম ও পদবি"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "পাসওয়ার্ড বেছে নিন"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "পরিষেবার শর্তাবলি"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "গোপনীয়তা নীতি"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "চালিয়ে যাওয়ার অর্থ, আপনি আমাদের %@ এবং %@-এর সাথে সম্মত।"; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "এই ইমেল অ্যাড্রেসটি আগে থেকেই অন্য অ্যাকাউন্টে ব্যবহার করা হচ্ছে।"; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "সুরক্ষিত পাসওয়ার্ডে কমপক্ষে ৬টি বিশেষ বর্ণ এবং অক্ষর ও সংখ্যা মিশিয়ে থাকবে।"; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "আপনার IP অ্যাড্রেস থেকে অনেকগুলি অ্যাকাউন্টের অনুরোধ আসছে। কিছুক্ষণের মধ্যে আবার চেষ্টা করুন।"; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "সাইন-ইন করতে আপনি %@ আগেই ব্যবহার করেছেন। সেই অ্যাকাউন্টের জন্য আপনার পাসওয়ার্ড লিখুন।"; - -/* OK button title. */ -"OK" = "ঠিক আছে"; - -/* Cancel button title. */ -"Cancel" = "বাতিল করুন"; - -/* Back button title. */ -"Back" = "ফিরে যান"; - -/* Next button title. */ -"Next" = "পরবর্তী"; - -/* Save button title. */ -"Save" = "সেভ করুন"; - -/* Send button title. */ -"Send" = "পাঠান"; - -/* Resend button title. */ -"Resend" = "আবার পাঠান"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "ইমেল"; - -/* Label next to a password text field. */ -"Password" = "পাসওয়ার্ড"; - -/* Label next to a name text field. */ -"Name" = "নাম"; - -/* Alert title Error. */ -"Error" = "ত্রুটি"; - -/* Alert button title Close. */ -"Close" = "বন্ধ করুন"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "প্রোফাইল"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "নিরাপত্তা"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "লিঙ্ক করা অ্যাকাউন্ট"; - -/* Account Settings cell title Name. */ -"AS_Name" = "নাম"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "ইমেল"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "পাসওয়ার্ড যোগ করুন"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "পাসওয়ার্ড পরিবর্তন করুন"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "সাইন-আউট করুন"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "অ্যাকাউন্টটি মুছুন"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "পাসওয়ার্ড ভুলে গেছেন?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "আপনার পরিচয় যাচাই করুন"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "অ্যাকাউন্ট মুছবেন?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "আপনার অ্যাকাউন্টের সাথে যুক্ত সমস্ত ডেটা মুছে ফেলা হবে, এবং পূর্বাবস্থায় ফেরানো যাবে না। এই কাজটি সম্পূর্ণ করতে আপনাকে আবার সাইন-ইন করতে হবে"; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "আপনার অ্যাকাউন্টের সাথে যুক্ত সমস্ত ডেটা মুছে ফেলা হবে, এবং পূর্বাবস্থায় ফেরানো যাবে না। আপনি কি অ্যাকাউন্টটি মুছে ফেলার বিষয়ে নিশ্চিত?"; - -/* Text of Delete action button. */ -"Delete" = "মুছুন"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "অ্যাকাউন্টটি মুছুন"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "এই কাজটি পূর্বাবস্থায় ফেরানো যাবে না"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "লিঙ্কমুক্ত করুন"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "লিঙ্ক করা অ্যাকাউন্ট"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "অ্যাকাউন্ট লিঙ্কমুক্ত করবেন?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "আপনি আর এই অ্যাকাউন্টটি ব্যবহার করে সাইন-ইন করতে পারবেন না"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "অ্যাকাউন্ট লিঙ্কমুক্ত করুন"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "আপনার অ্যাকাউন্টের সাথে যুক্ত ইমেল অ্যাড্রেসটি পরিবর্তন করতে আপনাকে আবার সাইন-ইন করতে হবে।"; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "পাসওয়ার্ড পরিবর্তন করার জন্য আগে আপনাকে বর্তমান পাসওয়ার্ডটি লিখতে হবে।"; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "ইমেলটি সম্পাদনা করুন"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "নাম সম্পাদনা করুন"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "আপনার অ্যাকাউন্টে পাসওয়ার্ড যোগ করতে আপনাকে আবার সাইন-ইন করতে হবে।"; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "আপনার অ্যাকাউন্টের পাসওয়ার্ড পরিবর্তন করতে আপনাকে আবার সাইন-ইন করতে হবে।"; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "পাসওয়ার্ড পরিবর্তন করার জন্য আগে আপনাকে বর্তমান পাসওয়ার্ডটি লিখতে হবে।"; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "পাসওয়ার্ড যোগ করুন"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "পাসওয়ার্ড পরিবর্তন করুন"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "ইমেল"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "%@ দিয়ে সাইন-ইন করুন"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "আপনার নাম লিখুন"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "আপনার ইমেল লিখুন"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "আপনার পাসওয়ার্ডটি লিখুন"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "নতুন পাসওয়ার্ড"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "পাসওয়ার্ড বেছে নিন"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "সাইন-ইন করতে সমস্যা হচ্ছে?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "ইমেল আইডি কনফার্ম করুন"; - -/* Title of successfully signed in label. */ -"SignedIn" = "সাইন-ইন করা হয়েছে!"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "ইমেল পেতে সমস্যা হচ্ছে?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "এই সাধারণ সমাধানগুলি ব্যবহার করে দেখুন: \n - ইমেলটি স্প্যাম অথবা ফিল্টার হিসেবে চিহ্নিত করা হয়েছে কিনা তা দেখুন।\n - ইন্টারনেট কানেকশন পরীক্ষা করে দেখুন।\n - ইমেলের সঠিক বানান লিখেছেন কিনা তা দেখুন।\n - আপনার ইনবক্সের স্পেস শেষ হয়ে গেছে কিনা বা ইনবক্সের সেটিংস সংক্রান্ত অন্যান্য সমস্যাগুলি একবার দেখে নিন।\n উপরের পদক্ষেপগুলি যদি কাজ না করে তাহলে আপনি ইমেলটি আবার পাঠাতে পারেন। মনে রাখবেন এটি করলে পুরনো ইমেলের লিঙ্কটি আর কাজ করবে না।"; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "অতিরিক্ত নির্দেশাবলী সহ সাইন-ইন করার একটি ইমেল %@-এ পাঠানো হয়েছে। সাইন-ইন করার জন্য আপনার ইমেল দেখুন।"; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "সাইন-ইন করার ইমেল পাঠানো হয়েছে"; diff --git a/FirebaseAuthUI/Sources/Strings/ca.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/ca.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 667de8a3649..00000000000 --- a/FirebaseAuthUI/Sources/Strings/ca.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Et donem la benvinguda"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Inicia la sessió amb l'adreça electrònica"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Introdueix la teva adreça electrònica"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "Aquesta adreça electrònica no és correcta."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "Aquest tipus de compte no és compatible amb l'aplicació"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Ja tens un compte"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Ja has utilitzat l'adreça electrònica %@. Inicia la sessió amb %@ per continuar."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Inicia la sessió"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Introdueix la teva contrasenya"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "Cal introduir una contrasenya."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "L'adreça electrònica i la contrasenya que has introduït no coincideixen."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "Aquesta adreça electrònica no coincideix amb cap compte."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "Aquesta adreça electrònica pertany a un compte que s'ha desactivat."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Has introduït una contrasenya incorrecta massa vegades. Torna-ho a provar d'aquí a uns quants minuts."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "No es pot trobar un proveïdor per a %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Les adreces electròniques no coincideixen"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Recupera la contrasenya"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Rep un correu electrònic amb instruccions per restablir la contrasenya."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Comprova el correu electrònic"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Per recuperar la contrasenya, segueix les instruccions que s'han enviat a %@."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Crea un compte"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Nom i cognoms"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Tria una contrasenya"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Condicions del servei"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Política de privadesa"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "En continuar, acceptes les nostres %@ i la nostra %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "Ja hi ha un altre compte que utilitza aquesta adreça electrònica."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Perquè una contrasenya sigui segura, ha de tenir com a mínim 6 caràcters i combinar lletres i números."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Aquesta adreça IP està enviant massa sol·licituds per crear comptes. Torna-ho a provar d'aquí a uns quants minuts."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Ja has utilitzat l'adreça electrònica %@ per iniciar la sessió. Introdueix la contrasenya d'aquest compte."; - -/* OK button title. */ -"OK" = "D'acord"; - -/* Cancel button title. */ -"Cancel" = "Cancel·la"; - -/* Back button title. */ -"Back" = "Enrere"; - -/* Next button title. */ -"Next" = "Següent"; - -/* Save button title. */ -"Save" = "Desa"; - -/* Send button title. */ -"Send" = "Envia"; - -/* Resend button title. */ -"Resend" = "Torna a enviar"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "Adreça electrònica"; - -/* Label next to a password text field. */ -"Password" = "Contrasenya"; - -/* Label next to a name text field. */ -"Name" = "Nom"; - -/* Alert title Error. */ -"Error" = "Error"; - -/* Alert button title Close. */ -"Close" = "Tanca"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Perfil"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Seguretat"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Comptes enllaçats"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Nom"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "Adreça electrònica"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Afegeix una contrasenya"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Canvia la contrasenya"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Tanca la sessió"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Suprimeix el compte"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "Has oblidat la contrasenya?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Verifica la teva identitat"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "Vols suprimir el compte?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Aquesta acció esborrarà totes les dades associades a aquest compte i no es pot desfer. Per completar-la, has de tornar a iniciar la sessió."; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Aquesta acció esborrarà totes les dades associades a aquest compte i no es pot desfer. Confirmes que vols suprimir el compte?"; - -/* Text of Delete action button. */ -"Delete" = "Suprimeix"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Suprimeix el compte"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Aquesta acció no es pot desfer"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Desenllaça"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Compte enllaçat"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "Vols desenllaçar el compte?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Ja no podràs iniciar la sessió amb el teu compte"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Desenllaça el compte"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Per canviar l'adreça electrònica associada al teu compte, has de tornar a iniciar la sessió."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Per canviar la contrasenya, primer has d'introduir la teva contrasenya actual."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Edita l'adreça electrònica"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Edita el nom"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Per afegir una contrasenya al teu compte, has de tornar a iniciar la sessió."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Per canviar la contrasenya del teu compte, has de tornar a iniciar la sessió."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Per canviar la contrasenya, primer has d'introduir la teva contrasenya actual."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Afegeix una contrasenya"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Canvia la contrasenya"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "Adreça electrònica"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Inicia la sessió amb %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Introdueix el teu nom"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Introdueix la teva adreça electrònica"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Introdueix la teva contrasenya"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Contrasenya nova"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Tria una contrasenya"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "No pots iniciar la sessió?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Confirma l'adreça electrònica"; - -/* Title of successfully signed in label. */ -"SignedIn" = "S'ha iniciat la sessió"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "Tens problemes per rebre correus electrònics?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Prova aquestes solucions habituals: \n - Comprova si el correu electrònic s'ha marcat com a correu brossa o s'ha filtrat.\n - Comprova la connexió a Internet.\n - Comprova que hagis escrit correctament la teva adreça electrònica.\n - Comprova que tinguis espai a la safata d'entrada i altres problemes relacionats amb la configuració de la safata d'entrada.\n - Si els passos anteriors no t'han servit d'ajuda, pots tornar a enviar el correu electrònic. Tingues en compte que l'enllaç del correu anterior es desactivarà."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "S'ha enviat un correu electrònic d'inici de sessió amb més instruccions a %@. Comprova si l'has rebut per completar l'inici de sessió."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "S'ha enviat el correu electrònic d'inici de sessió"; diff --git a/FirebaseAuthUI/Sources/Strings/cs.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/cs.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 0b6964b5909..00000000000 --- a/FirebaseAuthUI/Sources/Strings/cs.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Vítáme vás"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Přihlásit se pomocí e-mailu"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Zadejte e-mail"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "E-mailová adresa není správná."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "Tento typ účtu aplikace nepodporuje."; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Již máte účet."; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Již jste použili službu %@. Chcete-li pokračovat, přihlaste se prostřednictvím služby %@."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Přihlásit se"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Zadejte své heslo"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "Pole hesla nesmí být prázdné."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "Zadaný e-mail a heslo se neshodují."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "E-mailová adresa neodpovídá žádnému stávajícímu účtu."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "E-mailová adresa patří k účtu, který byl zablokován."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Provedli jste příliš mnoho neplatných pokusů o zadání hesla. Opakujte akci za chvíli."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "Nepodařilo se nalézt poskytovatele pro službu %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "E-mailové adresy se neshodují"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Obnovit heslo"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Na tento e-mail vám zašleme pokyny, jak heslo obnovit."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Zkontrolujte svůj e-mail"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Postupujte podle pokynů odeslaných na adresu %@ a obnovte heslo."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Vytvořit účet"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Jméno a příjmení"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Heslo"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Smluvní podmínky"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Zásady ochrany soukromí"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Pokračováním vyjadřujete svůj souhlas s těmito dokumenty: %@ a %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "Tuto e-mailovou adresu již využívá jiný účet."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Silné heslo má alespoň šest znaků a skládá se z kombinace písmen a číslic."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Z vaší adresy IP přichází příliš mnoho požadavků na účet. Zkuste to znovu za několik minut."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "K přihlášení jste již použili adresu %@. Zadejte příslušné heslo k účtu."; - -/* OK button title. */ -"OK" = "V pořádku"; - -/* Cancel button title. */ -"Cancel" = "Zrušit"; - -/* Back button title. */ -"Back" = "Zpět"; - -/* Next button title. */ -"Next" = "Další"; - -/* Save button title. */ -"Save" = "Uložit"; - -/* Send button title. */ -"Send" = "Odeslat"; - -/* Resend button title. */ -"Resend" = "Odeslat znovu"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "E-mail"; - -/* Label next to a password text field. */ -"Password" = "Heslo"; - -/* Label next to a name text field. */ -"Name" = "Jméno"; - -/* Alert title Error. */ -"Error" = "Chyba"; - -/* Alert button title Close. */ -"Close" = "Zavřít"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Profil"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Zabezpečení"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Propojené účty"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Jméno"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "E-mail"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Přidat heslo"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Změnit heslo"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Odhlásit se"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Smazat účet"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "Zapomněli jste heslo?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Ověřte svou identitu"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "Smazat účet?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Dojde k odstranění všech údajů souvisejících s vaším účtem. Tuto akci nebude možné vrátit zpět. Pokud ji chcete skutečně provést, musíte se znovu přihlásit."; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Dojde k odstranění všech údajů souvisejících s vaším účtem. Tuto akci nebude možné vrátit zpět. Opravdu chcete účet smazat?"; - -/* Text of Delete action button. */ -"Delete" = "Smazat"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Smazat účet"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Tuto akci nelze vrátit zpět."; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Odpojit"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Propojený účet"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "Odpojit účet?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Prostřednictvím tohoto účtu už se nebudete moci přihlásit."; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Odpojit účet"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Chcete-li změnit e-mailovou adresu přidruženou k vašemu účtu, musíte se znovu přihlásit."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Chcete-li změnit heslo, musíte nejprve zadat aktuální heslo."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Změnit e-mail"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Změnit jméno"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Chcete-li do účtu přidat heslo, musíte se znovu přihlásit."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Chcete-li změnit heslo k účtu, musíte se znovu přihlásit."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Chcete-li změnit heslo, musíte nejprve zadat aktuální heslo."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Přidat heslo"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Změnit heslo"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "E-mail"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Přihlásit se přes %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Zadejte své jméno"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Zadejte e-mail"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Zadejte své heslo"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Nové heslo"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Zvolte heslo."; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "Máte potíže s přihlášením?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Potvrzení·e-mailu"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Jste přihlášeni!"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "Nepřišly vám e-maily?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Vyzkoušejte tato běžná řešení: \n – Zkontrolujte, jestli e-mail nebyl označen jako spam nebo nebyl odstraněn jiným filtrem.\n – Zkontrolujte připojení k internetu.\n – Zkontrolujte, zda jste adresu e-mailu napsali správně.\n – Zkontrolujte, jestli nemáte plnou schránku příchozích správ nebo nedošlo k nějakému jiného problému se schránkou.\n Pokud žádné z uvedených řešení nepomohlo, můžete si e-mail nechat zaslat znovu. Odkaz v prvním e-mailu pak bude deaktivován."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "Na adresu %@ byl odeslán přihlašovací e-mail s dalšími pokyny. Dokončete přihlášení podle instrukcí v e-mailu."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Přihlašovací e-mail odeslán"; diff --git a/FirebaseAuthUI/Sources/Strings/da.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/da.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 58bab951dfa..00000000000 --- a/FirebaseAuthUI/Sources/Strings/da.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Velkommen"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Log ind med mail"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Angiv din mail"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "Mailadressen er ikke korrekt."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "Denne type konto understøttes ikke af denne app"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Du har allerede en konto"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Du har allerede brugt %@. Log ind med %@ for at fortsætte."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Log ind"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Angiv din adgangskode"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "Adgangskode skal angives."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "Den mail og adgangskode, du angav, stemmer ikke overens."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "Mailadressen stemmer ikke overens med en eksisterende konto."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "Mailadressen er for en konto, der er blevet deaktiveret."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Du har indtastet en forkert adgangskode for mange gange. Prøv igen om et par minutter."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "Kan ikke finde udbyder til %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Mailadresserne stemmer ikke overens"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Gendan adgangskode"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Få en vejledning sendt til denne mail om, hvordan du nulstiller din adgangskode."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Tjek din mail"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Følg vejledningen, der blev sendt til %@, for at gendanne din adgangskode."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Opret konto"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "For- og efternavn"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Vælg adgangskode"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Servicevilkår"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Privatlivspolitik"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Ved at fortsætte indikerer du, at du accepterer vores %@ og %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "Mailadressen bruges allerede af en anden konto."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Stærke adgangskoder har mindst 6 tegn og en blanding af bogstaver og tal."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Der kommer for mange kontoanmodninger fra din IP-adresse. Prøv igen om et par minutter."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Du har allerede brugt %@ til at logge ind. Angiv din adgangskode for den pågældende konto."; - -/* OK button title. */ -"OK" = "OK"; - -/* Cancel button title. */ -"Cancel" = "Annuller"; - -/* Back button title. */ -"Back" = "Tilbage"; - -/* Next button title. */ -"Next" = "Næste"; - -/* Save button title. */ -"Save" = "Gem"; - -/* Send button title. */ -"Send" = "Send"; - -/* Resend button title. */ -"Resend" = "Send igen"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "Mail"; - -/* Label next to a password text field. */ -"Password" = "Adgangskode"; - -/* Label next to a name text field. */ -"Name" = "Navn"; - -/* Alert title Error. */ -"Error" = "Fejl"; - -/* Alert button title Close. */ -"Close" = "Luk"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Profil"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Sikkerhed"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Tilknyttede konti"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Navn"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "Mail"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Tilføj adgangskode"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Skift adgangskode"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Log ud"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Slet konto"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "Har du glemt adgangskoden?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Bekræft, at det er dig"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "Skal kontoen slettes?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Dette vil slette alle data, der er knyttet til din konto, og kan ikke fortrydes. Du skal logge ind igen for at fuldføre denne handling"; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Dette vil slette alle data, der er knyttet til din konto, og kan ikke fortrydes. Er du sikker på, at du vil slette din konto?"; - -/* Text of Delete action button. */ -"Delete" = "Slet"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Slet konto"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Denne handling kan ikke fortrydes"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Fjern tilknytning"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Tilknyttet konto"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "Fjern tilknytning til konto?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Du kan ikke længere logge ind ved hjælp af din konto"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Fjern tilknytning til konto"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "For at ændre den mailadresse, der er knyttet til din konto, skal du logge ind igen."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "For at ændre din adgangskode skal du først angive din nuværende adgangskode."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Rediger mail"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Rediger navn"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "For at føje en adgangskode til din konto skal du logge ind igen."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "For at ændre adgangskoden for din konto skal du logge ind igen."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "For at ændre din adgangskode skal du først angive din nuværende adgangskode."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Tilføj adgangskode"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Skift adgangskode"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "Mail"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Log ind med %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Angiv dit navn"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Angiv din mail"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Angiv din adgangskode"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Ny adgangskode"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Vælg adgangskode"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "Har du problemer med at logge ind?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Bekræft mailadresse"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Du er logget ind"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "Har du problemer med at modtage mails?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Prøv disse almindelige løsninger: \n - Tjek, om mailen er blevet markeret som spam eller filtreret fra.\n - Tjek din internetforbindelse.\n - Sørg for, at du ikke har stavet din mailadresse forkert.\n - Sørg for, at din indbakke ikke er løbet tør for plads, og at du ikke har andre problemer med indbakken.\n Hvis ovenstående vejledning ikke løste problemet, kan du sende mailen igen. Bemærk, at dette vil deaktivere linket i den gamle mail."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "Der er blevet sendt en loginmail med yderligere vejledning til %@. Tjek din mail for at fuldføre loginprocessen."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Loginmailen blev sendt"; diff --git a/FirebaseAuthUI/Sources/Strings/de-AT.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/de-AT.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 3ad463985c6..00000000000 --- a/FirebaseAuthUI/Sources/Strings/de-AT.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Willkommen"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Mit E-Mail-Adresse anmelden"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "E-Mail-Adresse eingeben"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "Diese E-Mail-Adresse ist nicht korrekt."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "Diese Art von Konto wird von dieser App nicht unterstützt"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Sie haben bereits ein Konto"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Sie haben %@ bereits verwendet. Melden Sie sich mit %@ an, um fortzufahren."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Anmelden"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Passwort eingeben"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "Passwort darf nicht leer sein."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "Die E-Mail-Adresse und das Passwort passen nicht zusammen."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "Diese E-Mail-Adresse passt zu keinem vorhandenen Konto."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "Diese E-Mail-Adresse gehört zu einem Konto, das deaktiviert wurde."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Sie haben zu oft ein falsches Passwort eingegeben. Versuchen Sie es in einigen Minuten erneut."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "Anbieter für %@ wurde nicht gefunden."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "E-Mail-Adressen stimmen nicht überein"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Passwort wiederherstellen"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "In der an diese E-Mail-Adresse gesendeten Anleitung wird beschrieben, wie Sie Ihr Passwort zurücksetzen können."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Im Posteingang nachsehen"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Folgen Sie der an %@ gesendeten Anleitung, um Ihr Passwort zurückzusetzen."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Konto erstellen"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Vor- und Nachname"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Passwort auswählen"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Nutzungsbedingungen"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Datenschutzerklärung"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Wenn Sie fortfahren, stimmen Sie unseren %@ und unserer %@ zu."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "Die E-Mail-Adresse wird bereits von einem anderen Konto verwendet."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Starke Passwörter umfassen mindestens sechs Zeichen und eine Mischung aus Buchstaben und Ziffern."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Von Ihrer IP-Adresse werden zu viele Kontoanfragen gesendet. Versuchen Sie es in einigen Minuten erneut."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Sie haben bereits %@ zur Anmeldung verwendet. Geben Sie das Passwort für dieses Konto ein."; - -/* OK button title. */ -"OK" = "OK"; - -/* Cancel button title. */ -"Cancel" = "Abbrechen"; - -/* Back button title. */ -"Back" = "Zurück"; - -/* Next button title. */ -"Next" = "Weiter"; - -/* Save button title. */ -"Save" = "Speichern"; - -/* Send button title. */ -"Send" = "Senden"; - -/* Resend button title. */ -"Resend" = "Erneut senden"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "E-Mail-Adresse"; - -/* Label next to a password text field. */ -"Password" = "Passwort"; - -/* Label next to a name text field. */ -"Name" = "Name"; - -/* Alert title Error. */ -"Error" = "Fehler"; - -/* Alert button title Close. */ -"Close" = "Schließen"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Profil"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Sicherheit"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Verknüpfte Konten"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Name"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "E-Mail-Adresse"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Passwort hinzufügen"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Passwort ändern"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Abmelden"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Konto löschen"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "Passwort vergessen?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Identität bestätigen"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "Konto löschen?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Hierdurch werden alle mit Ihrem Konto verknüpften Daten gelöscht. Dies kann nicht rückgängig gemacht werden. Sie müssen sich erneut anmelden, um diese Aktion abzuschließen."; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Hierdurch werden alle mit Ihrem Konto verknüpften Daten gelöscht. Dies kann nicht rückgängig gemacht werden. Möchten Sie Ihr Konto wirklich löschen?"; - -/* Text of Delete action button. */ -"Delete" = "Löschen"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Konto löschen"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Diese Aktion kann nicht rückgängig gemacht werden"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Verknüpfung aufheben"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Verknüpftes Konto"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "Verknüpfung des Kontos aufheben?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Sie können sich nicht mehr mit Ihrem Konto anmelden"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Verknüpfung des Kontos aufheben"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Wenn Sie die mit Ihrem Konto verknüpfte E-Mail-Adresse ändern möchten, müssen Sie sich erneut anmelden."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Um das Passwort zu ändern, müssen Sie zuerst Ihr aktuelles Passwort eingeben."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "E-Mail-Adresse bearbeiten"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Name bearbeiten"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Um Ihrem Konto ein Passwort hinzuzufügen, müssen Sie sich erneut anmelden."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Um das Passwort für Ihr Konto zu ändern, müssen Sie sich erneut anmelden."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Um das Passwort zu ändern, müssen Sie zuerst Ihr aktuelles Passwort eingeben."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Passwort hinzufügen"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Passwort ändern"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "E-Mail-Adresse"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Mit %@ anmelden"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Name eingeben"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "E-Mail-Adresse eingeben"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Passwort eingeben"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Neues Passwort"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Passwort auswählen"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "Probleme bei der Anmeldung?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "E-Mail-Adresse bestätigen"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Angemeldet."; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "Probleme beim Empfangen von E-Mails?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Versuchen Sie Folgendes: \n – Überprüfen Sie, ob die E-Mail als Spam markiert oder herausgefiltert wurde.\n – Überprüfen Sie Ihre Internetverbindung.\n – Überprüfen Sie die Schreibweise Ihrer E-Mail-Adresse.\n – Überprüfen Sie den Speicherplatz und weitere Einstellungen Ihres Posteingangs, die Probleme bereiten könnten.\n Sollte das Problem nach Ausführung der obigen Schritte weiterhin bestehen, können Sie sich die Anmelde-E-Mail noch einmal zusenden lassen. Hinweis: Der Link in der vorhergehenden E-Mail ist dann nicht mehr gültig."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "Wir haben eine Anmelde-E-Mail mit zusätzlichen Informationen an %@ gesendet. Bitte öffnen Sie die E-Mail, um die Anmeldung abzuschließen."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Anmelde-E-Mail gesendet"; diff --git a/FirebaseAuthUI/Sources/Strings/de-CH.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/de-CH.lproj/FirebaseAuthUI.strings deleted file mode 100644 index f10c99900a6..00000000000 --- a/FirebaseAuthUI/Sources/Strings/de-CH.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Willkommen"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Mit E-Mail-Adresse anmelden"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "E-Mail-Adresse eingeben"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "Diese E-Mail-Adresse ist nicht korrekt."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "Diese Art von Konto wird von dieser App nicht unterstützt"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Sie haben bereits ein Konto"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Sie haben %@ bereits verwendet. Melden Sie sich mit %@ an, um fortzufahren."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Anmelden"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Passwort eingeben"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "Passwort darf nicht leer sein."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "Die E-Mail-Adresse und das Passwort passen nicht zusammen."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "Diese E-Mail-Adresse passt zu keinem vorhandenen Konto."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "Diese E-Mail-Adresse gehört zu einem Konto, das deaktiviert wurde."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Sie haben zu oft ein falsches Passwort eingegeben. Versuchen Sie es in einigen Minuten erneut."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "Anbieter für %@ wurde nicht gefunden."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "E-Mail-Adressen stimmen nicht überein"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Passwort wiederherstellen"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "In der an diese E-Mail-Adresse gesendeten Anleitung wird beschrieben, wie Sie Ihr Passwort zurücksetzen können."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Im Posteingang nachsehen"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Folgen Sie der an %@ gesendeten Anleitung, um Ihr Passwort zurückzusetzen."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Konto erstellen"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Vor- und Nachname"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Passwort auswählen"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Nutzungsbedingungen"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Datenschutzerklärung"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Wenn Sie fortfahren, stimmen Sie unseren %@ und unserer %@ zu."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "Die E-Mail-Adresse wird bereits von einem anderen Konto verwendet."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Starke Passwörter umfassen mindestens sechs Zeichen und eine Mischung aus Buchstaben und Ziffern."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Von Ihrer IP-Adresse werden zu viele Kontoanfragen gesendet. Versuchen Sie es in einigen Minuten erneut."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Sie haben bereits %@ zur Anmeldung verwendet. Geben Sie das Passwort für dieses Konto ein."; - -/* OK button title. */ -"OK" = "OK"; - -/* Cancel button title. */ -"Cancel" = "Abbrechen"; - -/* Back button title. */ -"Back" = "Zurück"; - -/* Next button title. */ -"Next" = "Weiter"; - -/* Save button title. */ -"Save" = "Speichern"; - -/* Send button title. */ -"Send" = "Senden"; - -/* Resend button title. */ -"Resend" = "Erneut senden"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "E-Mail-Adresse"; - -/* Label next to a password text field. */ -"Password" = "Passwort"; - -/* Label next to a name text field. */ -"Name" = "Name"; - -/* Alert title Error. */ -"Error" = "Fehler"; - -/* Alert button title Close. */ -"Close" = "Schliessen"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Profil"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Sicherheit"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Verknüpfte Konten"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Name"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "E-Mail-Adresse"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Passwort hinzufügen"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Passwort ändern"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Abmelden"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Konto löschen"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "Passwort vergessen?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Identität bestätigen"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "Konto löschen?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Hierdurch werden alle mit Ihrem Konto verknüpften Daten gelöscht. Dies kann nicht rückgängig gemacht werden. Sie müssen sich erneut anmelden, um diese Aktion abzuschliessen."; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Hierdurch werden alle mit Ihrem Konto verknüpften Daten gelöscht. Dies kann nicht rückgängig gemacht werden. Möchten Sie Ihr Konto wirklich löschen?"; - -/* Text of Delete action button. */ -"Delete" = "Löschen"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Konto löschen"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Diese Aktion kann nicht rückgängig gemacht werden"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Verknüpfung aufheben"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Verknüpftes Konto"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "Verknüpfung des Kontos aufheben?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Sie können sich nicht mehr mit Ihrem Konto anmelden"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Verknüpfung des Kontos aufheben"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Wenn Sie die mit Ihrem Konto verknüpfte E-Mail-Adresse ändern möchten, müssen Sie sich erneut anmelden."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Um das Passwort zu ändern, müssen Sie zuerst Ihr aktuelles Passwort eingeben."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "E-Mail-Adresse bearbeiten"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Name bearbeiten"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Um Ihrem Konto ein Passwort hinzuzufügen, müssen Sie sich erneut anmelden."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Um das Passwort für Ihr Konto zu ändern, müssen Sie sich erneut anmelden."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Um das Passwort zu ändern, müssen Sie zuerst Ihr aktuelles Passwort eingeben."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Passwort hinzufügen"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Passwort ändern"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "E-Mail-Adresse"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Mit %@ anmelden"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Name eingeben"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "E-Mail-Adresse eingeben"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Passwort eingeben"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Neues Passwort"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Passwort auswählen"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "Probleme bei der Anmeldung?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "E-Mail-Adresse bestätigen"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Angemeldet."; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "Probleme beim Empfangen von E-Mails?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Versuchen Sie Folgendes: \n – Überprüfen Sie, ob die E-Mail als Spam markiert oder herausgefiltert wurde.\n – Überprüfen Sie Ihre Internetverbindung.\n – Überprüfen Sie die Schreibweise Ihrer E-Mail-Adresse.\n – Überprüfen Sie den Speicherplatz und weitere Einstellungen Ihres Posteingangs, die Probleme bereiten könnten.\n Sollte das Problem nach Ausführung der obigen Schritte weiterhin bestehen, können Sie sich die Anmelde-E-Mail noch einmal zusenden lassen. Hinweis: Der Link in der vorhergehenden E-Mail ist dann nicht mehr gültig."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "Wir haben eine Anmelde-E-Mail mit zusätzlichen Informationen an %@ gesendet. Bitte öffnen Sie die E-Mail, um die Anmeldung abzuschliessen."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Anmelde-E-Mail gesendet"; diff --git a/FirebaseAuthUI/Sources/Strings/de.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/de.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 3ad463985c6..00000000000 --- a/FirebaseAuthUI/Sources/Strings/de.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Willkommen"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Mit E-Mail-Adresse anmelden"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "E-Mail-Adresse eingeben"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "Diese E-Mail-Adresse ist nicht korrekt."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "Diese Art von Konto wird von dieser App nicht unterstützt"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Sie haben bereits ein Konto"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Sie haben %@ bereits verwendet. Melden Sie sich mit %@ an, um fortzufahren."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Anmelden"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Passwort eingeben"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "Passwort darf nicht leer sein."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "Die E-Mail-Adresse und das Passwort passen nicht zusammen."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "Diese E-Mail-Adresse passt zu keinem vorhandenen Konto."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "Diese E-Mail-Adresse gehört zu einem Konto, das deaktiviert wurde."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Sie haben zu oft ein falsches Passwort eingegeben. Versuchen Sie es in einigen Minuten erneut."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "Anbieter für %@ wurde nicht gefunden."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "E-Mail-Adressen stimmen nicht überein"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Passwort wiederherstellen"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "In der an diese E-Mail-Adresse gesendeten Anleitung wird beschrieben, wie Sie Ihr Passwort zurücksetzen können."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Im Posteingang nachsehen"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Folgen Sie der an %@ gesendeten Anleitung, um Ihr Passwort zurückzusetzen."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Konto erstellen"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Vor- und Nachname"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Passwort auswählen"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Nutzungsbedingungen"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Datenschutzerklärung"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Wenn Sie fortfahren, stimmen Sie unseren %@ und unserer %@ zu."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "Die E-Mail-Adresse wird bereits von einem anderen Konto verwendet."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Starke Passwörter umfassen mindestens sechs Zeichen und eine Mischung aus Buchstaben und Ziffern."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Von Ihrer IP-Adresse werden zu viele Kontoanfragen gesendet. Versuchen Sie es in einigen Minuten erneut."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Sie haben bereits %@ zur Anmeldung verwendet. Geben Sie das Passwort für dieses Konto ein."; - -/* OK button title. */ -"OK" = "OK"; - -/* Cancel button title. */ -"Cancel" = "Abbrechen"; - -/* Back button title. */ -"Back" = "Zurück"; - -/* Next button title. */ -"Next" = "Weiter"; - -/* Save button title. */ -"Save" = "Speichern"; - -/* Send button title. */ -"Send" = "Senden"; - -/* Resend button title. */ -"Resend" = "Erneut senden"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "E-Mail-Adresse"; - -/* Label next to a password text field. */ -"Password" = "Passwort"; - -/* Label next to a name text field. */ -"Name" = "Name"; - -/* Alert title Error. */ -"Error" = "Fehler"; - -/* Alert button title Close. */ -"Close" = "Schließen"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Profil"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Sicherheit"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Verknüpfte Konten"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Name"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "E-Mail-Adresse"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Passwort hinzufügen"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Passwort ändern"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Abmelden"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Konto löschen"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "Passwort vergessen?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Identität bestätigen"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "Konto löschen?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Hierdurch werden alle mit Ihrem Konto verknüpften Daten gelöscht. Dies kann nicht rückgängig gemacht werden. Sie müssen sich erneut anmelden, um diese Aktion abzuschließen."; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Hierdurch werden alle mit Ihrem Konto verknüpften Daten gelöscht. Dies kann nicht rückgängig gemacht werden. Möchten Sie Ihr Konto wirklich löschen?"; - -/* Text of Delete action button. */ -"Delete" = "Löschen"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Konto löschen"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Diese Aktion kann nicht rückgängig gemacht werden"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Verknüpfung aufheben"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Verknüpftes Konto"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "Verknüpfung des Kontos aufheben?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Sie können sich nicht mehr mit Ihrem Konto anmelden"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Verknüpfung des Kontos aufheben"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Wenn Sie die mit Ihrem Konto verknüpfte E-Mail-Adresse ändern möchten, müssen Sie sich erneut anmelden."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Um das Passwort zu ändern, müssen Sie zuerst Ihr aktuelles Passwort eingeben."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "E-Mail-Adresse bearbeiten"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Name bearbeiten"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Um Ihrem Konto ein Passwort hinzuzufügen, müssen Sie sich erneut anmelden."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Um das Passwort für Ihr Konto zu ändern, müssen Sie sich erneut anmelden."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Um das Passwort zu ändern, müssen Sie zuerst Ihr aktuelles Passwort eingeben."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Passwort hinzufügen"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Passwort ändern"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "E-Mail-Adresse"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Mit %@ anmelden"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Name eingeben"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "E-Mail-Adresse eingeben"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Passwort eingeben"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Neues Passwort"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Passwort auswählen"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "Probleme bei der Anmeldung?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "E-Mail-Adresse bestätigen"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Angemeldet."; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "Probleme beim Empfangen von E-Mails?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Versuchen Sie Folgendes: \n – Überprüfen Sie, ob die E-Mail als Spam markiert oder herausgefiltert wurde.\n – Überprüfen Sie Ihre Internetverbindung.\n – Überprüfen Sie die Schreibweise Ihrer E-Mail-Adresse.\n – Überprüfen Sie den Speicherplatz und weitere Einstellungen Ihres Posteingangs, die Probleme bereiten könnten.\n Sollte das Problem nach Ausführung der obigen Schritte weiterhin bestehen, können Sie sich die Anmelde-E-Mail noch einmal zusenden lassen. Hinweis: Der Link in der vorhergehenden E-Mail ist dann nicht mehr gültig."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "Wir haben eine Anmelde-E-Mail mit zusätzlichen Informationen an %@ gesendet. Bitte öffnen Sie die E-Mail, um die Anmeldung abzuschließen."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Anmelde-E-Mail gesendet"; diff --git a/FirebaseAuthUI/Sources/Strings/el.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/el.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 7cee33c237b..00000000000 --- a/FirebaseAuthUI/Sources/Strings/el.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Καλώς ήρθατε"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Σύνδεση μέσω ηλεκτρονικού ταχυδρομείου"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Εισαγάγετε τη διεύθυνση ηλεκτρονικού ταχυδρομείου σας"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "Αυτή η διεύθυνση ηλεκτρονικού ταχυδρομείου δεν είναι σωστή."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "Αυτός ο τύπος λογαριασμού δεν υποστηρίζεται από αυτήν την εφαρμογή"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Έχετε ήδη λογαριασμό"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Έχετε ήδη χρησιμοποιήσει το %@. Συνδεθείτε με %@ για να συνεχίσετε."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Σύνδεση"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Εισαγάγετε τον κωδικό πρόσβασής σας"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "Ο κωδικός πρόσβασης δεν μπορεί να είναι κενός."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "Η διεύθυνση ηλεκτρονικού ταχυδρομείου και ο κωδικός πρόσβασης δεν ταιριάζουν."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "Αυτή η διεύθυνση ηλεκτρονικού ταχυδρομείου δεν ταιριάζει με κάποιον υπάρχοντα λογαριασμό."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "Αυτή η διεύθυνση ηλεκτρονικού ταχυδρομείου αφορά έναν λογαριασμό που έχει απενεργοποιηθεί."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Πληκτρολογήσατε πολλές φορές λανθασμένο κωδικό πρόσβασης. Δοκιμάστε ξανά σε λίγα λεπτά."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "Δεν είναι δυνατή η εύρεση του παρόχου για %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Οι διευθύνσεις ηλεκτρονικού ταχυδρομείου δεν ταιριάζουν"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Ανάκτηση κωδικού πρόσβασης"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Δείτε τις οδηγίες που στάλθηκαν σε αυτήν τη διεύθυνση ηλεκτρονικού ταχυδρομείου, οι οποίες εξηγούν πώς να επαναφέρετε τον κωδικό πρόσβασής σας."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Ελέγξτε τα εισερχόμενα του ηλεκτρονικού ταχυδρομείου σας"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Ακολουθήστε τις οδηγίες που στάλθηκαν στο %@ για να ανακτήσετε τον κωδικό πρόσβασής σας."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Δημιουργία λογαριασμού"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Όνομα και επώνυμο"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Επιλέξτε κωδικό πρόσβασης"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Όρους Παροχής Υπηρεσιών"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Πολιτική απορρήτου"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Αν συνεχίσετε, δηλώνετε ότι αποδέχεστε τους %@ και την %@ μας."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "Αυτή η διεύθυνση ηλεκτρονικού ταχυδρομείου χρησιμοποιείται ήδη από άλλον λογαριασμό."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Οι ισχυροί κωδικοί πρόσβασης έχουν τουλάχιστον 6 χαρακτήρες και έναν συνδυασμό γραμμάτων και αριθμών."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Η διεύθυνση IP έχει στείλει πάρα πολλά αιτήματα λογαριασμού. Δοκιμάστε ξανά σε λίγα λεπτά."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Χρησιμοποιήσατε ήδη το %@ για να συνδεθείτε. Εισαγάγετε τον κωδικό πρόσβασης για αυτόν τον λογαριασμό."; - -/* OK button title. */ -"OK" = "ΟΚ"; - -/* Cancel button title. */ -"Cancel" = "Ακύρωση"; - -/* Back button title. */ -"Back" = "Πίσω"; - -/* Next button title. */ -"Next" = "Επόμενο"; - -/* Save button title. */ -"Save" = "Αποθήκευση"; - -/* Send button title. */ -"Send" = "Αποστολή"; - -/* Resend button title. */ -"Resend" = "Επανάληψη αποστολής"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "Ηλεκτρονικό ταχυδρομείο"; - -/* Label next to a password text field. */ -"Password" = "Κωδικός πρόσβασης"; - -/* Label next to a name text field. */ -"Name" = "Όνομα"; - -/* Alert title Error. */ -"Error" = "Σφάλμα"; - -/* Alert button title Close. */ -"Close" = "Κλείσιμο"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Προφίλ"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Ασφάλεια"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Συνδεδεμένοι λογαριασμοί"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Όνομα"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "Ηλεκτρονικό ταχυδρομείο"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Προσθήκη κωδικού πρόσβασης"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Αλλαγή κωδικού πρόσβασης"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Έξοδος"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Διαγραφή λογαριασμού"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "Ξεχάσατε τον κωδικό πρόσβασής σας;"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Επαληθεύστε ότι είστε εσείς"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "Διαγραφή λογαριασμού;"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Αυτή η ενέργεια θα διαγράψει όλα τα δεδομένα που συσχετίζονται με τον λογαριασμό σας και δεν είναι δυνατή η αναίρεσή της. Για να ολοκληρώσετε αυτήν την ενέργεια, θα πρέπει να συνδεθείτε ξανά"; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Αυτή η ενέργεια θα διαγράψει όλα τα δεδομένα που συσχετίζονται με τον λογαριασμό σας και δεν είναι δυνατή η αναίρεσή της. Είστε σίγουροι ότι θέλετε να διαγράψετε τον λογαριασμό σας;"; - -/* Text of Delete action button. */ -"Delete" = "Διαγραφή"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Διαγραφή λογαριασμού"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Δεν είναι δυνατή η αναίρεση αυτής της ενέργειας"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Αποσύνδεση"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Συνδεδεμένος λογαριασμός"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "Αποσύνδεση λογαριασμού;"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Δεν θα μπορείτε πλέον να συνδεθείτε χρησιμοποιώντας τον λογαριασμό σας"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Αποσύνδεση λογαριασμού"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Για να αλλάξετε τη διεύθυνση που συσχετίζεται με τον λογαριασμό σας, θα πρέπει να συνδεθείτε ξανά."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Για να αλλάξετε τον κωδικό πρόσβασής σας, θα πρέπει πρώτα να εισαγάγετε τον τρέχοντα κωδικό πρόσβασης."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Επεξεργασία διεύθυνσης ηλεκτρονικού ταχυδρομείου"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Επεξεργασία ονόματος"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Για να προσθέσετε κωδικό πρόσβασης στον λογαριασμό σας, θα πρέπει να συνδεθείτε ξανά."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Για να αλλάξετε κωδικό πρόσβασης στον λογαριασμό σας, θα πρέπει να συνδεθείτε ξανά."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Για να αλλάξετε τον κωδικό πρόσβασής σας, θα πρέπει πρώτα να εισαγάγετε τον τρέχοντα κωδικό πρόσβασης."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Προσθήκη κωδικού πρόσβασης"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Αλλαγή κωδικού πρόσβασης"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "Ηλεκτρονικό ταχυδρομείο"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Σύνδεση μέσω %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Εισαγάγετε το όνομά σας"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Εισαγάγετε τη διεύθυνση ηλεκτρονικού ταχυδρομείου σας"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Εισαγάγετε τον κωδικό πρόσβασής σας"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Νέος κωδικός πρόσβασης"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Επιλέξτε κωδικό πρόσβασης"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "Πρόβλημα σύνδεσης;"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Επιβεβαίωση διεύθυνσης ηλεκτρονικού ταχυδρομείου"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Συνδέθηκε!"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "Αντιμετωπίζετε πρόβλημα με τη λήψη των μηνυμάτων ηλεκτρονικού ταχυδρομείου;"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Δοκιμάστε αυτές τις συνήθεις λύσεις: \n - Ελέγξτε αν το μήνυμα ηλεκτρονικού ταχυδρομείου επισημάνθηκε ως ανεπιθύμητο ή έχει φιλτραριστεί.\n - Ελέγξτε τη σύνδεσή σας στο διαδίκτυο.\n - Βεβαιωθείτε ότι δεν έχετε γράψει λάθος τη διεύθυνση ηλεκτρονικού ταχυδρομείου.\n - Βεβαιωθείτε ότι δεν έχει γεμίσει ο χώρος εισερχομένων ή ότι δεν υπάρχουν άλλα προβλήματα που σχετίζονται με τις ρυθμίσεις εισερχομένων.\n Αν τα παραπάνω βήματα δεν λειτούργησαν, μπορείτε να στείλετε ξανά το μήνυμα ηλεκτρονικού ταχυδρομείου. Έχετε υπόψη ότι με αυτήν την ενέργεια, ο σύνδεσμος στο παλιότερο μήνυμα ηλεκτρονικού ταχυδρομείου θα απενεργοποιηθεί."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "Ένα μήνυμα ηλεκτρονικού ταχυδρομείου σύνδεσης με πρόσθετες οδηγίες στάλθηκε στη διεύθυνση %@. Ελέγξτε τη διεύθυνση ηλεκτρονικού ταχυδρομείου για να ολοκληρώσετε τη σύνδεση."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Το μήνυμα ηλεκτρονικού ταχυδρομείου σύνδεσης στάλθηκε"; diff --git a/FirebaseAuthUI/Sources/Strings/en-AU.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/en-AU.lproj/FirebaseAuthUI.strings deleted file mode 100644 index d1c7a39cfe8..00000000000 --- a/FirebaseAuthUI/Sources/Strings/en-AU.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Welcome"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Sign in with email"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Enter your email"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "Incorrect email address."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "This type of account isn't supported by this app"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "You already have an account"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "You've already used %@. Sign in with %@ to continue."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Sign in"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Enter your password"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "Password cannot be empty."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "The email and password that you entered don't match."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "That email address doesn't match an existing account."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "That email address is for an account that has been disabled."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "You've entered an incorrect password too many times. Try again in a few minutes."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "Can't find provider for %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Emails don't match"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Recover password"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Receive instructions to this email that explain how to reset your password"; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Check your email"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Follow the instructions sent to %@ to recover your password."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Create account"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "First name & surname"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Choose password"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Terms of Service"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Privacy Policy"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "By continuing, you are indicating that you accept our %@ and %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "The email address is already in use by another account."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Strong passwords have at least 6 characters and a mix of letters and numbers."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Too many account requests are coming from your IP address. Try again in a few minutes."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "You've already used %@ to sign in. Enter your password for that account."; - -/* OK button title. */ -"OK" = "OK"; - -/* Cancel button title. */ -"Cancel" = "Cancel"; - -/* Back button title. */ -"Back" = "Back"; - -/* Next button title. */ -"Next" = "Next"; - -/* Save button title. */ -"Save" = "Save"; - -/* Send button title. */ -"Send" = "Send"; - -/* Resend button title. */ -"Resend" = "Resend"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "Email"; - -/* Label next to a password text field. */ -"Password" = "Password"; - -/* Label next to a name text field. */ -"Name" = "Name"; - -/* Alert title Error. */ -"Error" = "Error"; - -/* Alert button title Close. */ -"Close" = "Close"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Profile"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Security"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Linked Accounts"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Name"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "Email"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Add password"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Change password"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Sign Out"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Delete Account"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "Forgotten password?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Verify that it's you"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "Delete account?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "This will erase all data associated with your account, and can't be undone. You will need to sign in again to complete this action"; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "This will erase all data associated with your account, and can't be undone. Are you sure that you want to delete your account?"; - -/* Text of Delete action button. */ -"Delete" = "Delete"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Delete account"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "This action can't be undone"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Unlink"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Linked account"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "Unlink account?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "You will no longer be able to sign in using your account"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Unlink account"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "To change email address associated with your account, you will need to sign in again."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "In order to change your password, you first need to enter your current password."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Edit email"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Edit name"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "To add a password to your account, you will need to sign in again."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "To change your account's password, you will need to sign in again."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "In order to change your password, you first need to enter your current password."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Add password"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Change password"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "Email"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Sign in with %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Enter your name"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Enter your email"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Enter your password"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "New password"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Choose password"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "Trouble signing in?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Confirm email"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Signed in!"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "Trouble getting emails?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Try these common fixes: \n – Check whether the email was marked as spam or filtered.\n – Check your internet connection.\n – Check that you did not misspell your email.\n – Check that your inbox space is not running out, or for other inbox settings-related issues.\n If the steps above didn't work, you can resend the email. Note that this will deactivate the link in the older email."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "A sign-in email with additional instructions was sent to %@. Check your email to complete sign-in."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Sign-in email sent"; diff --git a/FirebaseAuthUI/Sources/Strings/en-CA.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/en-CA.lproj/FirebaseAuthUI.strings deleted file mode 100644 index d1c7a39cfe8..00000000000 --- a/FirebaseAuthUI/Sources/Strings/en-CA.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Welcome"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Sign in with email"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Enter your email"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "Incorrect email address."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "This type of account isn't supported by this app"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "You already have an account"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "You've already used %@. Sign in with %@ to continue."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Sign in"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Enter your password"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "Password cannot be empty."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "The email and password that you entered don't match."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "That email address doesn't match an existing account."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "That email address is for an account that has been disabled."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "You've entered an incorrect password too many times. Try again in a few minutes."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "Can't find provider for %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Emails don't match"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Recover password"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Receive instructions to this email that explain how to reset your password"; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Check your email"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Follow the instructions sent to %@ to recover your password."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Create account"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "First name & surname"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Choose password"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Terms of Service"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Privacy Policy"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "By continuing, you are indicating that you accept our %@ and %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "The email address is already in use by another account."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Strong passwords have at least 6 characters and a mix of letters and numbers."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Too many account requests are coming from your IP address. Try again in a few minutes."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "You've already used %@ to sign in. Enter your password for that account."; - -/* OK button title. */ -"OK" = "OK"; - -/* Cancel button title. */ -"Cancel" = "Cancel"; - -/* Back button title. */ -"Back" = "Back"; - -/* Next button title. */ -"Next" = "Next"; - -/* Save button title. */ -"Save" = "Save"; - -/* Send button title. */ -"Send" = "Send"; - -/* Resend button title. */ -"Resend" = "Resend"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "Email"; - -/* Label next to a password text field. */ -"Password" = "Password"; - -/* Label next to a name text field. */ -"Name" = "Name"; - -/* Alert title Error. */ -"Error" = "Error"; - -/* Alert button title Close. */ -"Close" = "Close"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Profile"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Security"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Linked Accounts"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Name"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "Email"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Add password"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Change password"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Sign Out"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Delete Account"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "Forgotten password?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Verify that it's you"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "Delete account?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "This will erase all data associated with your account, and can't be undone. You will need to sign in again to complete this action"; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "This will erase all data associated with your account, and can't be undone. Are you sure that you want to delete your account?"; - -/* Text of Delete action button. */ -"Delete" = "Delete"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Delete account"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "This action can't be undone"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Unlink"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Linked account"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "Unlink account?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "You will no longer be able to sign in using your account"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Unlink account"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "To change email address associated with your account, you will need to sign in again."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "In order to change your password, you first need to enter your current password."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Edit email"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Edit name"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "To add a password to your account, you will need to sign in again."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "To change your account's password, you will need to sign in again."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "In order to change your password, you first need to enter your current password."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Add password"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Change password"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "Email"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Sign in with %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Enter your name"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Enter your email"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Enter your password"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "New password"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Choose password"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "Trouble signing in?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Confirm email"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Signed in!"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "Trouble getting emails?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Try these common fixes: \n – Check whether the email was marked as spam or filtered.\n – Check your internet connection.\n – Check that you did not misspell your email.\n – Check that your inbox space is not running out, or for other inbox settings-related issues.\n If the steps above didn't work, you can resend the email. Note that this will deactivate the link in the older email."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "A sign-in email with additional instructions was sent to %@. Check your email to complete sign-in."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Sign-in email sent"; diff --git a/FirebaseAuthUI/Sources/Strings/en-GB.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/en-GB.lproj/FirebaseAuthUI.strings deleted file mode 100644 index d1c7a39cfe8..00000000000 --- a/FirebaseAuthUI/Sources/Strings/en-GB.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Welcome"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Sign in with email"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Enter your email"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "Incorrect email address."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "This type of account isn't supported by this app"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "You already have an account"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "You've already used %@. Sign in with %@ to continue."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Sign in"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Enter your password"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "Password cannot be empty."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "The email and password that you entered don't match."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "That email address doesn't match an existing account."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "That email address is for an account that has been disabled."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "You've entered an incorrect password too many times. Try again in a few minutes."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "Can't find provider for %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Emails don't match"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Recover password"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Receive instructions to this email that explain how to reset your password"; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Check your email"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Follow the instructions sent to %@ to recover your password."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Create account"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "First name & surname"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Choose password"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Terms of Service"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Privacy Policy"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "By continuing, you are indicating that you accept our %@ and %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "The email address is already in use by another account."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Strong passwords have at least 6 characters and a mix of letters and numbers."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Too many account requests are coming from your IP address. Try again in a few minutes."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "You've already used %@ to sign in. Enter your password for that account."; - -/* OK button title. */ -"OK" = "OK"; - -/* Cancel button title. */ -"Cancel" = "Cancel"; - -/* Back button title. */ -"Back" = "Back"; - -/* Next button title. */ -"Next" = "Next"; - -/* Save button title. */ -"Save" = "Save"; - -/* Send button title. */ -"Send" = "Send"; - -/* Resend button title. */ -"Resend" = "Resend"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "Email"; - -/* Label next to a password text field. */ -"Password" = "Password"; - -/* Label next to a name text field. */ -"Name" = "Name"; - -/* Alert title Error. */ -"Error" = "Error"; - -/* Alert button title Close. */ -"Close" = "Close"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Profile"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Security"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Linked Accounts"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Name"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "Email"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Add password"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Change password"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Sign Out"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Delete Account"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "Forgotten password?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Verify that it's you"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "Delete account?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "This will erase all data associated with your account, and can't be undone. You will need to sign in again to complete this action"; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "This will erase all data associated with your account, and can't be undone. Are you sure that you want to delete your account?"; - -/* Text of Delete action button. */ -"Delete" = "Delete"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Delete account"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "This action can't be undone"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Unlink"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Linked account"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "Unlink account?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "You will no longer be able to sign in using your account"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Unlink account"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "To change email address associated with your account, you will need to sign in again."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "In order to change your password, you first need to enter your current password."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Edit email"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Edit name"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "To add a password to your account, you will need to sign in again."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "To change your account's password, you will need to sign in again."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "In order to change your password, you first need to enter your current password."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Add password"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Change password"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "Email"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Sign in with %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Enter your name"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Enter your email"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Enter your password"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "New password"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Choose password"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "Trouble signing in?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Confirm email"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Signed in!"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "Trouble getting emails?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Try these common fixes: \n – Check whether the email was marked as spam or filtered.\n – Check your internet connection.\n – Check that you did not misspell your email.\n – Check that your inbox space is not running out, or for other inbox settings-related issues.\n If the steps above didn't work, you can resend the email. Note that this will deactivate the link in the older email."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "A sign-in email with additional instructions was sent to %@. Check your email to complete sign-in."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Sign-in email sent"; diff --git a/FirebaseAuthUI/Sources/Strings/en-IE.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/en-IE.lproj/FirebaseAuthUI.strings deleted file mode 100644 index d1c7a39cfe8..00000000000 --- a/FirebaseAuthUI/Sources/Strings/en-IE.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Welcome"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Sign in with email"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Enter your email"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "Incorrect email address."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "This type of account isn't supported by this app"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "You already have an account"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "You've already used %@. Sign in with %@ to continue."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Sign in"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Enter your password"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "Password cannot be empty."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "The email and password that you entered don't match."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "That email address doesn't match an existing account."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "That email address is for an account that has been disabled."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "You've entered an incorrect password too many times. Try again in a few minutes."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "Can't find provider for %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Emails don't match"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Recover password"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Receive instructions to this email that explain how to reset your password"; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Check your email"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Follow the instructions sent to %@ to recover your password."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Create account"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "First name & surname"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Choose password"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Terms of Service"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Privacy Policy"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "By continuing, you are indicating that you accept our %@ and %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "The email address is already in use by another account."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Strong passwords have at least 6 characters and a mix of letters and numbers."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Too many account requests are coming from your IP address. Try again in a few minutes."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "You've already used %@ to sign in. Enter your password for that account."; - -/* OK button title. */ -"OK" = "OK"; - -/* Cancel button title. */ -"Cancel" = "Cancel"; - -/* Back button title. */ -"Back" = "Back"; - -/* Next button title. */ -"Next" = "Next"; - -/* Save button title. */ -"Save" = "Save"; - -/* Send button title. */ -"Send" = "Send"; - -/* Resend button title. */ -"Resend" = "Resend"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "Email"; - -/* Label next to a password text field. */ -"Password" = "Password"; - -/* Label next to a name text field. */ -"Name" = "Name"; - -/* Alert title Error. */ -"Error" = "Error"; - -/* Alert button title Close. */ -"Close" = "Close"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Profile"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Security"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Linked Accounts"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Name"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "Email"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Add password"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Change password"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Sign Out"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Delete Account"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "Forgotten password?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Verify that it's you"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "Delete account?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "This will erase all data associated with your account, and can't be undone. You will need to sign in again to complete this action"; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "This will erase all data associated with your account, and can't be undone. Are you sure that you want to delete your account?"; - -/* Text of Delete action button. */ -"Delete" = "Delete"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Delete account"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "This action can't be undone"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Unlink"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Linked account"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "Unlink account?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "You will no longer be able to sign in using your account"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Unlink account"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "To change email address associated with your account, you will need to sign in again."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "In order to change your password, you first need to enter your current password."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Edit email"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Edit name"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "To add a password to your account, you will need to sign in again."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "To change your account's password, you will need to sign in again."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "In order to change your password, you first need to enter your current password."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Add password"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Change password"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "Email"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Sign in with %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Enter your name"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Enter your email"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Enter your password"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "New password"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Choose password"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "Trouble signing in?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Confirm email"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Signed in!"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "Trouble getting emails?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Try these common fixes: \n – Check whether the email was marked as spam or filtered.\n – Check your internet connection.\n – Check that you did not misspell your email.\n – Check that your inbox space is not running out, or for other inbox settings-related issues.\n If the steps above didn't work, you can resend the email. Note that this will deactivate the link in the older email."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "A sign-in email with additional instructions was sent to %@. Check your email to complete sign-in."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Sign-in email sent"; diff --git a/FirebaseAuthUI/Sources/Strings/en-IN.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/en-IN.lproj/FirebaseAuthUI.strings deleted file mode 100644 index d1c7a39cfe8..00000000000 --- a/FirebaseAuthUI/Sources/Strings/en-IN.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Welcome"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Sign in with email"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Enter your email"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "Incorrect email address."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "This type of account isn't supported by this app"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "You already have an account"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "You've already used %@. Sign in with %@ to continue."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Sign in"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Enter your password"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "Password cannot be empty."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "The email and password that you entered don't match."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "That email address doesn't match an existing account."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "That email address is for an account that has been disabled."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "You've entered an incorrect password too many times. Try again in a few minutes."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "Can't find provider for %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Emails don't match"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Recover password"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Receive instructions to this email that explain how to reset your password"; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Check your email"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Follow the instructions sent to %@ to recover your password."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Create account"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "First name & surname"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Choose password"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Terms of Service"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Privacy Policy"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "By continuing, you are indicating that you accept our %@ and %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "The email address is already in use by another account."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Strong passwords have at least 6 characters and a mix of letters and numbers."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Too many account requests are coming from your IP address. Try again in a few minutes."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "You've already used %@ to sign in. Enter your password for that account."; - -/* OK button title. */ -"OK" = "OK"; - -/* Cancel button title. */ -"Cancel" = "Cancel"; - -/* Back button title. */ -"Back" = "Back"; - -/* Next button title. */ -"Next" = "Next"; - -/* Save button title. */ -"Save" = "Save"; - -/* Send button title. */ -"Send" = "Send"; - -/* Resend button title. */ -"Resend" = "Resend"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "Email"; - -/* Label next to a password text field. */ -"Password" = "Password"; - -/* Label next to a name text field. */ -"Name" = "Name"; - -/* Alert title Error. */ -"Error" = "Error"; - -/* Alert button title Close. */ -"Close" = "Close"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Profile"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Security"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Linked Accounts"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Name"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "Email"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Add password"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Change password"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Sign Out"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Delete Account"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "Forgotten password?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Verify that it's you"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "Delete account?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "This will erase all data associated with your account, and can't be undone. You will need to sign in again to complete this action"; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "This will erase all data associated with your account, and can't be undone. Are you sure that you want to delete your account?"; - -/* Text of Delete action button. */ -"Delete" = "Delete"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Delete account"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "This action can't be undone"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Unlink"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Linked account"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "Unlink account?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "You will no longer be able to sign in using your account"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Unlink account"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "To change email address associated with your account, you will need to sign in again."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "In order to change your password, you first need to enter your current password."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Edit email"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Edit name"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "To add a password to your account, you will need to sign in again."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "To change your account's password, you will need to sign in again."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "In order to change your password, you first need to enter your current password."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Add password"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Change password"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "Email"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Sign in with %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Enter your name"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Enter your email"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Enter your password"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "New password"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Choose password"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "Trouble signing in?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Confirm email"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Signed in!"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "Trouble getting emails?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Try these common fixes: \n – Check whether the email was marked as spam or filtered.\n – Check your internet connection.\n – Check that you did not misspell your email.\n – Check that your inbox space is not running out, or for other inbox settings-related issues.\n If the steps above didn't work, you can resend the email. Note that this will deactivate the link in the older email."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "A sign-in email with additional instructions was sent to %@. Check your email to complete sign-in."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Sign-in email sent"; diff --git a/FirebaseAuthUI/Sources/Strings/en-SG.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/en-SG.lproj/FirebaseAuthUI.strings deleted file mode 100644 index d1c7a39cfe8..00000000000 --- a/FirebaseAuthUI/Sources/Strings/en-SG.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Welcome"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Sign in with email"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Enter your email"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "Incorrect email address."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "This type of account isn't supported by this app"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "You already have an account"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "You've already used %@. Sign in with %@ to continue."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Sign in"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Enter your password"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "Password cannot be empty."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "The email and password that you entered don't match."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "That email address doesn't match an existing account."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "That email address is for an account that has been disabled."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "You've entered an incorrect password too many times. Try again in a few minutes."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "Can't find provider for %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Emails don't match"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Recover password"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Receive instructions to this email that explain how to reset your password"; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Check your email"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Follow the instructions sent to %@ to recover your password."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Create account"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "First name & surname"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Choose password"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Terms of Service"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Privacy Policy"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "By continuing, you are indicating that you accept our %@ and %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "The email address is already in use by another account."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Strong passwords have at least 6 characters and a mix of letters and numbers."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Too many account requests are coming from your IP address. Try again in a few minutes."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "You've already used %@ to sign in. Enter your password for that account."; - -/* OK button title. */ -"OK" = "OK"; - -/* Cancel button title. */ -"Cancel" = "Cancel"; - -/* Back button title. */ -"Back" = "Back"; - -/* Next button title. */ -"Next" = "Next"; - -/* Save button title. */ -"Save" = "Save"; - -/* Send button title. */ -"Send" = "Send"; - -/* Resend button title. */ -"Resend" = "Resend"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "Email"; - -/* Label next to a password text field. */ -"Password" = "Password"; - -/* Label next to a name text field. */ -"Name" = "Name"; - -/* Alert title Error. */ -"Error" = "Error"; - -/* Alert button title Close. */ -"Close" = "Close"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Profile"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Security"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Linked Accounts"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Name"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "Email"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Add password"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Change password"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Sign Out"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Delete Account"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "Forgotten password?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Verify that it's you"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "Delete account?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "This will erase all data associated with your account, and can't be undone. You will need to sign in again to complete this action"; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "This will erase all data associated with your account, and can't be undone. Are you sure that you want to delete your account?"; - -/* Text of Delete action button. */ -"Delete" = "Delete"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Delete account"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "This action can't be undone"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Unlink"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Linked account"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "Unlink account?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "You will no longer be able to sign in using your account"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Unlink account"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "To change email address associated with your account, you will need to sign in again."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "In order to change your password, you first need to enter your current password."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Edit email"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Edit name"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "To add a password to your account, you will need to sign in again."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "To change your account's password, you will need to sign in again."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "In order to change your password, you first need to enter your current password."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Add password"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Change password"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "Email"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Sign in with %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Enter your name"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Enter your email"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Enter your password"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "New password"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Choose password"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "Trouble signing in?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Confirm email"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Signed in!"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "Trouble getting emails?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Try these common fixes: \n – Check whether the email was marked as spam or filtered.\n – Check your internet connection.\n – Check that you did not misspell your email.\n – Check that your inbox space is not running out, or for other inbox settings-related issues.\n If the steps above didn't work, you can resend the email. Note that this will deactivate the link in the older email."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "A sign-in email with additional instructions was sent to %@. Check your email to complete sign-in."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Sign-in email sent"; diff --git a/FirebaseAuthUI/Sources/Strings/en-ZA.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/en-ZA.lproj/FirebaseAuthUI.strings deleted file mode 100644 index d1c7a39cfe8..00000000000 --- a/FirebaseAuthUI/Sources/Strings/en-ZA.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Welcome"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Sign in with email"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Enter your email"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "Incorrect email address."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "This type of account isn't supported by this app"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "You already have an account"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "You've already used %@. Sign in with %@ to continue."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Sign in"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Enter your password"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "Password cannot be empty."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "The email and password that you entered don't match."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "That email address doesn't match an existing account."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "That email address is for an account that has been disabled."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "You've entered an incorrect password too many times. Try again in a few minutes."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "Can't find provider for %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Emails don't match"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Recover password"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Receive instructions to this email that explain how to reset your password"; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Check your email"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Follow the instructions sent to %@ to recover your password."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Create account"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "First name & surname"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Choose password"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Terms of Service"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Privacy Policy"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "By continuing, you are indicating that you accept our %@ and %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "The email address is already in use by another account."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Strong passwords have at least 6 characters and a mix of letters and numbers."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Too many account requests are coming from your IP address. Try again in a few minutes."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "You've already used %@ to sign in. Enter your password for that account."; - -/* OK button title. */ -"OK" = "OK"; - -/* Cancel button title. */ -"Cancel" = "Cancel"; - -/* Back button title. */ -"Back" = "Back"; - -/* Next button title. */ -"Next" = "Next"; - -/* Save button title. */ -"Save" = "Save"; - -/* Send button title. */ -"Send" = "Send"; - -/* Resend button title. */ -"Resend" = "Resend"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "Email"; - -/* Label next to a password text field. */ -"Password" = "Password"; - -/* Label next to a name text field. */ -"Name" = "Name"; - -/* Alert title Error. */ -"Error" = "Error"; - -/* Alert button title Close. */ -"Close" = "Close"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Profile"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Security"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Linked Accounts"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Name"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "Email"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Add password"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Change password"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Sign Out"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Delete Account"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "Forgotten password?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Verify that it's you"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "Delete account?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "This will erase all data associated with your account, and can't be undone. You will need to sign in again to complete this action"; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "This will erase all data associated with your account, and can't be undone. Are you sure that you want to delete your account?"; - -/* Text of Delete action button. */ -"Delete" = "Delete"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Delete account"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "This action can't be undone"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Unlink"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Linked account"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "Unlink account?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "You will no longer be able to sign in using your account"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Unlink account"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "To change email address associated with your account, you will need to sign in again."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "In order to change your password, you first need to enter your current password."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Edit email"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Edit name"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "To add a password to your account, you will need to sign in again."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "To change your account's password, you will need to sign in again."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "In order to change your password, you first need to enter your current password."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Add password"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Change password"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "Email"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Sign in with %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Enter your name"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Enter your email"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Enter your password"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "New password"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Choose password"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "Trouble signing in?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Confirm email"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Signed in!"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "Trouble getting emails?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Try these common fixes: \n – Check whether the email was marked as spam or filtered.\n – Check your internet connection.\n – Check that you did not misspell your email.\n – Check that your inbox space is not running out, or for other inbox settings-related issues.\n If the steps above didn't work, you can resend the email. Note that this will deactivate the link in the older email."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "A sign-in email with additional instructions was sent to %@. Check your email to complete sign-in."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Sign-in email sent"; diff --git a/FirebaseAuthUI/Sources/Strings/en.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/en.lproj/FirebaseAuthUI.strings deleted file mode 100644 index e4cc1723efa..00000000000 --- a/FirebaseAuthUI/Sources/Strings/en.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Welcome"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Sign in with email"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Enter your email"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "That email address isn't correct."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "This type of account isn't supported by this app"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "You already have an account"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "You’ve already used %@. Sign in with %@ to continue."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Sign in"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Enter your password"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "Password cannot be empty."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "The email and password you entered don't match."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "That email address doesn’t match an existing account."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "That email address is for an account that has been disabled."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "You’ve entered an incorrect password too many times. Try again in a few minutes."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "Can't find provider for %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Emails don't match"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Recover password"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Get instructions sent to this email that explain how to reset your password."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Check your email"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Follow the instructions sent to %@ to recover your password."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Create account"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "First & last name"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Choose password"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Terms of Service"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Privacy Policy"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "By continuing, you are indicating that you accept our %@ and %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "The email address is already in use by another account."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Password must be at least 6 characters long."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Too many account requests are coming from your IP address. Try again in a few minutes."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "You’ve already used %@ to sign in. Enter your password for that account."; - -/* OK button title. */ -"OK" = "OK"; - -/* Cancel button title. */ -"Cancel" = "Cancel"; - -/* Back button title. */ -"Back" = "Back"; - -/* Next button title. */ -"Next" = "Next"; - -/* Save button title. */ -"Save" = "Save"; - -/* Send button title. */ -"Send" = "Send"; - -/* Resend button title. */ -"Resend" = "Resend"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "Email"; - -/* Label next to a password text field. */ -"Password" = "Password"; - -/* Label next to a name text field. */ -"Name" = "Name"; - -/* Alert title Error. */ -"Error" = "Error"; - -/* Alert button title Close. */ -"Close" = "Close"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Profile"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Security"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Linked Accounts"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Name"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "Email"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Add password"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Change password"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Sign Out"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Delete Account"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "Forgot password?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Verify it's you"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "Delete Account?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "This will erase all data associated with your account, and can't be undone You will need to sign in again to complete this action"; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "This will erase all data associated with your account, and can't be undone. Are you sure you want to delete your account?"; - -/* Text of Delete action button. */ -"Delete" = "Delete"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Delete account"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "This action can't be undone"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Unlink"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Linked account"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "Unlink account?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "You will no longer be able to sign in using your account"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Unlink account"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "To change email address associated with your account, you will need to sign in again."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "In order to change your password, you first need to enter your current password."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Edit email"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Edit name"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "To add password to your account, you will need to sign in again."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "To change password to your account, you will need to sign in again."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "In order to change your password, you first need to enter your current password."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Add password"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Change password"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "Email"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Sign in with %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Enter your name"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Enter your email"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Enter your password"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "New password"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Choose password"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "Trouble signing in?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Confirm Email"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Signed in!"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "Trouble getting emails?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Try these common fixes: \n - Check if the email was marked as spam or filtered.\n - Check your internet connection.\n - Check that you did not misspell your email.\n - Check that your inbox space is not running out or other inbox settings related issues.\n If the steps above didn't work, you can resend the email. Note that this will deactivate the link in the older email."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "A sign-in email with additional instructions was sent to %@. Check your email to complete sign-in."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Sign-in email Sent"; diff --git a/FirebaseAuthUI/Sources/Strings/es-419.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/es-419.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 29b572876da..00000000000 --- a/FirebaseAuthUI/Sources/Strings/es-419.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Te damos la bienvenida"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Acceder con el correo electrónico"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Ingresa tu correo electrónico"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "La dirección de correo electrónico es incorrecta."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "El tipo de cuenta no es compatible con esta app"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Ya tienes una cuenta"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Ya usaste %@. Accede con %@ para continuar."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Acceder"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Ingresa la contraseña"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "El campo de contraseña no puede estar vacío."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "El correo electrónico y la contraseña que ingresaste no coinciden."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "La dirección de correo electrónico no coincide con una cuenta existente."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "La dirección de correo electrónico corresponde a una cuenta que se inhabilitó."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Ingresaste una contraseña incorrecta demasiadas veces. Vuelve a intentarlo en unos minutos."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "No se encuentra ningún proveedor de %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Los correos electrónicos no coinciden"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Recuperar contraseña"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Recibe un correo electrónico con instrucciones para cambiar la contraseña."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Revisa tu correo electrónico"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Sigue las instrucciones que se enviaron a %@ para restablecer la contraseña."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Crear cuenta"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Nombre y apellido"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Elegir contraseña"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Condiciones del servicio"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Política de Privacidad"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Si continúas, indicas que aceptas nuestras %@ y %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "Otra cuenta ya usa esta dirección de correo electrónico."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Las contraseñas seguras deben tener al menos 6 caracteres, además de incluir letras y números."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Recibimos demasiadas solicitudes de cuenta desde tu dirección IP. Vuelve a intentarlo en unos minutos."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Ya usaste %@ para acceder. Ingresa la contraseña correspondiente."; - -/* OK button title. */ -"OK" = "Aceptar"; - -/* Cancel button title. */ -"Cancel" = "Cancelar"; - -/* Back button title. */ -"Back" = "Atrás"; - -/* Next button title. */ -"Next" = "Siguiente"; - -/* Save button title. */ -"Save" = "Guardar"; - -/* Send button title. */ -"Send" = "Enviar"; - -/* Resend button title. */ -"Resend" = "Reenviar"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "Correo electrónico"; - -/* Label next to a password text field. */ -"Password" = "Contraseña"; - -/* Label next to a name text field. */ -"Name" = "Nombre"; - -/* Alert title Error. */ -"Error" = "Error"; - -/* Alert button title Close. */ -"Close" = "Cerrar"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Perfil"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Seguridad"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Cuentas vinculadas"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Nombre"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "Correo electrónico"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Agregar contraseña"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Cambiar contraseña"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Salir"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Borrar cuenta"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "¿Olvidaste la contraseña?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Verifica tu identidad"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "¿Quieres borrar la cuenta?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Esta acción borrará todos los datos asociados con tu cuenta y no se puede deshacer. Debes acceder de nuevo para realizarla."; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Esta acción borrará todos los datos asociados con tu cuenta y no se puede deshacer. ¿Estás seguro de que quieres borrar tu cuenta?"; - -/* Text of Delete action button. */ -"Delete" = "Borrar"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Borrar cuenta"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Esta acción no se puede deshacer"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Desvincular"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Cuenta vinculada"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "¿Quieres desvincular la cuenta?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Ya no podrás acceder con tu cuenta"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Desvincular cuenta"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Para cambiar la dirección de correo electrónico asociada con tu cuenta, debes acceder de nuevo."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Para cambiar tu contraseña, primero debes ingresar la contraseña actual."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Editar correo electrónico"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Editar nombre"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Para agregar una contraseña a tu cuenta, debes acceder de nuevo."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Para cambiar la contraseña de tu cuenta, debes acceder de nuevo."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Para cambiar tu contraseña, primero debes ingresar la contraseña actual."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Agregar contraseña"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Cambiar contraseña"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "Correo electrónico"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Acceder con %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Ingresa tu nombre"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Ingresa tu correo electrónico"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Ingresa la contraseña"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Nueva contraseña"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Elegir contraseña"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "¿Tienes problemas para acceder?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Confirmar correo electrónico"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Accediste"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "¿Tienes problemas para recibir correos electrónicos?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Prueba estas soluciones comunes: \n- Verifica si el correo electrónico se marcó como spam o se filtró.\n- Comprueba tu conexión a Internet.\n- Verifica que escribiste bien tu correo electrónico.\n- Verifica que tu bandeja de entrada no esté llena o revisa cualquier otro problema relacionado con la configuración de la bandeja de entrada.\nSi los pasos anteriores no funcionaron, reenvía el correo electrónico. Ten en cuenta que esta acción desactivará el vínculo en el correo electrónico anterior."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "Se envió un correo electrónico de acceso con instrucciones adicionales a %@. Revisa tu bandeja de entrada para completar el proceso."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Se envió el correo electrónico de acceso"; diff --git a/FirebaseAuthUI/Sources/Strings/es-AR.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/es-AR.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 29b572876da..00000000000 --- a/FirebaseAuthUI/Sources/Strings/es-AR.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Te damos la bienvenida"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Acceder con el correo electrónico"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Ingresa tu correo electrónico"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "La dirección de correo electrónico es incorrecta."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "El tipo de cuenta no es compatible con esta app"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Ya tienes una cuenta"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Ya usaste %@. Accede con %@ para continuar."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Acceder"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Ingresa la contraseña"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "El campo de contraseña no puede estar vacío."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "El correo electrónico y la contraseña que ingresaste no coinciden."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "La dirección de correo electrónico no coincide con una cuenta existente."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "La dirección de correo electrónico corresponde a una cuenta que se inhabilitó."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Ingresaste una contraseña incorrecta demasiadas veces. Vuelve a intentarlo en unos minutos."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "No se encuentra ningún proveedor de %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Los correos electrónicos no coinciden"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Recuperar contraseña"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Recibe un correo electrónico con instrucciones para cambiar la contraseña."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Revisa tu correo electrónico"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Sigue las instrucciones que se enviaron a %@ para restablecer la contraseña."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Crear cuenta"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Nombre y apellido"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Elegir contraseña"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Condiciones del servicio"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Política de Privacidad"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Si continúas, indicas que aceptas nuestras %@ y %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "Otra cuenta ya usa esta dirección de correo electrónico."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Las contraseñas seguras deben tener al menos 6 caracteres, además de incluir letras y números."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Recibimos demasiadas solicitudes de cuenta desde tu dirección IP. Vuelve a intentarlo en unos minutos."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Ya usaste %@ para acceder. Ingresa la contraseña correspondiente."; - -/* OK button title. */ -"OK" = "Aceptar"; - -/* Cancel button title. */ -"Cancel" = "Cancelar"; - -/* Back button title. */ -"Back" = "Atrás"; - -/* Next button title. */ -"Next" = "Siguiente"; - -/* Save button title. */ -"Save" = "Guardar"; - -/* Send button title. */ -"Send" = "Enviar"; - -/* Resend button title. */ -"Resend" = "Reenviar"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "Correo electrónico"; - -/* Label next to a password text field. */ -"Password" = "Contraseña"; - -/* Label next to a name text field. */ -"Name" = "Nombre"; - -/* Alert title Error. */ -"Error" = "Error"; - -/* Alert button title Close. */ -"Close" = "Cerrar"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Perfil"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Seguridad"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Cuentas vinculadas"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Nombre"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "Correo electrónico"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Agregar contraseña"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Cambiar contraseña"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Salir"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Borrar cuenta"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "¿Olvidaste la contraseña?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Verifica tu identidad"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "¿Quieres borrar la cuenta?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Esta acción borrará todos los datos asociados con tu cuenta y no se puede deshacer. Debes acceder de nuevo para realizarla."; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Esta acción borrará todos los datos asociados con tu cuenta y no se puede deshacer. ¿Estás seguro de que quieres borrar tu cuenta?"; - -/* Text of Delete action button. */ -"Delete" = "Borrar"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Borrar cuenta"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Esta acción no se puede deshacer"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Desvincular"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Cuenta vinculada"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "¿Quieres desvincular la cuenta?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Ya no podrás acceder con tu cuenta"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Desvincular cuenta"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Para cambiar la dirección de correo electrónico asociada con tu cuenta, debes acceder de nuevo."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Para cambiar tu contraseña, primero debes ingresar la contraseña actual."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Editar correo electrónico"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Editar nombre"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Para agregar una contraseña a tu cuenta, debes acceder de nuevo."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Para cambiar la contraseña de tu cuenta, debes acceder de nuevo."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Para cambiar tu contraseña, primero debes ingresar la contraseña actual."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Agregar contraseña"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Cambiar contraseña"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "Correo electrónico"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Acceder con %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Ingresa tu nombre"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Ingresa tu correo electrónico"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Ingresa la contraseña"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Nueva contraseña"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Elegir contraseña"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "¿Tienes problemas para acceder?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Confirmar correo electrónico"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Accediste"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "¿Tienes problemas para recibir correos electrónicos?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Prueba estas soluciones comunes: \n- Verifica si el correo electrónico se marcó como spam o se filtró.\n- Comprueba tu conexión a Internet.\n- Verifica que escribiste bien tu correo electrónico.\n- Verifica que tu bandeja de entrada no esté llena o revisa cualquier otro problema relacionado con la configuración de la bandeja de entrada.\nSi los pasos anteriores no funcionaron, reenvía el correo electrónico. Ten en cuenta que esta acción desactivará el vínculo en el correo electrónico anterior."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "Se envió un correo electrónico de acceso con instrucciones adicionales a %@. Revisa tu bandeja de entrada para completar el proceso."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Se envió el correo electrónico de acceso"; diff --git a/FirebaseAuthUI/Sources/Strings/es-BO.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/es-BO.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 29b572876da..00000000000 --- a/FirebaseAuthUI/Sources/Strings/es-BO.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Te damos la bienvenida"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Acceder con el correo electrónico"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Ingresa tu correo electrónico"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "La dirección de correo electrónico es incorrecta."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "El tipo de cuenta no es compatible con esta app"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Ya tienes una cuenta"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Ya usaste %@. Accede con %@ para continuar."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Acceder"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Ingresa la contraseña"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "El campo de contraseña no puede estar vacío."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "El correo electrónico y la contraseña que ingresaste no coinciden."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "La dirección de correo electrónico no coincide con una cuenta existente."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "La dirección de correo electrónico corresponde a una cuenta que se inhabilitó."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Ingresaste una contraseña incorrecta demasiadas veces. Vuelve a intentarlo en unos minutos."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "No se encuentra ningún proveedor de %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Los correos electrónicos no coinciden"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Recuperar contraseña"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Recibe un correo electrónico con instrucciones para cambiar la contraseña."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Revisa tu correo electrónico"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Sigue las instrucciones que se enviaron a %@ para restablecer la contraseña."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Crear cuenta"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Nombre y apellido"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Elegir contraseña"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Condiciones del servicio"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Política de Privacidad"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Si continúas, indicas que aceptas nuestras %@ y %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "Otra cuenta ya usa esta dirección de correo electrónico."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Las contraseñas seguras deben tener al menos 6 caracteres, además de incluir letras y números."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Recibimos demasiadas solicitudes de cuenta desde tu dirección IP. Vuelve a intentarlo en unos minutos."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Ya usaste %@ para acceder. Ingresa la contraseña correspondiente."; - -/* OK button title. */ -"OK" = "Aceptar"; - -/* Cancel button title. */ -"Cancel" = "Cancelar"; - -/* Back button title. */ -"Back" = "Atrás"; - -/* Next button title. */ -"Next" = "Siguiente"; - -/* Save button title. */ -"Save" = "Guardar"; - -/* Send button title. */ -"Send" = "Enviar"; - -/* Resend button title. */ -"Resend" = "Reenviar"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "Correo electrónico"; - -/* Label next to a password text field. */ -"Password" = "Contraseña"; - -/* Label next to a name text field. */ -"Name" = "Nombre"; - -/* Alert title Error. */ -"Error" = "Error"; - -/* Alert button title Close. */ -"Close" = "Cerrar"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Perfil"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Seguridad"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Cuentas vinculadas"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Nombre"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "Correo electrónico"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Agregar contraseña"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Cambiar contraseña"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Salir"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Borrar cuenta"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "¿Olvidaste la contraseña?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Verifica tu identidad"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "¿Quieres borrar la cuenta?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Esta acción borrará todos los datos asociados con tu cuenta y no se puede deshacer. Debes acceder de nuevo para realizarla."; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Esta acción borrará todos los datos asociados con tu cuenta y no se puede deshacer. ¿Estás seguro de que quieres borrar tu cuenta?"; - -/* Text of Delete action button. */ -"Delete" = "Borrar"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Borrar cuenta"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Esta acción no se puede deshacer"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Desvincular"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Cuenta vinculada"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "¿Quieres desvincular la cuenta?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Ya no podrás acceder con tu cuenta"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Desvincular cuenta"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Para cambiar la dirección de correo electrónico asociada con tu cuenta, debes acceder de nuevo."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Para cambiar tu contraseña, primero debes ingresar la contraseña actual."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Editar correo electrónico"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Editar nombre"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Para agregar una contraseña a tu cuenta, debes acceder de nuevo."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Para cambiar la contraseña de tu cuenta, debes acceder de nuevo."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Para cambiar tu contraseña, primero debes ingresar la contraseña actual."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Agregar contraseña"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Cambiar contraseña"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "Correo electrónico"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Acceder con %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Ingresa tu nombre"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Ingresa tu correo electrónico"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Ingresa la contraseña"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Nueva contraseña"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Elegir contraseña"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "¿Tienes problemas para acceder?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Confirmar correo electrónico"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Accediste"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "¿Tienes problemas para recibir correos electrónicos?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Prueba estas soluciones comunes: \n- Verifica si el correo electrónico se marcó como spam o se filtró.\n- Comprueba tu conexión a Internet.\n- Verifica que escribiste bien tu correo electrónico.\n- Verifica que tu bandeja de entrada no esté llena o revisa cualquier otro problema relacionado con la configuración de la bandeja de entrada.\nSi los pasos anteriores no funcionaron, reenvía el correo electrónico. Ten en cuenta que esta acción desactivará el vínculo en el correo electrónico anterior."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "Se envió un correo electrónico de acceso con instrucciones adicionales a %@. Revisa tu bandeja de entrada para completar el proceso."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Se envió el correo electrónico de acceso"; diff --git a/FirebaseAuthUI/Sources/Strings/es-CL.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/es-CL.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 29b572876da..00000000000 --- a/FirebaseAuthUI/Sources/Strings/es-CL.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Te damos la bienvenida"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Acceder con el correo electrónico"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Ingresa tu correo electrónico"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "La dirección de correo electrónico es incorrecta."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "El tipo de cuenta no es compatible con esta app"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Ya tienes una cuenta"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Ya usaste %@. Accede con %@ para continuar."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Acceder"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Ingresa la contraseña"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "El campo de contraseña no puede estar vacío."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "El correo electrónico y la contraseña que ingresaste no coinciden."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "La dirección de correo electrónico no coincide con una cuenta existente."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "La dirección de correo electrónico corresponde a una cuenta que se inhabilitó."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Ingresaste una contraseña incorrecta demasiadas veces. Vuelve a intentarlo en unos minutos."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "No se encuentra ningún proveedor de %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Los correos electrónicos no coinciden"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Recuperar contraseña"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Recibe un correo electrónico con instrucciones para cambiar la contraseña."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Revisa tu correo electrónico"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Sigue las instrucciones que se enviaron a %@ para restablecer la contraseña."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Crear cuenta"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Nombre y apellido"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Elegir contraseña"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Condiciones del servicio"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Política de Privacidad"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Si continúas, indicas que aceptas nuestras %@ y %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "Otra cuenta ya usa esta dirección de correo electrónico."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Las contraseñas seguras deben tener al menos 6 caracteres, además de incluir letras y números."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Recibimos demasiadas solicitudes de cuenta desde tu dirección IP. Vuelve a intentarlo en unos minutos."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Ya usaste %@ para acceder. Ingresa la contraseña correspondiente."; - -/* OK button title. */ -"OK" = "Aceptar"; - -/* Cancel button title. */ -"Cancel" = "Cancelar"; - -/* Back button title. */ -"Back" = "Atrás"; - -/* Next button title. */ -"Next" = "Siguiente"; - -/* Save button title. */ -"Save" = "Guardar"; - -/* Send button title. */ -"Send" = "Enviar"; - -/* Resend button title. */ -"Resend" = "Reenviar"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "Correo electrónico"; - -/* Label next to a password text field. */ -"Password" = "Contraseña"; - -/* Label next to a name text field. */ -"Name" = "Nombre"; - -/* Alert title Error. */ -"Error" = "Error"; - -/* Alert button title Close. */ -"Close" = "Cerrar"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Perfil"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Seguridad"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Cuentas vinculadas"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Nombre"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "Correo electrónico"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Agregar contraseña"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Cambiar contraseña"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Salir"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Borrar cuenta"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "¿Olvidaste la contraseña?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Verifica tu identidad"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "¿Quieres borrar la cuenta?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Esta acción borrará todos los datos asociados con tu cuenta y no se puede deshacer. Debes acceder de nuevo para realizarla."; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Esta acción borrará todos los datos asociados con tu cuenta y no se puede deshacer. ¿Estás seguro de que quieres borrar tu cuenta?"; - -/* Text of Delete action button. */ -"Delete" = "Borrar"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Borrar cuenta"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Esta acción no se puede deshacer"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Desvincular"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Cuenta vinculada"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "¿Quieres desvincular la cuenta?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Ya no podrás acceder con tu cuenta"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Desvincular cuenta"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Para cambiar la dirección de correo electrónico asociada con tu cuenta, debes acceder de nuevo."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Para cambiar tu contraseña, primero debes ingresar la contraseña actual."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Editar correo electrónico"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Editar nombre"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Para agregar una contraseña a tu cuenta, debes acceder de nuevo."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Para cambiar la contraseña de tu cuenta, debes acceder de nuevo."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Para cambiar tu contraseña, primero debes ingresar la contraseña actual."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Agregar contraseña"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Cambiar contraseña"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "Correo electrónico"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Acceder con %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Ingresa tu nombre"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Ingresa tu correo electrónico"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Ingresa la contraseña"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Nueva contraseña"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Elegir contraseña"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "¿Tienes problemas para acceder?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Confirmar correo electrónico"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Accediste"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "¿Tienes problemas para recibir correos electrónicos?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Prueba estas soluciones comunes: \n- Verifica si el correo electrónico se marcó como spam o se filtró.\n- Comprueba tu conexión a Internet.\n- Verifica que escribiste bien tu correo electrónico.\n- Verifica que tu bandeja de entrada no esté llena o revisa cualquier otro problema relacionado con la configuración de la bandeja de entrada.\nSi los pasos anteriores no funcionaron, reenvía el correo electrónico. Ten en cuenta que esta acción desactivará el vínculo en el correo electrónico anterior."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "Se envió un correo electrónico de acceso con instrucciones adicionales a %@. Revisa tu bandeja de entrada para completar el proceso."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Se envió el correo electrónico de acceso"; diff --git a/FirebaseAuthUI/Sources/Strings/es-CO.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/es-CO.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 29b572876da..00000000000 --- a/FirebaseAuthUI/Sources/Strings/es-CO.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Te damos la bienvenida"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Acceder con el correo electrónico"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Ingresa tu correo electrónico"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "La dirección de correo electrónico es incorrecta."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "El tipo de cuenta no es compatible con esta app"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Ya tienes una cuenta"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Ya usaste %@. Accede con %@ para continuar."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Acceder"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Ingresa la contraseña"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "El campo de contraseña no puede estar vacío."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "El correo electrónico y la contraseña que ingresaste no coinciden."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "La dirección de correo electrónico no coincide con una cuenta existente."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "La dirección de correo electrónico corresponde a una cuenta que se inhabilitó."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Ingresaste una contraseña incorrecta demasiadas veces. Vuelve a intentarlo en unos minutos."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "No se encuentra ningún proveedor de %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Los correos electrónicos no coinciden"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Recuperar contraseña"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Recibe un correo electrónico con instrucciones para cambiar la contraseña."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Revisa tu correo electrónico"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Sigue las instrucciones que se enviaron a %@ para restablecer la contraseña."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Crear cuenta"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Nombre y apellido"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Elegir contraseña"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Condiciones del servicio"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Política de Privacidad"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Si continúas, indicas que aceptas nuestras %@ y %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "Otra cuenta ya usa esta dirección de correo electrónico."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Las contraseñas seguras deben tener al menos 6 caracteres, además de incluir letras y números."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Recibimos demasiadas solicitudes de cuenta desde tu dirección IP. Vuelve a intentarlo en unos minutos."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Ya usaste %@ para acceder. Ingresa la contraseña correspondiente."; - -/* OK button title. */ -"OK" = "Aceptar"; - -/* Cancel button title. */ -"Cancel" = "Cancelar"; - -/* Back button title. */ -"Back" = "Atrás"; - -/* Next button title. */ -"Next" = "Siguiente"; - -/* Save button title. */ -"Save" = "Guardar"; - -/* Send button title. */ -"Send" = "Enviar"; - -/* Resend button title. */ -"Resend" = "Reenviar"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "Correo electrónico"; - -/* Label next to a password text field. */ -"Password" = "Contraseña"; - -/* Label next to a name text field. */ -"Name" = "Nombre"; - -/* Alert title Error. */ -"Error" = "Error"; - -/* Alert button title Close. */ -"Close" = "Cerrar"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Perfil"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Seguridad"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Cuentas vinculadas"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Nombre"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "Correo electrónico"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Agregar contraseña"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Cambiar contraseña"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Salir"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Borrar cuenta"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "¿Olvidaste la contraseña?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Verifica tu identidad"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "¿Quieres borrar la cuenta?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Esta acción borrará todos los datos asociados con tu cuenta y no se puede deshacer. Debes acceder de nuevo para realizarla."; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Esta acción borrará todos los datos asociados con tu cuenta y no se puede deshacer. ¿Estás seguro de que quieres borrar tu cuenta?"; - -/* Text of Delete action button. */ -"Delete" = "Borrar"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Borrar cuenta"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Esta acción no se puede deshacer"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Desvincular"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Cuenta vinculada"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "¿Quieres desvincular la cuenta?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Ya no podrás acceder con tu cuenta"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Desvincular cuenta"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Para cambiar la dirección de correo electrónico asociada con tu cuenta, debes acceder de nuevo."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Para cambiar tu contraseña, primero debes ingresar la contraseña actual."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Editar correo electrónico"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Editar nombre"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Para agregar una contraseña a tu cuenta, debes acceder de nuevo."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Para cambiar la contraseña de tu cuenta, debes acceder de nuevo."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Para cambiar tu contraseña, primero debes ingresar la contraseña actual."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Agregar contraseña"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Cambiar contraseña"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "Correo electrónico"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Acceder con %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Ingresa tu nombre"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Ingresa tu correo electrónico"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Ingresa la contraseña"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Nueva contraseña"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Elegir contraseña"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "¿Tienes problemas para acceder?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Confirmar correo electrónico"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Accediste"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "¿Tienes problemas para recibir correos electrónicos?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Prueba estas soluciones comunes: \n- Verifica si el correo electrónico se marcó como spam o se filtró.\n- Comprueba tu conexión a Internet.\n- Verifica que escribiste bien tu correo electrónico.\n- Verifica que tu bandeja de entrada no esté llena o revisa cualquier otro problema relacionado con la configuración de la bandeja de entrada.\nSi los pasos anteriores no funcionaron, reenvía el correo electrónico. Ten en cuenta que esta acción desactivará el vínculo en el correo electrónico anterior."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "Se envió un correo electrónico de acceso con instrucciones adicionales a %@. Revisa tu bandeja de entrada para completar el proceso."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Se envió el correo electrónico de acceso"; diff --git a/FirebaseAuthUI/Sources/Strings/es-CR.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/es-CR.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 29b572876da..00000000000 --- a/FirebaseAuthUI/Sources/Strings/es-CR.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Te damos la bienvenida"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Acceder con el correo electrónico"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Ingresa tu correo electrónico"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "La dirección de correo electrónico es incorrecta."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "El tipo de cuenta no es compatible con esta app"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Ya tienes una cuenta"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Ya usaste %@. Accede con %@ para continuar."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Acceder"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Ingresa la contraseña"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "El campo de contraseña no puede estar vacío."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "El correo electrónico y la contraseña que ingresaste no coinciden."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "La dirección de correo electrónico no coincide con una cuenta existente."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "La dirección de correo electrónico corresponde a una cuenta que se inhabilitó."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Ingresaste una contraseña incorrecta demasiadas veces. Vuelve a intentarlo en unos minutos."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "No se encuentra ningún proveedor de %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Los correos electrónicos no coinciden"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Recuperar contraseña"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Recibe un correo electrónico con instrucciones para cambiar la contraseña."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Revisa tu correo electrónico"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Sigue las instrucciones que se enviaron a %@ para restablecer la contraseña."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Crear cuenta"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Nombre y apellido"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Elegir contraseña"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Condiciones del servicio"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Política de Privacidad"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Si continúas, indicas que aceptas nuestras %@ y %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "Otra cuenta ya usa esta dirección de correo electrónico."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Las contraseñas seguras deben tener al menos 6 caracteres, además de incluir letras y números."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Recibimos demasiadas solicitudes de cuenta desde tu dirección IP. Vuelve a intentarlo en unos minutos."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Ya usaste %@ para acceder. Ingresa la contraseña correspondiente."; - -/* OK button title. */ -"OK" = "Aceptar"; - -/* Cancel button title. */ -"Cancel" = "Cancelar"; - -/* Back button title. */ -"Back" = "Atrás"; - -/* Next button title. */ -"Next" = "Siguiente"; - -/* Save button title. */ -"Save" = "Guardar"; - -/* Send button title. */ -"Send" = "Enviar"; - -/* Resend button title. */ -"Resend" = "Reenviar"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "Correo electrónico"; - -/* Label next to a password text field. */ -"Password" = "Contraseña"; - -/* Label next to a name text field. */ -"Name" = "Nombre"; - -/* Alert title Error. */ -"Error" = "Error"; - -/* Alert button title Close. */ -"Close" = "Cerrar"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Perfil"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Seguridad"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Cuentas vinculadas"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Nombre"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "Correo electrónico"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Agregar contraseña"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Cambiar contraseña"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Salir"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Borrar cuenta"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "¿Olvidaste la contraseña?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Verifica tu identidad"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "¿Quieres borrar la cuenta?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Esta acción borrará todos los datos asociados con tu cuenta y no se puede deshacer. Debes acceder de nuevo para realizarla."; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Esta acción borrará todos los datos asociados con tu cuenta y no se puede deshacer. ¿Estás seguro de que quieres borrar tu cuenta?"; - -/* Text of Delete action button. */ -"Delete" = "Borrar"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Borrar cuenta"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Esta acción no se puede deshacer"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Desvincular"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Cuenta vinculada"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "¿Quieres desvincular la cuenta?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Ya no podrás acceder con tu cuenta"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Desvincular cuenta"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Para cambiar la dirección de correo electrónico asociada con tu cuenta, debes acceder de nuevo."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Para cambiar tu contraseña, primero debes ingresar la contraseña actual."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Editar correo electrónico"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Editar nombre"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Para agregar una contraseña a tu cuenta, debes acceder de nuevo."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Para cambiar la contraseña de tu cuenta, debes acceder de nuevo."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Para cambiar tu contraseña, primero debes ingresar la contraseña actual."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Agregar contraseña"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Cambiar contraseña"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "Correo electrónico"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Acceder con %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Ingresa tu nombre"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Ingresa tu correo electrónico"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Ingresa la contraseña"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Nueva contraseña"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Elegir contraseña"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "¿Tienes problemas para acceder?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Confirmar correo electrónico"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Accediste"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "¿Tienes problemas para recibir correos electrónicos?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Prueba estas soluciones comunes: \n- Verifica si el correo electrónico se marcó como spam o se filtró.\n- Comprueba tu conexión a Internet.\n- Verifica que escribiste bien tu correo electrónico.\n- Verifica que tu bandeja de entrada no esté llena o revisa cualquier otro problema relacionado con la configuración de la bandeja de entrada.\nSi los pasos anteriores no funcionaron, reenvía el correo electrónico. Ten en cuenta que esta acción desactivará el vínculo en el correo electrónico anterior."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "Se envió un correo electrónico de acceso con instrucciones adicionales a %@. Revisa tu bandeja de entrada para completar el proceso."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Se envió el correo electrónico de acceso"; diff --git a/FirebaseAuthUI/Sources/Strings/es-DO.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/es-DO.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 29b572876da..00000000000 --- a/FirebaseAuthUI/Sources/Strings/es-DO.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Te damos la bienvenida"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Acceder con el correo electrónico"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Ingresa tu correo electrónico"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "La dirección de correo electrónico es incorrecta."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "El tipo de cuenta no es compatible con esta app"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Ya tienes una cuenta"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Ya usaste %@. Accede con %@ para continuar."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Acceder"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Ingresa la contraseña"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "El campo de contraseña no puede estar vacío."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "El correo electrónico y la contraseña que ingresaste no coinciden."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "La dirección de correo electrónico no coincide con una cuenta existente."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "La dirección de correo electrónico corresponde a una cuenta que se inhabilitó."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Ingresaste una contraseña incorrecta demasiadas veces. Vuelve a intentarlo en unos minutos."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "No se encuentra ningún proveedor de %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Los correos electrónicos no coinciden"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Recuperar contraseña"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Recibe un correo electrónico con instrucciones para cambiar la contraseña."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Revisa tu correo electrónico"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Sigue las instrucciones que se enviaron a %@ para restablecer la contraseña."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Crear cuenta"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Nombre y apellido"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Elegir contraseña"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Condiciones del servicio"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Política de Privacidad"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Si continúas, indicas que aceptas nuestras %@ y %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "Otra cuenta ya usa esta dirección de correo electrónico."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Las contraseñas seguras deben tener al menos 6 caracteres, además de incluir letras y números."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Recibimos demasiadas solicitudes de cuenta desde tu dirección IP. Vuelve a intentarlo en unos minutos."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Ya usaste %@ para acceder. Ingresa la contraseña correspondiente."; - -/* OK button title. */ -"OK" = "Aceptar"; - -/* Cancel button title. */ -"Cancel" = "Cancelar"; - -/* Back button title. */ -"Back" = "Atrás"; - -/* Next button title. */ -"Next" = "Siguiente"; - -/* Save button title. */ -"Save" = "Guardar"; - -/* Send button title. */ -"Send" = "Enviar"; - -/* Resend button title. */ -"Resend" = "Reenviar"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "Correo electrónico"; - -/* Label next to a password text field. */ -"Password" = "Contraseña"; - -/* Label next to a name text field. */ -"Name" = "Nombre"; - -/* Alert title Error. */ -"Error" = "Error"; - -/* Alert button title Close. */ -"Close" = "Cerrar"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Perfil"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Seguridad"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Cuentas vinculadas"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Nombre"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "Correo electrónico"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Agregar contraseña"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Cambiar contraseña"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Salir"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Borrar cuenta"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "¿Olvidaste la contraseña?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Verifica tu identidad"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "¿Quieres borrar la cuenta?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Esta acción borrará todos los datos asociados con tu cuenta y no se puede deshacer. Debes acceder de nuevo para realizarla."; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Esta acción borrará todos los datos asociados con tu cuenta y no se puede deshacer. ¿Estás seguro de que quieres borrar tu cuenta?"; - -/* Text of Delete action button. */ -"Delete" = "Borrar"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Borrar cuenta"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Esta acción no se puede deshacer"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Desvincular"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Cuenta vinculada"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "¿Quieres desvincular la cuenta?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Ya no podrás acceder con tu cuenta"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Desvincular cuenta"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Para cambiar la dirección de correo electrónico asociada con tu cuenta, debes acceder de nuevo."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Para cambiar tu contraseña, primero debes ingresar la contraseña actual."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Editar correo electrónico"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Editar nombre"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Para agregar una contraseña a tu cuenta, debes acceder de nuevo."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Para cambiar la contraseña de tu cuenta, debes acceder de nuevo."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Para cambiar tu contraseña, primero debes ingresar la contraseña actual."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Agregar contraseña"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Cambiar contraseña"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "Correo electrónico"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Acceder con %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Ingresa tu nombre"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Ingresa tu correo electrónico"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Ingresa la contraseña"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Nueva contraseña"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Elegir contraseña"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "¿Tienes problemas para acceder?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Confirmar correo electrónico"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Accediste"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "¿Tienes problemas para recibir correos electrónicos?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Prueba estas soluciones comunes: \n- Verifica si el correo electrónico se marcó como spam o se filtró.\n- Comprueba tu conexión a Internet.\n- Verifica que escribiste bien tu correo electrónico.\n- Verifica que tu bandeja de entrada no esté llena o revisa cualquier otro problema relacionado con la configuración de la bandeja de entrada.\nSi los pasos anteriores no funcionaron, reenvía el correo electrónico. Ten en cuenta que esta acción desactivará el vínculo en el correo electrónico anterior."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "Se envió un correo electrónico de acceso con instrucciones adicionales a %@. Revisa tu bandeja de entrada para completar el proceso."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Se envió el correo electrónico de acceso"; diff --git a/FirebaseAuthUI/Sources/Strings/es-EC.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/es-EC.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 29b572876da..00000000000 --- a/FirebaseAuthUI/Sources/Strings/es-EC.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Te damos la bienvenida"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Acceder con el correo electrónico"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Ingresa tu correo electrónico"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "La dirección de correo electrónico es incorrecta."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "El tipo de cuenta no es compatible con esta app"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Ya tienes una cuenta"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Ya usaste %@. Accede con %@ para continuar."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Acceder"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Ingresa la contraseña"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "El campo de contraseña no puede estar vacío."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "El correo electrónico y la contraseña que ingresaste no coinciden."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "La dirección de correo electrónico no coincide con una cuenta existente."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "La dirección de correo electrónico corresponde a una cuenta que se inhabilitó."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Ingresaste una contraseña incorrecta demasiadas veces. Vuelve a intentarlo en unos minutos."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "No se encuentra ningún proveedor de %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Los correos electrónicos no coinciden"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Recuperar contraseña"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Recibe un correo electrónico con instrucciones para cambiar la contraseña."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Revisa tu correo electrónico"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Sigue las instrucciones que se enviaron a %@ para restablecer la contraseña."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Crear cuenta"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Nombre y apellido"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Elegir contraseña"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Condiciones del servicio"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Política de Privacidad"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Si continúas, indicas que aceptas nuestras %@ y %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "Otra cuenta ya usa esta dirección de correo electrónico."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Las contraseñas seguras deben tener al menos 6 caracteres, además de incluir letras y números."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Recibimos demasiadas solicitudes de cuenta desde tu dirección IP. Vuelve a intentarlo en unos minutos."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Ya usaste %@ para acceder. Ingresa la contraseña correspondiente."; - -/* OK button title. */ -"OK" = "Aceptar"; - -/* Cancel button title. */ -"Cancel" = "Cancelar"; - -/* Back button title. */ -"Back" = "Atrás"; - -/* Next button title. */ -"Next" = "Siguiente"; - -/* Save button title. */ -"Save" = "Guardar"; - -/* Send button title. */ -"Send" = "Enviar"; - -/* Resend button title. */ -"Resend" = "Reenviar"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "Correo electrónico"; - -/* Label next to a password text field. */ -"Password" = "Contraseña"; - -/* Label next to a name text field. */ -"Name" = "Nombre"; - -/* Alert title Error. */ -"Error" = "Error"; - -/* Alert button title Close. */ -"Close" = "Cerrar"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Perfil"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Seguridad"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Cuentas vinculadas"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Nombre"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "Correo electrónico"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Agregar contraseña"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Cambiar contraseña"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Salir"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Borrar cuenta"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "¿Olvidaste la contraseña?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Verifica tu identidad"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "¿Quieres borrar la cuenta?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Esta acción borrará todos los datos asociados con tu cuenta y no se puede deshacer. Debes acceder de nuevo para realizarla."; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Esta acción borrará todos los datos asociados con tu cuenta y no se puede deshacer. ¿Estás seguro de que quieres borrar tu cuenta?"; - -/* Text of Delete action button. */ -"Delete" = "Borrar"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Borrar cuenta"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Esta acción no se puede deshacer"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Desvincular"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Cuenta vinculada"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "¿Quieres desvincular la cuenta?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Ya no podrás acceder con tu cuenta"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Desvincular cuenta"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Para cambiar la dirección de correo electrónico asociada con tu cuenta, debes acceder de nuevo."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Para cambiar tu contraseña, primero debes ingresar la contraseña actual."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Editar correo electrónico"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Editar nombre"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Para agregar una contraseña a tu cuenta, debes acceder de nuevo."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Para cambiar la contraseña de tu cuenta, debes acceder de nuevo."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Para cambiar tu contraseña, primero debes ingresar la contraseña actual."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Agregar contraseña"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Cambiar contraseña"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "Correo electrónico"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Acceder con %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Ingresa tu nombre"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Ingresa tu correo electrónico"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Ingresa la contraseña"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Nueva contraseña"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Elegir contraseña"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "¿Tienes problemas para acceder?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Confirmar correo electrónico"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Accediste"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "¿Tienes problemas para recibir correos electrónicos?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Prueba estas soluciones comunes: \n- Verifica si el correo electrónico se marcó como spam o se filtró.\n- Comprueba tu conexión a Internet.\n- Verifica que escribiste bien tu correo electrónico.\n- Verifica que tu bandeja de entrada no esté llena o revisa cualquier otro problema relacionado con la configuración de la bandeja de entrada.\nSi los pasos anteriores no funcionaron, reenvía el correo electrónico. Ten en cuenta que esta acción desactivará el vínculo en el correo electrónico anterior."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "Se envió un correo electrónico de acceso con instrucciones adicionales a %@. Revisa tu bandeja de entrada para completar el proceso."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Se envió el correo electrónico de acceso"; diff --git a/FirebaseAuthUI/Sources/Strings/es-GT.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/es-GT.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 29b572876da..00000000000 --- a/FirebaseAuthUI/Sources/Strings/es-GT.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Te damos la bienvenida"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Acceder con el correo electrónico"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Ingresa tu correo electrónico"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "La dirección de correo electrónico es incorrecta."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "El tipo de cuenta no es compatible con esta app"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Ya tienes una cuenta"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Ya usaste %@. Accede con %@ para continuar."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Acceder"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Ingresa la contraseña"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "El campo de contraseña no puede estar vacío."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "El correo electrónico y la contraseña que ingresaste no coinciden."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "La dirección de correo electrónico no coincide con una cuenta existente."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "La dirección de correo electrónico corresponde a una cuenta que se inhabilitó."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Ingresaste una contraseña incorrecta demasiadas veces. Vuelve a intentarlo en unos minutos."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "No se encuentra ningún proveedor de %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Los correos electrónicos no coinciden"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Recuperar contraseña"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Recibe un correo electrónico con instrucciones para cambiar la contraseña."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Revisa tu correo electrónico"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Sigue las instrucciones que se enviaron a %@ para restablecer la contraseña."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Crear cuenta"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Nombre y apellido"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Elegir contraseña"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Condiciones del servicio"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Política de Privacidad"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Si continúas, indicas que aceptas nuestras %@ y %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "Otra cuenta ya usa esta dirección de correo electrónico."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Las contraseñas seguras deben tener al menos 6 caracteres, además de incluir letras y números."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Recibimos demasiadas solicitudes de cuenta desde tu dirección IP. Vuelve a intentarlo en unos minutos."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Ya usaste %@ para acceder. Ingresa la contraseña correspondiente."; - -/* OK button title. */ -"OK" = "Aceptar"; - -/* Cancel button title. */ -"Cancel" = "Cancelar"; - -/* Back button title. */ -"Back" = "Atrás"; - -/* Next button title. */ -"Next" = "Siguiente"; - -/* Save button title. */ -"Save" = "Guardar"; - -/* Send button title. */ -"Send" = "Enviar"; - -/* Resend button title. */ -"Resend" = "Reenviar"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "Correo electrónico"; - -/* Label next to a password text field. */ -"Password" = "Contraseña"; - -/* Label next to a name text field. */ -"Name" = "Nombre"; - -/* Alert title Error. */ -"Error" = "Error"; - -/* Alert button title Close. */ -"Close" = "Cerrar"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Perfil"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Seguridad"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Cuentas vinculadas"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Nombre"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "Correo electrónico"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Agregar contraseña"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Cambiar contraseña"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Salir"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Borrar cuenta"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "¿Olvidaste la contraseña?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Verifica tu identidad"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "¿Quieres borrar la cuenta?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Esta acción borrará todos los datos asociados con tu cuenta y no se puede deshacer. Debes acceder de nuevo para realizarla."; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Esta acción borrará todos los datos asociados con tu cuenta y no se puede deshacer. ¿Estás seguro de que quieres borrar tu cuenta?"; - -/* Text of Delete action button. */ -"Delete" = "Borrar"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Borrar cuenta"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Esta acción no se puede deshacer"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Desvincular"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Cuenta vinculada"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "¿Quieres desvincular la cuenta?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Ya no podrás acceder con tu cuenta"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Desvincular cuenta"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Para cambiar la dirección de correo electrónico asociada con tu cuenta, debes acceder de nuevo."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Para cambiar tu contraseña, primero debes ingresar la contraseña actual."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Editar correo electrónico"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Editar nombre"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Para agregar una contraseña a tu cuenta, debes acceder de nuevo."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Para cambiar la contraseña de tu cuenta, debes acceder de nuevo."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Para cambiar tu contraseña, primero debes ingresar la contraseña actual."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Agregar contraseña"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Cambiar contraseña"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "Correo electrónico"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Acceder con %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Ingresa tu nombre"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Ingresa tu correo electrónico"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Ingresa la contraseña"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Nueva contraseña"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Elegir contraseña"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "¿Tienes problemas para acceder?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Confirmar correo electrónico"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Accediste"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "¿Tienes problemas para recibir correos electrónicos?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Prueba estas soluciones comunes: \n- Verifica si el correo electrónico se marcó como spam o se filtró.\n- Comprueba tu conexión a Internet.\n- Verifica que escribiste bien tu correo electrónico.\n- Verifica que tu bandeja de entrada no esté llena o revisa cualquier otro problema relacionado con la configuración de la bandeja de entrada.\nSi los pasos anteriores no funcionaron, reenvía el correo electrónico. Ten en cuenta que esta acción desactivará el vínculo en el correo electrónico anterior."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "Se envió un correo electrónico de acceso con instrucciones adicionales a %@. Revisa tu bandeja de entrada para completar el proceso."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Se envió el correo electrónico de acceso"; diff --git a/FirebaseAuthUI/Sources/Strings/es-HN.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/es-HN.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 29b572876da..00000000000 --- a/FirebaseAuthUI/Sources/Strings/es-HN.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Te damos la bienvenida"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Acceder con el correo electrónico"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Ingresa tu correo electrónico"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "La dirección de correo electrónico es incorrecta."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "El tipo de cuenta no es compatible con esta app"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Ya tienes una cuenta"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Ya usaste %@. Accede con %@ para continuar."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Acceder"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Ingresa la contraseña"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "El campo de contraseña no puede estar vacío."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "El correo electrónico y la contraseña que ingresaste no coinciden."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "La dirección de correo electrónico no coincide con una cuenta existente."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "La dirección de correo electrónico corresponde a una cuenta que se inhabilitó."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Ingresaste una contraseña incorrecta demasiadas veces. Vuelve a intentarlo en unos minutos."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "No se encuentra ningún proveedor de %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Los correos electrónicos no coinciden"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Recuperar contraseña"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Recibe un correo electrónico con instrucciones para cambiar la contraseña."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Revisa tu correo electrónico"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Sigue las instrucciones que se enviaron a %@ para restablecer la contraseña."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Crear cuenta"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Nombre y apellido"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Elegir contraseña"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Condiciones del servicio"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Política de Privacidad"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Si continúas, indicas que aceptas nuestras %@ y %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "Otra cuenta ya usa esta dirección de correo electrónico."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Las contraseñas seguras deben tener al menos 6 caracteres, además de incluir letras y números."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Recibimos demasiadas solicitudes de cuenta desde tu dirección IP. Vuelve a intentarlo en unos minutos."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Ya usaste %@ para acceder. Ingresa la contraseña correspondiente."; - -/* OK button title. */ -"OK" = "Aceptar"; - -/* Cancel button title. */ -"Cancel" = "Cancelar"; - -/* Back button title. */ -"Back" = "Atrás"; - -/* Next button title. */ -"Next" = "Siguiente"; - -/* Save button title. */ -"Save" = "Guardar"; - -/* Send button title. */ -"Send" = "Enviar"; - -/* Resend button title. */ -"Resend" = "Reenviar"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "Correo electrónico"; - -/* Label next to a password text field. */ -"Password" = "Contraseña"; - -/* Label next to a name text field. */ -"Name" = "Nombre"; - -/* Alert title Error. */ -"Error" = "Error"; - -/* Alert button title Close. */ -"Close" = "Cerrar"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Perfil"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Seguridad"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Cuentas vinculadas"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Nombre"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "Correo electrónico"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Agregar contraseña"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Cambiar contraseña"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Salir"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Borrar cuenta"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "¿Olvidaste la contraseña?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Verifica tu identidad"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "¿Quieres borrar la cuenta?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Esta acción borrará todos los datos asociados con tu cuenta y no se puede deshacer. Debes acceder de nuevo para realizarla."; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Esta acción borrará todos los datos asociados con tu cuenta y no se puede deshacer. ¿Estás seguro de que quieres borrar tu cuenta?"; - -/* Text of Delete action button. */ -"Delete" = "Borrar"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Borrar cuenta"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Esta acción no se puede deshacer"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Desvincular"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Cuenta vinculada"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "¿Quieres desvincular la cuenta?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Ya no podrás acceder con tu cuenta"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Desvincular cuenta"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Para cambiar la dirección de correo electrónico asociada con tu cuenta, debes acceder de nuevo."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Para cambiar tu contraseña, primero debes ingresar la contraseña actual."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Editar correo electrónico"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Editar nombre"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Para agregar una contraseña a tu cuenta, debes acceder de nuevo."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Para cambiar la contraseña de tu cuenta, debes acceder de nuevo."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Para cambiar tu contraseña, primero debes ingresar la contraseña actual."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Agregar contraseña"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Cambiar contraseña"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "Correo electrónico"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Acceder con %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Ingresa tu nombre"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Ingresa tu correo electrónico"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Ingresa la contraseña"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Nueva contraseña"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Elegir contraseña"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "¿Tienes problemas para acceder?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Confirmar correo electrónico"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Accediste"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "¿Tienes problemas para recibir correos electrónicos?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Prueba estas soluciones comunes: \n- Verifica si el correo electrónico se marcó como spam o se filtró.\n- Comprueba tu conexión a Internet.\n- Verifica que escribiste bien tu correo electrónico.\n- Verifica que tu bandeja de entrada no esté llena o revisa cualquier otro problema relacionado con la configuración de la bandeja de entrada.\nSi los pasos anteriores no funcionaron, reenvía el correo electrónico. Ten en cuenta que esta acción desactivará el vínculo en el correo electrónico anterior."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "Se envió un correo electrónico de acceso con instrucciones adicionales a %@. Revisa tu bandeja de entrada para completar el proceso."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Se envió el correo electrónico de acceso"; diff --git a/FirebaseAuthUI/Sources/Strings/es-MX.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/es-MX.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 29b572876da..00000000000 --- a/FirebaseAuthUI/Sources/Strings/es-MX.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Te damos la bienvenida"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Acceder con el correo electrónico"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Ingresa tu correo electrónico"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "La dirección de correo electrónico es incorrecta."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "El tipo de cuenta no es compatible con esta app"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Ya tienes una cuenta"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Ya usaste %@. Accede con %@ para continuar."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Acceder"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Ingresa la contraseña"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "El campo de contraseña no puede estar vacío."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "El correo electrónico y la contraseña que ingresaste no coinciden."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "La dirección de correo electrónico no coincide con una cuenta existente."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "La dirección de correo electrónico corresponde a una cuenta que se inhabilitó."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Ingresaste una contraseña incorrecta demasiadas veces. Vuelve a intentarlo en unos minutos."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "No se encuentra ningún proveedor de %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Los correos electrónicos no coinciden"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Recuperar contraseña"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Recibe un correo electrónico con instrucciones para cambiar la contraseña."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Revisa tu correo electrónico"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Sigue las instrucciones que se enviaron a %@ para restablecer la contraseña."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Crear cuenta"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Nombre y apellido"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Elegir contraseña"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Condiciones del servicio"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Política de Privacidad"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Si continúas, indicas que aceptas nuestras %@ y %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "Otra cuenta ya usa esta dirección de correo electrónico."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Las contraseñas seguras deben tener al menos 6 caracteres, además de incluir letras y números."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Recibimos demasiadas solicitudes de cuenta desde tu dirección IP. Vuelve a intentarlo en unos minutos."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Ya usaste %@ para acceder. Ingresa la contraseña correspondiente."; - -/* OK button title. */ -"OK" = "Aceptar"; - -/* Cancel button title. */ -"Cancel" = "Cancelar"; - -/* Back button title. */ -"Back" = "Atrás"; - -/* Next button title. */ -"Next" = "Siguiente"; - -/* Save button title. */ -"Save" = "Guardar"; - -/* Send button title. */ -"Send" = "Enviar"; - -/* Resend button title. */ -"Resend" = "Reenviar"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "Correo electrónico"; - -/* Label next to a password text field. */ -"Password" = "Contraseña"; - -/* Label next to a name text field. */ -"Name" = "Nombre"; - -/* Alert title Error. */ -"Error" = "Error"; - -/* Alert button title Close. */ -"Close" = "Cerrar"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Perfil"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Seguridad"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Cuentas vinculadas"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Nombre"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "Correo electrónico"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Agregar contraseña"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Cambiar contraseña"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Salir"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Borrar cuenta"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "¿Olvidaste la contraseña?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Verifica tu identidad"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "¿Quieres borrar la cuenta?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Esta acción borrará todos los datos asociados con tu cuenta y no se puede deshacer. Debes acceder de nuevo para realizarla."; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Esta acción borrará todos los datos asociados con tu cuenta y no se puede deshacer. ¿Estás seguro de que quieres borrar tu cuenta?"; - -/* Text of Delete action button. */ -"Delete" = "Borrar"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Borrar cuenta"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Esta acción no se puede deshacer"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Desvincular"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Cuenta vinculada"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "¿Quieres desvincular la cuenta?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Ya no podrás acceder con tu cuenta"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Desvincular cuenta"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Para cambiar la dirección de correo electrónico asociada con tu cuenta, debes acceder de nuevo."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Para cambiar tu contraseña, primero debes ingresar la contraseña actual."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Editar correo electrónico"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Editar nombre"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Para agregar una contraseña a tu cuenta, debes acceder de nuevo."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Para cambiar la contraseña de tu cuenta, debes acceder de nuevo."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Para cambiar tu contraseña, primero debes ingresar la contraseña actual."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Agregar contraseña"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Cambiar contraseña"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "Correo electrónico"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Acceder con %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Ingresa tu nombre"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Ingresa tu correo electrónico"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Ingresa la contraseña"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Nueva contraseña"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Elegir contraseña"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "¿Tienes problemas para acceder?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Confirmar correo electrónico"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Accediste"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "¿Tienes problemas para recibir correos electrónicos?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Prueba estas soluciones comunes: \n- Verifica si el correo electrónico se marcó como spam o se filtró.\n- Comprueba tu conexión a Internet.\n- Verifica que escribiste bien tu correo electrónico.\n- Verifica que tu bandeja de entrada no esté llena o revisa cualquier otro problema relacionado con la configuración de la bandeja de entrada.\nSi los pasos anteriores no funcionaron, reenvía el correo electrónico. Ten en cuenta que esta acción desactivará el vínculo en el correo electrónico anterior."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "Se envió un correo electrónico de acceso con instrucciones adicionales a %@. Revisa tu bandeja de entrada para completar el proceso."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Se envió el correo electrónico de acceso"; diff --git a/FirebaseAuthUI/Sources/Strings/es-NI.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/es-NI.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 29b572876da..00000000000 --- a/FirebaseAuthUI/Sources/Strings/es-NI.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Te damos la bienvenida"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Acceder con el correo electrónico"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Ingresa tu correo electrónico"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "La dirección de correo electrónico es incorrecta."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "El tipo de cuenta no es compatible con esta app"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Ya tienes una cuenta"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Ya usaste %@. Accede con %@ para continuar."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Acceder"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Ingresa la contraseña"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "El campo de contraseña no puede estar vacío."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "El correo electrónico y la contraseña que ingresaste no coinciden."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "La dirección de correo electrónico no coincide con una cuenta existente."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "La dirección de correo electrónico corresponde a una cuenta que se inhabilitó."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Ingresaste una contraseña incorrecta demasiadas veces. Vuelve a intentarlo en unos minutos."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "No se encuentra ningún proveedor de %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Los correos electrónicos no coinciden"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Recuperar contraseña"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Recibe un correo electrónico con instrucciones para cambiar la contraseña."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Revisa tu correo electrónico"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Sigue las instrucciones que se enviaron a %@ para restablecer la contraseña."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Crear cuenta"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Nombre y apellido"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Elegir contraseña"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Condiciones del servicio"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Política de Privacidad"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Si continúas, indicas que aceptas nuestras %@ y %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "Otra cuenta ya usa esta dirección de correo electrónico."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Las contraseñas seguras deben tener al menos 6 caracteres, además de incluir letras y números."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Recibimos demasiadas solicitudes de cuenta desde tu dirección IP. Vuelve a intentarlo en unos minutos."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Ya usaste %@ para acceder. Ingresa la contraseña correspondiente."; - -/* OK button title. */ -"OK" = "Aceptar"; - -/* Cancel button title. */ -"Cancel" = "Cancelar"; - -/* Back button title. */ -"Back" = "Atrás"; - -/* Next button title. */ -"Next" = "Siguiente"; - -/* Save button title. */ -"Save" = "Guardar"; - -/* Send button title. */ -"Send" = "Enviar"; - -/* Resend button title. */ -"Resend" = "Reenviar"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "Correo electrónico"; - -/* Label next to a password text field. */ -"Password" = "Contraseña"; - -/* Label next to a name text field. */ -"Name" = "Nombre"; - -/* Alert title Error. */ -"Error" = "Error"; - -/* Alert button title Close. */ -"Close" = "Cerrar"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Perfil"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Seguridad"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Cuentas vinculadas"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Nombre"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "Correo electrónico"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Agregar contraseña"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Cambiar contraseña"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Salir"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Borrar cuenta"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "¿Olvidaste la contraseña?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Verifica tu identidad"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "¿Quieres borrar la cuenta?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Esta acción borrará todos los datos asociados con tu cuenta y no se puede deshacer. Debes acceder de nuevo para realizarla."; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Esta acción borrará todos los datos asociados con tu cuenta y no se puede deshacer. ¿Estás seguro de que quieres borrar tu cuenta?"; - -/* Text of Delete action button. */ -"Delete" = "Borrar"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Borrar cuenta"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Esta acción no se puede deshacer"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Desvincular"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Cuenta vinculada"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "¿Quieres desvincular la cuenta?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Ya no podrás acceder con tu cuenta"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Desvincular cuenta"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Para cambiar la dirección de correo electrónico asociada con tu cuenta, debes acceder de nuevo."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Para cambiar tu contraseña, primero debes ingresar la contraseña actual."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Editar correo electrónico"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Editar nombre"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Para agregar una contraseña a tu cuenta, debes acceder de nuevo."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Para cambiar la contraseña de tu cuenta, debes acceder de nuevo."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Para cambiar tu contraseña, primero debes ingresar la contraseña actual."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Agregar contraseña"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Cambiar contraseña"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "Correo electrónico"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Acceder con %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Ingresa tu nombre"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Ingresa tu correo electrónico"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Ingresa la contraseña"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Nueva contraseña"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Elegir contraseña"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "¿Tienes problemas para acceder?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Confirmar correo electrónico"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Accediste"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "¿Tienes problemas para recibir correos electrónicos?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Prueba estas soluciones comunes: \n- Verifica si el correo electrónico se marcó como spam o se filtró.\n- Comprueba tu conexión a Internet.\n- Verifica que escribiste bien tu correo electrónico.\n- Verifica que tu bandeja de entrada no esté llena o revisa cualquier otro problema relacionado con la configuración de la bandeja de entrada.\nSi los pasos anteriores no funcionaron, reenvía el correo electrónico. Ten en cuenta que esta acción desactivará el vínculo en el correo electrónico anterior."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "Se envió un correo electrónico de acceso con instrucciones adicionales a %@. Revisa tu bandeja de entrada para completar el proceso."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Se envió el correo electrónico de acceso"; diff --git a/FirebaseAuthUI/Sources/Strings/es-PA.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/es-PA.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 29b572876da..00000000000 --- a/FirebaseAuthUI/Sources/Strings/es-PA.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Te damos la bienvenida"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Acceder con el correo electrónico"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Ingresa tu correo electrónico"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "La dirección de correo electrónico es incorrecta."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "El tipo de cuenta no es compatible con esta app"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Ya tienes una cuenta"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Ya usaste %@. Accede con %@ para continuar."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Acceder"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Ingresa la contraseña"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "El campo de contraseña no puede estar vacío."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "El correo electrónico y la contraseña que ingresaste no coinciden."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "La dirección de correo electrónico no coincide con una cuenta existente."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "La dirección de correo electrónico corresponde a una cuenta que se inhabilitó."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Ingresaste una contraseña incorrecta demasiadas veces. Vuelve a intentarlo en unos minutos."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "No se encuentra ningún proveedor de %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Los correos electrónicos no coinciden"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Recuperar contraseña"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Recibe un correo electrónico con instrucciones para cambiar la contraseña."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Revisa tu correo electrónico"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Sigue las instrucciones que se enviaron a %@ para restablecer la contraseña."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Crear cuenta"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Nombre y apellido"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Elegir contraseña"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Condiciones del servicio"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Política de Privacidad"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Si continúas, indicas que aceptas nuestras %@ y %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "Otra cuenta ya usa esta dirección de correo electrónico."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Las contraseñas seguras deben tener al menos 6 caracteres, además de incluir letras y números."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Recibimos demasiadas solicitudes de cuenta desde tu dirección IP. Vuelve a intentarlo en unos minutos."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Ya usaste %@ para acceder. Ingresa la contraseña correspondiente."; - -/* OK button title. */ -"OK" = "Aceptar"; - -/* Cancel button title. */ -"Cancel" = "Cancelar"; - -/* Back button title. */ -"Back" = "Atrás"; - -/* Next button title. */ -"Next" = "Siguiente"; - -/* Save button title. */ -"Save" = "Guardar"; - -/* Send button title. */ -"Send" = "Enviar"; - -/* Resend button title. */ -"Resend" = "Reenviar"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "Correo electrónico"; - -/* Label next to a password text field. */ -"Password" = "Contraseña"; - -/* Label next to a name text field. */ -"Name" = "Nombre"; - -/* Alert title Error. */ -"Error" = "Error"; - -/* Alert button title Close. */ -"Close" = "Cerrar"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Perfil"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Seguridad"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Cuentas vinculadas"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Nombre"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "Correo electrónico"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Agregar contraseña"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Cambiar contraseña"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Salir"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Borrar cuenta"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "¿Olvidaste la contraseña?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Verifica tu identidad"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "¿Quieres borrar la cuenta?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Esta acción borrará todos los datos asociados con tu cuenta y no se puede deshacer. Debes acceder de nuevo para realizarla."; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Esta acción borrará todos los datos asociados con tu cuenta y no se puede deshacer. ¿Estás seguro de que quieres borrar tu cuenta?"; - -/* Text of Delete action button. */ -"Delete" = "Borrar"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Borrar cuenta"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Esta acción no se puede deshacer"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Desvincular"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Cuenta vinculada"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "¿Quieres desvincular la cuenta?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Ya no podrás acceder con tu cuenta"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Desvincular cuenta"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Para cambiar la dirección de correo electrónico asociada con tu cuenta, debes acceder de nuevo."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Para cambiar tu contraseña, primero debes ingresar la contraseña actual."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Editar correo electrónico"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Editar nombre"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Para agregar una contraseña a tu cuenta, debes acceder de nuevo."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Para cambiar la contraseña de tu cuenta, debes acceder de nuevo."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Para cambiar tu contraseña, primero debes ingresar la contraseña actual."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Agregar contraseña"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Cambiar contraseña"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "Correo electrónico"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Acceder con %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Ingresa tu nombre"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Ingresa tu correo electrónico"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Ingresa la contraseña"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Nueva contraseña"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Elegir contraseña"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "¿Tienes problemas para acceder?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Confirmar correo electrónico"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Accediste"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "¿Tienes problemas para recibir correos electrónicos?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Prueba estas soluciones comunes: \n- Verifica si el correo electrónico se marcó como spam o se filtró.\n- Comprueba tu conexión a Internet.\n- Verifica que escribiste bien tu correo electrónico.\n- Verifica que tu bandeja de entrada no esté llena o revisa cualquier otro problema relacionado con la configuración de la bandeja de entrada.\nSi los pasos anteriores no funcionaron, reenvía el correo electrónico. Ten en cuenta que esta acción desactivará el vínculo en el correo electrónico anterior."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "Se envió un correo electrónico de acceso con instrucciones adicionales a %@. Revisa tu bandeja de entrada para completar el proceso."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Se envió el correo electrónico de acceso"; diff --git a/FirebaseAuthUI/Sources/Strings/es-PE.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/es-PE.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 29b572876da..00000000000 --- a/FirebaseAuthUI/Sources/Strings/es-PE.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Te damos la bienvenida"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Acceder con el correo electrónico"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Ingresa tu correo electrónico"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "La dirección de correo electrónico es incorrecta."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "El tipo de cuenta no es compatible con esta app"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Ya tienes una cuenta"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Ya usaste %@. Accede con %@ para continuar."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Acceder"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Ingresa la contraseña"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "El campo de contraseña no puede estar vacío."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "El correo electrónico y la contraseña que ingresaste no coinciden."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "La dirección de correo electrónico no coincide con una cuenta existente."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "La dirección de correo electrónico corresponde a una cuenta que se inhabilitó."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Ingresaste una contraseña incorrecta demasiadas veces. Vuelve a intentarlo en unos minutos."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "No se encuentra ningún proveedor de %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Los correos electrónicos no coinciden"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Recuperar contraseña"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Recibe un correo electrónico con instrucciones para cambiar la contraseña."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Revisa tu correo electrónico"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Sigue las instrucciones que se enviaron a %@ para restablecer la contraseña."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Crear cuenta"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Nombre y apellido"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Elegir contraseña"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Condiciones del servicio"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Política de Privacidad"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Si continúas, indicas que aceptas nuestras %@ y %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "Otra cuenta ya usa esta dirección de correo electrónico."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Las contraseñas seguras deben tener al menos 6 caracteres, además de incluir letras y números."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Recibimos demasiadas solicitudes de cuenta desde tu dirección IP. Vuelve a intentarlo en unos minutos."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Ya usaste %@ para acceder. Ingresa la contraseña correspondiente."; - -/* OK button title. */ -"OK" = "Aceptar"; - -/* Cancel button title. */ -"Cancel" = "Cancelar"; - -/* Back button title. */ -"Back" = "Atrás"; - -/* Next button title. */ -"Next" = "Siguiente"; - -/* Save button title. */ -"Save" = "Guardar"; - -/* Send button title. */ -"Send" = "Enviar"; - -/* Resend button title. */ -"Resend" = "Reenviar"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "Correo electrónico"; - -/* Label next to a password text field. */ -"Password" = "Contraseña"; - -/* Label next to a name text field. */ -"Name" = "Nombre"; - -/* Alert title Error. */ -"Error" = "Error"; - -/* Alert button title Close. */ -"Close" = "Cerrar"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Perfil"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Seguridad"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Cuentas vinculadas"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Nombre"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "Correo electrónico"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Agregar contraseña"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Cambiar contraseña"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Salir"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Borrar cuenta"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "¿Olvidaste la contraseña?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Verifica tu identidad"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "¿Quieres borrar la cuenta?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Esta acción borrará todos los datos asociados con tu cuenta y no se puede deshacer. Debes acceder de nuevo para realizarla."; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Esta acción borrará todos los datos asociados con tu cuenta y no se puede deshacer. ¿Estás seguro de que quieres borrar tu cuenta?"; - -/* Text of Delete action button. */ -"Delete" = "Borrar"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Borrar cuenta"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Esta acción no se puede deshacer"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Desvincular"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Cuenta vinculada"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "¿Quieres desvincular la cuenta?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Ya no podrás acceder con tu cuenta"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Desvincular cuenta"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Para cambiar la dirección de correo electrónico asociada con tu cuenta, debes acceder de nuevo."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Para cambiar tu contraseña, primero debes ingresar la contraseña actual."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Editar correo electrónico"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Editar nombre"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Para agregar una contraseña a tu cuenta, debes acceder de nuevo."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Para cambiar la contraseña de tu cuenta, debes acceder de nuevo."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Para cambiar tu contraseña, primero debes ingresar la contraseña actual."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Agregar contraseña"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Cambiar contraseña"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "Correo electrónico"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Acceder con %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Ingresa tu nombre"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Ingresa tu correo electrónico"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Ingresa la contraseña"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Nueva contraseña"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Elegir contraseña"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "¿Tienes problemas para acceder?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Confirmar correo electrónico"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Accediste"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "¿Tienes problemas para recibir correos electrónicos?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Prueba estas soluciones comunes: \n- Verifica si el correo electrónico se marcó como spam o se filtró.\n- Comprueba tu conexión a Internet.\n- Verifica que escribiste bien tu correo electrónico.\n- Verifica que tu bandeja de entrada no esté llena o revisa cualquier otro problema relacionado con la configuración de la bandeja de entrada.\nSi los pasos anteriores no funcionaron, reenvía el correo electrónico. Ten en cuenta que esta acción desactivará el vínculo en el correo electrónico anterior."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "Se envió un correo electrónico de acceso con instrucciones adicionales a %@. Revisa tu bandeja de entrada para completar el proceso."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Se envió el correo electrónico de acceso"; diff --git a/FirebaseAuthUI/Sources/Strings/es-PR.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/es-PR.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 29b572876da..00000000000 --- a/FirebaseAuthUI/Sources/Strings/es-PR.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Te damos la bienvenida"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Acceder con el correo electrónico"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Ingresa tu correo electrónico"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "La dirección de correo electrónico es incorrecta."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "El tipo de cuenta no es compatible con esta app"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Ya tienes una cuenta"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Ya usaste %@. Accede con %@ para continuar."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Acceder"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Ingresa la contraseña"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "El campo de contraseña no puede estar vacío."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "El correo electrónico y la contraseña que ingresaste no coinciden."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "La dirección de correo electrónico no coincide con una cuenta existente."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "La dirección de correo electrónico corresponde a una cuenta que se inhabilitó."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Ingresaste una contraseña incorrecta demasiadas veces. Vuelve a intentarlo en unos minutos."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "No se encuentra ningún proveedor de %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Los correos electrónicos no coinciden"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Recuperar contraseña"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Recibe un correo electrónico con instrucciones para cambiar la contraseña."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Revisa tu correo electrónico"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Sigue las instrucciones que se enviaron a %@ para restablecer la contraseña."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Crear cuenta"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Nombre y apellido"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Elegir contraseña"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Condiciones del servicio"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Política de Privacidad"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Si continúas, indicas que aceptas nuestras %@ y %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "Otra cuenta ya usa esta dirección de correo electrónico."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Las contraseñas seguras deben tener al menos 6 caracteres, además de incluir letras y números."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Recibimos demasiadas solicitudes de cuenta desde tu dirección IP. Vuelve a intentarlo en unos minutos."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Ya usaste %@ para acceder. Ingresa la contraseña correspondiente."; - -/* OK button title. */ -"OK" = "Aceptar"; - -/* Cancel button title. */ -"Cancel" = "Cancelar"; - -/* Back button title. */ -"Back" = "Atrás"; - -/* Next button title. */ -"Next" = "Siguiente"; - -/* Save button title. */ -"Save" = "Guardar"; - -/* Send button title. */ -"Send" = "Enviar"; - -/* Resend button title. */ -"Resend" = "Reenviar"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "Correo electrónico"; - -/* Label next to a password text field. */ -"Password" = "Contraseña"; - -/* Label next to a name text field. */ -"Name" = "Nombre"; - -/* Alert title Error. */ -"Error" = "Error"; - -/* Alert button title Close. */ -"Close" = "Cerrar"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Perfil"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Seguridad"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Cuentas vinculadas"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Nombre"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "Correo electrónico"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Agregar contraseña"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Cambiar contraseña"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Salir"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Borrar cuenta"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "¿Olvidaste la contraseña?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Verifica tu identidad"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "¿Quieres borrar la cuenta?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Esta acción borrará todos los datos asociados con tu cuenta y no se puede deshacer. Debes acceder de nuevo para realizarla."; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Esta acción borrará todos los datos asociados con tu cuenta y no se puede deshacer. ¿Estás seguro de que quieres borrar tu cuenta?"; - -/* Text of Delete action button. */ -"Delete" = "Borrar"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Borrar cuenta"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Esta acción no se puede deshacer"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Desvincular"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Cuenta vinculada"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "¿Quieres desvincular la cuenta?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Ya no podrás acceder con tu cuenta"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Desvincular cuenta"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Para cambiar la dirección de correo electrónico asociada con tu cuenta, debes acceder de nuevo."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Para cambiar tu contraseña, primero debes ingresar la contraseña actual."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Editar correo electrónico"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Editar nombre"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Para agregar una contraseña a tu cuenta, debes acceder de nuevo."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Para cambiar la contraseña de tu cuenta, debes acceder de nuevo."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Para cambiar tu contraseña, primero debes ingresar la contraseña actual."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Agregar contraseña"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Cambiar contraseña"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "Correo electrónico"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Acceder con %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Ingresa tu nombre"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Ingresa tu correo electrónico"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Ingresa la contraseña"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Nueva contraseña"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Elegir contraseña"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "¿Tienes problemas para acceder?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Confirmar correo electrónico"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Accediste"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "¿Tienes problemas para recibir correos electrónicos?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Prueba estas soluciones comunes: \n- Verifica si el correo electrónico se marcó como spam o se filtró.\n- Comprueba tu conexión a Internet.\n- Verifica que escribiste bien tu correo electrónico.\n- Verifica que tu bandeja de entrada no esté llena o revisa cualquier otro problema relacionado con la configuración de la bandeja de entrada.\nSi los pasos anteriores no funcionaron, reenvía el correo electrónico. Ten en cuenta que esta acción desactivará el vínculo en el correo electrónico anterior."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "Se envió un correo electrónico de acceso con instrucciones adicionales a %@. Revisa tu bandeja de entrada para completar el proceso."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Se envió el correo electrónico de acceso"; diff --git a/FirebaseAuthUI/Sources/Strings/es-PY.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/es-PY.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 29b572876da..00000000000 --- a/FirebaseAuthUI/Sources/Strings/es-PY.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Te damos la bienvenida"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Acceder con el correo electrónico"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Ingresa tu correo electrónico"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "La dirección de correo electrónico es incorrecta."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "El tipo de cuenta no es compatible con esta app"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Ya tienes una cuenta"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Ya usaste %@. Accede con %@ para continuar."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Acceder"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Ingresa la contraseña"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "El campo de contraseña no puede estar vacío."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "El correo electrónico y la contraseña que ingresaste no coinciden."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "La dirección de correo electrónico no coincide con una cuenta existente."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "La dirección de correo electrónico corresponde a una cuenta que se inhabilitó."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Ingresaste una contraseña incorrecta demasiadas veces. Vuelve a intentarlo en unos minutos."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "No se encuentra ningún proveedor de %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Los correos electrónicos no coinciden"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Recuperar contraseña"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Recibe un correo electrónico con instrucciones para cambiar la contraseña."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Revisa tu correo electrónico"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Sigue las instrucciones que se enviaron a %@ para restablecer la contraseña."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Crear cuenta"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Nombre y apellido"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Elegir contraseña"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Condiciones del servicio"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Política de Privacidad"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Si continúas, indicas que aceptas nuestras %@ y %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "Otra cuenta ya usa esta dirección de correo electrónico."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Las contraseñas seguras deben tener al menos 6 caracteres, además de incluir letras y números."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Recibimos demasiadas solicitudes de cuenta desde tu dirección IP. Vuelve a intentarlo en unos minutos."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Ya usaste %@ para acceder. Ingresa la contraseña correspondiente."; - -/* OK button title. */ -"OK" = "Aceptar"; - -/* Cancel button title. */ -"Cancel" = "Cancelar"; - -/* Back button title. */ -"Back" = "Atrás"; - -/* Next button title. */ -"Next" = "Siguiente"; - -/* Save button title. */ -"Save" = "Guardar"; - -/* Send button title. */ -"Send" = "Enviar"; - -/* Resend button title. */ -"Resend" = "Reenviar"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "Correo electrónico"; - -/* Label next to a password text field. */ -"Password" = "Contraseña"; - -/* Label next to a name text field. */ -"Name" = "Nombre"; - -/* Alert title Error. */ -"Error" = "Error"; - -/* Alert button title Close. */ -"Close" = "Cerrar"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Perfil"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Seguridad"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Cuentas vinculadas"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Nombre"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "Correo electrónico"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Agregar contraseña"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Cambiar contraseña"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Salir"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Borrar cuenta"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "¿Olvidaste la contraseña?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Verifica tu identidad"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "¿Quieres borrar la cuenta?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Esta acción borrará todos los datos asociados con tu cuenta y no se puede deshacer. Debes acceder de nuevo para realizarla."; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Esta acción borrará todos los datos asociados con tu cuenta y no se puede deshacer. ¿Estás seguro de que quieres borrar tu cuenta?"; - -/* Text of Delete action button. */ -"Delete" = "Borrar"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Borrar cuenta"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Esta acción no se puede deshacer"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Desvincular"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Cuenta vinculada"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "¿Quieres desvincular la cuenta?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Ya no podrás acceder con tu cuenta"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Desvincular cuenta"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Para cambiar la dirección de correo electrónico asociada con tu cuenta, debes acceder de nuevo."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Para cambiar tu contraseña, primero debes ingresar la contraseña actual."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Editar correo electrónico"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Editar nombre"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Para agregar una contraseña a tu cuenta, debes acceder de nuevo."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Para cambiar la contraseña de tu cuenta, debes acceder de nuevo."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Para cambiar tu contraseña, primero debes ingresar la contraseña actual."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Agregar contraseña"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Cambiar contraseña"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "Correo electrónico"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Acceder con %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Ingresa tu nombre"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Ingresa tu correo electrónico"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Ingresa la contraseña"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Nueva contraseña"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Elegir contraseña"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "¿Tienes problemas para acceder?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Confirmar correo electrónico"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Accediste"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "¿Tienes problemas para recibir correos electrónicos?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Prueba estas soluciones comunes: \n- Verifica si el correo electrónico se marcó como spam o se filtró.\n- Comprueba tu conexión a Internet.\n- Verifica que escribiste bien tu correo electrónico.\n- Verifica que tu bandeja de entrada no esté llena o revisa cualquier otro problema relacionado con la configuración de la bandeja de entrada.\nSi los pasos anteriores no funcionaron, reenvía el correo electrónico. Ten en cuenta que esta acción desactivará el vínculo en el correo electrónico anterior."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "Se envió un correo electrónico de acceso con instrucciones adicionales a %@. Revisa tu bandeja de entrada para completar el proceso."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Se envió el correo electrónico de acceso"; diff --git a/FirebaseAuthUI/Sources/Strings/es-SV.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/es-SV.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 29b572876da..00000000000 --- a/FirebaseAuthUI/Sources/Strings/es-SV.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Te damos la bienvenida"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Acceder con el correo electrónico"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Ingresa tu correo electrónico"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "La dirección de correo electrónico es incorrecta."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "El tipo de cuenta no es compatible con esta app"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Ya tienes una cuenta"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Ya usaste %@. Accede con %@ para continuar."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Acceder"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Ingresa la contraseña"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "El campo de contraseña no puede estar vacío."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "El correo electrónico y la contraseña que ingresaste no coinciden."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "La dirección de correo electrónico no coincide con una cuenta existente."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "La dirección de correo electrónico corresponde a una cuenta que se inhabilitó."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Ingresaste una contraseña incorrecta demasiadas veces. Vuelve a intentarlo en unos minutos."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "No se encuentra ningún proveedor de %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Los correos electrónicos no coinciden"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Recuperar contraseña"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Recibe un correo electrónico con instrucciones para cambiar la contraseña."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Revisa tu correo electrónico"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Sigue las instrucciones que se enviaron a %@ para restablecer la contraseña."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Crear cuenta"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Nombre y apellido"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Elegir contraseña"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Condiciones del servicio"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Política de Privacidad"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Si continúas, indicas que aceptas nuestras %@ y %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "Otra cuenta ya usa esta dirección de correo electrónico."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Las contraseñas seguras deben tener al menos 6 caracteres, además de incluir letras y números."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Recibimos demasiadas solicitudes de cuenta desde tu dirección IP. Vuelve a intentarlo en unos minutos."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Ya usaste %@ para acceder. Ingresa la contraseña correspondiente."; - -/* OK button title. */ -"OK" = "Aceptar"; - -/* Cancel button title. */ -"Cancel" = "Cancelar"; - -/* Back button title. */ -"Back" = "Atrás"; - -/* Next button title. */ -"Next" = "Siguiente"; - -/* Save button title. */ -"Save" = "Guardar"; - -/* Send button title. */ -"Send" = "Enviar"; - -/* Resend button title. */ -"Resend" = "Reenviar"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "Correo electrónico"; - -/* Label next to a password text field. */ -"Password" = "Contraseña"; - -/* Label next to a name text field. */ -"Name" = "Nombre"; - -/* Alert title Error. */ -"Error" = "Error"; - -/* Alert button title Close. */ -"Close" = "Cerrar"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Perfil"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Seguridad"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Cuentas vinculadas"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Nombre"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "Correo electrónico"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Agregar contraseña"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Cambiar contraseña"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Salir"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Borrar cuenta"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "¿Olvidaste la contraseña?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Verifica tu identidad"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "¿Quieres borrar la cuenta?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Esta acción borrará todos los datos asociados con tu cuenta y no se puede deshacer. Debes acceder de nuevo para realizarla."; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Esta acción borrará todos los datos asociados con tu cuenta y no se puede deshacer. ¿Estás seguro de que quieres borrar tu cuenta?"; - -/* Text of Delete action button. */ -"Delete" = "Borrar"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Borrar cuenta"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Esta acción no se puede deshacer"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Desvincular"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Cuenta vinculada"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "¿Quieres desvincular la cuenta?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Ya no podrás acceder con tu cuenta"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Desvincular cuenta"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Para cambiar la dirección de correo electrónico asociada con tu cuenta, debes acceder de nuevo."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Para cambiar tu contraseña, primero debes ingresar la contraseña actual."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Editar correo electrónico"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Editar nombre"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Para agregar una contraseña a tu cuenta, debes acceder de nuevo."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Para cambiar la contraseña de tu cuenta, debes acceder de nuevo."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Para cambiar tu contraseña, primero debes ingresar la contraseña actual."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Agregar contraseña"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Cambiar contraseña"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "Correo electrónico"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Acceder con %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Ingresa tu nombre"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Ingresa tu correo electrónico"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Ingresa la contraseña"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Nueva contraseña"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Elegir contraseña"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "¿Tienes problemas para acceder?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Confirmar correo electrónico"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Accediste"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "¿Tienes problemas para recibir correos electrónicos?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Prueba estas soluciones comunes: \n- Verifica si el correo electrónico se marcó como spam o se filtró.\n- Comprueba tu conexión a Internet.\n- Verifica que escribiste bien tu correo electrónico.\n- Verifica que tu bandeja de entrada no esté llena o revisa cualquier otro problema relacionado con la configuración de la bandeja de entrada.\nSi los pasos anteriores no funcionaron, reenvía el correo electrónico. Ten en cuenta que esta acción desactivará el vínculo en el correo electrónico anterior."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "Se envió un correo electrónico de acceso con instrucciones adicionales a %@. Revisa tu bandeja de entrada para completar el proceso."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Se envió el correo electrónico de acceso"; diff --git a/FirebaseAuthUI/Sources/Strings/es-US.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/es-US.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 29b572876da..00000000000 --- a/FirebaseAuthUI/Sources/Strings/es-US.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Te damos la bienvenida"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Acceder con el correo electrónico"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Ingresa tu correo electrónico"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "La dirección de correo electrónico es incorrecta."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "El tipo de cuenta no es compatible con esta app"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Ya tienes una cuenta"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Ya usaste %@. Accede con %@ para continuar."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Acceder"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Ingresa la contraseña"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "El campo de contraseña no puede estar vacío."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "El correo electrónico y la contraseña que ingresaste no coinciden."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "La dirección de correo electrónico no coincide con una cuenta existente."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "La dirección de correo electrónico corresponde a una cuenta que se inhabilitó."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Ingresaste una contraseña incorrecta demasiadas veces. Vuelve a intentarlo en unos minutos."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "No se encuentra ningún proveedor de %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Los correos electrónicos no coinciden"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Recuperar contraseña"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Recibe un correo electrónico con instrucciones para cambiar la contraseña."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Revisa tu correo electrónico"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Sigue las instrucciones que se enviaron a %@ para restablecer la contraseña."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Crear cuenta"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Nombre y apellido"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Elegir contraseña"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Condiciones del servicio"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Política de Privacidad"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Si continúas, indicas que aceptas nuestras %@ y %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "Otra cuenta ya usa esta dirección de correo electrónico."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Las contraseñas seguras deben tener al menos 6 caracteres, además de incluir letras y números."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Recibimos demasiadas solicitudes de cuenta desde tu dirección IP. Vuelve a intentarlo en unos minutos."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Ya usaste %@ para acceder. Ingresa la contraseña correspondiente."; - -/* OK button title. */ -"OK" = "Aceptar"; - -/* Cancel button title. */ -"Cancel" = "Cancelar"; - -/* Back button title. */ -"Back" = "Atrás"; - -/* Next button title. */ -"Next" = "Siguiente"; - -/* Save button title. */ -"Save" = "Guardar"; - -/* Send button title. */ -"Send" = "Enviar"; - -/* Resend button title. */ -"Resend" = "Reenviar"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "Correo electrónico"; - -/* Label next to a password text field. */ -"Password" = "Contraseña"; - -/* Label next to a name text field. */ -"Name" = "Nombre"; - -/* Alert title Error. */ -"Error" = "Error"; - -/* Alert button title Close. */ -"Close" = "Cerrar"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Perfil"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Seguridad"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Cuentas vinculadas"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Nombre"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "Correo electrónico"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Agregar contraseña"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Cambiar contraseña"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Salir"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Borrar cuenta"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "¿Olvidaste la contraseña?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Verifica tu identidad"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "¿Quieres borrar la cuenta?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Esta acción borrará todos los datos asociados con tu cuenta y no se puede deshacer. Debes acceder de nuevo para realizarla."; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Esta acción borrará todos los datos asociados con tu cuenta y no se puede deshacer. ¿Estás seguro de que quieres borrar tu cuenta?"; - -/* Text of Delete action button. */ -"Delete" = "Borrar"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Borrar cuenta"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Esta acción no se puede deshacer"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Desvincular"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Cuenta vinculada"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "¿Quieres desvincular la cuenta?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Ya no podrás acceder con tu cuenta"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Desvincular cuenta"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Para cambiar la dirección de correo electrónico asociada con tu cuenta, debes acceder de nuevo."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Para cambiar tu contraseña, primero debes ingresar la contraseña actual."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Editar correo electrónico"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Editar nombre"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Para agregar una contraseña a tu cuenta, debes acceder de nuevo."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Para cambiar la contraseña de tu cuenta, debes acceder de nuevo."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Para cambiar tu contraseña, primero debes ingresar la contraseña actual."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Agregar contraseña"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Cambiar contraseña"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "Correo electrónico"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Acceder con %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Ingresa tu nombre"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Ingresa tu correo electrónico"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Ingresa la contraseña"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Nueva contraseña"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Elegir contraseña"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "¿Tienes problemas para acceder?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Confirmar correo electrónico"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Accediste"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "¿Tienes problemas para recibir correos electrónicos?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Prueba estas soluciones comunes: \n- Verifica si el correo electrónico se marcó como spam o se filtró.\n- Comprueba tu conexión a Internet.\n- Verifica que escribiste bien tu correo electrónico.\n- Verifica que tu bandeja de entrada no esté llena o revisa cualquier otro problema relacionado con la configuración de la bandeja de entrada.\nSi los pasos anteriores no funcionaron, reenvía el correo electrónico. Ten en cuenta que esta acción desactivará el vínculo en el correo electrónico anterior."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "Se envió un correo electrónico de acceso con instrucciones adicionales a %@. Revisa tu bandeja de entrada para completar el proceso."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Se envió el correo electrónico de acceso"; diff --git a/FirebaseAuthUI/Sources/Strings/es-UY.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/es-UY.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 29b572876da..00000000000 --- a/FirebaseAuthUI/Sources/Strings/es-UY.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Te damos la bienvenida"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Acceder con el correo electrónico"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Ingresa tu correo electrónico"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "La dirección de correo electrónico es incorrecta."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "El tipo de cuenta no es compatible con esta app"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Ya tienes una cuenta"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Ya usaste %@. Accede con %@ para continuar."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Acceder"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Ingresa la contraseña"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "El campo de contraseña no puede estar vacío."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "El correo electrónico y la contraseña que ingresaste no coinciden."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "La dirección de correo electrónico no coincide con una cuenta existente."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "La dirección de correo electrónico corresponde a una cuenta que se inhabilitó."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Ingresaste una contraseña incorrecta demasiadas veces. Vuelve a intentarlo en unos minutos."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "No se encuentra ningún proveedor de %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Los correos electrónicos no coinciden"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Recuperar contraseña"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Recibe un correo electrónico con instrucciones para cambiar la contraseña."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Revisa tu correo electrónico"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Sigue las instrucciones que se enviaron a %@ para restablecer la contraseña."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Crear cuenta"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Nombre y apellido"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Elegir contraseña"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Condiciones del servicio"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Política de Privacidad"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Si continúas, indicas que aceptas nuestras %@ y %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "Otra cuenta ya usa esta dirección de correo electrónico."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Las contraseñas seguras deben tener al menos 6 caracteres, además de incluir letras y números."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Recibimos demasiadas solicitudes de cuenta desde tu dirección IP. Vuelve a intentarlo en unos minutos."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Ya usaste %@ para acceder. Ingresa la contraseña correspondiente."; - -/* OK button title. */ -"OK" = "Aceptar"; - -/* Cancel button title. */ -"Cancel" = "Cancelar"; - -/* Back button title. */ -"Back" = "Atrás"; - -/* Next button title. */ -"Next" = "Siguiente"; - -/* Save button title. */ -"Save" = "Guardar"; - -/* Send button title. */ -"Send" = "Enviar"; - -/* Resend button title. */ -"Resend" = "Reenviar"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "Correo electrónico"; - -/* Label next to a password text field. */ -"Password" = "Contraseña"; - -/* Label next to a name text field. */ -"Name" = "Nombre"; - -/* Alert title Error. */ -"Error" = "Error"; - -/* Alert button title Close. */ -"Close" = "Cerrar"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Perfil"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Seguridad"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Cuentas vinculadas"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Nombre"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "Correo electrónico"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Agregar contraseña"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Cambiar contraseña"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Salir"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Borrar cuenta"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "¿Olvidaste la contraseña?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Verifica tu identidad"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "¿Quieres borrar la cuenta?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Esta acción borrará todos los datos asociados con tu cuenta y no se puede deshacer. Debes acceder de nuevo para realizarla."; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Esta acción borrará todos los datos asociados con tu cuenta y no se puede deshacer. ¿Estás seguro de que quieres borrar tu cuenta?"; - -/* Text of Delete action button. */ -"Delete" = "Borrar"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Borrar cuenta"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Esta acción no se puede deshacer"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Desvincular"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Cuenta vinculada"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "¿Quieres desvincular la cuenta?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Ya no podrás acceder con tu cuenta"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Desvincular cuenta"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Para cambiar la dirección de correo electrónico asociada con tu cuenta, debes acceder de nuevo."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Para cambiar tu contraseña, primero debes ingresar la contraseña actual."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Editar correo electrónico"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Editar nombre"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Para agregar una contraseña a tu cuenta, debes acceder de nuevo."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Para cambiar la contraseña de tu cuenta, debes acceder de nuevo."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Para cambiar tu contraseña, primero debes ingresar la contraseña actual."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Agregar contraseña"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Cambiar contraseña"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "Correo electrónico"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Acceder con %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Ingresa tu nombre"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Ingresa tu correo electrónico"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Ingresa la contraseña"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Nueva contraseña"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Elegir contraseña"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "¿Tienes problemas para acceder?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Confirmar correo electrónico"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Accediste"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "¿Tienes problemas para recibir correos electrónicos?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Prueba estas soluciones comunes: \n- Verifica si el correo electrónico se marcó como spam o se filtró.\n- Comprueba tu conexión a Internet.\n- Verifica que escribiste bien tu correo electrónico.\n- Verifica que tu bandeja de entrada no esté llena o revisa cualquier otro problema relacionado con la configuración de la bandeja de entrada.\nSi los pasos anteriores no funcionaron, reenvía el correo electrónico. Ten en cuenta que esta acción desactivará el vínculo en el correo electrónico anterior."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "Se envió un correo electrónico de acceso con instrucciones adicionales a %@. Revisa tu bandeja de entrada para completar el proceso."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Se envió el correo electrónico de acceso"; diff --git a/FirebaseAuthUI/Sources/Strings/es-VE.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/es-VE.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 29b572876da..00000000000 --- a/FirebaseAuthUI/Sources/Strings/es-VE.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Te damos la bienvenida"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Acceder con el correo electrónico"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Ingresa tu correo electrónico"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "La dirección de correo electrónico es incorrecta."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "El tipo de cuenta no es compatible con esta app"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Ya tienes una cuenta"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Ya usaste %@. Accede con %@ para continuar."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Acceder"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Ingresa la contraseña"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "El campo de contraseña no puede estar vacío."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "El correo electrónico y la contraseña que ingresaste no coinciden."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "La dirección de correo electrónico no coincide con una cuenta existente."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "La dirección de correo electrónico corresponde a una cuenta que se inhabilitó."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Ingresaste una contraseña incorrecta demasiadas veces. Vuelve a intentarlo en unos minutos."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "No se encuentra ningún proveedor de %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Los correos electrónicos no coinciden"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Recuperar contraseña"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Recibe un correo electrónico con instrucciones para cambiar la contraseña."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Revisa tu correo electrónico"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Sigue las instrucciones que se enviaron a %@ para restablecer la contraseña."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Crear cuenta"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Nombre y apellido"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Elegir contraseña"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Condiciones del servicio"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Política de Privacidad"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Si continúas, indicas que aceptas nuestras %@ y %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "Otra cuenta ya usa esta dirección de correo electrónico."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Las contraseñas seguras deben tener al menos 6 caracteres, además de incluir letras y números."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Recibimos demasiadas solicitudes de cuenta desde tu dirección IP. Vuelve a intentarlo en unos minutos."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Ya usaste %@ para acceder. Ingresa la contraseña correspondiente."; - -/* OK button title. */ -"OK" = "Aceptar"; - -/* Cancel button title. */ -"Cancel" = "Cancelar"; - -/* Back button title. */ -"Back" = "Atrás"; - -/* Next button title. */ -"Next" = "Siguiente"; - -/* Save button title. */ -"Save" = "Guardar"; - -/* Send button title. */ -"Send" = "Enviar"; - -/* Resend button title. */ -"Resend" = "Reenviar"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "Correo electrónico"; - -/* Label next to a password text field. */ -"Password" = "Contraseña"; - -/* Label next to a name text field. */ -"Name" = "Nombre"; - -/* Alert title Error. */ -"Error" = "Error"; - -/* Alert button title Close. */ -"Close" = "Cerrar"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Perfil"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Seguridad"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Cuentas vinculadas"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Nombre"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "Correo electrónico"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Agregar contraseña"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Cambiar contraseña"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Salir"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Borrar cuenta"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "¿Olvidaste la contraseña?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Verifica tu identidad"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "¿Quieres borrar la cuenta?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Esta acción borrará todos los datos asociados con tu cuenta y no se puede deshacer. Debes acceder de nuevo para realizarla."; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Esta acción borrará todos los datos asociados con tu cuenta y no se puede deshacer. ¿Estás seguro de que quieres borrar tu cuenta?"; - -/* Text of Delete action button. */ -"Delete" = "Borrar"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Borrar cuenta"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Esta acción no se puede deshacer"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Desvincular"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Cuenta vinculada"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "¿Quieres desvincular la cuenta?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Ya no podrás acceder con tu cuenta"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Desvincular cuenta"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Para cambiar la dirección de correo electrónico asociada con tu cuenta, debes acceder de nuevo."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Para cambiar tu contraseña, primero debes ingresar la contraseña actual."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Editar correo electrónico"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Editar nombre"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Para agregar una contraseña a tu cuenta, debes acceder de nuevo."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Para cambiar la contraseña de tu cuenta, debes acceder de nuevo."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Para cambiar tu contraseña, primero debes ingresar la contraseña actual."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Agregar contraseña"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Cambiar contraseña"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "Correo electrónico"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Acceder con %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Ingresa tu nombre"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Ingresa tu correo electrónico"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Ingresa la contraseña"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Nueva contraseña"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Elegir contraseña"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "¿Tienes problemas para acceder?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Confirmar correo electrónico"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Accediste"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "¿Tienes problemas para recibir correos electrónicos?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Prueba estas soluciones comunes: \n- Verifica si el correo electrónico se marcó como spam o se filtró.\n- Comprueba tu conexión a Internet.\n- Verifica que escribiste bien tu correo electrónico.\n- Verifica que tu bandeja de entrada no esté llena o revisa cualquier otro problema relacionado con la configuración de la bandeja de entrada.\nSi los pasos anteriores no funcionaron, reenvía el correo electrónico. Ten en cuenta que esta acción desactivará el vínculo en el correo electrónico anterior."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "Se envió un correo electrónico de acceso con instrucciones adicionales a %@. Revisa tu bandeja de entrada para completar el proceso."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Se envió el correo electrónico de acceso"; diff --git a/FirebaseAuthUI/Sources/Strings/es.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/es.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 848ae18acf9..00000000000 --- a/FirebaseAuthUI/Sources/Strings/es.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Te damos la bienvenida"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Iniciar sesión con el correo electrónico"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Introduce tu correo electrónico"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "El correo electrónico no es correcto."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "Esta aplicación no admite este tipo de cuenta"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Ya tienes una cuenta"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Ya has usado %@. Inicia sesión con %@ para continuar."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Iniciar sesión"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Introduce tu contraseña"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "La contraseña no puede estar vacía."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "La dirección de correo electrónico y contraseña que has introducido no coinciden."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "La dirección de correo electrónico no coincide con ninguna cuenta."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "La dirección de correo electrónico pertenece a una cuenta que se ha inhabilitado."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Has introducido una contraseña incorrecta demasiadas veces. Vuelve a intentarlo en unos minutos."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "No se ha encontrado a ningún proveedor de %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Los correos electrónicos no coinciden"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Recuperar contraseña"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Recibe un correo electrónico con instrucciones sobre cómo cambiar la contraseña."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Consulta tu correo electrónico"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Sigue las instrucciones que hemos enviado a %@ para recuperar la contraseña."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Crear cuenta"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Nombre y apellidos"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Elige una contraseña"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "condiciones de servicio"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Política de privacidad"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Si continúas, confirmas que aceptas nuestras %@ y nuestra %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "Otra cuenta ya usa esta dirección de correo electrónico."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Las contraseñas seguras contienen 6 caracteres como mínimo y combinan letras y números."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Estamos recibiendo demasiadas solicitudes desde tu dirección IP. Vuelve a intentarlo en unos minutos."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Ya has usado %@ para iniciar sesión. Introduce la contraseña de esa cuenta."; - -/* OK button title. */ -"OK" = "Aceptar"; - -/* Cancel button title. */ -"Cancel" = "Cancelar"; - -/* Back button title. */ -"Back" = "Atrás"; - -/* Next button title. */ -"Next" = "Siguiente"; - -/* Save button title. */ -"Save" = "Guardar"; - -/* Send button title. */ -"Send" = "Enviar"; - -/* Resend button title. */ -"Resend" = "Reenviar"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "Correo electrónico"; - -/* Label next to a password text field. */ -"Password" = "Contraseña"; - -/* Label next to a name text field. */ -"Name" = "Nombre"; - -/* Alert title Error. */ -"Error" = "Error"; - -/* Alert button title Close. */ -"Close" = "Cerrar"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Perfil"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Seguridad"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Cuentas vinculadas"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Nombre"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "Correo electrónico"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Añadir contraseña"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Cambiar contraseña"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Cerrar sesión"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Eliminar cuenta"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "¿Has olvidado la contraseña?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Verifica que eres tú"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "¿Eliminar cuenta?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Esta acción borrará todos los datos asociados a la cuenta y no se puede deshacer. Tendrás que volver a iniciar sesión para completarla"; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Esta acción borrará todos los datos asociados a la cuenta y no se puede deshacer. ¿Seguro que quieres eliminar tu cuenta?"; - -/* Text of Delete action button. */ -"Delete" = "Eliminar"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Eliminar cuenta"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Esta acción no se puede deshacer"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Desvincular"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Cuenta vinculada"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "¿Desvincular la cuenta?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Ya no podrás iniciar sesión con tu cuenta"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Desvincular la cuenta"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Para cambiar la dirección de correo asociada a la cuenta, debes iniciar sesión de nuevo."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Para poder cambiar la contraseña, primero debes introducir la contraseña actual."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Editar correo electrónico"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Editar nombre"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Para añadir una contraseña a tu cuenta, debes iniciar sesión de nuevo."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Para cambiar la contraseña de tu cuenta, debes iniciar sesión de nuevo."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Para poder cambiar la contraseña, primero debes introducir la contraseña actual."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Añadir contraseña"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Cambiar contraseña"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "Correo electrónico"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Iniciar sesión con %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Introduce tu nombre"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Introduce tu correo electrónico"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Introduce tu contraseña"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Nueva contraseña"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Elige una contraseña"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "¿No puedes iniciar sesión?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Confirmar la dirección de correo electrónico"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Has iniciado sesión."; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "¿No puedes recibir los correos electrónicos?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Prueba las soluciones más habituales: \n. Asegúrate de que el correo electrónico no se ha filtrado ni marcado como spam.\n. Comprueba tu conexión a Internet.\n. Asegúrate de que has escrito bien tu dirección de correo electrónico.\n. Comprueba que no te estés quedando sin espacio en la bandeja de entrada y que no haya ningún problema con su configuración.\n. Si no se ha resuelto el problema con los pasos mencionados, puedes volver a enviar el correo electrónico. Si lo haces, se desactivará el enlace del mensaje de correo anterior."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "Se ha enviado un correo electrónico de inicio de sesión con más instrucciones a %@. Consulta tu bandeja de entrada para completar el inicio de sesión."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Correo electrónico de inicio de sesión enviado"; diff --git a/FirebaseAuthUI/Sources/Strings/fa.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/fa.lproj/FirebaseAuthUI.strings deleted file mode 100644 index e4132c862e1..00000000000 --- a/FirebaseAuthUI/Sources/Strings/fa.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "خوش‌ آمدید"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "ورود به سیستم با ایمیل "; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "رایانامه‌تان را وارد کنید"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "این نشانی ایمیل درست نیست."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "این برنامه از این نوع حساب‌ پشتیبانی نمی‌کند"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "از قبل حسابی دارید"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "قبلاً از %@ استفاده کرده‌اید. برای ادامه با %@ وارد سیستم شوید."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "ورود به سیستم"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "گذرواژه‌تان را وارد کنید"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "فیلد گذرواژه نمی‌تواند خالی باشد."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "ایمیل و گذرواژه وارد‌شده با هم مطابقت ندارند."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "این نشانی ایمیل با هیچ حسابی مطابقت ندارد."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "این نشانی ایمیل متعلق به حسابی است که غیرفعال شده است."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "دفعات زیادی گذرواژه اشتباه وارد کرده‌اید. پس از چند دقیقه دوباره امتحان کنید."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "قادر به پیدا کردن ارائه‌دهنده %@ نیست."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "ایمیل‌ها با هم مطابقت ندارند"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "بازیابی گذرواژه"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "دستورالعمل نحوه بازنشانی گذرواژه‌تان به این ایمیل ارسال شده است، آن را ببینید."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "رایانامه‌تان را بررسی کنید"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "برای بازیابی گذرواژه‌تان، دستورالعمل‌های ارسال‌شده به %@ را دنبال کنید."; - -/* Title for sign up screen. */ -"SignUpTitle" = "ایجاد حساب"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "نام و نام خانوادگی"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "یک گذرواژه انتخاب کنید"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "شرایط خدمات"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "خط‌مشی رازداری"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "درصورت ادامه‌ دادن، موافقتتان را با %@ و %@ ما اعلام می‌کنید."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "قبلاً از این نشانی ایمیل برای حساب دیگری استفاده شده است."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "گذرواژه قوی باید حداقل شامل ۶ نویسه‌ و ترکیبی از حروف و اعداد باشد."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "تعداد زیادی درخواست حساب از نشانی IP شما درحال ارسال است. پس از چند دقیقه دوباره امتحان کنید."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "قبلاً از %@ برای ورود به سیستم استفاده کرده‌اید. گذرواژه این حساب را وارد کنید."; - -/* OK button title. */ -"OK" = "تأیید"; - -/* Cancel button title. */ -"Cancel" = "لغو"; - -/* Back button title. */ -"Back" = "قبلی"; - -/* Next button title. */ -"Next" = "بعدی"; - -/* Save button title. */ -"Save" = "ذخیره"; - -/* Send button title. */ -"Send" = "ارسال"; - -/* Resend button title. */ -"Resend" = "ارسال مجدد"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "ایمیل "; - -/* Label next to a password text field. */ -"Password" = "گذرواژه"; - -/* Label next to a name text field. */ -"Name" = "نام"; - -/* Alert title Error. */ -"Error" = "خطا"; - -/* Alert button title Close. */ -"Close" = "بستن"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "نمایه"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "امنیت"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "حساب‌های مرتبط"; - -/* Account Settings cell title Name. */ -"AS_Name" = "نام"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "ایمیل "; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "افزودن گذرواژه"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "تغییر گذرواژه"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "خروج از سیستم"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "حذف حساب"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "گذرواژه‌تان را فراموش کرده‌اید؟"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "تأیید کنید این خود شما هستید"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "حساب حذف شود؟"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "با این کار همه داده‌های مرتبط با حسابتان پاک می‌شود که قابل واگرد نیست. برای تکمیل این اقدام باید دوباره وارد سیستم شوید"; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "با این کار همه داده‌های مرتبط با حسابتان پاک می‌شود که قابل واگرد نیست. مطمئنید می‌خواهید حسابتان حذف شود؟"; - -/* Text of Delete action button. */ -"Delete" = "حذف"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "حذف حساب"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "این کار واگردشدنی نیست."; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "لغو پیوند"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "حساب پیوندی"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "پیوند حساب لغو شود؟"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "دیگر نمی‌توانید با استفاده از این حساب وارد سیستم شوید"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "لغو پیوند حساب"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "برای تغییر نشانی ایمیل مرتبط با حسابتان باید دوباره وارد سیستم شوید."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "برای تغییر گذرواژه‌‌، ابتدا باید گذرواژه کنونی‌تان را وارد کنید."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "ویرایش ایمیل "; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "ویرایش نام"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "برای افزودن گذرواژه به حسابتان باید دوباره وارد سیستم شوید."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "برای تغییر گذرواژه حسابتان باید دوباره وارد سیستم شوید."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "برای تغییر گذرواژه‌‌، ابتدا باید گذرواژه کنونی‌تان را وارد کنید."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "افزودن گذرواژه"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "تغییر گذرواژه"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "ایمیل "; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google‏"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "ورود به سیستم با %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "نام خود را وارد کنید"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "رایانامه‌تان را وارد کنید"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "گذرواژه‌تان را وارد کنید"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "گذرواژه جدید"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "گذرواژه انتخاب کنید"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "مشکلی در ورود به سیستم دارید؟"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "تأیید ایمیل"; - -/* Title of successfully signed in label. */ -"SignedIn" = "به سیستم وارد شدید!"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "در دریافت ایمیل مشکل دارید؟"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "این رفع اشکال‌های رایج را امتحان کنید: \n - ببینید ایمیل به‌عنوان هرزنامه یا فیلترشده مشخص نشده باشد.\n - اتصال اینترنتتان را بررسی کنید.\n - مطمئن شوید املای ایمیلتان را درست وارد کرده باشید.\n - مطمئن شوید فضای صندوق ورودی‌تان روبه‌اتمام نباشد یا مشکل دیگری در تنظیمات صندوق ورودی وجود نداشته باشد.\n اگر اقدامات بالا به رفع مشکل کمک نکرد، می‌توانید ایمیل را مجدداً ارسال کنید. توجه کنید که با این کار، پیوند موجود در ایمیل قبلی غیرفعال می‌شود."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "ایمیل ورود به سیستم، حاوی دستورالعمل‌های بیشتر، به %@ ارسال شد. برای تکمیل ورود به سیستم، ایمیلتان را بررسی کنید."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "ایمیل ورود به سیستم ارسال شد"; diff --git a/FirebaseAuthUI/Sources/Strings/fi.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/fi.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 6349b4db30a..00000000000 --- a/FirebaseAuthUI/Sources/Strings/fi.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,270 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Tervetuloa"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Kirjaudu sähköpostilla"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Anna sähköpostiosoitteesi"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "Virheellinen sähköpostiosoite"; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "Sovellus ei tue tätä tilityyppiä."; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Sinulla on jo tili."; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Olet jo käyttänyt osoitetta %@. Jatka kirjautumalla palvelun %@ kautta."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Kirjaudu sisään"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Anna salasana"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "Salasana ei voi olla tyhjä."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "Antamasi sähköpostiosoite ja salasana eivät täsmää."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "Sähköpostiosoite ei vastaa aiemmin luotua tiliä."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "Sähköpostiosoite on rekisteröity tiliin, joka on poistettu käytöstä."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Olet antanut virheellisen salasanan liian monta kertaa. Yritä uudelleen muutaman minuutin kuluttua."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "Palveluntarjoajaa ei löydy osoitteelle %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Sähköpostit eivät täsmää."; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Palauta salasana"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Tilaa tähän sähköpostiin ohjeet, joissa neuvotaan, miten voit nollata salasanan."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Tarkista sähköpostisi"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Palauta salasana noudattamalla osoitteeseen %@ lähetettyjä ohjeita."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Luo tili"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Etu- ja sukunimi"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Valitse salasana"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Käyttöehdot"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Tietosuojakäytäntö"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Jatkamalla vahvistat hyväksyväsi seuraavat: %@ ja %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "Tämä sähköpostiosoite on jo rekisteröity toiseen tiliin."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Vahvassa salasanassa on vähintään 6 merkkiä, ja se sisältää kirjaimia ja numeroita."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "IP-osoitteestasi on lähetetty liian monta tilipyyntöä. Yritä uudelleen muutaman minuutin kuluttua."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Olet jo käyttänyt osoitetta %@ - kirjautumiseen. Anna kyseisen tilin salasana."; - -/* OK button title. */ -"OK" = "Ok"; - -/* Cancel button title. */ -"Cancel" = "Peruuta"; - -/* Back button title. */ -"Back" = "Takaisin"; - -/* Next button title. */ -"Next" = "Seuraava"; - -/* Save button title. */ -"Save" = "Tallenna"; - -/* Send button title. */ -"Send" = "Lähetä"; - -/* Resend button title. */ -"Resend" = "Lähetä uudelleen"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "Sähköposti"; - -/* Label next to a password text field. */ -"Password" = "Salasana"; - -/* Label next to a name text field. */ -"Name" = "Nimi"; - -/* Alert title Error. */ -"Error" = "Virhe"; - -/* Alert button title Close. */ -"Close" = "Sulje"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Profiili"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Turvallisuus"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Linkitetyt tilit"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Nimi"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "Sähköposti"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Lisää salasana"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Vaihda salasana"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Kirjaudu ulos"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Poista tili"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "Unohditko salasanasi?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Vahvista henkilöllisyytesi"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "Poistetaanko tili?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Tämä poistaa kaikki tiliisi liittyvät tiedot, eikä toimintoa voi kumota. Sinun pitää kirjautua sisään uudelleen, jotta voit suorittaa toiminnon loppuun."; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Tämä poistaa kaikki tiliisi liittyvät tiedot, eikä toimintoa voi kumota. Haluatko varmasti poistaa tilisi?"; - -/* Text of Delete action button. */ -"Delete" = "Poista"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Poista tili"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Tätä toimintoa ei voi kumota."; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Poista linkitys"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Linkitetty tili"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "Poistetaanko tilin linkitys?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Et enää voi kirjautua sisään tililläsi."; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Poista tilin linkitys"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Jotta voit vaihtaa tiliisi liittyvän sähköpostin, sinun pitää kirjautua sisään uudelleen."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Jotta voit vaihtaa salasanasi, sinun on annettava ensin nykyinen salasanasi."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Muokkaa sähköpostia"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Muokkaa nimeä"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Jotta voit lisätä salasanan tiliisi, sinun pitää kirjautua sisään uudelleen."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Jotta voit vaihtaa tilisi salasanan, sinun pitää kirjautua sisään uudelleen."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Jotta voit vaihtaa salasanasi, sinun on annettava ensin nykyinen salasanasi."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Lisää salasana"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Vaihda salasana"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "Sähköposti"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Kirjaudu palvelun %@ kautta"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Anna nimesi"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Anna sähköpostiosoitteesi"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Anna salasana"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Uusi salasana"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Valitse salasana"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "Eikö kirjautuminen onnistu?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Vahvista sähköposti"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Kirjauduttu"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "Ongelmia sähköpostiviestien saamisessa?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Kokeile näitä yleisiä ratkaisuja: \n – Tarkista, merkittiinkö viesti roskapostiksi tai suodatettiinko se.\n – Tarkista internetyhteytesi.\n – Tarkista, että kirjoitit sähköpostiosoitteesi oikein.\n – Tarkista, ettei postilaatikkosi tila ole loppumassa tai ettei postilaatikon asetuksissa ole muita ongelmia.\n – Jos edellä olevista ratkaisuista ei ollut apua, voit lähettää viestin uudelleen. Huomaa, että tällöin aiemmassa viestissä oleva linkki poistetaan käytöstä."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "Lisäohjeita sisältävä kirjautumisviesti lähetettiin osoitteeseen %@. Tarkista sähköpostisi kirjautumisen suorittamiseksi loppuun."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Kirjautumisviesti lähetetty"; diff --git a/FirebaseAuthUI/Sources/Strings/fil.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/fil.lproj/FirebaseAuthUI.strings deleted file mode 100644 index dde53552e5c..00000000000 --- a/FirebaseAuthUI/Sources/Strings/fil.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Welcome"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Mag-sign in gamit ang email"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Ilagay ang iyong email"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "Mali ang email address na iyon."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "Hindi sinusuportahan sa app na ito ang ganitong uri ng account"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Mayroon ka nang account"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Nagamit mo na ang %@. Mag-sign in gamit ang %@ upang magpatuloy."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Mag-sign in"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Ilagay ang iyong password"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "Hindi maaaring walang laman ang password."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "Hindi nagtutugma ang inilagay mong email at password."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "Hindi tumutugma ang email address na iyon sa isang kasalukuyang account."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "Ang email address na iyon ay para sa isang na-disable nang account."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Nagpasok ka ng di-wastong password nang masyadong maraming beses. Pakisubukang muli pagkalipas ng ilang minuto."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "Hindi makahanap ng provider para sa %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Hindi tumutugma ang mga email"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "I-recover ang password"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Kumuha ng mga tagubilin na ipadala sa email na ito na magpapaliwanag kung paano i-reset ang iyong password."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Suriin ang iyong email"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Sundin ang mga tagubilin na ipinadala sa %@ upang ma-recover ang iyong password."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Gumawa ng account"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Pangalan at apelyido"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Pumili ng password"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Mga Tuntunin ng Serbisyo"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Patakaran sa Privacy"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Sa pagpapatuloy, ipinababatid mo na tinatanggap mo ang aming %@ at %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "Ginagamit na ang email address ng ibang account."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Kailangang may 6 na character man lang at kumbinasyon ng mga titik at mga numero ang mga malalakas na password."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Masyadong maraming kahilingan ng account mula sa iyong IP address. Subukang muli pagkalipas ng ilang minuto."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Nagamit mo na ang %@ upang mag-sign in. Ilagay ang iyong password para sa account na iyon."; - -/* OK button title. */ -"OK" = "OK"; - -/* Cancel button title. */ -"Cancel" = "Kanselahin"; - -/* Back button title. */ -"Back" = "Bumalik"; - -/* Next button title. */ -"Next" = "Susunod"; - -/* Save button title. */ -"Save" = "I-save"; - -/* Send button title. */ -"Send" = "Ipadala"; - -/* Resend button title. */ -"Resend" = "Muling Ipadala"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "Email"; - -/* Label next to a password text field. */ -"Password" = "Password"; - -/* Label next to a name text field. */ -"Name" = "Pangalan"; - -/* Alert title Error. */ -"Error" = "Error"; - -/* Alert button title Close. */ -"Close" = "Isara"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Profile"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Seguridad"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Mga Naka-link na Account"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Pangalan"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "Mag-email"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Magdagdag ng password"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Palitan ang password"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Mag-sign Out"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Tanggalin ang Account"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "Nakalimutan ang password?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "I-verify na ikaw ito"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "I-delete ang Account?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Buburahin nito ang lahat ng data na nauugnay sa iyong account, at hindi na maa-undo Kailangan mong mag-sign in muli upang kumpletuhin ang pagkilos na ito"; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Buburahin nito ang lahat ng data na nauugnay sa iyong account, at hindi na maa-undo. Sigurado ka bang gusto mong i-delete ang iyong account?"; - -/* Text of Delete action button. */ -"Delete" = "I-delete"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "I-delete ang account"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Hindi na maa-undo ang pagkilos na ito"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "I-unlink"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Naka-link na account"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "I-unlink ang account?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Hindi ka na makakapag-sign in gamit ang iyong account"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "I-unlink ang account"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Upang mabago ang email address na kaugnay ng iyong account, kakailanganin mong mag-sign in muli."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Upang baguhin ang iyong password, kailangan mo munang ipasok ang iyong kasalukuyang password."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "I-edit ang email"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "I-edit ang pangalan"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Upang magdagdag ng password sa iyong account, kailangan mong mag-sign in muli."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Upang baguhin ang password sa iyong account, kailangan mong mag-sign in muli."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Upang baguhin ang iyong password, kailangan mo munang ipasok ang iyong kasalukuyang password."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Magdagdag ng password"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Palitan ang password"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "Mag-email"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Fecebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Mag-sign in gamit ang %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Ilagay ang iyong pangalan"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Ilagay ang iyong email"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Ilagay ang iyong password"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Bagong password"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Pumili ng password"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "Nagkaproblema sa pag-sign in?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Kumpirmahin ang Email"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Naka-sign in!"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "Nagkakaproblema sa pagtanggap ng mga email?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Subukan ang mga karaniwang pag-aayos na ito: \n - Tingnan kung minarkahan ang email bilang spam o na-filter.\n - Tingnan ang iyong koneksyon sa internet.\n - Tiyakin na hindi ka nagkamali sa pagbaybay ng iyong email.\n - Tingnan kung hindi pa nauubusan ng espasyo ang iyong inbox o may iba pang isyu na may kinalaman sa mga setting ng inbox.\n Kung hindi umubra ang mga hakbang sa itaas, maaari mong ipadala muli ang email. Tandaan na hindi nito ide-deactivate ang link sa lumang email."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "Nagpadala ng email sa pag-sign in na may mga karagdagang tagubilin sa %@. Tingnan ang iyong email para makumpleto ang pag-sign in."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Naipadala na ang email sa pag-sign in"; diff --git a/FirebaseAuthUI/Sources/Strings/fr-CH.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/fr-CH.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 16bbcd32fbc..00000000000 --- a/FirebaseAuthUI/Sources/Strings/fr-CH.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Bienvenue"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Se connecter avec une adresse e-mail"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Saisissez votre adresse e-mail"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "Cette adresse e-mail est incorrecte."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "Ce type de compte n'est pas compatible avec cette application"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Vous avez déjà un compte"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Vous avez déjà utilisé l'adresse e-mail %@. Connectez-vous avec %@ pour continuer."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Se connecter"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Saisissez votre mot de passe"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "Vous devez indiquer un mot de passe."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "L'adresse e-mail et le mot de passe saisis ne correspondent pas."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "Cette adresse e-mail ne correspond à aucun compte existant."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "Cette adresse e-mail correspond à un compte qui a été désactivé."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Vous avez saisi un mot de passe incorrect un trop grand nombre de fois. Veuillez réessayer dans quelques minutes."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "Impossible de trouver un fournisseur pour %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Les adresses e-mail ne correspondent pas"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Récupérez votre mot de passe"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Les instructions relatives à la réinitialisation de votre mot de passe seront envoyées à cette adresse e-mail."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Consultez votre boîte de réception"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Suivez les instructions envoyées à l'adresse e-mail %@ pour récupérer votre mot de passe."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Créer un compte"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Nom et prénom"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Choisissez un mot de passe"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Conditions d'utilisation"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Règles de confidentialité"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "En continuant, vous acceptez les %@ et les %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "Cette adresse e-mail est déjà utilisée par un autre compte."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Les mots de passe sécurisés comportent au moins six caractères et une combinaison de chiffres et de lettres."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "De trop nombreuses demandes de compte proviennent de votre adresse IP. Veuillez réessayer dans quelques minutes."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Vous avez déjà utilisé l'adresse e-mail %@ pour vous connecter. Saisissez votre mot de passe pour ce compte."; - -/* OK button title. */ -"OK" = "OK"; - -/* Cancel button title. */ -"Cancel" = "Annuler"; - -/* Back button title. */ -"Back" = "Retour"; - -/* Next button title. */ -"Next" = "Suivant"; - -/* Save button title. */ -"Save" = "Enregistrer"; - -/* Send button title. */ -"Send" = "Envoyer"; - -/* Resend button title. */ -"Resend" = "Renvoyer"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "Adresse e-mail"; - -/* Label next to a password text field. */ -"Password" = "Mot de passe"; - -/* Label next to a name text field. */ -"Name" = "Nom"; - -/* Alert title Error. */ -"Error" = "Erreur"; - -/* Alert button title Close. */ -"Close" = "Fermer"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Profil"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Sécurité"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Comptes associés"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Nom"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "Adresse e-mail"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Ajouter un mot de passe"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Modifier le mot de passe"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Se déconnecter"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Supprimer le compte"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "Mot de passe oublié"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Confirmez qu'il s'agit bien de vous"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "Supprimer le compte ?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Cette action effacera toutes les données associées à votre compte de façon irréversible. Vous devrez vous reconnecter pour finaliser cette opération."; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Cette action effacera toutes les données associées à votre compte de façon irréversible. Voulez-vous vraiment supprimer votre compte ?"; - -/* Text of Delete action button. */ -"Delete" = "Supprimer"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Supprimer le compte"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Cette action est irréversible"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Dissocier"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Compte associé"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "Dissocier le compte ?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Vous ne pourrez plus utiliser votre compte pour vous connecter"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Dissocier le compte"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Pour modifier l'adresse e-mail associée à votre compte, vous devrez vous reconnecter."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Pour modifier votre mot de passe, vous devez d'abord saisir votre mot de passe actuel."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Modifier l'adresse e-mail"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Modifier le nom"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Vous devrez vous reconnecter pour ajouter un mot de passe à votre compte."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Vous devrez vous reconnecter pour modifier le mot de passe de votre compte."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Pour modifier votre mot de passe, vous devez d'abord saisir votre mot de passe actuel."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Ajouter un mot de passe"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Modifier le mot de passe"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "Adresse e-mail"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Se connecter avec %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Saisissez votre nom"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Saisissez votre adresse e-mail"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Saisissez votre mot de passe"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Nouveau mot de passe"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Choisissez un mot de passe"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "Vous ne parvenez pas à vous connecter ?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Confirmez votre adresse e-mail"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Connecté"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "Vous n'avez pas reçu l'e-mail ?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Essayez les solutions courantes suivantes : \n - Vérifiez que l'e-mail n'a pas été filtré ni marqué comme spam.\n - Vérifiez votre connexion Internet.\n - Vérifiez que votre adresse e-mail est correcte.\n - Vérifiez que votre boîte de réception n'est pas pleine et que les paramètres sont correctement définis.\n Si les étapes décrites ci-dessus n'ont pas résolu le problème, vous pouvez renvoyer l'e-mail. Sachez que le lien du premier e-mail sera alors désactivé."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "Un e-mail de connexion avec des instructions supplémentaires a été envoyé à %@. Consultez cet e-mail pour vous connecter."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "E-mail de connexion envoyé"; diff --git a/FirebaseAuthUI/Sources/Strings/fr.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/fr.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 16bbcd32fbc..00000000000 --- a/FirebaseAuthUI/Sources/Strings/fr.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Bienvenue"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Se connecter avec une adresse e-mail"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Saisissez votre adresse e-mail"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "Cette adresse e-mail est incorrecte."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "Ce type de compte n'est pas compatible avec cette application"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Vous avez déjà un compte"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Vous avez déjà utilisé l'adresse e-mail %@. Connectez-vous avec %@ pour continuer."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Se connecter"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Saisissez votre mot de passe"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "Vous devez indiquer un mot de passe."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "L'adresse e-mail et le mot de passe saisis ne correspondent pas."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "Cette adresse e-mail ne correspond à aucun compte existant."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "Cette adresse e-mail correspond à un compte qui a été désactivé."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Vous avez saisi un mot de passe incorrect un trop grand nombre de fois. Veuillez réessayer dans quelques minutes."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "Impossible de trouver un fournisseur pour %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Les adresses e-mail ne correspondent pas"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Récupérez votre mot de passe"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Les instructions relatives à la réinitialisation de votre mot de passe seront envoyées à cette adresse e-mail."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Consultez votre boîte de réception"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Suivez les instructions envoyées à l'adresse e-mail %@ pour récupérer votre mot de passe."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Créer un compte"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Nom et prénom"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Choisissez un mot de passe"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Conditions d'utilisation"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Règles de confidentialité"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "En continuant, vous acceptez les %@ et les %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "Cette adresse e-mail est déjà utilisée par un autre compte."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Les mots de passe sécurisés comportent au moins six caractères et une combinaison de chiffres et de lettres."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "De trop nombreuses demandes de compte proviennent de votre adresse IP. Veuillez réessayer dans quelques minutes."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Vous avez déjà utilisé l'adresse e-mail %@ pour vous connecter. Saisissez votre mot de passe pour ce compte."; - -/* OK button title. */ -"OK" = "OK"; - -/* Cancel button title. */ -"Cancel" = "Annuler"; - -/* Back button title. */ -"Back" = "Retour"; - -/* Next button title. */ -"Next" = "Suivant"; - -/* Save button title. */ -"Save" = "Enregistrer"; - -/* Send button title. */ -"Send" = "Envoyer"; - -/* Resend button title. */ -"Resend" = "Renvoyer"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "Adresse e-mail"; - -/* Label next to a password text field. */ -"Password" = "Mot de passe"; - -/* Label next to a name text field. */ -"Name" = "Nom"; - -/* Alert title Error. */ -"Error" = "Erreur"; - -/* Alert button title Close. */ -"Close" = "Fermer"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Profil"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Sécurité"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Comptes associés"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Nom"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "Adresse e-mail"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Ajouter un mot de passe"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Modifier le mot de passe"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Se déconnecter"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Supprimer le compte"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "Mot de passe oublié"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Confirmez qu'il s'agit bien de vous"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "Supprimer le compte ?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Cette action effacera toutes les données associées à votre compte de façon irréversible. Vous devrez vous reconnecter pour finaliser cette opération."; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Cette action effacera toutes les données associées à votre compte de façon irréversible. Voulez-vous vraiment supprimer votre compte ?"; - -/* Text of Delete action button. */ -"Delete" = "Supprimer"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Supprimer le compte"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Cette action est irréversible"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Dissocier"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Compte associé"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "Dissocier le compte ?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Vous ne pourrez plus utiliser votre compte pour vous connecter"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Dissocier le compte"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Pour modifier l'adresse e-mail associée à votre compte, vous devrez vous reconnecter."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Pour modifier votre mot de passe, vous devez d'abord saisir votre mot de passe actuel."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Modifier l'adresse e-mail"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Modifier le nom"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Vous devrez vous reconnecter pour ajouter un mot de passe à votre compte."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Vous devrez vous reconnecter pour modifier le mot de passe de votre compte."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Pour modifier votre mot de passe, vous devez d'abord saisir votre mot de passe actuel."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Ajouter un mot de passe"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Modifier le mot de passe"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "Adresse e-mail"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Se connecter avec %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Saisissez votre nom"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Saisissez votre adresse e-mail"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Saisissez votre mot de passe"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Nouveau mot de passe"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Choisissez un mot de passe"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "Vous ne parvenez pas à vous connecter ?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Confirmez votre adresse e-mail"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Connecté"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "Vous n'avez pas reçu l'e-mail ?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Essayez les solutions courantes suivantes : \n - Vérifiez que l'e-mail n'a pas été filtré ni marqué comme spam.\n - Vérifiez votre connexion Internet.\n - Vérifiez que votre adresse e-mail est correcte.\n - Vérifiez que votre boîte de réception n'est pas pleine et que les paramètres sont correctement définis.\n Si les étapes décrites ci-dessus n'ont pas résolu le problème, vous pouvez renvoyer l'e-mail. Sachez que le lien du premier e-mail sera alors désactivé."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "Un e-mail de connexion avec des instructions supplémentaires a été envoyé à %@. Consultez cet e-mail pour vous connecter."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "E-mail de connexion envoyé"; diff --git a/FirebaseAuthUI/Sources/Strings/gsw.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/gsw.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 3ad463985c6..00000000000 --- a/FirebaseAuthUI/Sources/Strings/gsw.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Willkommen"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Mit E-Mail-Adresse anmelden"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "E-Mail-Adresse eingeben"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "Diese E-Mail-Adresse ist nicht korrekt."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "Diese Art von Konto wird von dieser App nicht unterstützt"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Sie haben bereits ein Konto"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Sie haben %@ bereits verwendet. Melden Sie sich mit %@ an, um fortzufahren."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Anmelden"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Passwort eingeben"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "Passwort darf nicht leer sein."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "Die E-Mail-Adresse und das Passwort passen nicht zusammen."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "Diese E-Mail-Adresse passt zu keinem vorhandenen Konto."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "Diese E-Mail-Adresse gehört zu einem Konto, das deaktiviert wurde."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Sie haben zu oft ein falsches Passwort eingegeben. Versuchen Sie es in einigen Minuten erneut."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "Anbieter für %@ wurde nicht gefunden."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "E-Mail-Adressen stimmen nicht überein"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Passwort wiederherstellen"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "In der an diese E-Mail-Adresse gesendeten Anleitung wird beschrieben, wie Sie Ihr Passwort zurücksetzen können."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Im Posteingang nachsehen"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Folgen Sie der an %@ gesendeten Anleitung, um Ihr Passwort zurückzusetzen."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Konto erstellen"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Vor- und Nachname"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Passwort auswählen"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Nutzungsbedingungen"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Datenschutzerklärung"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Wenn Sie fortfahren, stimmen Sie unseren %@ und unserer %@ zu."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "Die E-Mail-Adresse wird bereits von einem anderen Konto verwendet."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Starke Passwörter umfassen mindestens sechs Zeichen und eine Mischung aus Buchstaben und Ziffern."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Von Ihrer IP-Adresse werden zu viele Kontoanfragen gesendet. Versuchen Sie es in einigen Minuten erneut."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Sie haben bereits %@ zur Anmeldung verwendet. Geben Sie das Passwort für dieses Konto ein."; - -/* OK button title. */ -"OK" = "OK"; - -/* Cancel button title. */ -"Cancel" = "Abbrechen"; - -/* Back button title. */ -"Back" = "Zurück"; - -/* Next button title. */ -"Next" = "Weiter"; - -/* Save button title. */ -"Save" = "Speichern"; - -/* Send button title. */ -"Send" = "Senden"; - -/* Resend button title. */ -"Resend" = "Erneut senden"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "E-Mail-Adresse"; - -/* Label next to a password text field. */ -"Password" = "Passwort"; - -/* Label next to a name text field. */ -"Name" = "Name"; - -/* Alert title Error. */ -"Error" = "Fehler"; - -/* Alert button title Close. */ -"Close" = "Schließen"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Profil"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Sicherheit"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Verknüpfte Konten"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Name"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "E-Mail-Adresse"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Passwort hinzufügen"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Passwort ändern"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Abmelden"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Konto löschen"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "Passwort vergessen?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Identität bestätigen"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "Konto löschen?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Hierdurch werden alle mit Ihrem Konto verknüpften Daten gelöscht. Dies kann nicht rückgängig gemacht werden. Sie müssen sich erneut anmelden, um diese Aktion abzuschließen."; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Hierdurch werden alle mit Ihrem Konto verknüpften Daten gelöscht. Dies kann nicht rückgängig gemacht werden. Möchten Sie Ihr Konto wirklich löschen?"; - -/* Text of Delete action button. */ -"Delete" = "Löschen"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Konto löschen"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Diese Aktion kann nicht rückgängig gemacht werden"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Verknüpfung aufheben"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Verknüpftes Konto"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "Verknüpfung des Kontos aufheben?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Sie können sich nicht mehr mit Ihrem Konto anmelden"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Verknüpfung des Kontos aufheben"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Wenn Sie die mit Ihrem Konto verknüpfte E-Mail-Adresse ändern möchten, müssen Sie sich erneut anmelden."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Um das Passwort zu ändern, müssen Sie zuerst Ihr aktuelles Passwort eingeben."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "E-Mail-Adresse bearbeiten"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Name bearbeiten"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Um Ihrem Konto ein Passwort hinzuzufügen, müssen Sie sich erneut anmelden."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Um das Passwort für Ihr Konto zu ändern, müssen Sie sich erneut anmelden."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Um das Passwort zu ändern, müssen Sie zuerst Ihr aktuelles Passwort eingeben."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Passwort hinzufügen"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Passwort ändern"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "E-Mail-Adresse"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Mit %@ anmelden"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Name eingeben"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "E-Mail-Adresse eingeben"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Passwort eingeben"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Neues Passwort"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Passwort auswählen"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "Probleme bei der Anmeldung?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "E-Mail-Adresse bestätigen"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Angemeldet."; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "Probleme beim Empfangen von E-Mails?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Versuchen Sie Folgendes: \n – Überprüfen Sie, ob die E-Mail als Spam markiert oder herausgefiltert wurde.\n – Überprüfen Sie Ihre Internetverbindung.\n – Überprüfen Sie die Schreibweise Ihrer E-Mail-Adresse.\n – Überprüfen Sie den Speicherplatz und weitere Einstellungen Ihres Posteingangs, die Probleme bereiten könnten.\n Sollte das Problem nach Ausführung der obigen Schritte weiterhin bestehen, können Sie sich die Anmelde-E-Mail noch einmal zusenden lassen. Hinweis: Der Link in der vorhergehenden E-Mail ist dann nicht mehr gültig."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "Wir haben eine Anmelde-E-Mail mit zusätzlichen Informationen an %@ gesendet. Bitte öffnen Sie die E-Mail, um die Anmeldung abzuschließen."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Anmelde-E-Mail gesendet"; diff --git a/FirebaseAuthUI/Sources/Strings/gu.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/gu.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 8e439e75c25..00000000000 --- a/FirebaseAuthUI/Sources/Strings/gu.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "સ્વાગત છે"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "ઇમેઇલ વડે સાઇન ઇન કરો"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "તમારું ઇમેઇલ ઍડ્રેસ દાખલ કરો"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "તે ઇમેઇલ ઍડ્રેસ સાચું નથી."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "આ ઍપ્લિકેશન આ પ્રકારના એકાઉન્ટને સમર્થન આપતી નથી"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "તમારી પાસે પહેલેથી જ એક એકાઉન્ટ છે"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "તમે પહેલેથી %@નો ઉપયોગ કરી લીધો છે. આગળ વધવા માટે %@ વડે સાઇન ઇન કરો."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "સાઇન ઇન કરો"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "તમારો પાસવર્ડ દાખલ કરો"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "પાસવર્ડ દાખલ કરવો આવશ્યક છે."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "તમે દાખલ કરેલ ઇમેઇલ ઍડ્રેસ અને પાસવર્ડ મેળ ખાતો નથી."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "તે ઇમેઇલ ઍડ્રેસ અસ્તિત્વમાં છે તે એકાઉન્ટ સાથે મેળ ખાતું નથી."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "તે ઇમેઇલ ઍડ્રેસ અક્ષમ કરવામાં આવેલ એકાઉન્ટ માટે છે."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "તમે ઘણી બધી વખત ખોટો પાસવર્ડ દાખલ કર્યો છે. થોડીવારમાં ફરીથી પ્રયાસ કરો."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "%@ માટે પ્રદાતા શોધી શકાતા નથી."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "ઇમેઇલ મેળ ખાતા નથી"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "પાસવર્ડ પુનઃપ્રાપ્ત કરો"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "આ ઇમેઇલમાં મોકલવામાં આવેલ સૂચનાઓ મેળવો જે તમારો પાસવર્ડ કેવી રીતે રીસેટ કરવો તે સમજાવે છે."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "તમારું ઇમેઇલ ઍડ્રેસ તપાસો"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "તમારો પાસવર્ડ પુનઃપ્રાપ્ત કરવા માટે %@ પર મોકલેલ સૂચનાઓનું પાલન કરો."; - -/* Title for sign up screen. */ -"SignUpTitle" = "એકાઉન્ટ બનાવો"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "નામ અને અટક"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "પાસવર્ડ પસંદ કરો"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "સેવાની શરતો"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "ગોપનીયતા નીતિ"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "ચાલુ રાખીને, તમે સૂચવી રહ્યાં છો કે તમે અમારી %@ અને %@ને સ્વીકારો છો."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "આ ઇમેઇલ ઍડ્રેસ પહેલેથી જ અન્ય એકાઉન્ટ દ્વારા ઉપયોગમાં લેવાયેલ છે."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "સશક્ત પાસવર્ડ ઓછામાં ઓછા 6 અક્ષરો અને વર્ણ તથા સંખ્યાઓનાં સંયોજનનો હોવો જોઈએ."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "તમારા IP ઍડ્રેસ તરફથી એકાઉન્ટ માટે ઘણી બધી વિનંતી આવી રહી છે. થોડીવારમાં ફરી પ્રયાસ કરો."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "તમે સાઇન ઇન કરવા માટે %@નો પહેલાથી ઉપયોગ કરેલો છે. તે એકાઉન્ટ માટેનો તમારો પાસવર્ડ દાખલ કરો."; - -/* OK button title. */ -"OK" = "ઓકે"; - -/* Cancel button title. */ -"Cancel" = "રદ કરો"; - -/* Back button title. */ -"Back" = "પાછળ"; - -/* Next button title. */ -"Next" = "આગળ"; - -/* Save button title. */ -"Save" = "સાચવો"; - -/* Send button title. */ -"Send" = "મોકલો"; - -/* Resend button title. */ -"Resend" = "ફરી મોકલો"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "ઇમેઇલ"; - -/* Label next to a password text field. */ -"Password" = "પાસવર્ડ"; - -/* Label next to a name text field. */ -"Name" = "નામ"; - -/* Alert title Error. */ -"Error" = "ભૂલ"; - -/* Alert button title Close. */ -"Close" = "બંધ કરો"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "પ્રોફાઇલ"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "સુરક્ષા"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "લિંક કરેલ એકાઉન્ટ"; - -/* Account Settings cell title Name. */ -"AS_Name" = "નામ"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "ઇમેઇલ"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "પાસવર્ડ ઉમેરો"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "પાસવર્ડ બદલો"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "સાઇન આઉટ"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "એકાઉન્ટ કાઢી નાખો"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "પાસવર્ડ ભૂલી ગયા છો?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "ચકાસો કે આ તમે જ છો"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "એકાઉન્ટ કાઢી નાખીએ?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "આ તમારા એકાઉન્ટ સાથે સંકળાયેલ તમામ ડેટા કાઢી નાખશે અને તેને પૂર્વવત્ કરી શકાશે નહીં. તમારે આ ક્રિયા પૂર્ણ કરવા ફરીથી સાઇન ઇન કરવું જરૂરી છે"; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "આ તમારા એકાઉન્ટ સાથે સંકળાયેલ તમામ ડેટા કાઢી નાખશે અને તેને પૂર્વવત્ કરી શકાશે નહીં. શું તમે ખરેખર તમારું એકાઉન્ટ કાઢી નાખવા માંગો છો?"; - -/* Text of Delete action button. */ -"Delete" = "કાઢી નાખો"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "એકાઉન્ટ કાઢી નાખો"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "આ ક્રિયા પૂર્વવત્ કરી શકાતી નથી"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "અનલિંક કરો"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "લિંક કરેલ એકાઉન્ટ"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "એકાઉન્ટને અનલિંક કરવું છે?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "હવે તમે તમારા એકાઉન્ટનો ઉપયોગ કરીને સાઇન ઇન કરી શકશો નહીં"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "એકાઉન્ટને અનલિંક કરો"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "તમારા એકાઉન્ટ સાથે સંકળાયેલ ઇમેઇલ ઍડ્રેસ બદલવા માટે, તમારે ફરીથી સાઇન ઇન કરવું જરૂરી છે."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "તમારો પાસવર્ડ બદલવા માટે, તમારે પહેલા તમારો વર્તમાન પાસવર્ડ દાખલ કરવો જરૂરી છે."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "ઇમેઇલ સંપાદિત કરો"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "નામ સંપાદિત કરો"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "તમારા એકાઉન્ટમાં પાસવર્ડ ઉમેરવા માટે, તમારે ફરીથી સાઇન ઇન કરવું પડશે."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "તમારા એકાઉન્ટનો પાસવર્ડ બદલવા માટે, તમારે ફરીથી સાઇન ઇન કરવું પડશે."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "તમારો પાસવર્ડ બદલવા માટે, તમારે પહેલા તમારો વર્તમાન પાસવર્ડ દાખલ કરવો જરૂરી છે."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "પાસવર્ડ ઉમેરો"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "પાસવર્ડ બદલો"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "ઇમેઇલ"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "%@ વડે સાઇન ઇન કરો"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "તમારું નામ દાખલ કરો"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "તમારું ઇમેઇલ ઍડ્રેસ દાખલ કરો"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "તમારો પાસવર્ડ દાખલ કરો"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "નવો પાસવર્ડ"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "પાસવર્ડ પસંદ કરો"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "સાઇન ઇન કરવામાં સમસ્યા આવી રહી છે?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "ઇમેઇલ કન્ફર્મ કરો"; - -/* Title of successfully signed in label. */ -"SignedIn" = "સાઇન ઇન કર્યું!"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "ઇમેઇલ મેળવવામાં મુશ્કેલી આવે છે?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "આ સામાન્ય ઉકેલોને અજમાવી જુઓ: \n - તે ઇમેઇલ સ્પામ કે ફિલ્ટર કરેલ તરીકે ચિહ્નિત કર્યો હતો.કે કેમ તે ચેક કરો.\n - તમારું ઇન્ટરનેટ કનેક્શન ચેક કરો.\n - તમે તમારા ઇમેઇલની જોડણીમાં ભૂલ ન કરી હોવાનું ચેક કરો.\n - તમારી ઇનબૉક્સ સ્પેસ ભરાઈ ન ગઈ હોવાનું અથવા ઇનબૉક્સ સેટિંગ સંબંધિત અન્ય સમસ્યા ન હોવાનું.ચેક કરો.\n જો ઉપરોક્ત પગલાં કામ ન કરે, તો તમે ઇમેઇલ ફરીથી મોકલી શકો છો. નોંધ લેશો કે આને કારણે જૂના ઇમેઇલમાં રહેલી લિંક નિષ્ક્રિય થશે."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "વધારાની સૂચનાઓ ધરાવતો સાઇન-ઇન ઇમેઇલ %@ પર મોકલ્યો હતો. સાઇન-ઇન પૂર્ણ કરવા માટે તમારો ઇમેઇલ ચેક કરો."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "સાઇન ઇન ઇમેઇલ મોકલ્યો"; diff --git a/FirebaseAuthUI/Sources/Strings/he.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/he.lproj/FirebaseAuthUI.strings deleted file mode 100644 index a7085089f97..00000000000 --- a/FirebaseAuthUI/Sources/Strings/he.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "ברוכים הבאים"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "כניסה באמצעות אימייל"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "מה האימייל שלך?"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "כתובת האימייל שגויה."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "האפליקציה הזו לא תומכת בחשבונות מהסוג הזה"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "כבר יש לך חשבון"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "כבר השתמשת בכתובת %@. כדי להמשיך, עליך להיכנס באמצעות %@."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "כניסה"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "הסיסמה שלך כאן"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "לא הזנת סיסמה."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "אין התאמה בין כתובת האימייל לסיסמה שהזנת."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "אין חשבון המשויך לכתובת האימייל הזו."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "כתובת האימייל משויכת לחשבון שהושבת."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "הזנת סיסמה שגויה יותר מדי פעמים. אפשר יהיה לנסות שוב בעוד כמה דקות."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "לא מצאנו ספק ל-%@"; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "כתובות האימייל לא זהות"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "שחזור הסיסמה"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "נוכל לשלוח לכתובת הזו הוראות לאיפוס הסיסמה."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "שלחנו לך אימייל"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "כדי לשחזר את הסיסמה, עליך לפעול לפי ההוראות ששלחנו לכתובת %@."; - -/* Title for sign up screen. */ -"SignUpTitle" = "יצירת חשבון"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "שם פרטי ומשפחה"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "הסיסמה שלך כאן"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "תנאים והגבלות"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "מדיניות פרטיות"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "המשך התהליך יפורש כהסכמתך ל%@ ול%@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "כתובת האימייל הזאת משויכת לחשבון אחר."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "סיסמה חזקה היא סיסמה באורך 6 תווים לפחות שמכילה אותיות ומספרים."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "קיבלנו יותר מדי בקשות ליצירת חשבון מכתובת ה-IP שלך. אפשר יהיה לנסות שוב בעוד כמה דקות."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "כבר השתמשת בכתובת %@ כדי להיכנס. עליך להזין את הסיסמה לחשבון המשויך אליה."; - -/* OK button title. */ -"OK" = "אישור"; - -/* Cancel button title. */ -"Cancel" = "ביטול"; - -/* Back button title. */ -"Back" = "הקודם"; - -/* Next button title. */ -"Next" = "הבא‏"; - -/* Save button title. */ -"Save" = "שמור"; - -/* Send button title. */ -"Send" = "שליחה"; - -/* Resend button title. */ -"Resend" = "שליחה מחדש"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "אימייל"; - -/* Label next to a password text field. */ -"Password" = "סיסמה"; - -/* Label next to a name text field. */ -"Name" = "שם"; - -/* Alert title Error. */ -"Error" = "שגיאה"; - -/* Alert button title Close. */ -"Close" = "סגור"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "פרופיל"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "אבטחה"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "חשבונות מקושרים"; - -/* Account Settings cell title Name. */ -"AS_Name" = "שם"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "אימייל"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "הוספת סיסמה"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "שינוי הסיסמה"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "יציאה"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "מחיקת החשבון"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "שכחת את הסיסמה?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "אנחנו צריכים לאמת את זהותך"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "למחוק את החשבון?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "הפעולה הזו תמחק את כל הנתונים המשויכים לחשבון, ולא ניתן לבטל אותה. כדי להשלים את המחיקה, צריך להיכנס מחדש"; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "הפעולה הזו תמחק את כל הנתונים המשויכים לחשבון, ולא ניתן לבטל אותה. למחוק את החשבון?"; - -/* Text of Delete action button. */ -"Delete" = "מחק"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "מחיקת חשבון"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "לא ניתן לבטל את הפעולה הזו"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "בטל את הקישור"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "חשבון מקושר"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "לבטל את קישור החשבון?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "לא תהיה יותר אפשרות להיכנס באמצעות החשבון"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "ביטול הקישור של החשבון"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "כדי לשנות את כתובת האימייל המשויכת לחשבון, עליך להיכנס מחדש."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "כדי לשנות את הסיסמה, עליך להזין את הסיסמה הנוכחית."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "שינוי כתובת האימייל"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "עריכת שם"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "כדי להוסיף סיסמה לחשבון, עליך להיכנס מחדש."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "כדי לשנות את הסיסמה לחשבון, עליך להיכנס אליו."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "כדי לשנות את הסיסמה, עליך להזין את הסיסמה הנוכחית."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "הוספת סיסמה"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "שינוי הסיסמה"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "אימייל"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "כניסה באמצעות %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "הזן את שמך"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "האימייל שלך כאן"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "לא הזנת את הסיסמה"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "סיסמה חדשה"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "בחר סיסמה"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "לא מצליח להיכנס?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "אישור כתובת האימייל"; - -/* Title of successfully signed in label. */ -"SignedIn" = "בוצעה כניסה!"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "נתקלת בבעיה בקבלת אימיילים?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "מומלץ לנסות את הפתרונות הבאים: \n - יש לבדוק אם האימייל סומן כספאם או סונן.\n - יש לבדוק את החיבור לאינטרנט.\n - יש לוודא שכתובת האימייל אויתה כהלכה.\n - יש לוודא שהשטח הפנוי בתיבת הדואר הנכנס אינו עומד להסתיים, או לבדוק בעיות אחרות שקשורות להגדרות של תיבת הדואר הנכנס.\n אם הבעיה נמשכת לאחר ביצוע השלבים המפורטים למעלה, אפשר לשלוח מחדש את האימייל. לתשומת ליבך: שליחת האימייל מחדש תשבית את הקישור באימייל הקודם."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "אימייל לכניסה לחשבון עם הוראות נוספות נשלח אל %@. יש לבדוק את תיבת הדואר הנכנס כדי להשלים את תהליך הכניסה."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "נשלח אימייל לכניסה לחשבון"; diff --git a/FirebaseAuthUI/Sources/Strings/hi.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/hi.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 06be9b3a368..00000000000 --- a/FirebaseAuthUI/Sources/Strings/hi.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "आपका स्वागत है"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "ईमेल से प्रवेश करें"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "अपना ईमेल डालें"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "वह ईमेल पता सही नहीं है."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "यह ऐप्लिकेशन इस प्रकार के खाते का समर्थन नहीं करता है"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "आपके पास पहले से ही एक खाता है"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "आपने पहले ही %@ का उपयोग कर लिया है. जारी रखने के लिए %@ से प्रवेश करें."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "प्रवेश करें"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "अपना पासवर्ड डालें"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "पासवर्ड खाली नहीं हो सकता."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "आपने जो ईमेल और पासवर्ड डाला है, उनका मिलान नहीं हो रहा है."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "वह ईमेल पता किसी मौजूदा खाते से मेल नहीं खाता है."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "यह ईमेल पता उस खाते का है जिसे अक्षम कर दिया गया है."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "आपने कई बार गलत पासवर्ड डाला. कुछ मिनटों में फिर से कोशिश करें."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "%@ के लिए प्रदाता नहीं मिल सका."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "ईमेल का मिलान नहीं हो रहा है"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "पासवर्ड फिर से प्राप्त करें"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "इस ईमेल पर भेजे गए निर्देश पाएं जो आपको अपना पासवर्ड रीसेट करना बताएंगे."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "अपना ईमेल जाँचें"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "अपना पासवर्ड फिर से पाने के लिए %@ पर भेजे गए निर्देशों का पालन करें."; - -/* Title for sign up screen. */ -"SignUpTitle" = "खाता बनाएं"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "नाम और उपनाम"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "पासवर्ड चुनें"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "सेवा की शर्तें"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "निजता नीति"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "जारी रखकर, आप यह बताते हैं कि आप हमारे %@ और %@ को स्वीकार करते हैं."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "कोई दूसरा खाता पहले से ही इस ईमेल पते का उपयोग कर रहा है."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "सशक्त पासवर्ड में कम से कम 6 वर्ण होने चाहिए और वे अक्षरों और नंबरों दोनों को मिलाकर बना होना चाहिए."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "आपके IP पते से बहुत अधिक खाता अनुरोध मिल रहे हैं. कुछ मिनटों में फिर से कोशिश करें."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "आपने पहले ही प्रवेश करने के लिए %@ का उपयोग कर लिया है. उस खाते के लिए अपना पासवर्ड डालें."; - -/* OK button title. */ -"OK" = "ठीक"; - -/* Cancel button title. */ -"Cancel" = "रद्द करें"; - -/* Back button title. */ -"Back" = "वापस जाएं"; - -/* Next button title. */ -"Next" = "अगला"; - -/* Save button title. */ -"Save" = "सहेजें"; - -/* Send button title. */ -"Send" = "भेजें"; - -/* Resend button title. */ -"Resend" = "फिर से भेजें"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "ईमेल"; - -/* Label next to a password text field. */ -"Password" = "पासवर्ड"; - -/* Label next to a name text field. */ -"Name" = "नाम"; - -/* Alert title Error. */ -"Error" = "गड़बड़ी"; - -/* Alert button title Close. */ -"Close" = "बंद करें"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "प्रोफ़ाइल"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "सुरक्षा"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "लिंक किए गए खाते"; - -/* Account Settings cell title Name. */ -"AS_Name" = "नाम"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "ईमेल"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "पासवर्ड जोड़ें"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "पासवर्ड बदलें"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "साइन आउट करें"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "खाता हटाएं"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "पासवर्ड भूल गए?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "पुष्टि करें कि यह आप ही हैं"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "खाता हटाएं?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "यह आपके खाते से संबंधित सभी डेटा मिटा देगा और इसे वापस नहीं पाया जा सकता है. इस कार्रवाई को पूरा करने के लिए आपको फिर से प्रवेश करना होगा"; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "यह आपके खाते से संबंधित सभी डेटा मिटा देगा और इसे वापस नहीं पाया जा सकता है. क्या आप वाकई अपना खाता हटाना चाहते हैं?"; - -/* Text of Delete action button. */ -"Delete" = "हटाएं"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "खाता हटाएं"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "यह कार्रवाई पहले जैसी नहीं की जा सकती"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "अनलिंक करें"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "लिंक किया गया खाता"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "खाता अनलिंक करें?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "अब आप अपने खाते का उपयोग करके प्रवेश करने में सक्षम नहीं होंगे"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "खाता अनलिंक करें"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "अपने खाते से जुड़े ईमेल पते को बदलने के लिए, आपको फिर से प्रवेश करना होगा."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "अपना पासवर्ड बदलने के लिए, आपको पहले अपना मौजूदा पासवर्ड डालना होगा."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "ईमेल संपादित करें"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "नाम संपादित करें"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "अपने खाते में पासवर्ड जोड़ने के लिए, आपको फिर से प्रवेश करना होगा."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "अपने खाते का पासवर्ड बदलने के लिए, आपको फिर से प्रवेश करना होगा."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "अपना पासवर्ड बदलने के लिए, आपको पहले अपना मौजूदा पासवर्ड डालना होगा."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "पासवर्ड जोड़ें"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "पासवर्ड बदलें"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "ईमेल"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "%@ से प्रवेश करें"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "अपना नाम डालें"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "अपना ईमेल डालें"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "अपना पासवर्ड डालें"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "नया पासवर्ड"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "पासवर्ड चुनें"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "प्रवेश करने में समस्या?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "ईमेल की पुष्टि करें"; - -/* Title of successfully signed in label. */ -"SignedIn" = "साइन-इन हैं!"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "क्या ईमेल मिलने में दिक्कत हो रही है?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "समस्या सुलझाने के ये सामान्य तरीके आज़माकर देखें: \n - देख लें कि ईमेल स्पैम फ़ोल्डर में तो नहीं चला गया या फ़िल्टर तो नहीं हो गया.\n - देख लें कि आपका इंटरनेट कनेक्शन चालू है या नहींं.\n - देख लें कि आपने ईमेल पते की वर्तनी (स्पेलिंग) गलत तो नहीं लिखी है.\n - देख लें कि आपका इनबॉक्स भर तो नहीं गया या इनबॉक्स सेटिंग से जुड़ी दूसरी समस्याएं तो नहीं हैं.\n अगर ऊपर दिए गए सुझावों से काम नहीं बनता है, तो आप फिर से ईमेल भेज सकते हैं. ध्यान दें कि ऐसा करने से पुराने ईमेल में भेजा गया लिंक काम करना बंद कर देगा."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "ज़्यादा निर्देशों वाला एक साइन-इन ईमेल %@ पर भेजा गया है. साइन-इन पूरा करने के लिए अपना ईमेल देखें."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "साइन-इन करने के लिंक वाला ईमेल भेज दिया गया"; diff --git a/FirebaseAuthUI/Sources/Strings/hr.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/hr.lproj/FirebaseAuthUI.strings deleted file mode 100644 index d386c7bc288..00000000000 --- a/FirebaseAuthUI/Sources/Strings/hr.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Dobro došli"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Prijava putem e-adrese"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Unesite svoju e-adresu"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "Ta e-adresa nije točna"; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "Ta vrsta računa nije podržana u ovoj aplikaciji"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Već imate račun"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Već ste upotrijebili e-adresu %@. Za nastavak se prijavite putem usluge %@."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Prijava"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Unesite zaporku"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "Zaporka ne može biti prazna."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "Unijeli ste e-adresu i zaporku koje se ne podudaraju."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "Ta e-adresa ne pripada postojećem računu."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "E-adresa pripada računu koji je onemogućen."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Unijeli ste netočnu zaporku previše puta. Pokušajte ponovo za nekoliko minuta."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "Nije moguće pronaći davatelja usluga za %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "E-adrese se ne podudaraju"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Ponovno postavljanje zaporke"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Provjerite upute za ponovno postavljanje zaporke koje smo poslali na vašu e-adresu."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Provjerite e-poštu"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Slijedite upute za ponovno postavljanje zaporke koje smo poslali na e-adresu %@."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Izrada računa"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Ime i prezime"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Odaberite zaporku"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Uvjeti pružanja usluge"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Pravila o privatnosti"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Nastavkom upotrebe potvrđujete da prihvaćate odredbe koje sadrže naši %@ i %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "Ta e-adresa već pripada drugom računu."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Snažne zaporke sadrže bar 6 znakova koji su kombinacija slova i znamenki."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "S vaše je IP adrese došlo previše zahtjeva za izradu računa. Pokušajte ponovo za nekoliko minuta."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Za prijavu ste već upotrijebili e-adresu %@. Unesite zaporku za taj račun."; - -/* OK button title. */ -"OK" = "U redu"; - -/* Cancel button title. */ -"Cancel" = "Odustani"; - -/* Back button title. */ -"Back" = "Natrag"; - -/* Next button title. */ -"Next" = "Dalje"; - -/* Save button title. */ -"Save" = "Spremi"; - -/* Send button title. */ -"Send" = "Pošalji"; - -/* Resend button title. */ -"Resend" = "Pošalji ponovo"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "E-adresa"; - -/* Label next to a password text field. */ -"Password" = "Zaporka"; - -/* Label next to a name text field. */ -"Name" = "Naziv"; - -/* Alert title Error. */ -"Error" = "Pogreška"; - -/* Alert button title Close. */ -"Close" = "Zatvori"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Profil"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Sigurnost"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Povezani računi"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Naziv"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "E-adresa"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Dodavanje zaporke"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Promjena zaporke"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Odjava"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Brisanje računa"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "Zaboravili ste zaporku?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Potvrdite svoj identitet"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "Želite li izbrisati račun?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Izbrisat će se svi podaci povezani s vašim računom i to nećete moći poništiti. Da biste dovršili tu radnju, trebate se ponovo prijaviti"; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Izbrisat će se svi podaci povezani s vašim računom i to nećete moći poništiti. Jeste li sigurni da želite izbrisati svoj račun?"; - -/* Text of Delete action button. */ -"Delete" = "Izbriši"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Izbriši račun"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Ta se radnja ne može poništiti"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Prekini vezu"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Povezani račun"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "Prekinuti vezu s računom?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Više se nećete moći prijaviti svojim računom."; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Prekidanje veze s računom"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Da biste promijenili e-adresu povezanu sa svojim računom, trebate se ponovo prijaviti."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Da biste promijenili zaporku, najprije trebate unijeti trenutačnu zaporku."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Uređivanje e-adrese"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Uređivanje naziva"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Da biste računu dodali zaporku, trebate se ponovo prijaviti."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Da biste promijenili zaporku za račun, trebate se ponovo prijaviti."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Da biste promijenili zaporku, najprije trebate unijeti trenutačnu zaporku."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Dodavanje zaporke"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Promjena zaporke"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "E-adresa"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Prijava putem usluge %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Unesite svoje ime"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Unesite svoju e-adresu"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Unesite zaporku"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Nova zaporka"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Odaberite zaporku"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "Problem s prijavom?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Potvrdite e-adresu"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Prijavljeni ste!"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "Ne dobivate e-poruke?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Isprobajte ova uobičajena rješenja: \n - Provjerite je li e-poruka filtrirana ili označena kao neželjena pošta.\n - Provjerite internetsku vezu.\n - Provjerite jeste li točno napisali e-adresu.\n - Provjerite ima li dovoljno prostora u vašem pretincu pristigle pošte ili je došlo do drugih problema povezanih s postavkama pretinca pristigle pošte.\n Ako se problem ne riješi pomoću koraka iznad, možete ponovo poslati e-poruku. Time će se deaktivirati veza u prethodnoj e-poruci."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "E-poruka za prijavu s dodatnim uputama poslana je na adresu %@. Provjerite e-poštu da biste dovršili prijavu."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "E-poruka za prijavu poslana"; diff --git a/FirebaseAuthUI/Sources/Strings/hu.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/hu.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 8ba2d81f738..00000000000 --- a/FirebaseAuthUI/Sources/Strings/hu.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Üdvözöljük!"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Bejelentkezés e-mail-fiókkal"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Adja meg az e-mail-címét"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "Az e-mail-cím helytelen."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "Ezt a típusú fiókot az alkalmazás nem támogatja."; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Már rendelkezik fiókkal"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Már használta a következő e-mail-címet: %@. A folytatáshoz jelentkezzen be %@-fiókjával."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Bejelentkezés"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Adja meg a jelszót"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "A jelszó mező nem lehet üres."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "A megadott e-mail-cím és jelszó nem egyezik."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "Ehhez az e-mail-címhez egyetlen meglévő fiók sem tartozik."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "Ez az e-mail-cím egy letiltott fiókhoz tartozik."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Túl sokszor adott meg hibás jelszót. Néhány perc múlva próbálja újra."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "Nem találjuk a következőhöz tartozó szolgáltatót: %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Az e-mail-címek nem egyeznek."; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Jelszó visszaállítása"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Olvassa el az e-mailben elküldött utasításokat, amelyekből megtudhatja, hogyan állíthatja vissza a jelszavát."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Ellenőrizze az e-mailjeit."; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "A jelszó visszaállításához kövesse az ide (%@) elküldött utasításokat."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Fiók létrehozása"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Utónév és vezetéknév"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Válasszon jelszót"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Általános Szerződési Feltételek"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Adatvédelmi irányelvek"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "A folytatással kinyilvánítja, hogy elfogadja %@ és %@ dokumentumainkat."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "Az e-mail-cím egy másik fióknál már használatban van."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Az erős jelszavak legalább 6 karakterből állnak, valamint betűket és számokat egyaránt tartalmaznak."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Az Ön IP-címéről túl sok fiókkérelem érkezik. Néhány perc múlva próbálja újra."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Ezt az e-mail-fiókot (%@) már használta bejelentkezésre. Adja meg a fiókhoz tartozó jelszót."; - -/* OK button title. */ -"OK" = "Rendben"; - -/* Cancel button title. */ -"Cancel" = "Mégse"; - -/* Back button title. */ -"Back" = "Vissza"; - -/* Next button title. */ -"Next" = "Következő"; - -/* Save button title. */ -"Save" = "Mentés"; - -/* Send button title. */ -"Send" = "Küldés"; - -/* Resend button title. */ -"Resend" = "Újraküldés"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "E-mail"; - -/* Label next to a password text field. */ -"Password" = "Jelszó"; - -/* Label next to a name text field. */ -"Name" = "Név"; - -/* Alert title Error. */ -"Error" = "Hiba"; - -/* Alert button title Close. */ -"Close" = "Bezárás"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Profil"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Biztonság"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Összekapcsolt fiókok"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Név"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "E-mail"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Jelszó hozzáadása"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Jelszó módosítása"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Kijelentkezés"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Fiók törlése"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "Elfelejtette a jelszavát?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Igazolja, hogy Ön az"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "Fiók törlése?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Ezzel az összes fiókadatát törli, és ezt a műveletet nem vonhatja vissza. A művelet végrehajtásához újra be kell jelentkeznie."; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Ezzel az összes fiókadatát törli, és ezt a műveletet nem vonhatja vissza. Biztosan törölni szeretné a fiókját?"; - -/* Text of Delete action button. */ -"Delete" = "Törlés"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Fiók törlése"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "A művelet nem vonható vissza."; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Leválasztás"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Összekapcsolt fiók"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "Leválasztja a fiókot?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Többé nem fog tudni bejelentkezni a fiókkal."; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Fiók leválasztása"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "A fiókjához tartozó e-mail-cím módosításához újra be kell jelentkeznie."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "A jelszó módosításához előbb meg kell adnia a jelenlegi jelszavát."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "E-mail szerkesztése"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Név szerkesztése"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Ha fiókjához jelszót szeretne hozzáadni, újra be kell jelentkeznie."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Fiókja jelszavának módosításához újra be kell jelentkeznie."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "A jelszó módosításához előbb meg kell adnia a jelenlegi jelszavát."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Jelszó hozzáadása"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Jelszó módosítása"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "E-mail"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Bejelentkezés a következővel: %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Írja be a nevét"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Adja meg az e-mail-címét"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Adja meg a jelszót"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Új jelszó"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Válasszon jelszót"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "Problémái vannak a bejelentkezéssel?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "E-mail megerősítése"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Sikeres bejelentkezés!"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "Gondja van az e-mailek fogadásával?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Próbálja ki ezeket az általános problémamegoldó lépéseket: \n – Nézze meg, hogy nem került-e az e-mail a spameket tartalmazó mappába, vagy nem szűrte-e ki a levelezőrendszer.\n – Ellenőrizze az internetkapcsolatot.\n – Ellenőrizze, hogy helyesen adta-e meg az e-mail-címét.\n – Ellenőrizze, hogy a beérkező leveleket tartalmazó mappa nem telt-e meg, vagy nincs-e más, a mappával kapcsolatos probléma.\n Ha a fenti lépések nem végrehajtása nem járt eredménnyel, küldje el újra az e-mailt. Ne feledje, hogy ezzel deaktiválja az előző e-mailben szereplő linket."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "A további utasításokat tartalmazó bejelentkezési e-mailt elküldtük ide: %@. A bejelentkezés befejezéséhez keresse meg az e-mailjei között."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Elküldtük a bejelentkezési e-mailt"; diff --git a/FirebaseAuthUI/Sources/Strings/id.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/id.lproj/FirebaseAuthUI.strings deleted file mode 100644 index c8b3e145b35..00000000000 --- a/FirebaseAuthUI/Sources/Strings/id.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Selamat datang"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Login dengan email"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Masukkan email Anda"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "Alamat email yang dimasukkan salah."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "Jenis akun ini tidak didukung oleh aplikasi ini"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Anda sudah memiliki akun"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Anda telah menggunakan %@. Login dengan %@ untuk melanjutkan."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Login"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Masukkan sandi"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "Sandi tidak boleh kosong."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "Email dan sandi yang Anda masukkan tidak cocok."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "Alamat email tidak cocok dengan akun yang ada."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "Akun yang sesuai dengan alamat email tersebut sudah dinonaktifkan."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Anda sudah terlalu sering memasukkan sandi yang salah. Coba beberapa menit lagi."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "Tidak dapat menemukan provider untuk %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Email tidak cocok"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Pulihkan sandi"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Dapatkan petunjuk yang dikirimkan ke email ini yang menjelaskan cara menyetel ulang sandi Anda."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Periksa email Anda"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Ikuti petunjuk yang dikirim ke %@ untuk memulihkan sandi Anda."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Buat akun"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Nama depan & nama belakang"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Pilih sandi"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Persyaratan Layanan"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Kebijakan Privasi"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Dengan melanjutkan, Anda menyatakan persetujuan atas %@ dan %@ kami."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "Alamat email ini sudah digunakan oleh akun lain."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Sandi yang kuat harus memiliki minimal 6 karakter dan merupakan kombinasi huruf dan angka."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Terlalu banyak permintaan akun yang berasal dari alamat IP Anda. Coba beberapa menit lagi."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Anda telah menggunakan %@ untuk login. Masukkan sandi untuk akun tersebut."; - -/* OK button title. */ -"OK" = "Oke"; - -/* Cancel button title. */ -"Cancel" = "Batal"; - -/* Back button title. */ -"Back" = "Kembali"; - -/* Next button title. */ -"Next" = "Berikutnya"; - -/* Save button title. */ -"Save" = "Simpan"; - -/* Send button title. */ -"Send" = "Kirim"; - -/* Resend button title. */ -"Resend" = "Kirim ulang"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "Email"; - -/* Label next to a password text field. */ -"Password" = "Sandi"; - -/* Label next to a name text field. */ -"Name" = "Nama"; - -/* Alert title Error. */ -"Error" = "Error"; - -/* Alert button title Close. */ -"Close" = "Tutup"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Profil"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Keamanan"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Akun Tertaut"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Nama"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "Email"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Tambahkan sandi"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Ubah sandi"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Logout"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Hapus Akun"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "Lupa sandi?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Verifikasi bahwa itu Anda"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "Hapus Akun?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Tindakan ini akan menghapus semua data yang terkait dengan akun Anda, dan tidak dapat diurungkan. Anda harus login kembali untuk menyelesaikan tindakan ini"; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Tindakan ini akan menghapus semua data yang terkait dengan akun Anda, dan tidak dapat diurungkan. Yakin ingin menghapus akun?"; - -/* Text of Delete action button. */ -"Delete" = "Hapus"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Hapus akun"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Tindakan ini tidak dapat diurungkan"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Batalkan tautan"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Akun tertaut"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "Batalkan tautan akun?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Anda tidak dapat lagi login menggunakan akun Anda"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Batalkan tautan akun"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Untuk mengubah alamat email yang dikaitkan dengan akun, Anda perlu melakukan login kembali."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Untuk mengubah sandi, Anda harus memasukkan sandi saat ini terlebih dahulu."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Edit email"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Edit nama"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Untuk menambahkan sandi ke akun, Anda harus login kembali."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Untuk mengubah sandi akun, Anda harus login kembali."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Untuk mengubah sandi, Anda harus memasukkan sandi saat ini terlebih dahulu."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Tambahkan sandi"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Ubah sandi"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "Email"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Login dengan %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Masukkan nama Anda"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Masukkan email Anda"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Masukkan sandi"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Sandi baru"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Pilih sandi"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "Terjadi masalah saat login?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Konfirmasi Email"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Telah login"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "Ada masalah dalam mendapatkan email?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Cobalah perbaikan umum berikut: \n - Periksa apakah email ditandai sebagai spam atau difilter.\n - Periksa koneksi internet Anda.\n - Pastikan Anda tidak salah mengeja email Anda.\n - Pastikan masih ada ruang di kotak masuk Anda, atau periksa masalah terkait setelan kotak masuk lainnya.\n Jika langkah-langkah di atas tidak memecahkan masalah, Anda dapat mengirim ulang email tersebut. Perlu diperhatikan bahwa tindakan ini akan menonaktifkan link di email lama."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "Email login dengan petunjuk tambahan telah dikirim ke %@. Buka email Anda untuk menyelesaikan proses login."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Email Login Terkirim"; diff --git a/FirebaseAuthUI/Sources/Strings/it.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/it.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 069a96cb4ea..00000000000 --- a/FirebaseAuthUI/Sources/Strings/it.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Benvenuto"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Accedi con l'indirizzo email"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Inserisci l'indirizzo email"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "L'indirizzo email non è corretto."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "Questo tipo di account non è supportato da questa applicazione"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Hai già un account"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Hai già utilizzato %@. Accedi con %@ per continuare."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Accedi"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Inserisci la password"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "La password non può essere vuota."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "L’indirizzo email e la password non corrispondono."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "L'indirizzo email non corrisponde a un account esistente."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "L'indirizzo email è relativo a un account che è stato disattivato."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Hai effettuato troppi tentativi con una password errata. Riprova tra qualche minuto."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "Impossibile trovare il provider per %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Gli indirizzi email non corrispondono"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Recupera la password"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Ricevi le istruzioni a questo indirizzo email che spiegano come reimpostare la password."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Controlla la tua casella di posta"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Segui le istruzioni inviate all'indirizzo %@ per recuperare la password."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Crea account"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Nome e cognome"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Scegli password"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Termini di servizio"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Norme sulla privacy"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Se continui, accetti i nostri %@ e le nostre %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "L'indirizzo email è già utilizzato da un altro account."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Una password efficace è composta da almeno 6 caratteri e contiene una combinazione di lettere e numeri."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Troppe richieste di account provenienti dal tuo indirizzo IP. Riprova tra qualche minuto."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Hai già utilizzato %@ per accedere. Inserisci la tua password per tale account."; - -/* OK button title. */ -"OK" = "OK"; - -/* Cancel button title. */ -"Cancel" = "Annulla"; - -/* Back button title. */ -"Back" = "Indietro"; - -/* Next button title. */ -"Next" = "Avanti"; - -/* Save button title. */ -"Save" = "Salva"; - -/* Send button title. */ -"Send" = "Invia"; - -/* Resend button title. */ -"Resend" = "Invia di nuovo"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "Email"; - -/* Label next to a password text field. */ -"Password" = "Password"; - -/* Label next to a name text field. */ -"Name" = "Nome"; - -/* Alert title Error. */ -"Error" = "Errore"; - -/* Alert button title Close. */ -"Close" = "Chiudi"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Profilo"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Sicurezza"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Account collegati"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Nome"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "Email"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Aggiungi password"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Cambia password"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Esci"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Elimina account"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "Password dimenticata?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Verifica che sei tu"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "Vuoi eliminare l'account?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "L'operazione cancellerà tutti i dati associati al tuo account e non può essere annullata. Devi accedere nuovamente per completarla."; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "L'operazione cancellerà tutti i dati associati al tuo account e non può essere annullata. Vuoi eliminare il tuo account?"; - -/* Text of Delete action button. */ -"Delete" = "Elimina"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Elimina account"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Questa azione non può essere annullata"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Scollega"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Account collegato"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "Vuoi scollegare l'account?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Non potrai accedere utilizzando il tuo account"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Scollega account"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Per modificare l'indirizzo email associato al tuo account, devi accedere di nuovo."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Per modificare la password, devi prima inserire la password corrente."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Modifica email"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Modifica nome"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Per aggiungere la password al tuo account, devi accedere di nuovo."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Per modificare la password del tuo account, devi accedere di nuovo."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Per modificare la password, devi prima inserire la password corrente."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Aggiungi password"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Cambia password"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "Email"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Accedi con %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Inserisci il tuo nome"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Inserisci l'indirizzo email"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Inserisci la password"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Nuova password"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Scegli password"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "Problemi di accesso?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Conferma email"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Accesso eseguito"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "Non ricevi l'email?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Prova le seguenti soluzioni comuni: \n - Verifica se l'email è stata contrassegnata come spam o è stata filtrata.\n - Controlla la connessione Internet.\n - Verifica di aver digitato correttamente l'indirizzo email.\n - Verifica che vi sia ancora spazio disponibile nella Posta in arrivo o che non vi siano altri problemi legati alle impostazioni della Posta in arrivo.\n Se le procedure descritte sopra non hanno risolto il problema, puoi inviare nuovamente l'email. Tieni presente che questo disattiverà il link contenuto nell'email precedente."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "Un'email di accesso con ulteriori istruzioni è stata inviata all'indirizzo %@. Controlla la tua casella di posta per completare l'accesso."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Email di accesso inviata"; diff --git a/FirebaseAuthUI/Sources/Strings/ja.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/ja.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 94eec9d8ab5..00000000000 --- a/FirebaseAuthUI/Sources/Strings/ja.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "ようこそ"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "メールアドレスでログイン"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "メールアドレスを入力してください"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "メールアドレスが正しくありません。"; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "このタイプのアカウントはこのアプリでサポートされていません"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "アカウントをすでにお持ちです"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "%@ をすでに使用しています。%@ でログインして続行してください。"; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "ログイン"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "パスワードを入力"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "パスワードは空白にできません。"; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "入力したメールアドレスとパスワードが一致しません。"; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "メールアドレスが既存のアカウントと一致しません。"; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "これは無効になったアカウントのメールアドレスです。"; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "正しくないパスワードを何度も入力しています。しばらくしてからもう一度お試しください。"; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "%@ のプロバイダが見つかりません。"; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "メールアドレスが一致しません"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "パスワードの復元"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "このメールアドレスに送信された、パスワードの復元方法をご確認ください。"; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "メールをご確認ください"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "%@ に送信された手順に沿ってパスワードを復元します。"; - -/* Title for sign up screen. */ -"SignUpTitle" = "アカウントの作成"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "あなたの名前"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "パスワードを設定"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "利用規約"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "プライバシー ポリシー"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "続行すると、%@と%@に同意したことになります。"; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "このメールアドレスは他のアカウントによってすでに使用されています。"; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "6 文字以上で、文字と数字を組み合わせた安全なパスワードを設定してください。"; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "この IP アドレスから多くのアカウント リクエストが送信されています。しばらくしてからもう一度お試しください。"; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "すでに %@ を使用してログインしています。このアカウントのパスワードを入力してください。"; - -/* OK button title. */ -"OK" = "OK"; - -/* Cancel button title. */ -"Cancel" = "キャンセル"; - -/* Back button title. */ -"Back" = "戻る"; - -/* Next button title. */ -"Next" = "次へ"; - -/* Save button title. */ -"Save" = "保存"; - -/* Send button title. */ -"Send" = "送信"; - -/* Resend button title. */ -"Resend" = "再送信"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "メール"; - -/* Label next to a password text field. */ -"Password" = "パスワード"; - -/* Label next to a name text field. */ -"Name" = "名前"; - -/* Alert title Error. */ -"Error" = "エラー"; - -/* Alert button title Close. */ -"Close" = "閉じる"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "プロフィール"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "セキュリティ"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "リンクされたアカウント"; - -/* Account Settings cell title Name. */ -"AS_Name" = "名前"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "メールアドレス"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "パスワードの追加"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "パスワードの変更"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "ログアウト"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "アカウントの削除"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "パスワードをお忘れの場合"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "ご本人確認"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "アカウントを削除しますか?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "この操作を行うと、アカウントに関連付けられたすべてのデータが削除され、元に戻すことはできません。この操作を完了させるには、再度ログインする必要があります。"; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "この操作を行うと、アカウントに関連付けられたすべてのデータが削除され、元に戻すことはできません。アカウントを削除してもよろしいですか?"; - -/* Text of Delete action button. */ -"Delete" = "削除"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "アカウントの削除"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "この操作は元に戻せません"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "リンクを解除"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "リンクされたアカウント"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "アカウントのリンクを解除しますか?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "このアカウントを使用してログインできなくなります"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "アカウントのリンク解除"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "アカウントに関連付けられているメールアドレスを変更するには、再度ログインする必要があります。"; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "パスワードを変更するには、まず現在のパスワードを入力する必要があります。"; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "メールアドレスの編集"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "名前の編集"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "アカウントにパスワードを追加するには、再度ログインする必要があります。"; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "アカウントのパスワードを変更するには、再度ログインする必要があります。"; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "パスワードを変更するには、まず現在のパスワードを入力する必要があります。"; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "パスワードの追加"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "パスワードの変更"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "メールアドレス"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "%@ でログイン"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "名前を入力"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "メールアドレスを入力"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "パスワードを入力"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "新しいパスワード"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "パスワードを設定"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "ログインできない場合"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "メールの確認"; - -/* Title of successfully signed in label. */ -"SignedIn" = "ログインしました"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "メールが受信できない場合"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "以下の一般的な解決方法をお試しください。\n - メールがスパムに分類されたりフィルタされたりしていないか確認する。\n - インターネットの接続を確認する。\n - メールアドレスのスペルに誤りがないか確認する。\n - 受信トレイの容量不足や、設定関連のその他の問題がないか確認する。\n 上記の手順で解決しなかった場合はメールを再送信できます。メールを再送信すると、前回のメールに記載されたリンクは無効になります。"; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "詳細な手順を記載したログインメールを %@ に送信しました。メールを確認してログインを完了してください。"; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "ログインメールを送信しました"; diff --git a/FirebaseAuthUI/Sources/Strings/kn.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/kn.lproj/FirebaseAuthUI.strings deleted file mode 100644 index cd6787fb09d..00000000000 --- a/FirebaseAuthUI/Sources/Strings/kn.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "ಸ್ವಾಗತ"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "ಇಮೇಲ್ ಜೊತೆ ಸೈನ್ ಇನ್ ಮಾಡಿ"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "ನಿಮ್ಮ ಇಮೇಲ್ ಅನ್ನು ನಮೂದಿಸಿ"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "ಆ ಇಮೇಲ್ ವಿಳಾಸವು ಸರಿಯಾಗಿಲ್ಲ."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "ಈ ಅಪ್ಲಿಕೇಶನ್‌ ಈ ರೀತಿಯ ಖಾತೆಯನ್ನು ಬೆಂಬಲಿಸುವುದಿಲ್ಲ"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "ನೀವು ಈಗಾಗಲೇ ಖಾತೆಯನ್ನು ಹೊಂದಿರುವಿರಿ"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "ನೀವು ಈಗಾಗಲೇ %@ ನ್ನು ಬಳಸಿದ್ದೀರಿ. ಮುಂದುವರಿಸಲು %@ ಜೊತೆ ಸೈನ್ ಇನ್ ಮಾಡಿ."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "ಸೈನ್ ಇನ್‌"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್ ನಮೂದಿಸಿ"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "ಪಾಸ್‌ವರ್ಡ್‌ ಖಾಲಿ ಇರುವಂತಿಲ್ಲ."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "ನೀವು ನಮೂದಿಸಿರುವ ಇಮೇಲ್‌ ಮತ್ತು ಪಾಸ್‌ವರ್ಡ್‌ ಹೊಂದಾಣಿಕೆಯಾಗಿಲ್ಲ."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "ಆ ಇಮೇಲ್‌ ವಿಳಾಸವು ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಖಾತೆಗೆ ಹೊಂದಾಣಿಕೆಯಾಗುವುದಿಲ್ಲ."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "ಖಾತೆಗೆ ಆ ಇಮೇಲ್‌ ವಿಳಾಸವನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "ಹಲವು ಬಾರಿ ನೀವು ತಪ್ಪಾದ ಪಾಸ್‌ವರ್ಡ್‌ ನಮೂದಿಸಿರುವಿರಿ. ಕೆಲವು ನಿಮಿಷಗಳಲ್ಲಿ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "%@ ಗಾಗಿ ಪೂರೈಕೆದಾರರನ್ನು ಹುಡಕಲಾಗಲಿಲ್ಲ"; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "ಇಮೇಲ್‌ಗಳು ಹೊಂದಾಣಿಕೆಯಾಗುತ್ತಿಲ್ಲ"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "ಪಾಸ್‌ವರ್ಡ್ ಹಿಂಪಡೆಯಿರಿ"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ಮರುಹೊಂದಿಸುವುದು ಹೇಗೆ ಎಂದು ತಿಳಿಯಲು ಆ ಇಮೇಲ್‌ಗೆ ಕಳುಹಿಸಿರುವ ಸೂಚನೆಗಳನ್ನು ಪಡೆಯಿರಿ."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "ನಿಮ್ಮ ಇಮೇಲ್‌ ಅನ್ನು ಪರಿಶೀಲಿಸಿ"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ಮರುಪಡೆಯಲು %@ ಗೆ ಕಳುಹಿಸಲಾದ ಸೂಚನೆಗಳನ್ನು ಅನುಸರಿಸಿ."; - -/* Title for sign up screen. */ -"SignUpTitle" = "ಖಾತೆ ರಚಿಸಿ"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "ಮೊದಲ ಮತ್ತು ಕೊನೆಯ ಹೆಸರು"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ಆರಿಸಿ"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "ಸೇವಾ ನಿಯಮಗಳು"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "ಗೌಪ್ಯತೆ ನೀತಿ"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "ಮುಂದುವರಿಸುವ ಮೂಲಕ, ನೀವು ನಮ್ಮ %@ ಮತ್ತು %@ ಸ್ವೀಕರಿಸುತ್ತೀರಿ ಎಂದು ನೀವು ಸೂಚಿಸುತ್ತಿರುವಿರಿ"; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "ಇಮೇಲ್‌ ವಿಳಾಸವು ಈಗಾಗಲೇ ಮತ್ತೊಂದು ಖಾತೆಗೆ ಬಳಸಲಾಗಿದೆ."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "ಪ್ರಬಲವಾದ ಪಾಸ್‌ವರ್ಡ್‌ಗಳು ಕನಿಷ್ಠ ಅಕ್ಷರಗಳನ್ನಾದರೂ ಹಾಗೂ ಮಿಕ್ಸ್‌ ಅಕ್ಷರಗಳು ಮತ್ತು ಸಂಖ್ಯೆಗಳು ಇರಬೇಕು."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "ನಿಮ್ಮ ಐಪಿ ವಿಳಾಸದಿಂದ ಅತಿ ಹೆಚ್ಚು ಖಾತೆ ಕೋರಿಕೆಗಳು ಬರುತ್ತಿವೆ. ಕೆಲವು ನಿಮಿಷಗಳಲ್ಲಿ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "ನೀವು ಈಗಾಗಲೇ ಸೈನ್ ಇನ್ ಮಾಡಲು %@ ನ್ನು ಬಳಸಿದ್ದೀರ. ಆ ಖಾತೆಗೆ ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್‌ ಅನ್ನು ನಮೂದಿಸಿ."; - -/* OK button title. */ -"OK" = "ಸರಿ"; - -/* Cancel button title. */ -"Cancel" = "ರದ್ದುಮಾಡಿ"; - -/* Back button title. */ -"Back" = "ಹಿಂದೆ"; - -/* Next button title. */ -"Next" = "ಮುಂದೆ"; - -/* Save button title. */ -"Save" = "ಉಳಿಸಿ"; - -/* Send button title. */ -"Send" = "ಕಳುಹಿಸಿ"; - -/* Resend button title. */ -"Resend" = "ಪುನಃಕಳುಹಿಸಿ"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "ಇಮೇಲ್"; - -/* Label next to a password text field. */ -"Password" = "ಪಾಸ್‌ವರ್ಡ್"; - -/* Label next to a name text field. */ -"Name" = "ಹೆಸರು"; - -/* Alert title Error. */ -"Error" = "ದೋಷ"; - -/* Alert button title Close. */ -"Close" = "ಮುಚ್ಚಿ"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "ಪ್ರೊಫೈಲ್"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "ಭದ್ರತೆ"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "ಲಿಂಕ್‌ ಮಾಡಲಾದ ಖಾತೆಗಳು"; - -/* Account Settings cell title Name. */ -"AS_Name" = "ಹೆಸರು"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "ಇಮೇಲ್"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "ಪಾಸ್‌ವರ್ಡ್‌ ಸೇರಿಸಿ"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "ಪಾಸ್‌ವರ್ಡ್ ಬದಲಿಸಿ"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "ಸೈನ್ ಔಟ್"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "ಖಾತೆಯನ್ನು ಅಳಿಸಿ"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "ಪಾಸ್‌ವರ್ಡ್ ಮರೆತಿರುವಿರಾ?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "ಅದು ನೀವೇ ಎಂದು ಪರಿಶೀಲಿಸಿ"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "ಖಾತೆಯನ್ನು ಅಳಿಸುವುದೇ?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "ನಿಮ್ಮ ಖಾತೆಗೆ ಸಂಬಂಧಿಸಿದ ಎಲ್ಲಾ ಡೇಟಾವನ್ನು ಇದು ಅಳಿಸಿಹಾಕುತ್ತದೆ ಮತ್ತು ರದ್ದುಗೊಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ನೀವು ಈ ಕ್ರಿಯೆಯನ್ನು ಪೂರ್ಣಗೊಳಿಸಲು ಪುನಃ ಸೈನ್‌ ಇನ್‌ ಮಾಡಬೇಕಾಗುತ್ತದೆ."; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "ನಿಮ್ಮ ಖಾತೆಗೆ ಸಂಬಂಧಿಸಿದ ಎಲ್ಲಾ ಡೇಟಾವನ್ನು ಇದು ಅಳಿಸಿಹಾಕುತ್ತದೆ ಮತ್ತು ರದ್ದುಗೊಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ಈ ಖಾತೆಯನ್ನು ಅಳಿಸಲು ನೀವು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ?"; - -/* Text of Delete action button. */ -"Delete" = "ಅಳಿಸಿ"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "ಖಾತೆಯನ್ನು ಅಳಿಸಿ"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "ಈ ಕ್ರಿಯೆಯನ್ನು ರದ್ದುಪಡಿಸಲಾಗುವುದಿಲ್ಲ."; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "ಅನ್‌ಲಿಂಕ್"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "ಲಿಂಕ್‌ ಮಾಡಿದ ಖಾತೆ"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "ಖಾತೆಯ ಲಿಂಕ್‌ ರದ್ದುಗೊಳಿಸುವುದೇ?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "ಇನ್ನು ಮುಂದೆ ನಿಮ್ಮ ಖಾತೆಯನ್ನು ಬಳಸಿಕೊಂಡು ಸೈನ್‌ ಇನ್‌ ಮಾಡಲಾಗುವುದಿಲ್ಲ"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "ಖಾತೆಯ ಲಿಂಕ್‌ ರದ್ದುಮಾಡಿ"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "ನಿಮ್ಮ ಖಾತೆಗೆ ಸಂಬಂಧಿಸಿದ ಇಮೇಲ್‌ ವಿಳಾಸವನ್ನು ಬದಲಿಸಲು, ನೀವು ಪುನಃ ಸೈನ್‌ ಇನ್‌ ಮಾಡಬೇಕಾಗುತ್ತದೆ."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್‌ ಅನ್ನು ಬದಲಿಸಲು, ನಿಮ್ಮ ಪ್ರಸ್ತುತ ಪಾಸ್‌ವರ್ಡ್‌ ಅನ್ನು ನೀವು ಮೊದಲು ನಮೂದಿಸಬೇಕಾಗಿದೆ."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "ಇಮೇಲ್‌ ಎಡಿಟ್‌ ಮಾಡಿ"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "ಹೆಸರನ್ನು ಎಡಿಟ್ ಮಾಡಿ"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "ನಿಮ್ಮ ಖಾತೆಗೆ ಪಾಸ್‌ವರ್ಡ್‌ ಅನ್ನು ಸೇರಿಸಲು, ನೀವು ಪುನಃ ಸೈನ್‌ ಇನ್‌ ಮಾಡಬೇಕಾಗುತ್ತದೆ."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "ನಿಮ್ಮ ಖಾತೆಗೆ ಪಾಸ್‌ವರ್ಡ್‌ ಅನ್ನು ಬದಲಿಸಲು, ನೀವು ಪುನಃ ಸೈನ್‌ ಇನ್‌ ಮಾಡಬೇಕಾಗುತ್ತದೆ."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್‌ ಅನ್ನು ಬದಲಿಸಲು, ನಿಮ್ಮ ಪ್ರಸ್ತುತ ಪಾಸ್‌ವರ್ಡ್‌ ಅನ್ನು ನೀವು ಮೊದಲು ನಮೂದಿಸಬೇಕಾಗಿದೆ."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "ಪಾಸ್‌ವರ್ಡ್‌ ಸೇರಿಸಿ"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "ಪಾಸ್‌ವರ್ಡ್ ಬದಲಿಸಿ"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "ಇಮೇಲ್"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "%@ ಮೂಲಕ ಸೈನ್‌ ಇನ್ ಮಾಡಿ"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "ನಿಮ್ಮ ಹೆಸರು ನಮೂದಿಸಿ"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "ನಿಮ್ಮ ಇಮೇಲ್ ಅನ್ನು ನಮೂದಿಸಿ"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್ ನಮೂದಿಸಿ"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "ಹೊಸ ಪಾಸ್‌ವರ್ಡ್"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ಆರಿಸಿ"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "ಸೈನ್ ಇನ್ ಮಾಡುವಲ್ಲಿ ಸಮಸ್ಯೆ ಇದೆಯೇ?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "ಇಮೇಲ್ ಅನ್ನು ದೃಢೀಕರಿಸಿ"; - -/* Title of successfully signed in label. */ -"SignedIn" = "ಸೈನ್ ಇನ್ ಆಗಿದೆ!"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "ಇಮೇಲ್‌ಗಳನ್ನು ಪಡೆಯುವಲ್ಲಿ ಸಮಸ್ಯೆ ಉಂಟಾಗುತ್ತಿದೆಯೇ?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "ಈ ಸಾಮಾನ್ಯ ಪರಿಹಾರಗಳನ್ನು ಪ್ರಯತ್ನಿಸಿ: \n - ಇಮೇಲ್ ಅನ್ನು ಸ್ಪ್ಯಾಮ್ ಎಂದು ಗುರುತು ಮಾಡಲಾಗಿದೆಯೇ ಅಥವಾ ಫಿಲ್ಟರ್ ಮಾಡಲಾಗಿದೆಯೇ ಎಂದು ಪರಿಶೀಲಿಸಿ.\n - ನಿಮ್ಮ ಇಂಟರ್ನೆಟ್ ಸಂಪರ್ಕವನ್ನು ಪರಿಶೀಲಿಸಿ.\n - ನಿಮ್ಮ ಇಮೇಲ್‌ನ ಕಾಗುಣಿತವನ್ನು ಸರಿಯಾಗಿ ನಮೂದಿಸಿರುವಿರಾ ಎಂಬುದನ್ನು ಪರಿಶೀಲಿಸಿ.\n - ನಿಮ್ಮ ಇನ್‌ಬಾಕ್ಸ್ ಸಂಗ್ರಹಣೆಯು ಭರ್ತಿಯಾಗದಿರುವುದನ್ನು ಅಥವಾ ಇತರ ಇನ್‌ಬಾಕ್ಸ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳಿಗೆ ಸಂಬಂಧಿಸಿದ ಸಮಸ್ಯೆಗಳನ್ನು ಪರಿಶೀಲಿಸಿ.\n ಮೇಲಿನ ಹಂತಗಳು ಕಾರ್ಯನಿರ್ವಹಿಸದಿದ್ದಲ್ಲಿ, ನೀವು ಇಮೇಲ್ ಅನ್ನು ಪುನಃ ಕಳುಹಿಸಬಹುದು. ಇದು ಹಳೆಯ ಇಮೇಲ್‌ನಲ್ಲಿರುವ ಲಿಂಕ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ ಎಂಬುದನ್ನು ಗಮನಿಸಿ."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "%@ ಇಮೇಲ್‌ಗೆ ಹೆಚ್ಚುವರಿ ಸೂಚನೆಗಳನ್ನು ಹೊಂದಿರುವ ಸೈನ್-ಇನ್ ಇಮೇಲ್ ಅನ್ನು ಕಳುಹಿಸಲಾಗಿದೆ. ಸೈನ್-ಇನ್ ಪೂರ್ಣಗೊಳಿಸಲು ನಿಮ್ಮ ಇಮೇಲ್ ಅನ್ನು ಪರಿಶೀಲಿಸಿ."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "ಸೈನ್-ಇನ್ ಇಮೇಲ್ ಕಳುಹಿಸಲಾಗಿದೆ"; diff --git a/FirebaseAuthUI/Sources/Strings/ko.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/ko.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 2fe62e7dc88..00000000000 --- a/FirebaseAuthUI/Sources/Strings/ko.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "시작"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "이메일로 로그인"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "이메일 입력"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "이메일 주소가 잘못되었습니다."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "이 앱에서 지원하지 않는 계정 유형입니다."; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "계정이 이미 있음"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "%@을(를) 이미 사용하고 있습니다. 계속하려면 %@(으)로 로그인하세요."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "로그인"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "비밀번호를 입력하세요."; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "비밀번호는 비워둘 수 없습니다."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "입력한 이메일과 비밀번호가 일치하지 않습니다."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "이메일 주소가 기존 계정과 일치하지 않습니다."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "사용 중지된 계정의 이메일 주소입니다."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "비밀번호 입력 오류 횟수를 초과했습니다. 잠시 후에 다시 시도해 주세요."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "%@에 대한 제공업체를 찾지 못했습니다."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "이메일이 일치하지 않습니다."; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "비밀번호 복구"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "비밀번호 재설정 방법을 안내하는 이메일을 보내 드립니다."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "이메일 확인"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "%@(으)로 발송된 이메일의 안내에 따라 비밀번호를 복구하세요."; - -/* Title for sign up screen. */ -"SignUpTitle" = "계정 만들기"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "이름 및 성"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "비밀번호 선택"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "서비스 약관"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "개인정보처리방침"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "계속 진행하면 %@ 및 %@에 동의하는 것으로 간주됩니다."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "이미 다른 계정에서 사용 중인 이메일 주소입니다."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "안전한 비밀번호는 6자 이상이어야 하고 문자와 숫자가 조합되어야 합니다."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "IP 주소에서 계정 요청이 너무 많이 발생하고 있습니다. 잠시 후에 다시 시도해 주세요."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "이미 %@을(를) 사용하여 로그인했습니다. 해당 계정의 비밀번호를 입력하세요."; - -/* OK button title. */ -"OK" = "확인"; - -/* Cancel button title. */ -"Cancel" = "취소"; - -/* Back button title. */ -"Back" = "뒤로"; - -/* Next button title. */ -"Next" = "다음"; - -/* Save button title. */ -"Save" = "저장"; - -/* Send button title. */ -"Send" = "보내기"; - -/* Resend button title. */ -"Resend" = "다시 보내기"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "이메일"; - -/* Label next to a password text field. */ -"Password" = "비밀번호"; - -/* Label next to a name text field. */ -"Name" = "이름"; - -/* Alert title Error. */ -"Error" = "오류"; - -/* Alert button title Close. */ -"Close" = "닫기"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "프로필"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "보안"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "연결된 계정"; - -/* Account Settings cell title Name. */ -"AS_Name" = "이름"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "이메일"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "비밀번호 추가"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "비밀번호 변경"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "로그아웃"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "계정 삭제"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "비밀번호 찾기"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "본인 인증"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "계정을 삭제하시겠습니까?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "계정에 연결된 데이터가 모두 삭제되며 삭제를 취소할 수 없습니다. 이 작업을 완료하려면 다시 로그인해야 합니다."; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "계정에 연결된 데이터가 모두 삭제되며 삭제를 취소할 수 없습니다. 계정을 삭제하시겠습니까?"; - -/* Text of Delete action button. */ -"Delete" = "삭제"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "계정 삭제"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "이 작업은 취소할 수 없습니다."; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "연결 해제"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "연결된 계정"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "계정 연결 해제 확인"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "이 계정으로 더 이상 로그인할 수 없습니다."; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "계정 연결 해제"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "계정에 연결된 이메일 주소를 변경하려면 다시 로그인해야 합니다."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "비밀번호를 변경하려면 먼저 현재 비밀번호를 입력해야 합니다."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "이메일 수정"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "이름 수정"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "계정에 비밀번호를 추가하려면 다시 로그인해야 합니다."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "계정의 비밀번호를 변경하려면 다시 로그인해야 합니다."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "비밀번호를 변경하려면 먼저 현재 비밀번호를 입력해야 합니다."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "비밀번호 추가"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "비밀번호 변경"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "이메일"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "%@(으)로 로그인"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "이름을 입력하세요."; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "이메일 입력"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "비밀번호를 입력하세요."; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "새 비밀번호"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "비밀번호 선택"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "로그인하는 데 문제가 있나요?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "이메일 확인"; - -/* Title of successfully signed in label. */ -"SignedIn" = "로그인 완료"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "이메일을 받는 데 문제가 있나요?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "다음의 일반적인 해결방법을 시도해 보세요. \n - 이메일이 스팸으로 표시되었거나 필터링되었는지 확인합니다.\n - 인터넷 연결을 확인합니다.\n - 이메일을 잘못 입력하지 않았는지 확인합니다.\n - 받은편지함 용량이 다 찼거나 받은편지함 설정과 관련된 문제가 있는 것이 아닌지 확인합니다.\n 위의 단계로 문제가 해결되지 않으면 이메일을 다시 전송하실 수 있습니다. 이 경우 이전 이메일의 링크는 비활성화됩니다."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "추가 안내가 포함된 로그인 이메일이 %@(으)로 전송되었습니다. 이메일을 확인하여 로그인을 완료하세요."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "로그인 이메일 전송됨"; diff --git a/FirebaseAuthUI/Sources/Strings/ln.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/ln.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 16bbcd32fbc..00000000000 --- a/FirebaseAuthUI/Sources/Strings/ln.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Bienvenue"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Se connecter avec une adresse e-mail"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Saisissez votre adresse e-mail"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "Cette adresse e-mail est incorrecte."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "Ce type de compte n'est pas compatible avec cette application"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Vous avez déjà un compte"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Vous avez déjà utilisé l'adresse e-mail %@. Connectez-vous avec %@ pour continuer."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Se connecter"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Saisissez votre mot de passe"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "Vous devez indiquer un mot de passe."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "L'adresse e-mail et le mot de passe saisis ne correspondent pas."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "Cette adresse e-mail ne correspond à aucun compte existant."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "Cette adresse e-mail correspond à un compte qui a été désactivé."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Vous avez saisi un mot de passe incorrect un trop grand nombre de fois. Veuillez réessayer dans quelques minutes."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "Impossible de trouver un fournisseur pour %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Les adresses e-mail ne correspondent pas"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Récupérez votre mot de passe"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Les instructions relatives à la réinitialisation de votre mot de passe seront envoyées à cette adresse e-mail."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Consultez votre boîte de réception"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Suivez les instructions envoyées à l'adresse e-mail %@ pour récupérer votre mot de passe."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Créer un compte"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Nom et prénom"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Choisissez un mot de passe"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Conditions d'utilisation"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Règles de confidentialité"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "En continuant, vous acceptez les %@ et les %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "Cette adresse e-mail est déjà utilisée par un autre compte."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Les mots de passe sécurisés comportent au moins six caractères et une combinaison de chiffres et de lettres."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "De trop nombreuses demandes de compte proviennent de votre adresse IP. Veuillez réessayer dans quelques minutes."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Vous avez déjà utilisé l'adresse e-mail %@ pour vous connecter. Saisissez votre mot de passe pour ce compte."; - -/* OK button title. */ -"OK" = "OK"; - -/* Cancel button title. */ -"Cancel" = "Annuler"; - -/* Back button title. */ -"Back" = "Retour"; - -/* Next button title. */ -"Next" = "Suivant"; - -/* Save button title. */ -"Save" = "Enregistrer"; - -/* Send button title. */ -"Send" = "Envoyer"; - -/* Resend button title. */ -"Resend" = "Renvoyer"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "Adresse e-mail"; - -/* Label next to a password text field. */ -"Password" = "Mot de passe"; - -/* Label next to a name text field. */ -"Name" = "Nom"; - -/* Alert title Error. */ -"Error" = "Erreur"; - -/* Alert button title Close. */ -"Close" = "Fermer"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Profil"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Sécurité"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Comptes associés"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Nom"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "Adresse e-mail"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Ajouter un mot de passe"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Modifier le mot de passe"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Se déconnecter"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Supprimer le compte"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "Mot de passe oublié"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Confirmez qu'il s'agit bien de vous"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "Supprimer le compte ?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Cette action effacera toutes les données associées à votre compte de façon irréversible. Vous devrez vous reconnecter pour finaliser cette opération."; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Cette action effacera toutes les données associées à votre compte de façon irréversible. Voulez-vous vraiment supprimer votre compte ?"; - -/* Text of Delete action button. */ -"Delete" = "Supprimer"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Supprimer le compte"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Cette action est irréversible"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Dissocier"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Compte associé"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "Dissocier le compte ?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Vous ne pourrez plus utiliser votre compte pour vous connecter"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Dissocier le compte"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Pour modifier l'adresse e-mail associée à votre compte, vous devrez vous reconnecter."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Pour modifier votre mot de passe, vous devez d'abord saisir votre mot de passe actuel."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Modifier l'adresse e-mail"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Modifier le nom"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Vous devrez vous reconnecter pour ajouter un mot de passe à votre compte."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Vous devrez vous reconnecter pour modifier le mot de passe de votre compte."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Pour modifier votre mot de passe, vous devez d'abord saisir votre mot de passe actuel."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Ajouter un mot de passe"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Modifier le mot de passe"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "Adresse e-mail"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Se connecter avec %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Saisissez votre nom"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Saisissez votre adresse e-mail"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Saisissez votre mot de passe"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Nouveau mot de passe"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Choisissez un mot de passe"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "Vous ne parvenez pas à vous connecter ?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Confirmez votre adresse e-mail"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Connecté"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "Vous n'avez pas reçu l'e-mail ?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Essayez les solutions courantes suivantes : \n - Vérifiez que l'e-mail n'a pas été filtré ni marqué comme spam.\n - Vérifiez votre connexion Internet.\n - Vérifiez que votre adresse e-mail est correcte.\n - Vérifiez que votre boîte de réception n'est pas pleine et que les paramètres sont correctement définis.\n Si les étapes décrites ci-dessus n'ont pas résolu le problème, vous pouvez renvoyer l'e-mail. Sachez que le lien du premier e-mail sera alors désactivé."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "Un e-mail de connexion avec des instructions supplémentaires a été envoyé à %@. Consultez cet e-mail pour vous connecter."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "E-mail de connexion envoyé"; diff --git a/FirebaseAuthUI/Sources/Strings/lt.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/lt.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 0724a9fbf52..00000000000 --- a/FirebaseAuthUI/Sources/Strings/lt.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Sveiki!"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Prisijungti nurodant el. paštą"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Įveskite el. paštą"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "Šis el. paštas netinkamas."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "Ši programa nepalaiko šio paskyros tipo"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Jūs jau turite paskyrą"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Jau panaudojote %@. Jei norite tęsti, prisijunkite per „%@“."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Prisijungti"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Įveskite slaptažodį"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "Slaptažodžio laukas negali būti tuščias."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "Įvestas slaptažodis neatitinka el. pašto adreso."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "Šis el. pašto adresas neatitinka esamos paskyros."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "Šis el. pašto adresas yra išjungtos paskyros."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Įvedėte netinkamą slaptažodį per daug kartų. Po kelių minučių bandykite dar kartą."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "Nepavyko rasti „%@“ teikėjo."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "El. paštai nesutampa"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Atkurti slaptažodį"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Gaukite instrukcijas su nurodymais, kaip pakeisti slaptažodį, šiuo el. paštu."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Patikrinkite el. paštą"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Vadovaudamiesi el. pašto adresu %@ išsiųstais nurodymais atkurkite slaptažodį."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Sukurti paskyrą"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Vardas ir pavardė"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Pasirinkite slaptažodį"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Paslaugų teikimo sąlygomis"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Privatumo politika"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Tęsdami nurodote, kad sutinkate su %@ ir %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "Šis el. paštas jau naudojamas kitoje paskyroje."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Sudėtingą slaptažodį sudaro bent 6 simboliai ir raidžių bei skaičių derinys."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Iš jūsų IP adreso siunčiama per daug paskyros užklausų. Bandykite dar kartą po kelių minučių."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Jūs jau prisijungėte naudodami %@. Įveskite tos paskyros slaptažodį."; - -/* OK button title. */ -"OK" = "Gerai"; - -/* Cancel button title. */ -"Cancel" = "Atšaukti"; - -/* Back button title. */ -"Back" = "Atgal"; - -/* Next button title. */ -"Next" = "Kitas"; - -/* Save button title. */ -"Save" = "Išsaugoti"; - -/* Send button title. */ -"Send" = "Siųsti"; - -/* Resend button title. */ -"Resend" = "Siųsti iš naujo"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "El. paštas"; - -/* Label next to a password text field. */ -"Password" = "Slaptažodis"; - -/* Label next to a name text field. */ -"Name" = "Vardas"; - -/* Alert title Error. */ -"Error" = "Klaida"; - -/* Alert button title Close. */ -"Close" = "Uždaryti"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Profilis"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Sauga"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Susietos paskyros"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Vardas"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "El. paštas"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Pridėti slaptažodį"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Keisti slaptažodį"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Atsijungti"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Ištrinti paskyrą"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "Pamiršote slaptažodį?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Patvirtinkite savo tapatybę"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "Ištrinti paskyrą?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Tai atlikus bus ištrinti visi su jūsų paskyra susiję duomenys; šio veiksmo anuliuoti negalima. Norėdami užbaigti šį veiksmą turėsite prisijungti dar kartą."; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Tai atlikus bus ištrinti visi su jūsų paskyra susiję duomenys; šio veiksmo anuliuoti negalima. Ar tikrai norite ištrinti paskyrą?"; - -/* Text of Delete action button. */ -"Delete" = "Ištrinti"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Ištrinti paskyrą"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Šio veiksmo anuliuoti negalima"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Atsieti"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Susieta paskyra"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "Atsieti paskyrą?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Nebegalėsite prisijungti naudodami savo paskyrą"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Atsieti paskyrą"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Norėdami pakeisti el. pašto adresą, susietą su paskyra, turėsite prisijungti dar kartą."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Norėdami pakeisti slaptažodį, pirmiausia turite įvesti dabartinį."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Redaguoti el. pašto adresą"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Redaguoti pavadinimą"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Norėdami prie paskyros pridėti slaptažodį, turite prisijungti dar kartą."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Norėdami pakeisti paskyros slaptažodį, turite prisijungti dar kartą."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Norėdami pakeisti slaptažodį, pirmiausia turite įvesti dabartinį."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Pridėti slaptažodį"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Keisti slaptažodį"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "El. paštas"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Prisijungti per „%@“"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Įveskite vardą"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Įveskite el. paštą"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Įveskite slaptažodį"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Naujas slaptažodis"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Pasirinkite slaptažodį"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "Kyla problemų prisijungiant?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Patvirtinkite el. paštą"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Prisijungta."; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "Negaunate el. laiškų?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Išbandykite šiuos dažnai kylančių problemų sprendimo būdus: \n – patikrinkite, ar el. laiškas nebuvo pažymėtas kaip šlamštas arba filtruotas;\n – patikrinkite interneto ryšį;\n – patikrinkite, ar nurodėte tikslų el. pašto adresą;\n – patikrinkite, ar gautiesiems skirta saugyklos vieta nepasibaigė arba kitas su gautųjų nustatymais susijusias problemas.\n Jei ankstesni veiksmai nebuvo naudingi, galite iš naujo išsiųsti el. laišką. Atkreipkite dėmesį, kad šiuo veiksmu bus išaktyvinta ankstesniame el. laiške pateikta nuoroda."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "Prisijungimo el. laiškas su papildomomis instrukcijomis išsiųstas adresu %@. Patikrinkite el. paštą, kad užbaigtumėte prisijungimą."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Prisijungimo el. laiškas išsiųstas"; diff --git a/FirebaseAuthUI/Sources/Strings/lv.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/lv.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 98cf5141702..00000000000 --- a/FirebaseAuthUI/Sources/Strings/lv.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Laipni lūdzam!"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Pierakstīties ar e-pasta adresi"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Ievadiet e-pastu"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "E-pasta adrese nav pareiza."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "Šī lietotne neatbalsta šāda veida kontu"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Jums jau ir konts"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Jūs jau esat izmantojis e-pasta adresi %@. Pierakstieties ar %@, lai turpinātu."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Pierakstīties"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Ievadiet savu paroli"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "Paroles lauks nedrīkst būt tukšs."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "Ievadītā e-pasta adrese un parole neatbilst."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "E-pasta adrese neatbilst esošam kontam."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "Šī ir atspējota konta e-pasta adrese."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Esat pārāk daudz reižu ievadījis nepareizu paroli. Lūdzu, mēģiniet vēlreiz pēc dažām minūtēm."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "Nevar atrast %@ nodrošinātāju."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "E-pasta adreses nesakrīt"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Paroles atgūšana"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Saņemiet uz šo e-pasta adresi nosūtītus norādījumus ar skaidrojumu par to, kā atiestatīt paroli."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Pārbaudiet savu e-pastu"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Izpildiet uz e-pasta adresi %@ nosūtītos norādījumus, lai atgūtu paroli."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Izveidot kontu"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Vārds un uzvārds"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Izvēlieties paroli"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Pakalpojumu sniegšanas noteikumi"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Konfidencialitātes politika"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Turpinot jūs norādāt, ka piekrītat šādiem dokumentiem: %@ un %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "Šī e-pasta adrese jau tiek izmantota citam kontam."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Drošām parolēm ir vismaz 6 rakstzīmes, un tajās ir burtu un ciparu kombinācija."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Pārāk daudz kontu pieprasījumu ir nosūtīti no jūsu IP adreses. Pēc dažām minūtēm mēģiniet vēlreiz."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Esat jau izmantojis e-pasta adresi %@, lai pierakstītos. Ievadiet šī konta paroli."; - -/* OK button title. */ -"OK" = "Labi"; - -/* Cancel button title. */ -"Cancel" = "Atcelt"; - -/* Back button title. */ -"Back" = "Atpakaļ"; - -/* Next button title. */ -"Next" = "Tālāk"; - -/* Save button title. */ -"Save" = "Saglabāt"; - -/* Send button title. */ -"Send" = "Sūtīt"; - -/* Resend button title. */ -"Resend" = "Sūtīt vēlreiz"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "E-pasts"; - -/* Label next to a password text field. */ -"Password" = "Parole"; - -/* Label next to a name text field. */ -"Name" = "Vārds"; - -/* Alert title Error. */ -"Error" = "Kļūda"; - -/* Alert button title Close. */ -"Close" = "Aizvērt"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Profils"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Drošība"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Saistītie konti"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Vārds"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "E-pasts"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Paroles pievienošana"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Paroles maiņa"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Izrakstīšanās"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Konta dzēšana"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "Vai aizmirsāt paroli?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Verificējiet savu identitāti"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "Vai izdzēst kontu?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Veicot šo darbību, tiks dzēsti visi ar kontu saistītie dati, un to nevarēs atsaukt. Lai veiktu šo darbību, ir vēlreiz jāpierakstās"; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Veicot šo darbību, tiks dzēsti visi ar kontu saistītie dati, un to nevarēs atsaukt. Vai tiešām vēlaties dzēst šo kontu?"; - -/* Text of Delete action button. */ -"Delete" = "Dzēst"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Konta dzēšana"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Šo darbību nevar atsaukt"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Atsaistīt"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Saistīts konts"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "Vai atsaistīt kontu?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Jūs vairs nevarēsit pierakstīties, izmantojot savu kontu"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Konta atsaistīšana"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Lai mainītu ar kontu saistīto e-pasta adresi, būs vēlreiz jāpierakstās."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Lai mainītu paroli, vispirms ir jāievada pašreizējā parole."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "E-pasta rediģēšana"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Nosaukuma rediģēšana"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Lai pievienotu kontam paroli, būs vēlreiz jāpierakstās."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Lai mainītu konta paroli, būs vēlreiz jāpierakstās."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Lai mainītu paroli, vispirms ir jāievada pašreizējā parole."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Paroles pievienošana"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Paroles maiņa"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "E-pasts"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Pierakstīties ar %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Ievadiet savu vārdu"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Ievadiet e-pastu"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Ievadiet savu paroli."; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Jauna parole"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Izvēlieties paroli"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "Vai jums ir problēmas ar pierakstīšanos?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Apstipriniet e-pasta adresi"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Esat pierakstījies."; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "Vai jums ir problēmas ar e-pasta ziņojumu saņemšanu?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Izmēģiniet tālāk norādītās tipiskās problēmu novēršanas iespējas. \n - Pārbaudiet, vai e-pasta ziņojums nav atzīmēts kā mēstule vai nav filtrēts.\n - Pārbaudiet interneta savienojumu.\n - Pārbaudiet, vai e-pasta adrese ir pareizi uzrakstīta.\n - Pārbaudiet, vai jūsu iesūtnes krātuve nav beigusies vai nav citu ar iesūtnes iestatījumiem saistītu problēmu.\n Ja iepriekš minētās darbības nepalīdzēja, varat atkārtoti nosūtīt e-pasta ziņojumu. Ņemiet vērā: tiks deaktivizēta saite no iepriekšējā e-pasta ziņojuma."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "Pierakstīšanās e-pasta ziņojums ar papildu norādījumiem tika nosūtīts uz e-pasta adresi %@. Pārbaudiet savu e-pastu, lai pabeigtu pierakstīšanos."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Pierakstīšanās e-pasta ziņojums ir nosūtīts"; diff --git a/FirebaseAuthUI/Sources/Strings/mr.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/mr.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 48d9ff2e352..00000000000 --- a/FirebaseAuthUI/Sources/Strings/mr.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "स्वागत आहे"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "ईमेलने साइन इन करा"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "तुमचा ईमेल टाका"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "तो ईमेल अॅड्रेस चुकीचा आहे."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "अशा प्रकारच्या खात्याला हे अ‍ॅप समर्थन करत नाही"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "तुमचे आधीच एक खाते आहे"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "तुम्ही %@ आधीच वापरले आहे. सुरू ठेवण्यासाठी %@ने साइन इन करा."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "साइन इन करा"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "तुमचा पासवर्ड टाका"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "पासवर्ड रिक्त ठेवता येणार नाही"; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "तुम्ही टाकलेला ईमेल आणि पासवर्ड जुळत नाही."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "तो ईमेल अॅड्रेस सध्याच्या खात्याशी जुळत नाही."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "तो ईमेल अॅड्रेस एका बंद करण्यात आलेल्या खात्याचा आहे."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "तुम्ही चुकीचा पासवर्ड बर्‍याचदा वापरला आहे. थोड्या वेळानंतर पुन्हा प्रयत्न करा."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "%@साठी पुरवठादार मिळाला नाही."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "ईमेल जुळत नाहीत"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "पासवर्ड पुन्हा मिळवा"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "तुमचा पासवर्ड रीसेट कसा करावा यासंबंधित या ईमेलवर पाठवलेल्या सूचना मिळवा."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "तुमचा ईमेल तपासा"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "तुमचा पासवर्ड परत मिळवण्यासाठी %@वर पाठवलेल्या सूचनांचे पालन करा."; - -/* Title for sign up screen. */ -"SignUpTitle" = "खाते तयार करा"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "नाव आणि आडनाव"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "पासवर्ड निवडा"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "सेवा अटी"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "गोपनीयता धोरण"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "पुढे सुरू ठेवून, तुम्ही सूचित करता की तुम्ही आमचे %@ आणि %@ स्वीकारता."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "ईमेल अॅड्रेस दुसर्‍या खात्यावर आधीपासून वापरात आहे."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "सशक्त पासवर्डमध्ये किमान 6 वर्ण आणि अंक, अक्षरांचे मिश्रण असते."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "तुमच्या आयपी अ‍ॅड्रेसवरून बर्‍याच खाते विनंत्या येत आहेत. थोड्या वेळात पुन्हा प्रयत्न करा."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "तुम्ही साइन इन करण्यासाठी %@ आधीच वापरला आहे. तुमचा त्या खात्याचा पासवर्ड टाका."; - -/* OK button title. */ -"OK" = "ठीक आहे"; - -/* Cancel button title. */ -"Cancel" = "रद्द करा"; - -/* Back button title. */ -"Back" = "मागील"; - -/* Next button title. */ -"Next" = "पुढील"; - -/* Save button title. */ -"Save" = "सेव्ह करा"; - -/* Send button title. */ -"Send" = "पाठवा"; - -/* Resend button title. */ -"Resend" = "पुन्हा पाठवा"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "ईमेल"; - -/* Label next to a password text field. */ -"Password" = "पासवर्ड"; - -/* Label next to a name text field. */ -"Name" = "नाव"; - -/* Alert title Error. */ -"Error" = "एरर"; - -/* Alert button title Close. */ -"Close" = "बंद करा"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "प्रोफाइल"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "सुरक्षितता"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "लिंक केलेली खाती"; - -/* Account Settings cell title Name. */ -"AS_Name" = "नाव"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "ईमेल"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "पासवर्ड जोडा"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "पासवर्ड बदला"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "साइन आउट करा"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "खाते डिलीट करा"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "पासवर्ड विसरलात?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "हे तुम्हीच असल्याची पडताळणी करा"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "खाते हटवायचे का?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "हे तुमच्या खात्याशी संबंधित सर्व डेटा मिटवेल, आणि ते पुन्हा आहे तसे करता येणार नाही, ही अ‍ॅक्शन पूर्ण करण्यासाठी तुम्हाला पुन्हा साइन इन करावे लागेल"; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "हे तुमच्या खात्याशी संबंधित सर्व डेटा मिटवेल, आणि ते पुन्हा आहे तसे करता येणार नाही. तुम्हाला खरोखर तुमचे खाते डिलीट करायचे आहे का?"; - -/* Text of Delete action button. */ -"Delete" = "डिलीट करा"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "खाते डिलीत करा"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "ही अ‍ॅक्शन आहे तशी केली जाऊ शकत नाही"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "लिंक काढून टाका"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "लिंक केलेले खाते"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "खाते अनलिंक करायचे?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "तुम्ही यापुढे तुमचे खाते वापरून साइन करू शकणार नाही"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "खाते अनलिंक करा"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "तुमच्या खात्याशी संबंधित असलेला ईमेल अॅड्रेस बदलण्यासाठी तुम्ही पुन्हा साइन इन करणे आवश्यक आहे."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "तुमचा पासवर्ड बदलण्यासाठी आधी तुम्हाला तुमचा सध्याचा पासवर्ड टाकावा लागेल."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "ईमेल एडिट करा"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "नाव एडिट करा"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "तुमच्या खात्यामध्ये पासवर्ड जोडण्यासाठी तुम्हाला पुन्हा साइन इन करावे लागेल."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "तुमच्या खात्याचा पासवर्ड बदलण्यासाठी तुम्हाला पुन्हा साइन इन करावे लागेल."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "तुमचा पासवर्ड बदलण्यासाठी आधी तुम्हाला तुमचा सध्याचा पासवर्ड टाकावा लागेल."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "पासवर्ड जोडा"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "पासवर्ड बदला"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "ईमेल"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "%@ने साइन इन करा"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "तुमचे नाव टाका"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "तुमचा ईमेल टाका"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "तुमचा पासवर्ड टाका"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "नवीन पासवर्ड"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "पासवर्ड निवडा"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "साइन इन करताना समस्या येत आहे का?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "ईमेलची खात्री करा"; - -/* Title of successfully signed in label. */ -"SignedIn" = "साइन इन केले!"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "ईमेल मिळवण्यात समस्या येत आहे?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "ही सामान्य निराकरणे करून पाहा: \n- ईमेलला स्पॅम किंवा फिल्टर केलेला म्हणून चिन्हाकिंत केला असल्यास तपासा.\n - तुमचे इंटरनेट कनेक्शन तपासा.\n - तुम्ही तुमच्या ईमेलचे चुकीचे शब्दलेखन केले आहे का ते तपासा.\n - तुमच्या इनबॉक्सची जागा संपली आहे का किंवा अन्य इनबॉक्स सेटिंग्ज संबंधित समस्या आहेत का हे तपासा.\n वरील पायर्‍या वापरून उपयोग झाला नसल्यास, तुम्ही ईमेल पुन्हा पाठवू शकता. लक्षात ठेवा की, यामुळे जुन्या ईमेलमधील लिंक निष्क्रिय केली जाईल."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "अतिरिक्त सूचना असलेला साइन इन ईमेल %@ ला पाठवला होता. साइन इन पूर्ण करण्यासाठी तुमचा ईमेल तपासा."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "साइन इन ईमेल पाठवला"; diff --git a/FirebaseAuthUI/Sources/Strings/ms.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/ms.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 82bac0ba26d..00000000000 --- a/FirebaseAuthUI/Sources/Strings/ms.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Selamat datang"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Log masuk dengan e-mel"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Masukkan e-mel anda"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "Alamat e-mel tersebut tidak betul."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "Akaun jenis ini tidak disokong oleh apl ini"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Anda sudah mempunyai akaun"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Anda sudah menggunakan %@. Log masuk dengan %@ untuk teruskan."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Log masuk"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Masukkan kata laluan anda"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "Kata laluan tidak boleh kosong."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "E-mel dan kata laluan yang anda masukkan tidak sepadan."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "Alamat e-mel tersebut tidak sepadan dengan akaun sedia ada."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "Alamat e-mel tersebut digunakan untuk akaun yang sudah dilumpuhkan."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Anda terlalu kerap memasukkan kata laluan yang salah. Cuba lagi dalam masa beberapa minit."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "Tidak dapat mencari pembekal untuk %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "E-mel tidak sepadan"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Pulihkan kata laluan"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Dapatkan arahan pada e-mel ini untuk mengetahui cara menetapkan semula kata laluan anda."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Semak e-mel anda"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Ikut arahan yang dihantar ke %@ untuk memulihkan kata laluan anda."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Buat akaun"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Nama pertama & keluarga"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Pilih kata laluan"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Syarat Perkhidmatan"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Dasar Privasi"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Dengan meneruskan, anda menyatakan bahawa anda menerima %@ dan %@ kami."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "Alamat e-mel tersebut sudah digunakan oleh akaun lain."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Kata laluan yang kukuh mengandungi sekurang-kurangnya 6 aksara dan gabungan huruf dengan nombor."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Terlalu banyak permintaan akaun daripada alamat IP anda. Cuba lagi dalam masa beberapa minit."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Anda sudah menggunakan %@ untuk log masuk. Masukkan kata laluan anda untuk akaun tersebut."; - -/* OK button title. */ -"OK" = "OK"; - -/* Cancel button title. */ -"Cancel" = "Batal"; - -/* Back button title. */ -"Back" = "Kembali"; - -/* Next button title. */ -"Next" = "Seterusnya"; - -/* Save button title. */ -"Save" = "Simpan"; - -/* Send button title. */ -"Send" = "Hantar"; - -/* Resend button title. */ -"Resend" = "Hantar semula"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "E-mel"; - -/* Label next to a password text field. */ -"Password" = "Kata Laluan"; - -/* Label next to a name text field. */ -"Name" = "Nama"; - -/* Alert title Error. */ -"Error" = "Ralat"; - -/* Alert button title Close. */ -"Close" = "Tutup"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Profil"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Keselamatan"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Akaun Terpaut"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Nama"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "E-mel"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Tambahkan kata laluan"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Tukar kata laluan"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Log Keluar"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Padamkan Akaun"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "Terlupa kata laluan?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Sahkan identiti anda"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "Padamkan Akaun?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Tindakan ini akan memadamkan semua data yang dikaitkan dengan akaun anda dan tidak boleh dibuat asal. Anda perlu log masuk sekali lagi untuk melengkapkan tindakan ini."; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Tindakan ini akan memadamkan semua data yang dikaitkan dengan akaun anda dan tidak boleh dibuat asal. Adakah anda pasti anda mahu memadamkan akaun anda?"; - -/* Text of Delete action button. */ -"Delete" = "Padam"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Padamkan akaun"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Tindakan ini tidak boleh dibuat asal"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Nyahpaut"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Akaun terpaut"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "Nyahpaut akaun?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Anda tidak boleh log masuk menggunakan akaun anda lagi"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Nyahpaut akaun"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Untuk menukar alamat e-mel yang dikaitkan dengan akaun anda, log masuk sekali lagi."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Untuk menukar kata laluan anda, masukkan kata laluan semasa terlebih dahulu."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Edit e-mel"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Edit nama"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Untuk menambahkan kata laluan pada akaun anda, log masuk sekali lagi."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Untuk menukar kata laluan akaun anda, log masuk sekali lagi."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Untuk menukar kata laluan anda, masukkan kata laluan semasa terlebih dahulu."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Tambahkan kata laluan"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Tukar kata laluan"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "E-mel"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Log masuk dengan %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Masukkan nama anda"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Masukkan e-mel anda"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Masukkan kata laluan anda"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Kata laluan baharu"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Pilih kata laluan"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "Menghadapi masalah log masuk?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Sahkan E-mel"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Dilog masuk!"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "Tidak menerima e-mel?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Cuba pembetulan lazim berikut: \n - Pastikan e-mel tidak ditandakan sebagai spam atau ditapis.\n - Semak sambungan Internet anda.\n - Pastikan e-mel anda dieja dengan betul.\n - Pastikan peti masuk anda tidak kehabisan ruang dan tiada isu berkaitan tetapan peti masuk.\n Jika langkah di atas tidak boleh menyelesaikan isu tersebut, anda boleh menghantar semula e-mel. Sila ambil perhatian bahawa tindakan ini akan menyahaktifkan pautan dalam e-mel sebelumnya."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "E-mel log masuk yang mengandungi arahan tambahan telah dihantar ke %@. Semak e-mel anda untuk melengkapkan log masuk."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "E-mel log masuk Dihantar"; diff --git a/FirebaseAuthUI/Sources/Strings/nb.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/nb.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 662b6f7404c..00000000000 --- a/FirebaseAuthUI/Sources/Strings/nb.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Velkommen"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Logg på med e-postadresse"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Oppgi e-postadressen din"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "E-postadressen er ikke riktig."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "Denne kontotypen støttes ikke i denne appen"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Du har allerede en konto"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Du har allerede brukt %@. Logg på med %@ for å fortsette."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Logg på"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Oppgi passordet ditt"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "Du må oppgi et passord."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "E-postadressen og passordet du har angitt, samsvarer ikke."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "E-postadressen samsvarer ikke med en eksisterende konto."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "E-postadressen er for en konto som er deaktivert."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Du har angitt feil passord for mange ganger. Prøv igjen om noen minutter."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "Finner ikke leverandøren for %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "E-postadressene samsvarer ikke"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Gjenopprett passordet"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Få instruksjoner sendt til denne e-postadressen for hvordan du tilbakestiller passordet ditt."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Sjekk e-posten din"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Følg veiledningen som er sendt til %@, for å gjenopprette passordet ditt."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Opprett en konto"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Fornavn og etternavn"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Velg passord"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "vilkårene"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Personvernregler"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Ved å fortsette godtar du %@ og %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "E-postadressen brukes allerede av en annen konto."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Sterke passord består av minst seks tegn og en blanding av bokstaver og tall."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Det kommer for mange kontoforespørsler fra IP-adressen din. Prøv igjen om noen minutter."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Du har allerede brukt %@ for å logge på. Oppgi passordet ditt for den kontoen."; - -/* OK button title. */ -"OK" = "OK"; - -/* Cancel button title. */ -"Cancel" = "Avbryt"; - -/* Back button title. */ -"Back" = "Tilbake"; - -/* Next button title. */ -"Next" = "Neste"; - -/* Save button title. */ -"Save" = "Lagre"; - -/* Send button title. */ -"Send" = "Send"; - -/* Resend button title. */ -"Resend" = "Send på nytt"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "E-post"; - -/* Label next to a password text field. */ -"Password" = "Passord"; - -/* Label next to a name text field. */ -"Name" = "Navn"; - -/* Alert title Error. */ -"Error" = "Feil"; - -/* Alert button title Close. */ -"Close" = "Lukk"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Profil"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Sikkerhet"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Tilknyttede kontoer"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Navn"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "E-post"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Legg til passord"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Bytt passord"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Logg av"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Slett kontoen"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "Har du glemt passordet?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Bekreft identiteten din"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "Vil du slette kontoen?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Alle data som er tilknyttet kontoen din, blir slettet, og handlingen kan ikke angres. Du må logge på igjen for å fullføre denne handlingen"; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Alle data som er tilknyttet kontoen din, blir slettet, og handlingen kan ikke angres. Er du sikker på at du vil slette kontoen din?"; - -/* Text of Delete action button. */ -"Delete" = "Slett"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Slett kontoen"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Denne handlingen kan ikke angres"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Fjern tilknytningen"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Tilknyttet konto"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "Vil du fjerne tilknytningen til kontoen?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Du kommer ikke lenger til å kunne logge på med kontoen din"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Fjern tilknytningen til kontoen"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Du må logge på igjen for å endre e-postadressen som er knyttet til kontoen din."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "For å endre passordet ditt må du først oppgi det eksisterende passordet."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Endre e-postadressen"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Endre navnet"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Du må logge på igjen for å legge til passordet i kontoen din."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Du må logge på igjen for å endre til passordet for kontoen din."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "For å endre passordet ditt må du først oppgi det eksisterende passordet."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Legg til passord"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Bytt passord"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "E-post"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Logg på med %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Oppgi navnet ditt"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Oppgi e-postadressen din"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Oppgi passordet ditt"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Nytt passord"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Velg passord"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "Har du problemer med å logge på?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Bekreft e-postadressen"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Pålogget."; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "Problemer med å motta e-post?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Prøv disse vanlige løsningene: \n — Sjekk om e-posten ble merket som søppelpost eller filtrert bort.\n — Sjekk internettilkoblingen din.\n — Kontrollér at du ikke har skrevet e-postadressen din feil.\n — Kontrollér at innboksen din ikke er full, og se etter andre problemer knyttet til innboksinnstillingene.\n — Hvis trinnene ovenfor ikke bidro til å løse problemet, kan du sende e-posten på nytt. Vær oppmerksom på at dette deaktiverer linken i den forrige e-posten."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "En påloggings-e-post med ytterligere instruksjoner er sendt til %@. Sjekk e-posten din for å fullføre påloggingen."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Påloggings-e-post er sendt"; diff --git a/FirebaseAuthUI/Sources/Strings/nl.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/nl.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 873a407db3e..00000000000 --- a/FirebaseAuthUI/Sources/Strings/nl.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Welkom"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Inloggen met e-mailadres"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Voer uw e-mailadres in"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "Dit e-mailadres is niet juist."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "Dit accounttype wordt niet ondersteund door deze app"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "U heeft al een account"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "U heeft %@ al gebruikt. Log in met %@ om verder te gaan."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Inloggen"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Voer uw wachtwoord in"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "Wachtwoord mag niet leeg zijn."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "Het ingevoerde e-mailadres en wachtwoord komen niet overeen."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "Dit e-mailadres komt niet overeen met een bestaand account."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "Dit e-mailadres hoort bij een uitgeschakeld account."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "U heeft te vaak een fout wachtwoord ingevoerd. Probeer het over enkele minuten opnieuw."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "Kan de provider niet vinden voor %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "E-mailadressen komen niet overeen"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Wachtwoord herstellen"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Er wordt een e-mail naar dit adres verzonden met instructies om uw wachtwoord te herstellen."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Controleer uw inbox"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Volg de instructies die we naar %@ hebben verzonden om uw wachtwoord te herstellen."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Account maken"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Voor- en achternaam"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Wachtwoord kiezen"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Servicevoorwaarden"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Privacybeleid"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Door verder te gaan, geeft u aan dat u onze %@ en ons %@ accepteert."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "Dit e-mailadres wordt al gebruikt door een ander account."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Sterke wachtwoorden bevatten ten minste zes tekens en een combinatie van letters en cijfers."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Er komen te veel accountaanvragen van uw IP-adres. Probeer het over enkele minuten opnieuw."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "U heeft al ingelogd met %@. Voer uw wachtwoord in voor dit account."; - -/* OK button title. */ -"OK" = "OK"; - -/* Cancel button title. */ -"Cancel" = "Annuleren"; - -/* Back button title. */ -"Back" = "Terug"; - -/* Next button title. */ -"Next" = "Volgende"; - -/* Save button title. */ -"Save" = "Opslaan"; - -/* Send button title. */ -"Send" = "Verzenden"; - -/* Resend button title. */ -"Resend" = "Opnieuw verzenden"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "E-mail"; - -/* Label next to a password text field. */ -"Password" = "Wachtwoord"; - -/* Label next to a name text field. */ -"Name" = "Naam"; - -/* Alert title Error. */ -"Error" = "Fout"; - -/* Alert button title Close. */ -"Close" = "Sluiten"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Profiel"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Beveiliging"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Gelinkte accounts"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Naam"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "E-mail"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Wachtwoord toevoegen"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Wachtwoord wijzigen"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Uitloggen"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Account verwijderen"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "Wachtwoord vergeten?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Bevestig dat u het bent"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "Account verwijderen?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Alle gegevens die aan uw account zijn gekoppeld, worden gewist. Dit kan niet ongedaan worden gemaakt. U moet opnieuw inloggen om deze actie te voltooien."; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Alle gegevens die aan uw account zijn gekoppeld, worden gewist. Dit kan niet ongedaan worden gemaakt. Weet u zeker dat u uw account wilt verwijderen?"; - -/* Text of Delete action button. */ -"Delete" = "Verwijderen"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Account verwijderen"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Deze actie kan niet ongedaan worden gemaakt."; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Link verwijderen"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Gelinkt account"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "Link met account verwijderen?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "U kunt niet meer inloggen met uw account"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Link met account verwijderen"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Als u het e-mailadres wilt wijzigen dat is gekoppeld aan uw account, moet u opnieuw inloggen."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Om uw wachtwoord te veranderen, moet u eerst uw huidige wachtwoord invoeren."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "E-mailadres bewerken"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Naam bewerken"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Om een wachtwoord toe te voegen aan uw account, moet u opnieuw inloggen."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Om het wachtwoord van uw account te veranderen, moet u opnieuw inloggen."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Om uw wachtwoord te veranderen, moet u eerst uw huidige wachtwoord invoeren."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Wachtwoord toevoegen"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Wachtwoord wijzigen"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "E-mail"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Inloggen met %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Voer uw naam in"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Voer uw e-mailadres in"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Voer uw wachtwoord in"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Nieuw wachtwoord"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Wachtwoord kiezen"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "Problemen met inloggen?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "E-mailadres bevestigen"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Ingelogd"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "Ontvangt u e-mails niet?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Probeer deze algemene oplossingen: \n - Controleer of de e-mail als spam is gemarkeerd of is weggefilterd.\n - Controleer uw internetverbinding.\n - Controleer of u uw e-mailadres juist heeft gespeld.\n - Controleer of er voldoende ruimte in uw inbox is en of er geen andere problemen met inboxinstellingen zijn.\n Als de bovenstaande stappen geen uitkomst bieden, kunt u de e-mail opnieuw verzenden. Hiermee wordt de link in de eerdere e-mail gedeactiveerd."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "Er is een inlogmail met aanvullende instructies verzonden naar %@. Controleer uw inbox om het inlogproces te voltooien."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Inlogmail verzonden"; diff --git a/FirebaseAuthUI/Sources/Strings/nn-NO.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/nn-NO.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 662b6f7404c..00000000000 --- a/FirebaseAuthUI/Sources/Strings/nn-NO.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Velkommen"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Logg på med e-postadresse"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Oppgi e-postadressen din"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "E-postadressen er ikke riktig."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "Denne kontotypen støttes ikke i denne appen"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Du har allerede en konto"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Du har allerede brukt %@. Logg på med %@ for å fortsette."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Logg på"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Oppgi passordet ditt"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "Du må oppgi et passord."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "E-postadressen og passordet du har angitt, samsvarer ikke."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "E-postadressen samsvarer ikke med en eksisterende konto."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "E-postadressen er for en konto som er deaktivert."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Du har angitt feil passord for mange ganger. Prøv igjen om noen minutter."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "Finner ikke leverandøren for %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "E-postadressene samsvarer ikke"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Gjenopprett passordet"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Få instruksjoner sendt til denne e-postadressen for hvordan du tilbakestiller passordet ditt."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Sjekk e-posten din"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Følg veiledningen som er sendt til %@, for å gjenopprette passordet ditt."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Opprett en konto"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Fornavn og etternavn"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Velg passord"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "vilkårene"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Personvernregler"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Ved å fortsette godtar du %@ og %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "E-postadressen brukes allerede av en annen konto."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Sterke passord består av minst seks tegn og en blanding av bokstaver og tall."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Det kommer for mange kontoforespørsler fra IP-adressen din. Prøv igjen om noen minutter."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Du har allerede brukt %@ for å logge på. Oppgi passordet ditt for den kontoen."; - -/* OK button title. */ -"OK" = "OK"; - -/* Cancel button title. */ -"Cancel" = "Avbryt"; - -/* Back button title. */ -"Back" = "Tilbake"; - -/* Next button title. */ -"Next" = "Neste"; - -/* Save button title. */ -"Save" = "Lagre"; - -/* Send button title. */ -"Send" = "Send"; - -/* Resend button title. */ -"Resend" = "Send på nytt"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "E-post"; - -/* Label next to a password text field. */ -"Password" = "Passord"; - -/* Label next to a name text field. */ -"Name" = "Navn"; - -/* Alert title Error. */ -"Error" = "Feil"; - -/* Alert button title Close. */ -"Close" = "Lukk"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Profil"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Sikkerhet"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Tilknyttede kontoer"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Navn"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "E-post"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Legg til passord"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Bytt passord"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Logg av"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Slett kontoen"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "Har du glemt passordet?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Bekreft identiteten din"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "Vil du slette kontoen?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Alle data som er tilknyttet kontoen din, blir slettet, og handlingen kan ikke angres. Du må logge på igjen for å fullføre denne handlingen"; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Alle data som er tilknyttet kontoen din, blir slettet, og handlingen kan ikke angres. Er du sikker på at du vil slette kontoen din?"; - -/* Text of Delete action button. */ -"Delete" = "Slett"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Slett kontoen"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Denne handlingen kan ikke angres"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Fjern tilknytningen"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Tilknyttet konto"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "Vil du fjerne tilknytningen til kontoen?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Du kommer ikke lenger til å kunne logge på med kontoen din"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Fjern tilknytningen til kontoen"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Du må logge på igjen for å endre e-postadressen som er knyttet til kontoen din."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "For å endre passordet ditt må du først oppgi det eksisterende passordet."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Endre e-postadressen"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Endre navnet"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Du må logge på igjen for å legge til passordet i kontoen din."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Du må logge på igjen for å endre til passordet for kontoen din."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "For å endre passordet ditt må du først oppgi det eksisterende passordet."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Legg til passord"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Bytt passord"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "E-post"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Logg på med %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Oppgi navnet ditt"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Oppgi e-postadressen din"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Oppgi passordet ditt"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Nytt passord"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Velg passord"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "Har du problemer med å logge på?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Bekreft e-postadressen"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Pålogget."; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "Problemer med å motta e-post?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Prøv disse vanlige løsningene: \n — Sjekk om e-posten ble merket som søppelpost eller filtrert bort.\n — Sjekk internettilkoblingen din.\n — Kontrollér at du ikke har skrevet e-postadressen din feil.\n — Kontrollér at innboksen din ikke er full, og se etter andre problemer knyttet til innboksinnstillingene.\n — Hvis trinnene ovenfor ikke bidro til å løse problemet, kan du sende e-posten på nytt. Vær oppmerksom på at dette deaktiverer linken i den forrige e-posten."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "En påloggings-e-post med ytterligere instruksjoner er sendt til %@. Sjekk e-posten din for å fullføre påloggingen."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Påloggings-e-post er sendt"; diff --git a/FirebaseAuthUI/Sources/Strings/pl.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/pl.lproj/FirebaseAuthUI.strings deleted file mode 100644 index be8d11d8be9..00000000000 --- a/FirebaseAuthUI/Sources/Strings/pl.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Witamy"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Zaloguj się za pomocą e-maila"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Wpisz swój adres e-mail"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "Nieprawidłowy adres e-mail."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "Konto tego typu nie jest obsługiwane przez tę aplikację"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Masz już konto"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Adres %@ został już przez Ciebie użyty. Aby kontynuować, zaloguj się przez: %@."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Zaloguj się"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Wpisz hasło"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "Pole z hasłem nie może być puste."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "Podany przez Ciebie adres e-mail i hasło nie zgadzają się."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "Nie istnieje konto, do którego pasuje ten adres e-mail."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "To jest adres e-mail konta, które zostało wyłączone."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Zbyt wiele razy podano niepoprawne hasło. Spróbuj jeszcze raz za kilka minut."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "%@ – nie można znaleźć usługi"; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Adresy e-mail są niezgodne"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Odzyskiwanie hasła"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Na ten adres e-mail zostaną wysłane instrukcje wyjaśniające, jak zresetować hasło."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Sprawdź pocztę"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Aby odzyskać hasło, wykonaj instrukcje wysłane na adres %@."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Tworzenie konta"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Imię i nazwisko"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Wybierz hasło"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Warunki korzystania z usługi"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Polityka prywatności"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Kontynuując, potwierdzasz, że akceptujesz te dokumenty: %@ i %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "Adres e-mail jest już używany przez inne konto."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Silne hasło ma co najmniej 6 znaków i jest kombinacją liter oraz cyfr."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Z tego adresu IP wysłano zbyt wiele próśb o utworzenie konta. Spróbuj jeszcze raz za kilka minut."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Adres e-mail %@ był już używany przez Ciebie do logowania. Wpisz hasło tego konta."; - -/* OK button title. */ -"OK" = "OK"; - -/* Cancel button title. */ -"Cancel" = "Anuluj"; - -/* Back button title. */ -"Back" = "Wstecz"; - -/* Next button title. */ -"Next" = "Dalej"; - -/* Save button title. */ -"Save" = "Zapisz"; - -/* Send button title. */ -"Send" = "Wyślij"; - -/* Resend button title. */ -"Resend" = "Wyślij ponownie"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "Adres e-mail"; - -/* Label next to a password text field. */ -"Password" = "Hasło"; - -/* Label next to a name text field. */ -"Name" = "Nazwa"; - -/* Alert title Error. */ -"Error" = "Błąd"; - -/* Alert button title Close. */ -"Close" = "Zamknij"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Profil"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Zabezpieczenia"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Połączone konta"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Nazwa"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "Adres e-mail"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Dodaj hasło"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Zmień hasło"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Wyloguj się"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Usuń konto"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "Nie pamiętasz hasła?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Potwierdź, że to Ty"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "Usunąć konto?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Spowoduje to nieodwracalne usunięcie wszystkich danych powiązanych z Twoim kontem. Aby zakończyć tę czynność, musisz jeszcze raz się zalogować"; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Spowoduje to nieodwracalne usunięcie wszystkich danych powiązanych z Twoim kontem. Czy na pewno chcesz usunąć konto?"; - -/* Text of Delete action button. */ -"Delete" = "Usuń"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Usuwanie konta"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Tej czynności nie będzie można cofnąć"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Odłącz"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Połączone konto"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "Czy odłączyć konto?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Logowanie za pomocą tego konta będzie niemożliwe"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Odłączanie konta"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Aby zmienić adres e-mail powiązany ze swoim kontem, musisz zalogować się jeszcze raz."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Aby zmienić hasło, musisz najpierw wpisać to, którego używasz obecnie."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Edycja adresu e-mail"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Edycja nazwy"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Aby dodać hasło do swojego konta, musisz zalogować się jeszcze raz."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Aby zmienić hasło do swojego konta, musisz zalogować się jeszcze raz."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Aby zmienić hasło, musisz najpierw wpisać to, którego używasz obecnie."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Dodawanie hasła"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Zmiana hasła"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "Adres e-mail"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Zaloguj się przez: %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Wpisz nazwę"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Wpisz adres e-mail"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Wpisz hasło"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Nowe hasło"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Wybierz hasło"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "Masz problem z zalogowaniem się?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Potwierdź adres e-mail"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Zalogowano"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "E-maile nie dotarły?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Wypróbuj standardowe rozwiązania: \n – Sprawdź, czy e-mail nie został oznaczony jako spam lub objęty którymś z filtrów.\n – Sprawdź połączenie z internetem.\n – Sprawdź, czy adres e-mail jest wpisany poprawnie.\n – Sprawdź, czy nie kończy się miejsce w skrzynce odbiorczej oraz czy nie ma innych problemów z ustawieniami skrzynki.\n Jeżeli wykonanie powyższych czynności nie dało żadnych rezultatów, możesz wysłać e-maila jeszcze raz. Link wysłany w poprzedniej wiadomości przestanie być aktywny."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "Na adres %@ wysłaliśmy e-maila umożliwiającego zalogowanie się z dodatkowymi instrukcjami. Sprawdź pocztę, by się zalogować."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "E-mail umożliwiający zalogowanie się został wysłany"; diff --git a/FirebaseAuthUI/Sources/Strings/pt-BR.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/pt-BR.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 2bcf9700747..00000000000 --- a/FirebaseAuthUI/Sources/Strings/pt-BR.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Bem-vindo"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Fazer login com o e-mail"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Digite seu e-mail"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "Endereço de e-mail incorreto."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "Este tipo de conta não é compatível com este app"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Você já tem uma conta"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Você já usou o e-mail %@. Faça login com o %@ para continuar."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Fazer login"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Digite sua senha"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "A senha não pode estar vazia."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "O e-mail e a senha que você digitou não coincidem."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "O endereço de e-mail não corresponde a uma conta existente."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "Esse endereço de e-mail é referente a uma conta que foi desativada."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Você digitou a senha incorretamente várias vezes. Tente novamente em alguns minutos."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "Não foi possível localizar o provedor para %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Os e-mails não coincidem"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Recuperar senha"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Veja como redefinir sua senha nas instruções enviadas para este e-mail."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Verifique seu e-mail"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Siga as instruções enviadas para %@ para recuperar sua senha."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Criar conta"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Nome e sobrenome"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Escolha a senha"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Termos de Serviço"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Política de privacidade"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Ao continuar, você concorda com nossos %@ e a %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "O endereço de e-mail já está sendo usado em outra conta."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Senhas fortes têm pelo menos 6 caracteres e uma combinação de letras e números."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Seu endereço IP está emitindo muitas solicitações de contas. Tente novamente em alguns minutos."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Você já usou %@ para fazer login. Insira sua senha para essa conta."; - -/* OK button title. */ -"OK" = "Ok"; - -/* Cancel button title. */ -"Cancel" = "Cancelar"; - -/* Back button title. */ -"Back" = "Voltar"; - -/* Next button title. */ -"Next" = "Próxima"; - -/* Save button title. */ -"Save" = "Salvar"; - -/* Send button title. */ -"Send" = "Enviar"; - -/* Resend button title. */ -"Resend" = "Reenviar"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "E-mail"; - -/* Label next to a password text field. */ -"Password" = "Senha"; - -/* Label next to a name text field. */ -"Name" = "Nome"; - -/* Alert title Error. */ -"Error" = "Erro"; - -/* Alert button title Close. */ -"Close" = "Fechar"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Perfil"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Segurança"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Contas vinculadas"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Nome"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "E-mail"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Adicionar senha"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Alterar senha"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Sair"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Excluir conta"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "Esqueceu a senha?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Confirmar sua identidade"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "Excluir conta?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Esta ação apagará todos os dados associados à sua conta e não poderá ser desfeita. Faça login novamente para concluir a ação"; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Esta ação apagará todos os dados associados à sua conta e não poderá ser desfeita. Tem certeza que quer excluir sua conta?"; - -/* Text of Delete action button. */ -"Delete" = "Excluir"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Excluir conta"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Não é possível desfazer esta ação"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Desvincular"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Conta desvinculada"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "Desvincular conta?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Você não poderá mais fazer login usando sua conta"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Desvincular conta"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Para alterar o endereço de e-mail associado à sua conta, faça login novamente."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Para alterar sua senha, primeiro insira sua senha atual."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Editar e-mail"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Editar nome"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Para adicionar uma senha à sua conta, faça login novamente."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Para alterar a senha da sua conta, faça login novamente."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Para alterar sua senha, primeiro insira sua senha atual."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Adicionar senha"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Alterar senha"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "E-mail"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Fazer login com o %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Digite seu nome"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Digite seu e-mail"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Digite sua senha"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Nova senha"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Escolha a senha"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "Problemas para fazer login?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Confirme o e-mail"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Conectado!"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "Está com problemas para receber e-mails?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Tente estas soluções comuns: \n - Verifique se o e-mail foi filtrado ou marcado como spam.\n - Verifique sua conexão com a Internet.\n - Verifique se você digitou seu e-mail corretamente.\n - Verifique se você ainda tem espaço na sua caixa de entrada, além de outros problemas relacionados à configuração.\n Se as etapas acima não funcionarem, tente enviar o e-mail novamente. Observe que isso desativará o link no e-mail antigo."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "Um e-mail de login com mais instruções foi enviado para %@. Verifique sua caixa de entrada para concluir o login."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "E-mail de login enviado"; diff --git a/FirebaseAuthUI/Sources/Strings/pt-PT.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/pt-PT.lproj/FirebaseAuthUI.strings deleted file mode 100644 index ea1c3244bd9..00000000000 --- a/FirebaseAuthUI/Sources/Strings/pt-PT.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Bem-vindo"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Iniciar sessão com o email"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Introduza o seu email"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "O endereço de email não está correto."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "O tipo de conta não é suportado por esta aplicação"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Já tem uma conta"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Já utilizou %@. Inicie sessão com %@ para continuar."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Iniciar sessão"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Introduza a palavra-passe"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "O campo da palavra-passe não pode ficar vazio."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "O email e a palavra-passe introduzidos não coincidem."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "O endereço de email introduzido não corresponde a uma conta existente."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "O endereço de email introduzido corresponde a uma conta que foi desativada."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Introduziu uma palavra-passe incorreta demasiadas vezes. Tente novamente dentro de alguns minutos."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "Não é possível encontrar a operadora de %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Os emails não coincidem"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Recuperar a palavra-passe"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Utilize este endereço de email para obter instruções que explicam como repor a palavra-passe."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Verifique o seu email"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Siga as instruções enviadas para %@ para recuperar a palavra-passe."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Criar conta"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Nome próprio e apelido"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Escolha uma palavra-passe"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Termos de Utilização"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Política de Privacidade"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Ao continuar, indica que aceita os %@ e a %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "O endereço de email já está a ser utilizado por outra conta."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Para criar uma palavra-passe forte é necessário utilizar, no mínimo, 6 caracteres e uma combinação de letras e de números."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "O seu endereço de IP enviou demasiados pedidos de conta. Tente novamente dentro de alguns minutos."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Já utilizou %@ para iniciar sessão. Introduza a palavra-passe da conta em questão."; - -/* OK button title. */ -"OK" = "OK"; - -/* Cancel button title. */ -"Cancel" = "Cancelar"; - -/* Back button title. */ -"Back" = "Anterior"; - -/* Next button title. */ -"Next" = "Seguinte"; - -/* Save button title. */ -"Save" = "Guardar"; - -/* Send button title. */ -"Send" = "Enviar"; - -/* Resend button title. */ -"Resend" = "Reenviar"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "Email"; - -/* Label next to a password text field. */ -"Password" = "Palavra-passe"; - -/* Label next to a name text field. */ -"Name" = "Nome"; - -/* Alert title Error. */ -"Error" = "Erro"; - -/* Alert button title Close. */ -"Close" = "Fechar"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Perfil"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Segurança"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Contas associadas"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Nome"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "Email"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Adicionar palavra-passe"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Alterar palavra-passe"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Terminar sessão"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Eliminar conta"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "Esqueceu-se da palavra-passe?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Valide a sua identidade"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "Pretende eliminar a conta?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Esta ação apaga todos os dados associados à sua conta e não pode ser anulada. Inicie sessão novamente para concluir esta ação"; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Esta ação apaga todos os dados associados à sua conta e não pode ser anulada. Tem a certeza de que pretende eliminar a sua conta?"; - -/* Text of Delete action button. */ -"Delete" = "Eliminar"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Eliminar conta"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Não é possível anular esta ação"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Desassociar"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Conta associada"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "Pretende desassociar a conta?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Deixará de poder iniciar sessão com a sua conta"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Desassociar conta"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Para alterar o endereço de email associado à sua conta, é necessário iniciar sessão novamente."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Para alterar a palavra-passe, primeiro tem de introduzir a palavra-passe atual."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Editar email"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Editar nome"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Para adicionar uma palavra-passe à sua conta, tem de iniciar sessão novamente."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Para alterar a palavra-passe da sua conta, tem de iniciar sessão novamente."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Para alterar a palavra-passe, primeiro tem de introduzir a palavra-passe atual."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Adicionar palavra-passe"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Alterar palavra-passe"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "Email"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Iniciar sessão com %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Introduza o seu nome"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Introduza o seu email"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Introduza a palavra-passe"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Nova palavra-passe"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Escolha uma palavra-passe"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "Está com problemas ao iniciar sessão?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Confirme o email"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Com sessão iniciada!"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "Está com problemas para receber emails?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Experimente estas correções comuns: \n – Verifique se o email foi assinalado como spam ou filtrado.\n – Verifique a ligação à Internet.\n – Certifique-se de que não introduziu o email incorretamente.\n – Certifique-se de que a sua caixa de entrada não está a ficar sem espaço disponível nem está com outros problemas relacionados com as definições da caixa de entrada.\n Se os passos acima não resolverem o problema, pode reenviar o email. Tenha em atenção que esta ação desativa o link no email mais antigo."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "Enviámos um email de início de sessão com instruções adicionais para %@. Consulte o seu email para concluir o início de sessão."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Email de início de sessão enviado."; diff --git a/FirebaseAuthUI/Sources/Strings/pt.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/pt.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 2bcf9700747..00000000000 --- a/FirebaseAuthUI/Sources/Strings/pt.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Bem-vindo"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Fazer login com o e-mail"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Digite seu e-mail"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "Endereço de e-mail incorreto."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "Este tipo de conta não é compatível com este app"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Você já tem uma conta"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Você já usou o e-mail %@. Faça login com o %@ para continuar."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Fazer login"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Digite sua senha"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "A senha não pode estar vazia."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "O e-mail e a senha que você digitou não coincidem."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "O endereço de e-mail não corresponde a uma conta existente."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "Esse endereço de e-mail é referente a uma conta que foi desativada."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Você digitou a senha incorretamente várias vezes. Tente novamente em alguns minutos."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "Não foi possível localizar o provedor para %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Os e-mails não coincidem"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Recuperar senha"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Veja como redefinir sua senha nas instruções enviadas para este e-mail."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Verifique seu e-mail"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Siga as instruções enviadas para %@ para recuperar sua senha."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Criar conta"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Nome e sobrenome"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Escolha a senha"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Termos de Serviço"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Política de privacidade"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Ao continuar, você concorda com nossos %@ e a %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "O endereço de e-mail já está sendo usado em outra conta."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Senhas fortes têm pelo menos 6 caracteres e uma combinação de letras e números."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Seu endereço IP está emitindo muitas solicitações de contas. Tente novamente em alguns minutos."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Você já usou %@ para fazer login. Insira sua senha para essa conta."; - -/* OK button title. */ -"OK" = "Ok"; - -/* Cancel button title. */ -"Cancel" = "Cancelar"; - -/* Back button title. */ -"Back" = "Voltar"; - -/* Next button title. */ -"Next" = "Próxima"; - -/* Save button title. */ -"Save" = "Salvar"; - -/* Send button title. */ -"Send" = "Enviar"; - -/* Resend button title. */ -"Resend" = "Reenviar"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "E-mail"; - -/* Label next to a password text field. */ -"Password" = "Senha"; - -/* Label next to a name text field. */ -"Name" = "Nome"; - -/* Alert title Error. */ -"Error" = "Erro"; - -/* Alert button title Close. */ -"Close" = "Fechar"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Perfil"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Segurança"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Contas vinculadas"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Nome"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "E-mail"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Adicionar senha"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Alterar senha"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Sair"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Excluir conta"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "Esqueceu a senha?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Confirmar sua identidade"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "Excluir conta?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Esta ação apagará todos os dados associados à sua conta e não poderá ser desfeita. Faça login novamente para concluir a ação"; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Esta ação apagará todos os dados associados à sua conta e não poderá ser desfeita. Tem certeza que quer excluir sua conta?"; - -/* Text of Delete action button. */ -"Delete" = "Excluir"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Excluir conta"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Não é possível desfazer esta ação"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Desvincular"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Conta desvinculada"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "Desvincular conta?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Você não poderá mais fazer login usando sua conta"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Desvincular conta"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Para alterar o endereço de e-mail associado à sua conta, faça login novamente."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Para alterar sua senha, primeiro insira sua senha atual."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Editar e-mail"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Editar nome"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Para adicionar uma senha à sua conta, faça login novamente."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Para alterar a senha da sua conta, faça login novamente."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Para alterar sua senha, primeiro insira sua senha atual."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Adicionar senha"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Alterar senha"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "E-mail"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Fazer login com o %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Digite seu nome"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Digite seu e-mail"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Digite sua senha"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Nova senha"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Escolha a senha"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "Problemas para fazer login?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Confirme o e-mail"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Conectado!"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "Está com problemas para receber e-mails?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Tente estas soluções comuns: \n - Verifique se o e-mail foi filtrado ou marcado como spam.\n - Verifique sua conexão com a Internet.\n - Verifique se você digitou seu e-mail corretamente.\n - Verifique se você ainda tem espaço na sua caixa de entrada, além de outros problemas relacionados à configuração.\n Se as etapas acima não funcionarem, tente enviar o e-mail novamente. Observe que isso desativará o link no e-mail antigo."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "Um e-mail de login com mais instruções foi enviado para %@. Verifique sua caixa de entrada para concluir o login."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "E-mail de login enviado"; diff --git a/FirebaseAuthUI/Sources/Strings/ro.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/ro.lproj/FirebaseAuthUI.strings deleted file mode 100644 index efb9e8eba20..00000000000 --- a/FirebaseAuthUI/Sources/Strings/ro.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Bun venit"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Conectați-vă cu adresa de e-mail"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Introduceți adresa de e-mail"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "Adresa de e-mail nu este corectă."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "Acest tip de cont nu este acceptat de aplicație"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Aveți deja un cont"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Ați folosit deja %@. Pentru a continua, conectați-vă cu %@."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Conectați-vă"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Introduceți parola"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "Parola trebuie completată."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "Adresa de e-mail și parola pe care le-ați introdus nu se potrivesc."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "Adresa de e-mail nu corespunde unui cont existent."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "Această adresă de e-mail aparține unui cont dezactivat."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Ați introdus de prea multe ori o parolă incorectă. Încercați din nou peste câteva minute."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "Furnizorul pentru %@ nu poate fi găsit."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Adresele de e-mail nu sunt identice"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Recuperați parola"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Primiți instrucțiuni pentru resetarea parolei la această adresă de e-mail."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Verificați căsuța de e-mail"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Urmați instrucțiunile trimise la %@ pentru a vă recupera parola."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Creați un cont"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Prenume și nume de familie"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Alegeți o parolă"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Termeni și condițiile"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Politica de confidențialitate"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Dacă alegeți să continuați, sunteți de acord cu %@ și cu %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "Adresa de e-mail este folosită deja de alt cont."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Parolele puternice au cel puțin 6 caractere și conțin o combinație de litere și cifre."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Au fost create prea multe solicitări de conturi de la această adresă IP. Încercați din nou peste câteva minute."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Ați folosit deja %@ pentru a vă conecta. Introduceți parola acestui cont."; - -/* OK button title. */ -"OK" = "OK"; - -/* Cancel button title. */ -"Cancel" = "Anulați"; - -/* Back button title. */ -"Back" = "Înapoi"; - -/* Next button title. */ -"Next" = "Înainte"; - -/* Save button title. */ -"Save" = "Salvați"; - -/* Send button title. */ -"Send" = "Trimiteți"; - -/* Resend button title. */ -"Resend" = "Retrimiteți"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "Adresă de e-mail"; - -/* Label next to a password text field. */ -"Password" = "Parolă"; - -/* Label next to a name text field. */ -"Name" = "Nume"; - -/* Alert title Error. */ -"Error" = "Eroare"; - -/* Alert button title Close. */ -"Close" = "Închideți"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Profil"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Securitate"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Conturi conectate"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Nume"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "Adresă de e-mail"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Adăugați parola"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Schimbați parola"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Deconectați-vă"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Ștergeți contul"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "Ați uitat parola?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Confirmați-vă identitatea"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "Ștergeți contul?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Toate datele asociate acestui cont vor fi șterse, iar acțiunea nu poate fi anulată. Va trebui să vă conectați din nou pentru a finaliza acțiunea."; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Toate datele asociate acestui cont vor fi șterse, iar acțiunea nu poate fi anulată. Sigur doriți să vă ștergeți contul?"; - -/* Text of Delete action button. */ -"Delete" = "Ștergeți"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Ștergeți contul"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Această acțiune nu poate fi anulată"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Deconectați"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Cont conectat"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "Deconectați contul?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Nu vă veți mai putea conecta folosind contul"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Deconectați contul"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Pentru a schimba adresa de e-mail asociată contului, va trebui să vă conectați din nou."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Pentru a vă schimba parola, trebuie să introduceți parola actuală."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Modificați adresa de e-mail"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Modificați numele"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Pentru a adăuga parola contului, va trebui să vă conectați din nou."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Pentru a schimba parola contului, va trebui să vă conectați din nou."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Pentru a vă schimba parola, trebuie să introduceți parola actuală."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Adăugați parola"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Schimbați parola"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "Adresă de e-mail"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Conectați-vă cu %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Introduceți numele"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Introduceți adresa de e-mail"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Introduceți parola"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Parolă nouă"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Alegeți o parolă"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "Nu reușiți să vă conectați?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Confirmați adresa de e-mail"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Conectat(ă)!"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "Nu primiți e-mailuri?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Încercați aceste soluții frecvent folosite: \n - verificați dacă e-mailul a fost marcat ca spam sau filtrat;\n - verificați conexiunea la internet;\n - verificați dacă ați scris corect adresa de e-mail;\n - verificați dacă aveți spațiu în căsuța de e-mail sau dacă există alte probleme legate de setările căsuței de e-mail.\n Dacă pașii de mai sus nu funcționează, puteți să trimiteți din nou e-mailul. Rețineți că va fi dezactivat linkul din e-mailul anterior."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "Un e-mail de conectare cu instrucțiuni suplimentare a fost trimis la %@. Verificați-vă căsuța de e-mail pentru a finaliza conectarea."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "A fost trimis e-mailul de conectare"; diff --git a/FirebaseAuthUI/Sources/Strings/ru.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/ru.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 5a85070c7a2..00000000000 --- a/FirebaseAuthUI/Sources/Strings/ru.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Добро пожаловать!"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Войти по адресу электронной почты"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Введите свой адрес электронной почты"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "Неверный адрес электронной почты."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "В этом приложении не поддерживается такой тип аккаунта."; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "У вас уже есть аккаунт"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Вы уже использовали адрес %@. Войдите через аккаунт %@."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Войти"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Введите пароль"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "Укажите пароль."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "Неверный адрес эл. почты или пароль."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "Нет аккаунта с таким адресом электронной почты."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "Аккаунт с этим адресом электронной почты отключен."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Вы неправильно ввели пароль слишком много раз. Прежде чем повторить попытку, подождите несколько минут."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "%@: поставщик услуг не найден."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Адреса электронной почты не совпадают."; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Сбор пароля"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "На этот адрес будет отправлено письмо с инструкциями по сбросу пароля."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Проверьте электронную почту"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "На адрес %@ отправлено письмо с инструкциями по сбросу пароля."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Создать аккаунт"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Имя и фамилия"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Выберите пароль"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Условия использования"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Политика конфиденциальности"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Продолжая, вы принимаете два документа. Вот они: %@ и %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "Этот адрес электронной почты уже используется в другом аккаунте."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Пароль должен состоять из букв и цифр и содержать не меньше шести символов."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "С вашего IP-адреса поступает слишком много запросов на создание аккаунта. Повторите попытку через несколько минут."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Вы уже использовали адрес %@. Введите пароль для этого аккаунта."; - -/* OK button title. */ -"OK" = "ОК"; - -/* Cancel button title. */ -"Cancel" = "Отмена"; - -/* Back button title. */ -"Back" = "Назад"; - -/* Next button title. */ -"Next" = "Далее"; - -/* Save button title. */ -"Save" = "Сохранить"; - -/* Send button title. */ -"Send" = "Отправить"; - -/* Resend button title. */ -"Resend" = "Отправить ещё раз"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "Адрес электронной почты"; - -/* Label next to a password text field. */ -"Password" = "Пароль"; - -/* Label next to a name text field. */ -"Name" = "Имя"; - -/* Alert title Error. */ -"Error" = "Ошибка"; - -/* Alert button title Close. */ -"Close" = "Закрыть"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Профиль"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Безопасность"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Связанные аккаунты"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Имя"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "Адрес электронной почты"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Добавить пароль"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Изменить пароль"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Выйти"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Удалить аккаунт"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "Забыли пароль?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Подтвердите, что это вы"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "Удалить аккаунт?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Все данные в нем будут безвозвратно удалены. Чтобы завершить это действие, нужно будет войти в аккаунт ещё раз."; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Все данные в аккаунте будут безвозвратно удалены. Вы уверены, что хотите продолжить?"; - -/* Text of Delete action button. */ -"Delete" = "Удалить"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Удаление аккаунта"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Отменить это действие невозможно."; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Отменить связь"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Связанный аккаунт"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "Отменить связь с аккаунтом?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Вы больше не сможете входить в систему с его помощью."; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Отменить связь с аккаунтом"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Чтобы связать с аккаунтом другой адрес, потребуется повторно войти в систему."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Сначала нужно ввести текущий пароль."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Изменить адрес электронной почты"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Изменить имя"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Чтобы добавить новый пароль, нужно будет войти в аккаунт ещё раз."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Чтобы изменить пароль, нужно будет войти в аккаунт ещё раз."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Сначала нужно ввести текущий пароль."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Добавить пароль"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Изменить пароль"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "Адрес электронной почты"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Войти через аккаунт %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Введите свое имя"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Введите свой адрес электронной почты"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Введите пароль"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Новый пароль"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Выберите пароль"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "Не удается войти в аккаунт?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Подтвердите адрес электронной почты"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Вход выполнен"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "Не получили письмо?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Вот что можно сделать: \n – Поищите письмо в папке со спамом или отфильтрованными сообщениями.\n – Проверьте подключение к Интернету.\n – Убедитесь, что правильно указали свой адрес электронной почты.\n – Проверьте настройки папки со входящими сообщениям и посмотрите, достаточно ли в ней места.\n Если найти письмо не удалось, мы можем отправить его ещё раз. В таком случае ссылка из предыдущего сообщения станет недействительна."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "На адрес электронной почты %@ отправлено письмо с информацией о том, как войти в аккаунт. Изучите его и выполните инструкции."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Письмо отправлено."; diff --git a/FirebaseAuthUI/Sources/Strings/sk.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/sk.lproj/FirebaseAuthUI.strings deleted file mode 100644 index da3c9cc17f4..00000000000 --- a/FirebaseAuthUI/Sources/Strings/sk.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Vitajte"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Prihlásiť sa e-mailom"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Zadajte svoj e-mail"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "Daná e-mailová adresa nie je správna."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "Táto aplikácia nepodporuje tento typ účtu"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Už máte účet"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Už ste použili adresu %@. Ak chcete pokračovať, prihláste sa cez %@."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Prihlásiť sa"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Zadajte svoje heslo"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "Heslo nesmie byť prázdne."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "Zadaný e-mail a heslo sa nezhodujú."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "Daná e-mailová adresa sa nezhoduje s existujúcim účtom."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "Daná e-mailová adresa patrí k účtu, ktorý bol deaktivovaný."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Zadali ste nesprávne heslo príliš veľakrát. Skúste to znova o pár minút."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "Nemožno nájsť poskytovateľa pre službu %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "E-maily sa nezhodujú"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Obnovenie hesla"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Nechajte si na tento e-mail poslať pokyny s vysvetlením, ako obnoviť svoje heslo."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Skontrolujte si e-mail"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Obnovte si heslo podľa pokynov odoslaných na adresu %@."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Vytvoriť účet"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Krstné meno a priezvisko"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Zvoľte si heslo"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Zmluvné podmienky"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Pravidlá ochrany súkromia"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Pokračovaním vyjadrujete súhlas s dokumentmi %@ a %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "E-mailovú adresu už využíva iný účet."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Silné heslá majú aspoň 6 znakov a kombinujú písmena a čísla."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Z vašej adresy IP prichádza príliš veľa žiadostí o účet. Skúste to znova o pár minút."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Na prihlásenie ste už použili e-mailovú adresu %@. Zadajte heslo pre daný účet."; - -/* OK button title. */ -"OK" = "OK"; - -/* Cancel button title. */ -"Cancel" = "Zrušiť"; - -/* Back button title. */ -"Back" = "Späť"; - -/* Next button title. */ -"Next" = "Ďalej"; - -/* Save button title. */ -"Save" = "Uložiť"; - -/* Send button title. */ -"Send" = "Odoslať"; - -/* Resend button title. */ -"Resend" = "Odoslať znova"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "E-mail"; - -/* Label next to a password text field. */ -"Password" = "Heslo"; - -/* Label next to a name text field. */ -"Name" = "Názov"; - -/* Alert title Error. */ -"Error" = "Chyba"; - -/* Alert button title Close. */ -"Close" = "Zatvoriť"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Profil"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Zabezpečenie"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Prepojené účty"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Názov"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "E-mail"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Pridanie hesla"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Zmena hesla"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Odhlásenie"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Odstránenie účtu"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "Zabudli ste heslo?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Overte, že ste to vy"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "Chcete odstrániť účet?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Týmto sa vymažú všetky dáta súvisiace s vaším účtom a túto akciu nie je možné vrátiť späť. Na dokončenie tejto akcie sa budete musieť prihlásiť"; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Týmto sa vymažú všetky dáta súvisiace s vaším účtom a túto akciu nie je možné vrátiť späť. Naozaj chcete odstrániť svoj účet?"; - -/* Text of Delete action button. */ -"Delete" = "Odstrániť"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Odstrániť účet"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Túto akciu nie je možné vrátiť späť"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Odpojiť"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Prepojený účet"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "Chcete odpojiť účet?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Už sa nebudete môcť prihlásiť svojím účtom"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Odpojiť účet"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Ak chcete zmeniť e-mailovú adresu prepojenú s vaším účtom, budete sa musieť znova prihlásiť."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Ak chcete zmeniť heslo, musíte najskôr zadať aktuálne heslo."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Úprava e-mailu"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Úprava názvu"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Ak chcete k účtu pridať heslo, budete sa musieť znova prihlásiť."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Ak chcete zmeniť heslo svojho účtu, budete sa musieť znova prihlásiť."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Ak chcete zmeniť heslo, musíte najskôr zadať aktuálne heslo."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Pridanie hesla"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Zmena hesla"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "E-mail"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Prihlásiť sa cez %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Zadajte svoje meno"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Zadajte svoj e-mail"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Zadajte svoje heslo"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Nové heslo"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Zvoľte si heslo"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "Máte problémy s prihlásením?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Potvrdenie e‑mailovej adresy"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Prihlásili ste sa."; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "Máte problémy s prijímaním e‑mailov?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Vyskúšajte tieto bežné riešenia: \n – Skontrolujte, či bol e‑mail označený ako spam alebo či bol odfiltrovaný.\n – Skontrolujte internetové pripojenie.\n – Skontrolujte, či ste správne napísali svoju e‑mailovú adresu.\n – Skontrolujte, či máte v doručenej pošte dostatok miesta alebo či nemáte iné problémy súvisiace s nastaveniami doručenej pošty.\n Ak kroky uvedené vyššie nepomohli, môžete si e‑mail nechať poslať znova. Upozorňujeme, že sa tým deaktivuje odkaz v staršom e‑maile."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "Prihlasovací e‑mail s ďalšími pokynmi bol odoslaný na adresu %@. Pozrite si poštu a dokončite prihlásenie."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Prihlasovací e‑mail bol odoslaný"; diff --git a/FirebaseAuthUI/Sources/Strings/sl.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/sl.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 5509a558492..00000000000 --- a/FirebaseAuthUI/Sources/Strings/sl.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Dobrodošli"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Prijava z e-pošto"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Vnesite e-pošto"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "E-pošta ni pravilna."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "Aplikacija ne podpira te vrste računov"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Račun že imate"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "E-poštni naslov %@ ste že uporabili. Če želite nadaljevati, se prijavite z računom za %@."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Prijava"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Vnesite geslo"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "Geslo ne sme biti prazno."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "E-poštni naslov in geslo, ki ste ju vnesli, se ne ujemata."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "E-poštni naslov se ne ujema z obstoječim računom."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "E-poštni naslov je za račun, ki je bil onemogočen."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Prevečkrat ste vnesli nepravilno geslo. Poskusite znova čez nekaj minut."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "Ponudnika za %@ ni mogoče najti."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "E-pošti se ne ujemata"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Obnovitev gesla"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Na to e-pošto vam bomo poslali navodila za ponastavitev gesla."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Preverite e-pošto"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Če želite obnoviti geslo, upoštevajte navodila, ki smo jih poslali na naslov %@."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Ustvarjanje računa"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Ime in priimek"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Izberite geslo"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "pogoji storitve"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Pravilnik o zasebnosti"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Z nadaljevanjem potrjujete, da se strinjate z dokumentoma %@ in %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "E-poštni naslov že uporablja drug račun."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Zapletena gesla imajo vsaj 6 znakov in so sestavljena iz kombinacije črk ter številk"; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Z vašega naslova IP prihaja preveč zahtev za ustvarjanje novih računov. Poskusite znova čez nekaj minut."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "E-poštni naslov %@ ste že uporabili za prijavo. Vnesite geslo za ta račun."; - -/* OK button title. */ -"OK" = "V redu"; - -/* Cancel button title. */ -"Cancel" = "Prekliči"; - -/* Back button title. */ -"Back" = "Nazaj"; - -/* Next button title. */ -"Next" = "Naprej"; - -/* Save button title. */ -"Save" = "Shrani"; - -/* Send button title. */ -"Send" = "Pošlji"; - -/* Resend button title. */ -"Resend" = "Pošlji znova"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "E-pošta"; - -/* Label next to a password text field. */ -"Password" = "Geslo"; - -/* Label next to a name text field. */ -"Name" = "Ime"; - -/* Alert title Error. */ -"Error" = "Napaka"; - -/* Alert button title Close. */ -"Close" = "Zapri"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Profil"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Varnost"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Povezani računi"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Ime"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "E-pošta"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Dodajanje gesla"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Spreminjanje gesla"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Odjava"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Brisanje računa"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "Ali ste pozabili geslo?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Potrdite, da ste to vi"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "Ali želite izbrisati račun?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "S tem dejanjem, ki ga ni mogoče razveljaviti, boste izbrisali vse podatke, povezane z vašim računom. Če želite dokončati to dejanje, se boste morali prijaviti znova."; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "S tem dejanjem, ki ga ni mogoče razveljaviti, boste izbrisali vse podatke, povezane z vašim računom. Ali ste prepričani, da želite izbrisati svoj račun?"; - -/* Text of Delete action button. */ -"Delete" = "Izbriši"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Brisanje računa"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Tega dejanja ni mogoče razveljaviti"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Prekini povezavo"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Povezan račun"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "Ali želite prekiniti povezavo z računom?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "S svojim računom se ne boste mogli več prijaviti"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Prekini povezavo z računom"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Če želite spremeniti e-poštni naslov, povezan z vašim računom, se boste morali prijaviti znova."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Če želite spremeniti geslo, morate najprej vnesti trenutno geslo."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Urejanje e-pošte"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Urejanje imena"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Če želite računu dodati geslo, se boste morali prijaviti znova."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Če želite spremeniti geslo računa, se boste morali prijaviti znova."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Če želite spremeniti geslo, morate najprej vnesti trenutno geslo."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Dodajanje gesla"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Spreminjanje gesla"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "E-pošta"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Prijava z računom za %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Vnesite ime"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Vnesite e-pošto"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Vnesite geslo"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Novo geslo"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Izberite geslo"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "Ali imate težave pri prijavi?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Potrditev e-poštnega naslova"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Prijavljeni ste."; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "Niste prejeli e-poštnega sporočila?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Poskusite te splošne rešitve: \n – Preverite, ali je bilo e-poštno sporočilo označeno kot vsiljena pošta ali filtrirano.\n – Preverite internetno povezavo.\n – Preverite, ali je e-poštni naslov pravilno zapisan.\n – Zagotovite, da imate v nabiralniku dovolj prostora oziroma da ni prišlo do drugih težav, povezanih z nastavitvami nabiralnika.\n – Če z zgornjimi koraki ne odpravite težave, lahko znova pošljete e-poštno sporočilo. Upoštevajte, da boste s tem onemogočili povezavo v prejšnjem e-poštnem sporočilu."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "E-poštno sporočilo za prijavo z dodatnimi navodili je bilo poslano na %@. Preverite e-pošto in dokončajte prijavo."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "E-poštno sporočilo za prijavo je bilo poslano"; diff --git a/FirebaseAuthUI/Sources/Strings/sr-Latn.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/sr-Latn.lproj/FirebaseAuthUI.strings deleted file mode 100644 index fd9a4ecf2ff..00000000000 --- a/FirebaseAuthUI/Sources/Strings/sr-Latn.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Dobro došli"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Prijavi me pomoću imejla"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Unesite imejl"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "Ta imejl adresa nije tačna."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "Ova aplikacija ne podržava taj tip naloga"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Već imate nalog"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Već ste upotrebili %@. Prijavite se pomoću %@-a da biste nastavili."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Prijavi me"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Unesite lozinku"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "Lozinka mora da se unese."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "Imejl i lozinka koje ste uneli se ne podudaraju."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "Ta imejl adresa ne odgovara nijednom postojećem nalogu."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "Ta imejl adresa pripada deaktiviranom nalogu."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Previše puta ste uneli netačnu lozinku. Probajte ponovo za par minuta."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "Nismo uspeli da nađemo dobavljača za %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Imejlovi se ne podudaraju"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Povratite lozinku"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Na ovaj imejl ćete dobiti uputstva kako da resetujete lozinku."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Proverite imejl"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Pratite uputstva koja smo vam poslali na %@ da biste povratili lozinku."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Otvorite nalog"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Ime i prezime"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Izaberite lozinku"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Uslovi korišćenja usluge"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Politika privatnosti"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Ako nastavite, potvrđujete da prihvatate dokumente %@ i %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "Ova imejl adresa se već koristi za drugi nalog."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Jake lozinke imaju bar 6 znakova, uz kombinaciju slova i brojeva."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Sa vaše IP adrese potiče previše zahteva za nalog. Probajte ponovo za par minuta."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Već ste koristili adresu %@ za prijavljivanje. Unesite lozinku za taj nalog."; - -/* OK button title. */ -"OK" = "Potvrdi"; - -/* Cancel button title. */ -"Cancel" = "Otkaži"; - -/* Back button title. */ -"Back" = "Nazad"; - -/* Next button title. */ -"Next" = "Sledeće"; - -/* Save button title. */ -"Save" = "Sačuvaj"; - -/* Send button title. */ -"Send" = "Pošalji"; - -/* Resend button title. */ -"Resend" = "Ponovo pošalji"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "Imejl"; - -/* Label next to a password text field. */ -"Password" = "Lozinka"; - -/* Label next to a name text field. */ -"Name" = "Ime"; - -/* Alert title Error. */ -"Error" = "Greška"; - -/* Alert button title Close. */ -"Close" = "Zatvori"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Profil"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Bezbednost"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Povezani nalozi"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Ime"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "Imejl"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Dodajte lozinku"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Promenite lozinku"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Odjavi me"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Brisanje naloga"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "Zaboravili ste lozinku?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Potvrdite da ste to vi"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "Želite li da izbrišete nalog?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Ovim ćete trajno izbrisati sve podatke povezane sa nalogom. Treba da se ponovo prijavite da biste mogli da obavite ovu radnju"; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Ovim ćete trajno izbrisati sve podatke povezane sa nalogom. Želite li stvarno da izbrišete nalog?"; - -/* Text of Delete action button. */ -"Delete" = "Izbriši"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Izbriši nalog"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Ova radnja ne može da se opozove"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Opozovi vezu"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Povezani nalog"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "Želite li da opozovete vezu sa nalogom?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Više nećete moći da se prijavljujete pomoću naloga"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Opoziv veze sa nalogom"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Da biste promenili imejl adresu povezanu sa nalogom, treba da se ponovo prijavite."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Da biste promenili lozinku, treba da unesete trenutnu lozinku."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Izmena imejla"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Izmena naziva"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Da biste nalogu dodali lozinku, treba ponovo da se prijavite."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Da biste promenili lozinku naloga, treba ponovo da se prijavite."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Da biste promenili lozinku, treba je da unesete trenutnu lozinku."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Dodajte lozinku"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Promenite lozinku"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "Imejl"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Prijavite se pomoću %@-a"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Unesite ime"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Unesite imejl"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Unesite lozinku"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Nova lozinka"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Izaberite lozinku"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "Imate problema pri prijavljivanju?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Potvrdite imejl adresu"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Prijavljeni ste!"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "Imate problema sa prijemom imejla?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Probajte ova uobičajena rešenja: \n– Proverite da li je imejl filtriran ili obeležen kao nepoželjan.\n – Proverite internet vezu.\n – Proverite da li ste tačno upisali imejl adresu.\n – Proverite da niste ostali bez prostora u prijemnom sandučetu, odnosno da nema drugih problema sa prijemnim sandučetom.\n Ako navedene mere ne urode plodom, možete ponovo da pošaljete imejl. Imajte u vidu da ćete time deaktivirati link u starijem imejlu."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "Imejl za prijavljivanje sa dodatnim uputstvima je poslat na %@. Proverite imejl da biste dovršili prijavljivanje."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Poslali smo vam imejl za prijavljivanje"; diff --git a/FirebaseAuthUI/Sources/Strings/sr.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/sr.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 34f17afbcff..00000000000 --- a/FirebaseAuthUI/Sources/Strings/sr.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Добро дошли"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Пријави ме помоћу имејла"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Унесите имејл"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "Та имејл адреса није тачна."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "Ова апликација не подржава тај тип налога"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Већ имате налог"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Већ сте употребили %@. Пријавите се помоћу %@-а да бисте наставили."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Пријави ме"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Унесите лозинку"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "Лозинка мора да се унесе."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "Имејл и лозинка које сте унели се не подударају."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "Та имејл адреса не одговара ниједном постојећем налогу."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "Та имејл адреса припада деактивираном налогу."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Превише пута сте унели нетачну лозинку. Пробајте поново за пар минута."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "Нисмо успели да нађемо добављача за %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Имејлови се не подударају"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Повратите лозинку"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "На овај имејл ћете добити упутства како да ресетујете лозинку."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Проверите имејл"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Пратите упутства која смо вам послали на %@ да бисте повратили лозинку."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Отворите налог"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Име и презиме"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Изаберите лозинку"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Услови коришћења услуге"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Политика приватности"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Ако наставите, потврђујете да прихватате документе %@ и %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "Ова имејл адреса се већ користи за други налог."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Јаке лозинке имају бар 6 знакова, уз комбинацију слова и бројева."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Са ваше IP адресе потиче превише захтева за налог. Пробајте поново за пар минута."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Већ сте користили адресу %@ за пријављивање. Унесите лозинку за тај налог."; - -/* OK button title. */ -"OK" = "Потврди"; - -/* Cancel button title. */ -"Cancel" = "Откажи"; - -/* Back button title. */ -"Back" = "Назад"; - -/* Next button title. */ -"Next" = "Следеће"; - -/* Save button title. */ -"Save" = "Сачувај"; - -/* Send button title. */ -"Send" = "Пошаљи"; - -/* Resend button title. */ -"Resend" = "Поново пошаљи"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "Имејл"; - -/* Label next to a password text field. */ -"Password" = "Лозинка"; - -/* Label next to a name text field. */ -"Name" = "Име"; - -/* Alert title Error. */ -"Error" = "Грешка"; - -/* Alert button title Close. */ -"Close" = "Затвори"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Профил"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Безбедност"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Повезани налози"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Име"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "Имејл"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Додајте лозинку"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Промените лозинку"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Одјави ме"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Брисање налога"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "Заборавили сте лозинку?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Потврдите да сте то ви"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "Желите ли да избришете налог?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Овим ћете трајно избрисати све податке повезане са налогом. Треба да се поново пријавите да бисте могли да обавите ову радњу"; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Овим ћете трајно избрисати све податке повезане са налогом. Желите ли стварно да избришете налог?"; - -/* Text of Delete action button. */ -"Delete" = "Избриши"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Избриши налог"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Ова радња не може да се опозове"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Опозови везу"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Повезани налог"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "Желите ли да опозовете везу са налогом?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Више нећете моћи да се пријављујете помоћу налога"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Опозив везе са налогом"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Да бисте променили имејл адресу повезану са налогом, треба да се поново пријавите."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Да бисте променили лозинку, треба да унесете тренутну лозинку."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Измена имејла"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Измена назива"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Да бисте налогу додали лозинку, треба поново да се пријавите."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Да бисте променили лозинку налога, треба поново да се пријавите."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Да бисте променили лозинку, треба је да унесете тренутну лозинку."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Додајте лозинку"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Промените лозинку"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "Имејл"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Пријавите се помоћу %@-а"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Унесите име"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Унесите имејл"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Унесите лозинку"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Нова лозинка"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Изаберите лозинку"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "Имате проблема при пријављивању?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Потврдите имејл адресу"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Пријављени сте!"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "Имате проблема са пријемом имејла?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Пробајте ова уобичајена решења: \n– Проверите да ли је имејл филтриран или обележен као непожељан.\n – Проверите интернет везу.\n – Проверите да ли сте тачно уписали имејл адресу.\n – Проверите да нисте остали без простора у пријемном сандучету, односно да нема других проблема са пријемним сандучетом.\n Ако наведене мере не уроде плодом, можете поново да пошаљете имејл. Имајте у виду да ћете тиме деактивирати линк у старијем имејлу."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "Имејл за пријављивање са додатним упутствима је послат на %@. Проверите имејл да бисте довршили пријављивање."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Послали смо вам имејл за пријављивање"; diff --git a/FirebaseAuthUI/Sources/Strings/sv.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/sv.lproj/FirebaseAuthUI.strings deleted file mode 100644 index e7c94ec562a..00000000000 --- a/FirebaseAuthUI/Sources/Strings/sv.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Välkommen"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Logga in med e-post"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Ange din e-postadress"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "E-postadressen är ogiltig."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "Appen stöder inte den här typen av konto"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Du har redan ett konto"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Du har redan använt %@. Logga in med %@ om du vill fortsätta."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Logga in"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Ange ditt lösenord"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "Du måste ange lösenord."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "E-postadressen och lösenordet matchar inte."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "E-postadressen matchar inget befintligt konto."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "E-postadressen tillhör ett inaktiverat konto."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Du har angett fel lösenord för många gånger. Försök igen om några minuter."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "Det gick inte att hitta någon leverantör för %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "E-postadresserna stämmer inte överens"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Återställa lösenord"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Få ett e-postmeddelande med anvisningar för hur du återställer lösenordet."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Kolla dina e-postmeddelanden"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Följ anvisningarna som har skickats till %@ för att återställa ditt lösenord."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Skapa konto"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "För- och efternamn"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Välj lösenord"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Användarvillkor"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Sekretesspolicy"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Genom att fortsätta godkänner du våra %@ och vår %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "E-postadressen används redan av ett annat konto."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Starka lösenord består av minst 6 tecken och en blandning av bokstäver och siffror."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Det kommer för många kontobegäranden från din IP-adress. Försök igen om några minuter."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Du har redan loggat in med %@. Ange lösenordet för det kontot."; - -/* OK button title. */ -"OK" = "OK"; - -/* Cancel button title. */ -"Cancel" = "Avbryt"; - -/* Back button title. */ -"Back" = "Föregående"; - -/* Next button title. */ -"Next" = "Nästa"; - -/* Save button title. */ -"Save" = "Spara"; - -/* Send button title. */ -"Send" = "Skicka"; - -/* Resend button title. */ -"Resend" = "Skicka igen"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "E-post"; - -/* Label next to a password text field. */ -"Password" = "Lösenord"; - -/* Label next to a name text field. */ -"Name" = "Namn"; - -/* Alert title Error. */ -"Error" = "Fel"; - -/* Alert button title Close. */ -"Close" = "Stäng"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Profil"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Säkerhet"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Länkade konton"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Namn"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "E-post"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Lägg till lösenord"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Ändra lösenord"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Logga ut"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Radera konto"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "Har du glömt lösenordet?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Verifiera dig"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "Radera konto?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "All data som är kopplad till ditt konto raderas permanent. Du måste logga in igen för att slutföra åtgärden."; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "All data som är kopplad till ditt konto raderas permanent. Är du säker på att du vill radera kontot?"; - -/* Text of Delete action button. */ -"Delete" = "Radera"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Radera konto"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Det går inte att ångra åtgärden"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Ta bort länk"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Länkat konto"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "Ta bort länk till konto?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Du kommer inte längre att kunna logga in med kontot"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Ta bort länk till konto"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Du måste logga in igen om du vill ändra vilken e-postadress som är länkad till ditt konto."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Du måste först ange ditt aktuella lösenord för att kunna ändra lösenordet."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Redigera e-postadress"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Redigera namn"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Du måste logga in igen för att kunna lägga till lösenord för kontot."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Du måste logga in igen för att kunna ändra lösenord för kontot."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Du måste först ange ditt aktuella lösenord för att kunna ändra lösenordet."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Lägg till lösenord"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Ändra lösenord"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "E-post"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Logga in med %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Ange ditt namn"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Ange din e-postadress"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Ange ditt lösenord"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Nytt lösenord"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Välj lösenord"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "Har du problem med att logga in?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Bekräfta e-post"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Inloggad!"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "Får du inte e-postmeddelanden?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Prova dessa vanliga lösningar: \n – Kontrollera om meddelandet hamnade bland skräpposten eller filtrerades.\n – Kontrollera internetanslutningen.\n – Kontrollera att du inte stavade e-postadressen fel.\n – Kontrollera att du inte har ont om utrymme i inkorgen eller andra inkorgsrelaterade problem.\n Om ovanstående lösningar inte fungerar kan du testa att skicka meddelandet igen. Länken i det gamla meddelandet inaktiveras om du gör det."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "Ett inloggningsmeddelande med instruktioner skickades till %@. Kontrollera din e-post för att slutföra inloggningen."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Inloggningsmeddelande skickat"; diff --git a/FirebaseAuthUI/Sources/Strings/ta.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/ta.lproj/FirebaseAuthUI.strings deleted file mode 100644 index eeebad5c3c3..00000000000 --- a/FirebaseAuthUI/Sources/Strings/ta.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "வரவேற்கிறோம்"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "மின்னஞ்சல் மூலம் உள்நுழைக"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "மின்னஞ்சலை உள்ளிடவும்"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "மின்னஞ்சல் முகவரி தவறாக உள்ளது."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "இந்தப் பயன்பாடு, இந்தக் கணக்கு வகையை ஆதரிக்காது"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "ஏற்கனவே உங்களிடம் கணக்கு உள்ளது"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "ஏற்கனவே %@ஐப் பயன்படுத்தியுள்ளீர்கள். தொடர, %@ மூலம் உள்நுழையவும்."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "உள்நுழைக"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "கடவுச்சொல்லை உள்ளிடவும்"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "கடவுச்சொல் காலியாக இருக்கக்கூடாது."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "உள்ளிட்ட மின்னஞ்சலும் கடவுச்சொல்லும் பொருந்தவில்லை."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "மின்னஞ்சல் முகவரி தற்போதைய கணக்குடன் பொருந்தவில்லை."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "இந்த மின்னஞ்சலுக்குரிய கணக்கு முடக்கப்பட்டுள்ளது."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "தவறான கடவுச்சொல்லைப் பலமுறை உள்ளிட்டுள்ளீர்கள். சில நிமிடங்களில் மீண்டும் முயலவும்."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "%@க்கான வழங்குநர் இல்லை."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "மின்னஞ்சல்கள் பொருந்தவில்லை"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "கடவுச்சொல்லை மீட்டெடு"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "கடவுச்சொல்லை மீட்டமைப்பது தொடர்பான வழிமுறைகளை இந்த மின்னஞ்சலில் பார்க்கவும்."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "உங்கள் மின்னஞ்சலைப் பார்க்கவும்"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "கடவுச்சொல்லை மீட்டெடுக்க, %@க்கு அனுப்பிய வழிமுறைகளைப் பின்பற்றவும்."; - -/* Title for sign up screen. */ -"SignUpTitle" = "கணக்கை உருவாக்கு"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "பெயரின் முற்பகுதி மற்றும் பிற்பகுதி"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "கடவுச்சொல்லைத் தேர்வு செய்யவும்"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "சேவை விதிமுறைகள்"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "தனியுரிமைக் கொள்கை"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "தொடர்வதன் மூலம், எங்கள் %@ மற்றும் %@ ஆகியவற்றை ஏற்பதாகக் குறிப்பிடுகிறீர்கள்."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "மின்னஞ்சல் முகவரி ஏற்கனவே வேறொரு கணக்கில் பயன்படுத்தப்படுகிறது."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "வலுவான கடவுச்சொற்களில் குறைந்தது 6 எழுத்துக்குறிகளும், எழுத்துகளும் எண்களும் கலந்த கலவையும் இருக்க வேண்டும்."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "உங்கள் IP முகவரியிலிருந்து கணக்குக் கோரிக்கைகள் பல வருகின்றன. சில நிமிடங்களில் மீண்டும் முயலவும்."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "ஏற்கனவே %@ஐப் பயன்படுத்தி உள்நுழைந்துள்ளீர்கள். அந்தக் கணக்கிற்கான கடவுச்சொல்லை உள்ளிடவும்."; - -/* OK button title. */ -"OK" = "சரி"; - -/* Cancel button title. */ -"Cancel" = "ரத்துசெய்"; - -/* Back button title. */ -"Back" = "முந்தையது"; - -/* Next button title. */ -"Next" = "அடுத்து"; - -/* Save button title. */ -"Save" = "சேமி"; - -/* Send button title. */ -"Send" = "அனுப்பு"; - -/* Resend button title. */ -"Resend" = "மீண்டும் அனுப்பு"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "மின்னஞ்சல்"; - -/* Label next to a password text field. */ -"Password" = "கடவுச்சொல்"; - -/* Label next to a name text field. */ -"Name" = "பெயர்"; - -/* Alert title Error. */ -"Error" = "பிழை"; - -/* Alert button title Close. */ -"Close" = "மூடு"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "சுயவிவரம்"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "பாதுகாப்பு"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "இணைத்துள்ள கணக்குகள்"; - -/* Account Settings cell title Name. */ -"AS_Name" = "பெயர்"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "மின்னஞ்சல்"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "கடவுச்சொல்லைச் சேர்"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "கடவுச்சொல்லை மாற்று"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "வெளியேறு"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "கணக்கை நீக்கு"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "கடவுச்சொல்லை மறந்துவிட்டீர்களா?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "நீங்கள் தான் என்பதை உறுதிசெய்யவும்"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "கணக்கை நீக்கவா?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "இவ்வாறு செய்தால், உங்கள் கணக்குடன் தொடர்புடைய எல்லாத் தரவும் அழிக்கப்படும், அத்துடன் அவற்றைத் திரும்பப்பெற முடியாது. இந்தச் செயல்பாட்டை முடிக்க, நீங்கள் மீண்டும் உள்நுழைய வேண்டும்"; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "இவ்வாறு செய்தால், உங்கள் கணக்குடன் தொடர்புடைய எல்லாத் தரவும் அழிக்கப்படும், அத்துடன் அவற்றைத் திரும்பப்பெற முடியாது. நிச்சயம் நீக்க விரும்புகிறீர்களா?"; - -/* Text of Delete action button. */ -"Delete" = "நீக்கு"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "கணக்கை நீக்கு"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "இதைப் பின்னர் செயல்தவிர்க்க முடியாது"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "இணைப்பை நீக்கு"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "இணைத்துள்ள கணக்கு"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "கணக்கின் இணைப்பை நீக்கவா?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "உங்கள் கணக்கைப் பயன்படுத்தி இனி உள்நுழைய முடியாது"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "கணக்கின் இணைப்பை நீக்கு"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "உங்கள் கணக்குடன் தொடர்புடைய மின்னஞ்சல் முகவரியை மாற்ற, நீங்கள் மீண்டும் உள்நுழைய வேண்டும்."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "கடவுச்சொல்லை மாற்ற, தற்போதைய கடவுச்சொல்லை முதலில் உள்ளிட வேண்டும்."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "மின்னஞ்சலைத் திருத்து"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "பெயரை மாற்று"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "உங்கள் கணக்கின் கடவுச்சொல்லை சேர்க்க, நீங்கள் மீண்டும் உள்நுழைய வேண்டும்."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "உங்கள் கணக்கின் கடவுச்சொல்லை மாற்ற, நீங்கள் மீண்டும் உள்நுழைய வேண்டும்."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "கடவுச்சொல்லை மாற்ற, தற்போதைய கடவுச்சொல்லை முதலில் உள்ளிட வேண்டும்."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "கடவுச்சொல்லைச் சேர்"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "கடவுச்சொல்லை மாற்று"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "மின்னஞ்சல்"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "%@ மூலம் உள்நுழைக"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "பெயரை உள்ளிடவும்"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "மின்னஞ்சலை உள்ளிடவும்"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "கடவுச்சொல்லை உள்ளிடவும்"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "புதிய கடவுச்சொல்"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "கடவுச்சொல்லைத் தேர்வு செய்யவும்"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "உள்நுழைவதில் சிக்கலா?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "மின்னஞ்சலை உறுதிப்படுத்தவும்"; - -/* Title of successfully signed in label. */ -"SignedIn" = "உள்நுழைந்துவிட்டீர்கள்!"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "மின்னஞ்சல்களைப் பெறுவதில் சிக்கல் உள்ளதா?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "இந்தப் பொதுவான திருத்தங்களை முயலவும்: \n - மின்னஞ்சல் ஸ்பேமாகக் குறிக்கப்பட்டுள்ளதா அல்லது வடிகட்டப்பட்டுள்ளதா எனப் பார்க்கவும்.\n - இணைய இணைப்பைச் சரிபார்க்கவும்.\n - உங்கள் மின்னஞ்சல் முகவரியில் எழுத்துப்பிழை இல்லை என்பதை உறுதிப்படுத்திக் கொள்ளவும்.\n - இன்பாக்ஸில் போதுமான இடமுள்ளதா என்பதையும், மற்ற இன்பாக்ஸ் அமைப்புகளுடன் தொடர்புடைய சிக்கல்களையும் சரிபார்க்கவும்.\n மேலேயுள்ளவற்றை முயன்றும் பலனளிக்கவில்லை எனில், நீங்கள் மீண்டும் மின்னஞ்சல் அனுப்பலாம். இது முந்தைய மின்னஞ்சலில் உள்ள இணைப்பை முடக்கிவிடும் என்பதை நினைவில் கொள்ளவும்."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "கூடுதல் வழிமுறைகளுடன் கூடிய உள்நுழைவு மின்னஞ்சல் %@ என்பதற்கு அனுப்பப்பட்டது. உள்நுழைவை நிறைவு செய்ய, உங்கள் மின்னஞ்சலைப் பார்க்கவும்."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "உள்நுழைவு மின்னஞ்சல் அனுப்பப்பட்டது"; diff --git a/FirebaseAuthUI/Sources/Strings/th.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/th.lproj/FirebaseAuthUI.strings deleted file mode 100644 index ad6e9889dbb..00000000000 --- a/FirebaseAuthUI/Sources/Strings/th.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "ยินดีต้อนรับ"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "ลงชื่อเข้าใช้ด้วยอีเมล"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "ป้อนอีเมลของคุณ"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "ที่อยู่อีเมลนี้ไม่ถูกต้อง"; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "แอปนี้ไม่รองรับบัญชีประเภทนี้"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "คุณมีบัญชีอยู่แล้ว"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "คุณใช้ %@ อยู่แล้ว ลงชื่อเข้าใช้ด้วย %@ เพื่อดำเนินการต่อ"; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "ลงชื่อเข้าใช้"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "ป้อนรหัสผ่าน"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "ต้องระบุรหัสผ่าน"; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "อีเมลและรหัสผ่านที่ป้อนไม่ตรงกัน"; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "ที่อยู่อีเมลไม่ตรงกับบัญชีที่มีอยู่"; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "ที่อยู่อีเมลนี้เป็นของบัญชีที่ปิดใช้ไปแล้ว"; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "คุณป้อนรหัสผ่านไม่ถูกต้องหลายครั้งเกินไป โปรดรอสักครู่แล้วลองอีกครั้ง"; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "ไม่พบผู้ให้บริการสำหรับ %@"; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "อีเมลไม่ตรงกัน"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "กู้คืนรหัสผ่าน"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "ดูวิธีการที่ส่งไปยังอีเมลนี้ซึ่งอธิบายเกี่ยวกับวิธีรีเซ็ตรหัสผ่านของคุณ"; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "ตรวจสอบอีเมลของคุณ"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "ทำตามวิธีการที่ส่งไปยัง %@ เพื่อกู้คืนรหัสผ่าน"; - -/* Title for sign up screen. */ -"SignUpTitle" = "สร้างบัญชี"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "ชื่อและนามสกุล"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "ตั้งรหัสผ่าน"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "ข้อกำหนดในการให้บริการ"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "นโยบายความเป็นส่วนตัว"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "การดำเนินการต่อแสดงว่าคุณยอมรับ%@และ%@"; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "มีบัญชีอื่นใช้งานที่อยู่อีเมลนี้อยู่แล้ว"; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "รหัสผ่านที่รัดกุมต้องมีความยาวอย่างน้อย 6 อักขระและประกอบด้วยตัวอักษรปนกับตัวเลข"; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "มีคำขอสร้างบัญชีจากที่อยู่ IP ของคุณมากเกินไป โปรดรอสักครู่แล้วลองอีกครั้ง"; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "คุณใช้ %@ ในการลงชื่อเข้าใช้อยู่แล้ว โปรดป้อนรหัสผ่านสำหรับบัญชีดังกล่าว"; - -/* OK button title. */ -"OK" = "ตกลง"; - -/* Cancel button title. */ -"Cancel" = "ยกเลิก"; - -/* Back button title. */ -"Back" = "ย้อนกลับ"; - -/* Next button title. */ -"Next" = "ถัดไป"; - -/* Save button title. */ -"Save" = "บันทึก"; - -/* Send button title. */ -"Send" = "ส่ง"; - -/* Resend button title. */ -"Resend" = "ส่งซ้ำ"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "อีเมล"; - -/* Label next to a password text field. */ -"Password" = "รหัสผ่าน"; - -/* Label next to a name text field. */ -"Name" = "ชื่อ"; - -/* Alert title Error. */ -"Error" = "ข้อผิดพลาด"; - -/* Alert button title Close. */ -"Close" = "ปิด"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "โปรไฟล์"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "ความปลอดภัย"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "บัญชีที่ลิงก์"; - -/* Account Settings cell title Name. */ -"AS_Name" = "ชื่อ"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "อีเมล"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "เพิ่มรหัสผ่าน"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "เปลี่ยนรหัสผ่าน"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "ออกจากระบบ"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "ลบบัญชี"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "หากลืมรหัสผ่าน"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "โปรดยืนยันว่าเป็นคุณ"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "ลบบัญชีไหม"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "การทำเช่นนี้จะลบข้อมูลทั้งหมดที่เชื่อมโยงกับบัญชีของคุณและไม่สามารถเลิกทำได้ โปรดลงชื่อเข้าใช้อีกครั้งเพื่อดำเนินการให้เสร็จสมบูรณ์"; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "การทำเช่นนี้จะลบข้อมูลทั้งหมดที่เชื่อมโยงกับบัญชีและไม่สามารถเลิกทำได้ คุณแน่ใจไหมว่าต้องการลบบัญชีของคุณ"; - -/* Text of Delete action button. */ -"Delete" = "ลบ"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "ลบบัญชี"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "การดำเนินการนี้ไม่สามารถเลิกทำได้"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "ยกเลิกการลิงก์"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "บัญชีที่ลิงก์"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "ยกเลิกการลิงก์บัญชีไหม"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "คุณจะไม่สามารถลงชื่อเข้าใช้ด้วยบัญชีของคุณได้อีก"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "ยกเลิกการลิงก์บัญชี"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "ในการเปลี่ยนที่อยู่อีเมลที่เชื่อมโยงกับบัญชีของคุณ คุณจะต้องลงชื่อเข้าใช้อีกครั้ง"; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "คุณต้องป้อนรหัสผ่านปัจจุบันของคุณก่อนจึงจะเปลี่ยนรหัสผ่านได้"; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "แก้ไขอีเมล"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "แก้ไขชื่อ"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "ในการเพิ่มรหัสผ่านลงในบัญชี คุณจะต้องลงชื่อเข้าใช้อีกครั้ง"; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "ในการเปลี่ยนรหัสผ่านบัญชี คุณจะต้องลงชื่อเข้าใช้อีกครั้ง"; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "คุณต้องป้อนรหัสผ่านปัจจุบันของคุณก่อนจึงจะเปลี่ยนรหัสผ่านได้"; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "เพิ่มรหัสผ่าน"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "เปลี่ยนรหัสผ่าน"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "อีเมล"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "ลงชื่อเข้าใช้ด้วย %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "ป้อนชื่อของคุณ"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "ป้อนอีเมลของคุณ"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "ป้อนรหัสผ่าน"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "รหัสผ่านใหม่"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "ตั้งรหัสผ่าน"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "หากพบปัญหาในการลงชื่อเช้าใช้"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "ยืนยันอีเมล"; - -/* Title of successfully signed in label. */ -"SignedIn" = "ลงชื่อเข้าใช้แล้ว"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "มีปัญหาในการรับอีเมลใช่ไหม"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "ลองใช้วิธีแก้ไขทั่วไปเหล่านี้ \n - ตรวจสอบว่าอีเมลดังกล่าวมีการทำเครื่องหมายว่าเป็นสแปมหรือผ่านการกรอง\n - ตรวจสอบการเชื่อมต่ออินเทอร์เน็ต\n - ตรวจสอบว่าสะกดชื่ออีเมลถูกต้องแล้ว\n - ตรวจสอบว่ายังมีพื้นที่เหลือในกล่องจดหมายหรือไม่มีปัญหาอื่นๆ ที่เกี่ยวข้องกับการตั้งค่ากล่องจดหมาย\n คุณอาจส่งอีเมลอีกครั้งได้ หากขั้นตอนข้างต้นไม่ช่วยแก้ไขปัญหา โปรดทราบว่าการกระทำดังกล่าวจะเป็นการปิดใช้งานลิงก์ในอีเมลเก่า"; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "ระบบได้ส่งอีเมลลงชื่อเข้าใช้พร้อมวิธีการเพิ่มเติมไปยัง %@ แล้ว โปรดตรวจสอบอีเมลเพื่อลงชื่อเข้าใช้"; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "ส่งอีเมลลงชื่อเข้าใช้แล้ว"; diff --git a/FirebaseAuthUI/Sources/Strings/tr.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/tr.lproj/FirebaseAuthUI.strings deleted file mode 100644 index dc2df607b0f..00000000000 --- a/FirebaseAuthUI/Sources/Strings/tr.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Hoş geldiniz"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "E-posta ile oturum aç"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "E-postanızı girin"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "Bu e-posta adresi doğru değil."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "Bu hesap türü, bu uygulama tarafından desteklenmiyor"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Zaten bir hesabınız var"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "%@ e-posta adresini daha önce kullandınız. Devam etmek için %@ ile oturum açın."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Oturum aç"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Şifrenizi girin"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "Şifre boş bırakılamaz."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "Girdiğiniz e-posta ile şifre eşleşmiyor."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "Bu e-posta adresi mevcut bir hesapla eşleşmiyor."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "Bu e-posta adresi, devre dışı bırakılmış bir hesaba ait."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Çok fazla kez yanlış şifre girdiniz. Birkaç dakika içinde tekrar deneyin."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "%@ için sağlayıcı bulunamıyor."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "E-postalar eşleşmiyor"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Şifreyi kurtarın"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Şifrenizi nasıl sıfırlayacağınızı açıklayan talimatlar bu e-postaya gönderilsin."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "E-postanızı kontrol edin"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Şifrenizi kurtarmak için %@ adresine gönderilen talimatları uygulayın."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Hesap oluşturun"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Ad ve Soyadı"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Şifre seçin"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Hizmet Şartları"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Gizlilik Politikası"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Devam ederek %@ ve %@ hükümlerimizi kabul ettiğinizi bildirirsiniz."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "E-posta adresi başka bir hesap tarafından kullanılıyor."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Güçlü şifreler en az 6 karakterden oluşur ve hem harf hem de rakam içerir."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "IP adresinizden çok fazla sayıda hesap isteği geliyor. Birkaç dakika içinde tekrar deneyin."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Oturum açmak için %@ adresini zaten kullandınız. Bu hesaba ait şifrenizi girin."; - -/* OK button title. */ -"OK" = "Tamam"; - -/* Cancel button title. */ -"Cancel" = "İptal"; - -/* Back button title. */ -"Back" = "Geri"; - -/* Next button title. */ -"Next" = "İleri"; - -/* Save button title. */ -"Save" = "Kaydet"; - -/* Send button title. */ -"Send" = "Gönder"; - -/* Resend button title. */ -"Resend" = "Tekrar gönder"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "E-posta"; - -/* Label next to a password text field. */ -"Password" = "Şifre"; - -/* Label next to a name text field. */ -"Name" = "Ad"; - -/* Alert title Error. */ -"Error" = "Hata"; - -/* Alert button title Close. */ -"Close" = "Kapat"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Profil"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Güvenlik"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Bağlı Hesaplar"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Ad"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "E-posta"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Şifre ekle"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Şifreyi değiştir"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Oturumu Kapat"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Hesabı Sil"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "Şifrenizi mi unuttunuz?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Kimliğinizi doğrulayın"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "Hesap silinsin mi?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Bu işlem, hesabınızla ilişkili tüm verileri siler ve geri alınamaz. Bu işlemi tamamlamak için tekrar oturum açmanız gerekir"; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Bu işlem, hesabınızla ilişkili tüm verileri siler ve geri alınamaz. Hesabınızı silmek istediğinizden emin misiniz?"; - -/* Text of Delete action button. */ -"Delete" = "Sil"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Hesabı silin"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Bu işlem geri alınamaz"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Bağlantıyı kaldır"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Bağlı hesap"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "Hesabın bağlantısı kaldırılsın mı?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Artık hesabınızı kullanarak oturum açamazsınız"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Hesabın bağlantısını kaldırın"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Hesabınızla ilişkilendirilmiş e-posta adresini değiştirmek için tekrar oturum açmanız gerekir."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Şifrenizi değiştirmek için önce mevcut şifrenizi girmeniz gerekir."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "E-postayı düzenleyin"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Adı düzenleyin"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Hesabınıza şifre eklemek için tekrar oturum açmanız gerekir."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Hesabınızın şifresini değiştirmek için tekrar oturum açmanız gerekir."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Şifrenizi değiştirmek için önce mevcut şifrenizi girmeniz gerekir."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Şifre ekleyin"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Şifreyi değiştirin"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "E-posta"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "%@ ile oturum aç"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Adınızı girin"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "E-postanızı girin"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Şifrenizi girin"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Yeni şifre"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Şifre seçin"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "Oturum açılamıyor mu?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "E-posta Adresini Onaylayın"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Oturum açıldı!"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "E-postaları almayla ilgili sorun mu yaşıyorsunuz?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Şu sık başvurulan düzeltme yöntemlerini deneyin: \n - E-postanın spam olarak işaretlenme veya filtrelenme durumunu kontrol edin.\n - İnternet bağlantınızı kontrol edin.\n - E-postanızda yazım hatası bulunmadığından emin olun.\n - Gelen kutunuzdaki boş alanın azalıp azalmadığını ve gelen kutusu ayarlarıyla ilgili başka bir sorun olup olmadığını kontrol edin.\n Yukarıdaki adımlar işe yaramazsa e-postayı yeniden gönderebilirsiniz. Bu işlemin eski e-postadaki bağlantıyı devre dışı bırakacağını göz önünde bulundurun."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "%@ adresine ek talimatlar içeren bir oturum açma e-postası gönderildi. Oturum açma işlemini tamamlamak için e-postanızı kontrol edin."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Oturum açma e-postası gönderildi"; diff --git a/FirebaseAuthUI/Sources/Strings/uk.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/uk.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 7950eacd484..00000000000 --- a/FirebaseAuthUI/Sources/Strings/uk.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Вітаємо"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Увійти, використовуючи електронну адресу"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Введіть електронну адресу"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "Електронна адреса неправильна."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "Додаток не підтримує облікові записи цього типу"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "У вас уже є обліковий запис"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Ви вже використовували електронну адресу %@. Щоб продовжити, увійдіть через %@."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Увійти"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Введіть пароль"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "Укажіть пароль."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "Електронна адреса та пароль не збігаються."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "Ця електронна адреса не відповідає адресі наявного облікового запису."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "Це електронна адреса вимкненого облікового запису."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Ви ввели неправильний пароль забагато разів. Спробуйте за кілька хвилин."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "Не вдалося знайти постачальника для %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Електронні адреси не збігаються"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Відновити пароль"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "На цю електронну адресу надійдуть інструкції, як скинути пароль."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Перевірте свою електронну пошту"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Виконайте інструкції з відновлення пароля, надіслані на адресу %@."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Створити обліковий запис"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Ім’я та прізвище"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Виберіть пароль"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Умови використання"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Політика конфіденційності"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Продовжуючи, ви приймаєте такі документи: %@ і %@."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "Ця електронна адреса вже використовується для іншого облікового запису."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Надійний пароль має містити принаймні 6 символів та комбінацію літер і цифр."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "З вашої IP-адреси надходить дуже багато запитів на створення облікового запису. Спробуйте за кілька хвилин."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Ви вже використовували адресу %@ для входу. Введіть пароль для цього облікового запису."; - -/* OK button title. */ -"OK" = "ОК"; - -/* Cancel button title. */ -"Cancel" = "Скасувати"; - -/* Back button title. */ -"Back" = "Назад"; - -/* Next button title. */ -"Next" = "Далі"; - -/* Save button title. */ -"Save" = "Зберегти"; - -/* Send button title. */ -"Send" = "Надіслати"; - -/* Resend button title. */ -"Resend" = "Надіслати ще раз"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "Електронна адреса"; - -/* Label next to a password text field. */ -"Password" = "Пароль"; - -/* Label next to a name text field. */ -"Name" = "Ім’я"; - -/* Alert title Error. */ -"Error" = "Помилка"; - -/* Alert button title Close. */ -"Close" = "Закрити"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Профіль"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Безпека"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Зв’язані облікові записи"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Назва"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "Електронна адреса"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Додати пароль"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Змінити пароль"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Вийти"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Видалити обліковий запис"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "Забули пароль?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Підтвердьте свою особу"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "Видалити обліковий запис?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Усі дані вашого облікового запису буде стерто, і цю дію не можна буде відмінити. Щоб виконати цю дію, потрібно ввійти ще раз."; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Усі дані вашого облікового запису буде стерто, і цю дію не можна буде відмінити. Видалити обліковий запис?"; - -/* Text of Delete action button. */ -"Delete" = "Видалити"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Видалити обліковий запис"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Цю дію не можна відмінити"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Від’єднати"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Зв’язаний обліковий запис"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "Від’єднати обліковий запис?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Ви більше не зможете входити, використовуючи свій обліковий запис"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Від’єднати обліковий запис"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Щоб змінити електронну адресу, зв’язану з вашим обліковим записом, потрібно ввійти ще раз."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Щоб змінити пароль, спершу введіть поточний."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Змінити електронну адресу"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Змінити ім’я"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Щоб додати пароль до облікового запису, потрібно ввійти ще раз."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Щоб змінити пароль облікового запису, потрібно ввійти ще раз."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Щоб змінити пароль, спершу введіть поточний."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Додати пароль"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Змінити пароль"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "Електронна адреса"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Твіттер"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Увійти, використовуючи %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Введіть своє ім’я"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Введіть електронну адресу"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Введіть пароль"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Новий пароль"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Виберіть пароль"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "Не вдається ввійти?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Підтвердьте електронну адресу"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Ви ввійшли"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "Ви не отримуєте електронні листи?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Щоб вирішити проблему, скористайтеся порадами нижче. \n – Перевірте: можливо, електронний лист позначено як спам або відфільтровано.\n – Перевірте інтернет-з’єднання.\n – Переконайтеся, що ви правильно вказали електронну адресу.\n – Перевірте доступний обсяг пам’яті для папки \"Вхідні\" й інші можливі проблеми з налаштуваннями.\n – Якщо поради вище не допоможуть, надішліть електронний лист повторно. Зверніть увагу, що після цього посилання в давнішому електронному листі стане недійсним."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "Посилання для входу та додаткові вказівки надіслано на адресу %@. Дотримуйтеся їх, щоб увійти в обліковий запис."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Електронну адресу для входу надіслано"; diff --git a/FirebaseAuthUI/Sources/Strings/ur.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/ur.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 1e94ae6b921..00000000000 --- a/FirebaseAuthUI/Sources/Strings/ur.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "خوش آمدید"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "ای میل کے ساتھ سائن ان کریں"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "اپنا ای میل درج کریں"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "یہ ای میل پتہ غلط ہے۔"; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "اس قسم کا اکاؤنٹ اس ایپ کی جانب سے تعاون یافتہ نہیں ہے"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "آپ کے پاس پہلے سے ہی ایک اکاؤنٹ موجود ہے"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "آپ نے پہلے ہی %@ کو استعمال کر لیا ہے۔ جاری رکھنے کے لیے %@ کے ساتھ سائن ان کریں۔"; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "سائن ان کریں"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "اپنا پاس ورڈ درج کریں"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "پاس ورڈ خالی نہیں ہو سکتا۔"; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "آپ نے جو ای میل اور پاس ورڈ درج کیا ہے وہ مماثل نہیں ہیں۔"; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "یہ ای میل پتہ کسی موجودہ اکاؤنٹ کے مماثل نہیں ہے۔"; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "یہ ای میل پتہ ایک غیر فعال کیے ہوئے اکاؤنٹ کے لیے ہے۔"; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "آپ نے ایک غلط پاس ورڈ کافی مرتبہ درج کیا ہے۔ چند منٹوں میں دوبارہ کوشش کریں۔"; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "%@ کے لیے فراہم کنندہ کو تلاش نہیں کر سکتے۔"; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "ای میلز مماثل نہیں ہیں"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "پاس ورڈ بازیافت کریں"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "اس ای میل پر بھیجی گئی وہ ہدایات حاصل کریں جن میں آپ کے پاس ورڈ کو دوبارہ ترتیب دینے کے طریقے کی وضاحت ہے۔"; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "اپنا ای میل چیک کریں"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "اپنے پاس ورڈ کو بازیافت کرنے کے لیے %@ پر بھیجی گئی ہدایات کی پیروی کریں۔"; - -/* Title for sign up screen. */ -"SignUpTitle" = "اکاؤنٹ بنائیں"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "پہلا اور آخری نام"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "پاس ورڈ منتخب کریں"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "سروس کی شرائط"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "رازداری کی پالیسی"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "جاری رکھ کر، آپ نشاندہی کر رہے ہیں کہ آپ ہماری %@ اور %@ کو قبول کرتے ہیں۔"; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "یہ ای میل پتہ پہلے سے ہی دوسرے اکاؤنٹ کے زیر استعمال ہے۔"; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "مضبوط پاس ورڈز میں کم از کم 6 کریکٹرز اور حروف و اعداد کا مرکب ہوتے ہیں۔"; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "اکاؤنٹ کی بہت سی درخواستیں آپ کے IP پتے سے آ رہی ہیں۔ چند منٹوں میں دوبارہ کوشش کریں۔"; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "آپ نے پہلے ہی سائن ان کرنے کے لیے %@ کو استعمال کر لیا ہے۔ اس اکاؤنٹ کے لیے اپنا پاس ورڈ درج کریں۔"; - -/* OK button title. */ -"OK" = "ٹھیک ہے"; - -/* Cancel button title. */ -"Cancel" = "منسوخ کریں"; - -/* Back button title. */ -"Back" = "پیچھے جائیں"; - -/* Next button title. */ -"Next" = "آگے جائیں"; - -/* Save button title. */ -"Save" = "محفوظ کریں"; - -/* Send button title. */ -"Send" = "بھیجیں"; - -/* Resend button title. */ -"Resend" = "دوبارہ بھیجیں"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "ای میل"; - -/* Label next to a password text field. */ -"Password" = "پاس ورڈ"; - -/* Label next to a name text field. */ -"Name" = "نام"; - -/* Alert title Error. */ -"Error" = "خرابی"; - -/* Alert button title Close. */ -"Close" = "بند کریں"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "پروفائل"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "سیکیورٹی"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "لنک کردہ اکاؤنٹس"; - -/* Account Settings cell title Name. */ -"AS_Name" = "نام"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "ای میل"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "پاس ورڈ شامل کریں"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "پاس ورڈ تبدیل کریں"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "سائن آؤٹ کریں"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "اکاؤنٹ حذف کریں"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "پاس ورڈ بھول گئے؟"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "توثیق کریں کہ یہ آپ ہی ہیں"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "اکاؤنٹ حذف کریں؟"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "یہ آپ کے اکاؤنٹ سے وابستہ سبھی ڈیٹا کو مٹا دے گا، اور کالعدم نہیں ہوسکتا۔ آپ کو یہ عمل مکمل کرنے کے لیے دوبارہ سائن ان کرنے کی ضرورت پڑے گی"; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "یہ آپ کے اکاؤنٹ سے وابستہ سبھی ڈیٹا کو مٹا دے گا، اور کالعدم نہیں ہوسکتا۔ کیا آپ واقعی اپنا اکاؤنٹ حذف کرنا چاہتے ہیں؟"; - -/* Text of Delete action button. */ -"Delete" = "حذف کریں"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "اکاؤنٹ حذف کریں"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "اس عمل کو کالعدم نہیں کیا جا سکتا"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "لنک ختم کریں"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "لنک کردہ اکاؤنٹ"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "اکاؤنٹ کا لنک ختم کریں؟"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "اب آپ اپنا اکاؤنٹ استعمال کرتے ہوئے سائن ان نہیں کر سکیں گے"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "اکاؤنٹ کا لنک ختم کریں"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "اپنے اکاؤنٹ سے وابستہ ای میل پتہ تبدیل کرنے کے لیے، آپ کو دوبارہ سائن ان کرنے کی ضرورت پڑے گی۔"; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "اپنا پاس ورڈ تبدیل کرنے کے لیے، پہلے آپ کو اپنا موجودہ پاس ورڈ درج کرنے کی ضرورت ہے۔"; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "ای میل میں ترمیم کریں"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "نام میں ترمیم کریں"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "اپنے اکاؤنٹ میں پاس ورڈ شامل کرنے کے لیے، آپ کو دوبارہ سائن ان کرنے کی ضرورت ہے۔"; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "اپنے اکاؤنٹ کا پاس ورڈ تبدیل کرنے کے لیے، آپ کو دوبارہ سائن ان کرنے کی ضرورت ہے۔"; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "اپنا پاس ورڈ تبدیل کرنے کے لیے، پہلے آپ کو اپنا موجودہ پاس ورڈ درج کرنے کی ضرورت ہے۔"; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "پاس ورڈ شامل کریں"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "پاس ورڈ تبدیل کریں"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "ای میل"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "%@ کے ساتھ سائن ان کریں"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "اپنا نام درج کریں"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "اپنا ای میل درج کریں"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "اپنا پاس ورڈ درج کریں"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "نیا پاس ورڈ"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "پاس ورڈ منتخب کریں"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "سائن ان کرنے میں دشواری؟"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "ای میل کی تصدیق کریں"; - -/* Title of successfully signed in label. */ -"SignedIn" = "سائن ان ہو گیا!"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "ای میلز حاصل کرنے میں دشواری پیش آ رہی ہے؟"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "یہ عام اصلاحات آزمائیں: \n - چیک کریں کہ آیا ای میل سپام یا فلٹر شدہ کے طور پر نشان زد کی گئی ہے۔\n - اپنا انٹرنیٹ کنکشن چیک کریں۔\n - چیک کریں کہ آپ نے اپنی ای میل کے ہجے میں غلطی تو نہیں کی ہے۔\n - چیک کریں کہ آپ کی ان باکس اسپیس ختم تو نہیں ہوگئی ہے یا دیگر ان باکس کی ترتیبات سے متعلق مسائل چیک کریں۔\n اگر مندرجہ بالا مراحل کام نہ کریں تو آپ ای میل دوبارہ بھیج سکتے ہیں۔ نوٹ کریں کہ اس سے پرانی ای میل میں موجود لنک غیر فعال ہو جائے گا۔"; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "ایک سائن ان ای میل اضافی ہدایات کے ساتھ %@ کو بھیج دی گئی ہے۔ سائن ان مکمل کرنے کے لیے اپنی ای میل چیک کریں۔"; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "سائن ان ای میل بھیج دی گئی"; diff --git a/FirebaseAuthUI/Sources/Strings/vi.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/vi.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 9328159cb32..00000000000 --- a/FirebaseAuthUI/Sources/Strings/vi.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "Chào mừng bạn"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "Đăng nhập bằng email"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "Nhập email của bạn"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "Địa chỉ email đó không đúng."; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "Loại tài khoản này không được ứng dụng này hỗ trợ"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "Bạn đã có tài khoản"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "Bạn đã sử dụng %@. Đăng nhập bằng %@ để tiếp tục."; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "Đăng nhập"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "Nhập mật khẩu của bạn"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "Không được để trống mật khẩu."; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "Email và mật khẩu bạn đã nhập không khớp."; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "Địa chỉ email đó không khớp với tài khoản hiện có."; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "Địa chỉ email đó là dành cho tài khoản đã bị vô hiệu hóa."; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "Bạn đã nhập sai mật khẩu quá nhiều lần. Hãy thử lại sau một vài phút."; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "Không thể tìm thấy nhà cung cấp cho %@."; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "Email không khớp"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "Khôi phục mật khẩu"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "Xem hướng dẫn gửi tới email này có giải thích cách đặt lại mật khẩu của bạn."; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "Kiểm tra email của bạn"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "Làm theo hướng dẫn gửi tới %@ để khôi phục mật khẩu của bạn."; - -/* Title for sign up screen. */ -"SignUpTitle" = "Tạo tài khoản"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "Họ và tên"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "Chọn mật khẩu"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "Điều khoản dịch vụ"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "Chính sách về quyền riêng tư"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "Bằng cách tiếp tục, bạn cho biết rằng bạn chấp nhận %@ và %@ của chúng tôi."; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "Địa chỉ email đã được tài khoản khác sử dụng."; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "Mật khẩu mạnh có ít nhất 6 ký tự, kết hợp chữ cái và số."; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "Có quá nhiều yêu cầu tài khoản từ địa chỉ IP của bạn. Hãy thử lại sau một vài phút."; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "Bạn đã sử dụng %@ để đăng nhập. Hãy nhập mật khẩu của bạn cho tài khoản đó."; - -/* OK button title. */ -"OK" = "OK"; - -/* Cancel button title. */ -"Cancel" = "Hủy"; - -/* Back button title. */ -"Back" = "Quay lại"; - -/* Next button title. */ -"Next" = "Tiếp"; - -/* Save button title. */ -"Save" = "Lưu"; - -/* Send button title. */ -"Send" = "Gửi"; - -/* Resend button title. */ -"Resend" = "Gửi lại"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "Email"; - -/* Label next to a password text field. */ -"Password" = "Mật khẩu"; - -/* Label next to a name text field. */ -"Name" = "Tên"; - -/* Alert title Error. */ -"Error" = "Lỗi"; - -/* Alert button title Close. */ -"Close" = "Đóng"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "Hồ sơ"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "Bảo mật"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "Tài khoản được liên kết"; - -/* Account Settings cell title Name. */ -"AS_Name" = "Tên"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "Email"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "Thêm mật khẩu"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "Đổi mật khẩu"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "Đăng xuất"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "Xóa tài khoản"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "Quên mật khẩu?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "Xác minh đó là bạn"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "Xóa tài khoản?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "Thao tác này sẽ xóa tất cả dữ liệu được liên kết với tài khoản của bạn và không thể hoàn tác. Bạn sẽ phải đăng nhập lại để hoàn tất thao tác này"; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "Thao tác này sẽ xóa tất cả dữ liệu được liên kết với tài khoản của bạn và không thể hoàn tác. Bạn có chắc chắn muốn xóa tài khoản của bạn không?"; - -/* Text of Delete action button. */ -"Delete" = "Xóa"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "Xóa tài khoản"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "Không thể hoàn tác thao tác này"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "Hủy liên kết"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "Tài khoản được liên kết"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "Hủy liên kết tài khoản?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "Bạn sẽ không thể đăng nhập bằng tài khoản của bạn"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "Hủy liên kết tài khoản"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "Để thay đổi địa chỉ email liên kết với tài khoản của bạn, bạn sẽ phải đăng nhập lại."; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "Để thay đổi mật khẩu, trước tiên bạn phải nhập mật khẩu hiện tại của bạn."; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "Chỉnh sửa email"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "Chỉnh sửa tên"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "Để thêm mật khẩu cho tài khoản của bạn, bạn sẽ phải đăng nhập lại."; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "Để thay đổi mật khẩu cho tài khoản của bạn, bạn sẽ phải đăng nhập lại."; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "Để thay đổi mật khẩu, trước tiên bạn phải nhập mật khẩu hiện tại của bạn."; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "Thêm mật khẩu"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "Đổi mật khẩu"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "Email"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "Đăng nhập bằng %@"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "Nhập tên của bạn"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "Nhập email của bạn"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "Nhập mật khẩu của bạn"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "Mật khẩu mới"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "Chọn mật khẩu"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "Bạn gặp sự cố khi đăng nhập?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "Xác nhận email"; - -/* Title of successfully signed in label. */ -"SignedIn" = "Đã đăng nhập!"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "Bạn gặp vấn đề khi nhận email?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "Hãy thử các cách khắc phục vấn đề phổ biến sau: \n - Kiểm tra xem email có bị đánh dấu là spam hay đã được lọc.\n - Kiểm tra kết nối Internet của bạn.\n - Kiểm tra để đảm bảo bạn không viết sai chính tả tên email.\n - Kiểm tra để đảm bảo dung lượng bộ nhớ hộp thư đến của bạn chưa hết hoặc không có vấn đề khác liên quan đến tùy chọn cài đặt hộp thư đến.\n Nếu các bước trên không hiệu quả, bạn có thể gửi lại email. Vui lòng lưu ý rằng thao tác này sẽ hủy kích hoạt đường dẫn liên kết trong email cũ."; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "Email đăng nhập có hướng dẫn bổ sung đã gửi tới %@. Hãy tìm email này trong hộp thư của bạn để hoàn tất đăng nhập."; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "Đã gửi email đăng nhập"; diff --git a/FirebaseAuthUI/Sources/Strings/zh-Hans.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/zh-Hans.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 4a21d4d2655..00000000000 --- a/FirebaseAuthUI/Sources/Strings/zh-Hans.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "欢迎"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "使用电子邮件地址登录"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "输入您的电子邮件地址"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "该电子邮件地址不正确。"; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "此应用不支持这种类型的帐号"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "您已经有帐号了"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "您已经使用了 %@。请使用 %@ 帐号登录以继续操作。"; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "登录"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "输入您的密码"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "密码不能为空。"; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "您输入的电子邮件地址和密码不匹配。"; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "该电子邮件地址没有相匹配的现有帐号。"; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "该电子邮件地址对应的帐号已停用。"; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "您输入错误密码的次数过多,请过几分钟再试。"; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "找不到 %@ 的提供方。"; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "电子邮件地址不匹配"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "找回密码"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "向此电子邮件地址发送关于如何重置密码的说明。"; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "请查收电子邮件"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "请按照发送到 %@ 的说明找回密码。"; - -/* Title for sign up screen. */ -"SignUpTitle" = "创建帐号"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "姓名"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "选择密码"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "服务条款"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "隐私权政策"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "继续即表示您接受我们的%@和%@。"; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "此电子邮件地址已被其他帐号使用。"; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "安全系数高的密码至少包含 6 个字符,由字母和数字组成。"; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "来自您的 IP 地址的帐号请求过多,请过几分钟再试。"; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "您已经使用 %@ 登录了,请输入该帐号的密码。"; - -/* OK button title. */ -"OK" = "确定"; - -/* Cancel button title. */ -"Cancel" = "取消"; - -/* Back button title. */ -"Back" = "返回"; - -/* Next button title. */ -"Next" = "继续"; - -/* Save button title. */ -"Save" = "保存"; - -/* Send button title. */ -"Send" = "发送"; - -/* Resend button title. */ -"Resend" = "重新发送"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "电子邮件"; - -/* Label next to a password text field. */ -"Password" = "密码"; - -/* Label next to a name text field. */ -"Name" = "名称"; - -/* Alert title Error. */ -"Error" = "错误"; - -/* Alert button title Close. */ -"Close" = "关闭"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "个人资料"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "安全"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "已关联的帐号"; - -/* Account Settings cell title Name. */ -"AS_Name" = "名称"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "电子邮件"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "添加密码"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "更改密码"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "退出帐号"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "删除帐号"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "忘记了密码?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "请验证是您本人"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "要删除帐号吗?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "此操作将清空与您的帐号相关联的所有数据,并且无法撤消。您需要重新登录才能完成此操作"; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "此操作将清空与您的帐号相关联的所有数据,并且无法撤消。确定要删除帐号吗?"; - -/* Text of Delete action button. */ -"Delete" = "删除"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "删除帐号"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "此操作无法撤消"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "取消关联"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "已关联的帐号"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "要取消帐号关联吗?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "您将不能再使用您的帐号登录"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "取消帐号关联"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "要更改与您的帐号关联的电子邮件地址,您需要再次登录。"; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "要更改密码,您需要先输入当前的密码。"; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "修改电子邮件地址"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "修改名称"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "要为帐号添加密码,您需要重新登录。"; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "要更改帐号的密码,您需要重新登录。"; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "要更改密码,您需要先输入当前的密码。"; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "添加密码"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "更改密码"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "电子邮件"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "使用 %@ 帐号登录"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "输入您的名称"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "输入您的电子邮件地址"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "输入您的密码"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "新密码"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "选择密码"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "登录时遇到问题?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "确认电子邮件地址"; - -/* Title of successfully signed in label. */ -"SignedIn" = "已登录!"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "无法收到电子邮件?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "尝试以下常见解决方法:\n - 检查电子邮件是否被标记为垃圾邮件或被过滤。\n - 检查互联网连接。\n - 确保没有写错电子邮件地址。\n - 确保收件箱空间充足,且不存在其他与收件箱设置有关的问题。\n 如果上述步骤未能帮助您解决问题,您可以重新发送电子邮件。请注意,重新发送后上一封电子邮件中的链接将失效。"; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "系统已将含附加说明的登录电子邮件发送至 %@。请查收电子邮件以完成登录。"; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "已发送登录电子邮件"; diff --git a/FirebaseAuthUI/Sources/Strings/zh-Hant-TW.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/zh-Hant-TW.lproj/FirebaseAuthUI.strings deleted file mode 100644 index b46d7784533..00000000000 --- a/FirebaseAuthUI/Sources/Strings/zh-Hant-TW.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "歡迎"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "使用電子郵件登入"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "輸入您的電子郵件"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "電子郵件地址不正確。"; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "此應用程式不支援這種類型的帳戶"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "您已經有一個帳戶"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "您已經使用 %@。如要繼續進行,請登入 %@ 帳戶。"; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "登入"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "輸入您的密碼"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "密碼不能空白。"; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "您輸入的電子郵件和密碼不相符。"; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "這個電子郵件地址和現有帳戶不相符。"; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "這個電子郵件地址屬於已停用的帳戶。"; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "您輸入錯誤密碼的次數過多,請於幾分鐘後再試一次。"; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "找不到 %@ 的供應商。"; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "電子郵件不相符"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "重新取得密碼"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "這個電子郵件會收到重設密碼的指示。"; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "請查看您的電子郵件"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "請依照傳送至 %@ 的指示重新取得密碼。"; - -/* Title for sign up screen. */ -"SignUpTitle" = "建立帳戶"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "姓名"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "選擇密碼"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "服務條款"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "隱私權政策"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "選擇繼續即表示您接受我們的《%@》和《%@》。"; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "另一個帳戶已使用這個電子郵件地址。"; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "安全強度高的密碼至少需有 6 個字元並混用字母和數字。"; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "您的 IP 位址傳送建立帳戶要求的次數過多,請於幾分鐘後再試一次。"; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "您已使用 %@ 帳戶登入,請輸入該帳戶的密碼。"; - -/* OK button title. */ -"OK" = "確定"; - -/* Cancel button title. */ -"Cancel" = "取消"; - -/* Back button title. */ -"Back" = "上一步"; - -/* Next button title. */ -"Next" = "下一步"; - -/* Save button title. */ -"Save" = "儲存"; - -/* Send button title. */ -"Send" = "傳送"; - -/* Resend button title. */ -"Resend" = "重新傳送"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "電子郵件"; - -/* Label next to a password text field. */ -"Password" = "密碼"; - -/* Label next to a name text field. */ -"Name" = "名稱"; - -/* Alert title Error. */ -"Error" = "錯誤"; - -/* Alert button title Close. */ -"Close" = "關閉"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "個人資料"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "安全性"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "已連結帳戶"; - -/* Account Settings cell title Name. */ -"AS_Name" = "名稱"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "電子郵件"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "新增密碼"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "變更密碼"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "登出"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "刪除帳戶"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "忘記密碼了嗎?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "請驗證您的身分"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "要刪除帳戶嗎?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "這項操作會清除與您的帳戶相關聯的所有資料,而且帳戶刪除後即無法復原。您需要再次登入才能完成這項操作"; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "這項操作會清除與您的帳戶相關聯的所有資料,而且帳戶刪除後即無法復原。確定要刪除帳戶嗎?"; - -/* Text of Delete action button. */ -"Delete" = "刪除"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "刪除帳戶"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "這項操作無法復原"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "取消連結"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "已連結帳戶"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "要取消連結帳戶嗎?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "您將無法再使用自己的帳戶登入"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "取消連結帳戶"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "如要變更帳戶所連結的電子郵件地址,您需要重新登入帳戶。"; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "如要變更密碼,請先輸入目前的密碼。"; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "編輯電子郵件"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "編輯名稱"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "如要新增帳戶密碼,您需要重新登入。"; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "如要變更帳戶密碼,您需要重新登入。"; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "如要變更密碼,請先輸入目前的密碼。"; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "新增密碼"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "變更密碼"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "電子郵件"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "使用 %@ 帳戶登入"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "輸入您的名稱"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "輸入您的電子郵件"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "輸入您的密碼"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "新密碼"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "選擇密碼"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "無法登入嗎?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "確認電子郵件地址"; - -/* Title of successfully signed in label. */ -"SignedIn" = "登入成功!"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "沒收到電子郵件嗎?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "請試試這些常見的解決方式:\n - 檢查電子郵件是否被標示為垃圾郵件或遭系統篩除。\n - 檢查您的網際網路連線。\n - 檢查電子郵件地址是否拼錯。\n - 確認收件匣的儲存空間是否足夠,或檢查與收件匣設定相關的其他問題。\n 如果上述步驟全部無效,建議您重新傳送電子郵件。請注意,這個動作會使先前郵件中的連結失效。"; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "系統已將登入電子郵件傳送至 %@,其中包含額外的操作說明。請查看您的電子郵件以完成登入程序。"; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "已寄出登入電子郵件"; diff --git a/FirebaseAuthUI/Sources/Strings/zh-Hant.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/zh-Hant.lproj/FirebaseAuthUI.strings deleted file mode 100644 index b46d7784533..00000000000 --- a/FirebaseAuthUI/Sources/Strings/zh-Hant.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "歡迎"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "使用電子郵件登入"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "輸入您的電子郵件"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "電子郵件地址不正確。"; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "此應用程式不支援這種類型的帳戶"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "您已經有一個帳戶"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "您已經使用 %@。如要繼續進行,請登入 %@ 帳戶。"; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "登入"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "輸入您的密碼"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "密碼不能空白。"; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "您輸入的電子郵件和密碼不相符。"; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "這個電子郵件地址和現有帳戶不相符。"; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "這個電子郵件地址屬於已停用的帳戶。"; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "您輸入錯誤密碼的次數過多,請於幾分鐘後再試一次。"; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "找不到 %@ 的供應商。"; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "電子郵件不相符"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "重新取得密碼"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "這個電子郵件會收到重設密碼的指示。"; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "請查看您的電子郵件"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "請依照傳送至 %@ 的指示重新取得密碼。"; - -/* Title for sign up screen. */ -"SignUpTitle" = "建立帳戶"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "姓名"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "選擇密碼"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "服務條款"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "隱私權政策"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "選擇繼續即表示您接受我們的《%@》和《%@》。"; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "另一個帳戶已使用這個電子郵件地址。"; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "安全強度高的密碼至少需有 6 個字元並混用字母和數字。"; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "您的 IP 位址傳送建立帳戶要求的次數過多,請於幾分鐘後再試一次。"; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "您已使用 %@ 帳戶登入,請輸入該帳戶的密碼。"; - -/* OK button title. */ -"OK" = "確定"; - -/* Cancel button title. */ -"Cancel" = "取消"; - -/* Back button title. */ -"Back" = "上一步"; - -/* Next button title. */ -"Next" = "下一步"; - -/* Save button title. */ -"Save" = "儲存"; - -/* Send button title. */ -"Send" = "傳送"; - -/* Resend button title. */ -"Resend" = "重新傳送"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "電子郵件"; - -/* Label next to a password text field. */ -"Password" = "密碼"; - -/* Label next to a name text field. */ -"Name" = "名稱"; - -/* Alert title Error. */ -"Error" = "錯誤"; - -/* Alert button title Close. */ -"Close" = "關閉"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "個人資料"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "安全性"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "已連結帳戶"; - -/* Account Settings cell title Name. */ -"AS_Name" = "名稱"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "電子郵件"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "新增密碼"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "變更密碼"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "登出"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "刪除帳戶"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "忘記密碼了嗎?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "請驗證您的身分"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "要刪除帳戶嗎?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "這項操作會清除與您的帳戶相關聯的所有資料,而且帳戶刪除後即無法復原。您需要再次登入才能完成這項操作"; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "這項操作會清除與您的帳戶相關聯的所有資料,而且帳戶刪除後即無法復原。確定要刪除帳戶嗎?"; - -/* Text of Delete action button. */ -"Delete" = "刪除"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "刪除帳戶"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "這項操作無法復原"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "取消連結"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "已連結帳戶"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "要取消連結帳戶嗎?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "您將無法再使用自己的帳戶登入"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "取消連結帳戶"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "如要變更帳戶所連結的電子郵件地址,您需要重新登入帳戶。"; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "如要變更密碼,請先輸入目前的密碼。"; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "編輯電子郵件"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "編輯名稱"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "如要新增帳戶密碼,您需要重新登入。"; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "如要變更帳戶密碼,您需要重新登入。"; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "如要變更密碼,請先輸入目前的密碼。"; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "新增密碼"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "變更密碼"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "電子郵件"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "使用 %@ 帳戶登入"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "輸入您的名稱"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "輸入您的電子郵件"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "輸入您的密碼"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "新密碼"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "選擇密碼"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "無法登入嗎?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "確認電子郵件地址"; - -/* Title of successfully signed in label. */ -"SignedIn" = "登入成功!"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "沒收到電子郵件嗎?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "請試試這些常見的解決方式:\n - 檢查電子郵件是否被標示為垃圾郵件或遭系統篩除。\n - 檢查您的網際網路連線。\n - 檢查電子郵件地址是否拼錯。\n - 確認收件匣的儲存空間是否足夠,或檢查與收件匣設定相關的其他問題。\n 如果上述步驟全部無效,建議您重新傳送電子郵件。請注意,這個動作會使先前郵件中的連結失效。"; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "系統已將登入電子郵件傳送至 %@,其中包含額外的操作說明。請查看您的電子郵件以完成登入程序。"; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "已寄出登入電子郵件"; diff --git a/FirebaseAuthUI/Sources/Strings/zh.lproj/FirebaseAuthUI.strings b/FirebaseAuthUI/Sources/Strings/zh.lproj/FirebaseAuthUI.strings deleted file mode 100644 index 4a21d4d2655..00000000000 --- a/FirebaseAuthUI/Sources/Strings/zh.lproj/FirebaseAuthUI.strings +++ /dev/null @@ -1,269 +0,0 @@ -/* Title for auth picker screen. */ -"AuthPickerTitle" = "欢迎"; - -/* Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"SignInWithEmail" = "使用电子邮件地址登录"; - -/* Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EnterYourEmail" = "输入您的电子邮件地址"; - -/* Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"InvalidEmailError" = "该电子邮件地址不正确。"; - -/* Error message displayed when the app cannot authenticate user's account. */ -"CannotAuthenticateError" = "此应用不支持这种类型的帐号"; - -/* Title of an alert shown to an existing user coming back to the app. */ -"ExistingAccountTitle" = "您已经有帐号了"; - -/* Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder). */ -"ProviderUsedPreviouslyMessage" = "您已经使用了 %@。请使用 %@ 帐号登录以继续操作。"; - -/* Title for sign in screen and sign in button. */ -"SignInTitle" = "登录"; - -/* Password text field placeholder. */ -"EnterYourPassword" = "输入您的密码"; - -/* Error message displayed when user enters an empty password. */ -"InvalidPasswordError" = "密码不能为空。"; - -/* Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"WrongPasswordError" = "您输入的电子邮件地址和密码不匹配。"; - -/* Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UserNotFoundError" = "该电子邮件地址没有相匹配的现有帐号。"; - -/* Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AccountDisabledError" = "该电子邮件地址对应的帐号已停用。"; - -/* Error message displayed after user trying to sign in too many times. */ -"SignInTooManyTimesError" = "您输入错误密码的次数过多,请过几分钟再试。"; - -/* Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc) */ -"CantFindProvider" = "找不到 %@ 的提供方。"; - -/* Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailsDontMatch" = "电子邮件地址不匹配"; - -/* Title for password recovery screen. */ -"PasswordRecoveryTitle" = "找回密码"; - -/* Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryMessage" = "向此电子邮件地址发送关于如何重置密码的说明。"; - -/* Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PasswordRecoveryEmailSentTitle" = "请查收电子邮件"; - -/* Message displayed when the email for password recovery has been sent. */ -"PasswordRecoveryEmailSentMessage" = "请按照发送到 %@ 的说明找回密码。"; - -/* Title for sign up screen. */ -"SignUpTitle" = "创建帐号"; - -/* Name text field placeholder. */ -"FirstAndLastName" = "姓名"; - -/* Placeholder for the password text field in a sign up form. */ -"ChoosePassword" = "选择密码"; - -/* Text linked to a web page with the Terms of Service content. */ -"TermsOfService" = "服务条款"; - -/* Text linked to a web page with the Privacy Policy content. */ -"PrivacyPolicy" = "隐私权政策"; - -/* A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link. */ -"TermsOfServiceMessage" = "继续即表示您接受我们的%@和%@。"; - -/* Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EmailAlreadyInUseError" = "此电子邮件地址已被其他帐号使用。"; - -/* Error message displayed when the password is too weak. */ -"WeakPasswordError" = "安全系数高的密码至少包含 6 个字符,由字母和数字组成。"; - -/* Error message displayed when many accounts have been created from same IP address. */ -"SignUpTooManyTimesError" = "来自您的 IP 地址的帐号请求过多,请过几分钟再试。"; - -/* Message to explain to the user that password is needed for an account with this email address. */ -"PasswordVerificationMessage" = "您已经使用 %@ 登录了,请输入该帐号的密码。"; - -/* OK button title. */ -"OK" = "确定"; - -/* Cancel button title. */ -"Cancel" = "取消"; - -/* Back button title. */ -"Back" = "返回"; - -/* Next button title. */ -"Next" = "继续"; - -/* Save button title. */ -"Save" = "保存"; - -/* Send button title. */ -"Send" = "发送"; - -/* Resend button title. */ -"Resend" = "重新发送"; - -/* Label next to a email text field. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"Email" = "电子邮件"; - -/* Label next to a password text field. */ -"Password" = "密码"; - -/* Label next to a name text field. */ -"Name" = "名称"; - -/* Alert title Error. */ -"Error" = "错误"; - -/* Alert button title Close. */ -"Close" = "关闭"; - -/* Account Settings section title Profile. */ -"AS_SectionProfile" = "个人资料"; - -/* Account Settings section title Security. */ -"AS_SectionSecurity" = "安全"; - -/* Account Settings section title Linked Accounts. */ -"AS_SectionLinkedAccounts" = "已关联的帐号"; - -/* Account Settings cell title Name. */ -"AS_Name" = "名称"; - -/* Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"AS_Email" = "电子邮件"; - -/* Account Settings cell title Add Password. */ -"AS_AddPassword" = "添加密码"; - -/* Account Settings cell title Change Password. */ -"AS_ChangePassword" = "更改密码"; - -/* Account Settings cell title Sign Out. */ -"AS_SignOut" = "退出帐号"; - -/* Account Settings cell title Delete Account. */ -"AS_DeleteAccount" = "删除帐号"; - -/* Button text for 'Forgot Password' action. */ -"ForgotPassword" = "忘记了密码?"; - -/* Alert message title show for re-authorization. */ -"VerifyItsYou" = "请验证是您本人"; - -/* Alert message title shown to confirm account deletion action. */ -"DeleteAccountConfirmationTitle" = "要删除帐号吗?"; - -/* Alert message body shown to confirm account deletion action. */ -"DeleteAccountBody" = "此操作将清空与您的帐号相关联的所有数据,并且无法撤消。您需要重新登录才能完成此操作"; - -/* Explanation message shown before deleting account. */ -"DeleteAccountConfirmationMessage" = "此操作将清空与您的帐号相关联的所有数据,并且无法撤消。确定要删除帐号吗?"; - -/* Text of Delete action button. */ -"Delete" = "删除"; - -/* Title of Controller shown before deleting account */ -"DeleteAccountControllerTitle" = "删除帐号"; - -/* Alert message shown before account deletion. */ -"ActionCantBeUndone" = "此操作无法撤消"; - -/* Button title for unlinking account action. */ -"UnlinkAction" = "取消关联"; - -/* Controller title shown for unlinking account action. */ -"UnlinkTitle" = "已关联的帐号"; - -/* Alert title shown before unlinking action. */ -"UnlinkConfirmationTitle" = "要取消帐号关联吗?"; - -/* Alert message shown before unlinking action. */ -"UnlinkConfirmationMessage" = "您将不能再使用您的帐号登录"; - -/* Alert action title shown before unlinking action. */ -"UnlinkConfirmationActionTitle" = "取消帐号关联"; - -/* Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"UpdateEmailAlertMessage" = "要更改与您的帐号关联的电子邮件地址,您需要再次登录。"; - -/* Alert action message shown before confirmation of updating email action. */ -"UpdateEmailVerificationAlertMessage" = "要更改密码,您需要先输入当前的密码。"; - -/* Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"EditEmailTitle" = "修改电子邮件地址"; - -/* Controller title shown when editing account name. */ -"EditNameTitle" = "修改名称"; - -/* Alert message shown when adding account password. */ -"AddPasswordAlertMessage" = "要为帐号添加密码,您需要重新登录。"; - -/* Alert message shown when editing account password. */ -"EditPasswordAlertMessage" = "要更改帐号的密码,您需要重新登录。"; - -/* Alert message shown when re-authenticating before editing account password. */ -"ReauthenticateEditPasswordAlertMessage" = "要更改密码,您需要先输入当前的密码。"; - -/* Controller title shown when adding password to account. */ -"AddPasswordTitle" = "添加密码"; - -/* Controller title shown when editing password to account. */ -"EditPasswordTitle" = "更改密码"; - -/* Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"ProviderTitlePassword" = "电子邮件"; - -/* Title of Google provider */ -"ProviderTitleGoogle" = "Google"; - -/* Title of Facebook provider */ -"ProviderTitleFacebook" = "Facebook"; - -/* Title of Twitter provider */ -"ProviderTitleTwitter" = "Twitter"; - -/* Sign in with provider button label. */ -"SignInWithProvider" = "使用 %@ 帐号登录"; - -/* Placeholder of input cell when user changes name. */ -"PlaceholderEnterName" = "输入您的名称"; - -/* Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars. */ -"PlaceholderEnterEmail" = "输入您的电子邮件地址"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderEnterPassword" = "输入您的密码"; - -/* Placeholder of secret input cell when user confirms password. */ -"PlaceholderNewPassword" = "新密码"; - -/* Placeholder of secret input cell when user changes password. */ -"PlaceholderChosePassword" = "选择密码"; - -/* Title of forgot password button. */ -"ForgotPasswordTitle" = "登录时遇到问题?"; - -/* Title of confirm email label. */ -"ConfirmEmail" = "确认电子邮件地址"; - -/* Title of successfully signed in label. */ -"SignedIn" = "已登录!"; - -/* Title used in trouble getting email alert view. */ -"TroubleGettingEmailTitle" = "无法收到电子邮件?"; - -/* Alert message displayed when user having trouble getting email. */ -"TroubleGettingEmailMessage" = "尝试以下常见解决方法:\n - 检查电子邮件是否被标记为垃圾邮件或被过滤。\n - 检查互联网连接。\n - 确保没有写错电子邮件地址。\n - 确保收件箱空间充足,且不存在其他与收件箱设置有关的问题。\n 如果上述步骤未能帮助您解决问题,您可以重新发送电子邮件。请注意,重新发送后上一封电子邮件中的链接将失效。"; - -/* Message displayed after email is sent. The placeholder is the email address that the email is sent to. */ -"EmailSentConfirmationMessage" = "系统已将含附加说明的登录电子邮件发送至 %@。请查收电子邮件以完成登录。"; - -/* Message displayed after the email of sign-in link is sent. */ -"SignInEmailSent" = "已发送登录电子邮件"; diff --git a/FirebaseEmailAuthUI.podspec b/FirebaseEmailAuthUI.podspec deleted file mode 100644 index b89d646bfd1..00000000000 --- a/FirebaseEmailAuthUI.podspec +++ /dev/null @@ -1,29 +0,0 @@ -Pod::Spec.new do |s| - s.name = 'FirebaseEmailAuthUI' - s.version = '15.1.0' - s.summary = 'An email authentication provider for FirebaseAuthUI.' - s.homepage = 'https://github.com/firebase/FirebaseUI-iOS' - s.license = { :type => 'Apache 2.0', :file => 'LICENSE' } - s.source = { :git => 'https://github.com/firebase/FirebaseUI-iOS.git', :tag => 'v' + s.version.to_s} - s.author = 'Firebase' - s.platform = :ios - s.ios.deployment_target = '13.0' - s.ios.framework = 'UIKit' - s.requires_arc = true - s.cocoapods_version = '>= 1.8.0' - s.pod_target_xcconfig = { - 'HEADER_SEARCH_PATHS' => '"${PODS_TARGET_SRCROOT}"', - } - s.swift_version = '6.0' - - s.public_header_files = 'FirebaseEmailAuthUI/Sources/Public/FirebaseEmailAuthUI/*.h' - s.source_files = 'FirebaseEmailAuthUI/Sources/**/*.{h,m}' - s.dependency 'FirebaseAuth' - s.dependency 'FirebaseCore' - s.dependency 'FirebaseAuthUI', '~> 15.0' - s.dependency 'GoogleUtilities/UserDefaults' - s.resource_bundles = { - 'FirebaseEmailAuthUI' => ['FirebaseEmailAuthUI/Sources/Resources/*.{xib,png}'] - } - -end diff --git a/FirebaseEmailAuthUI/FirebaseEmailAuthUI.xcodeproj/project.pbxproj b/FirebaseEmailAuthUI/FirebaseEmailAuthUI.xcodeproj/project.pbxproj deleted file mode 100644 index 646e2bfe0b8..00000000000 --- a/FirebaseEmailAuthUI/FirebaseEmailAuthUI.xcodeproj/project.pbxproj +++ /dev/null @@ -1,623 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 50; - objects = { - -/* Begin PBXBuildFile section */ - 8D55F179261E710A0020DFB0 /* ic_email@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8D55F170261E710A0020DFB0 /* ic_email@3x.png */; }; - 8D55F17A261E710A0020DFB0 /* FUIPasswordRecoveryViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8D55F171261E710A0020DFB0 /* FUIPasswordRecoveryViewController.xib */; }; - 8D55F17B261E710A0020DFB0 /* ic_email@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8D55F172261E710A0020DFB0 /* ic_email@2x.png */; }; - 8D55F17C261E710A0020DFB0 /* FUIEmailEntryViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8D55F173261E710A0020DFB0 /* FUIEmailEntryViewController.xib */; }; - 8D55F17D261E710A0020DFB0 /* FUIPasswordVerificationViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8D55F174261E710A0020DFB0 /* FUIPasswordVerificationViewController.xib */; }; - 8D55F17E261E710A0020DFB0 /* FUIPasswordSignUpViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8D55F175261E710A0020DFB0 /* FUIPasswordSignUpViewController.xib */; }; - 8D55F17F261E710A0020DFB0 /* ic_email.png in Resources */ = {isa = PBXBuildFile; fileRef = 8D55F176261E710A0020DFB0 /* ic_email.png */; }; - 8D55F180261E710A0020DFB0 /* FUIConfirmEmailViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8D55F177261E710A0020DFB0 /* FUIConfirmEmailViewController.xib */; }; - 8D55F181261E710A0020DFB0 /* FUIPasswordSignInViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8D55F178261E710A0020DFB0 /* FUIPasswordSignInViewController.xib */; }; - 8D69E36F21DD623F00CFA49B /* FirebaseEmailAuthUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8D69E36521DD623F00CFA49B /* FirebaseEmailAuthUI.framework */; }; - 8D69E37421DD623F00CFA49B /* FirebaseEmailAuthUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E37321DD623F00CFA49B /* FirebaseEmailAuthUITests.m */; }; - 8D69E37621DD623F00CFA49B /* FirebaseEmailAuthUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E36821DD623F00CFA49B /* FirebaseEmailAuthUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8D69E38F21DD63B300CFA49B /* FUIPasswordSignInViewController_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E37F21DD63B200CFA49B /* FUIPasswordSignInViewController_Internal.h */; }; - 8D69E39021DD63B300CFA49B /* FUIPasswordSignUpViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E38021DD63B200CFA49B /* FUIPasswordSignUpViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8D69E39121DD63B300CFA49B /* FUIEmailAuth.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E38121DD63B200CFA49B /* FUIEmailAuth.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8D69E39221DD63B300CFA49B /* FUIEmailEntryViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E38221DD63B200CFA49B /* FUIEmailEntryViewController.m */; }; - 8D69E39321DD63B300CFA49B /* FUIPasswordVerificationViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E38321DD63B200CFA49B /* FUIPasswordVerificationViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8D69E39421DD63B300CFA49B /* FUIEmailAuthStrings.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E38421DD63B200CFA49B /* FUIEmailAuthStrings.h */; }; - 8D69E39521DD63B300CFA49B /* FUIEmailAuth_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E38521DD63B200CFA49B /* FUIEmailAuth_Internal.h */; }; - 8D69E39621DD63B300CFA49B /* FUIPasswordSignUpViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E38621DD63B200CFA49B /* FUIPasswordSignUpViewController.m */; }; - 8D69E39721DD63B300CFA49B /* FUIPasswordVerificationViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E38721DD63B200CFA49B /* FUIPasswordVerificationViewController.m */; }; - 8D69E39821DD63B300CFA49B /* FUIEmailEntryViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E38821DD63B200CFA49B /* FUIEmailEntryViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8D69E39921DD63B300CFA49B /* FUIEmailAuthStrings.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E38921DD63B300CFA49B /* FUIEmailAuthStrings.m */; }; - 8D69E39A21DD63B300CFA49B /* FUIPasswordSignInViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E38A21DD63B300CFA49B /* FUIPasswordSignInViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8D69E39B21DD63B300CFA49B /* FUIPasswordRecoveryViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E38B21DD63B300CFA49B /* FUIPasswordRecoveryViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8D69E39C21DD63B300CFA49B /* FUIPasswordRecoveryViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E38C21DD63B300CFA49B /* FUIPasswordRecoveryViewController.m */; }; - 8D69E39D21DD63B300CFA49B /* FUIPasswordSignInViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E38D21DD63B300CFA49B /* FUIPasswordSignInViewController.m */; }; - 8D69E39E21DD63B300CFA49B /* FUIEmailAuth.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E38E21DD63B300CFA49B /* FUIEmailAuth.m */; }; - 8DB377A0226137CC00BF5095 /* FUIConfirmEmailViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8DB3779E226137CC00BF5095 /* FUIConfirmEmailViewController.h */; }; - 8DB377A1226137CC00BF5095 /* FUIConfirmEmailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DB3779F226137CC00BF5095 /* FUIConfirmEmailViewController.m */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 8D69E37021DD623F00CFA49B /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 8D69E35C21DD623F00CFA49B /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8D69E36421DD623F00CFA49B; - remoteInfo = FirebaseEmailAuthUI; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 8D55F170261E710A0020DFB0 /* ic_email@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ic_email@3x.png"; sourceTree = ""; }; - 8D55F171261E710A0020DFB0 /* FUIPasswordRecoveryViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = FUIPasswordRecoveryViewController.xib; sourceTree = ""; }; - 8D55F172261E710A0020DFB0 /* ic_email@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ic_email@2x.png"; sourceTree = ""; }; - 8D55F173261E710A0020DFB0 /* FUIEmailEntryViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = FUIEmailEntryViewController.xib; sourceTree = ""; }; - 8D55F174261E710A0020DFB0 /* FUIPasswordVerificationViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = FUIPasswordVerificationViewController.xib; sourceTree = ""; }; - 8D55F175261E710A0020DFB0 /* FUIPasswordSignUpViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = FUIPasswordSignUpViewController.xib; sourceTree = ""; }; - 8D55F176261E710A0020DFB0 /* ic_email.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_email.png; sourceTree = ""; }; - 8D55F177261E710A0020DFB0 /* FUIConfirmEmailViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = FUIConfirmEmailViewController.xib; sourceTree = ""; }; - 8D55F178261E710A0020DFB0 /* FUIPasswordSignInViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = FUIPasswordSignInViewController.xib; sourceTree = ""; }; - 8D69E36521DD623F00CFA49B /* FirebaseEmailAuthUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FirebaseEmailAuthUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 8D69E36821DD623F00CFA49B /* FirebaseEmailAuthUI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FirebaseEmailAuthUI.h; sourceTree = ""; }; - 8D69E36921DD623F00CFA49B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 8D69E36E21DD623F00CFA49B /* FirebaseEmailAuthUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FirebaseEmailAuthUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 8D69E37321DD623F00CFA49B /* FirebaseEmailAuthUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FirebaseEmailAuthUITests.m; sourceTree = ""; }; - 8D69E37521DD623F00CFA49B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 8D69E37F21DD63B200CFA49B /* FUIPasswordSignInViewController_Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIPasswordSignInViewController_Internal.h; sourceTree = ""; }; - 8D69E38021DD63B200CFA49B /* FUIPasswordSignUpViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIPasswordSignUpViewController.h; sourceTree = ""; }; - 8D69E38121DD63B200CFA49B /* FUIEmailAuth.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIEmailAuth.h; sourceTree = ""; }; - 8D69E38221DD63B200CFA49B /* FUIEmailEntryViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUIEmailEntryViewController.m; sourceTree = ""; }; - 8D69E38321DD63B200CFA49B /* FUIPasswordVerificationViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIPasswordVerificationViewController.h; sourceTree = ""; }; - 8D69E38421DD63B200CFA49B /* FUIEmailAuthStrings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIEmailAuthStrings.h; sourceTree = ""; }; - 8D69E38521DD63B200CFA49B /* FUIEmailAuth_Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIEmailAuth_Internal.h; sourceTree = ""; }; - 8D69E38621DD63B200CFA49B /* FUIPasswordSignUpViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUIPasswordSignUpViewController.m; sourceTree = ""; }; - 8D69E38721DD63B200CFA49B /* FUIPasswordVerificationViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUIPasswordVerificationViewController.m; sourceTree = ""; }; - 8D69E38821DD63B200CFA49B /* FUIEmailEntryViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIEmailEntryViewController.h; sourceTree = ""; }; - 8D69E38921DD63B300CFA49B /* FUIEmailAuthStrings.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUIEmailAuthStrings.m; sourceTree = ""; }; - 8D69E38A21DD63B300CFA49B /* FUIPasswordSignInViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIPasswordSignInViewController.h; sourceTree = ""; }; - 8D69E38B21DD63B300CFA49B /* FUIPasswordRecoveryViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIPasswordRecoveryViewController.h; sourceTree = ""; }; - 8D69E38C21DD63B300CFA49B /* FUIPasswordRecoveryViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUIPasswordRecoveryViewController.m; sourceTree = ""; }; - 8D69E38D21DD63B300CFA49B /* FUIPasswordSignInViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUIPasswordSignInViewController.m; sourceTree = ""; }; - 8D69E38E21DD63B300CFA49B /* FUIEmailAuth.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUIEmailAuth.m; sourceTree = ""; }; - 8DB3779E226137CC00BF5095 /* FUIConfirmEmailViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIConfirmEmailViewController.h; sourceTree = ""; }; - 8DB3779F226137CC00BF5095 /* FUIConfirmEmailViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUIConfirmEmailViewController.m; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 8D69E36221DD623F00CFA49B /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8D69E36B21DD623F00CFA49B /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 8D69E36F21DD623F00CFA49B /* FirebaseEmailAuthUI.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 3F62AEE76F7ADD8E7928642E /* Pods */ = { - isa = PBXGroup; - children = ( - ); - path = Pods; - sourceTree = ""; - }; - 8D55F154261E611A0020DFB0 /* Public */ = { - isa = PBXGroup; - children = ( - 8DAB9B4F2637690100FF271F /* FirebaseEmailAuthUI */, - ); - path = Public; - sourceTree = ""; - }; - 8D55F16F261E710A0020DFB0 /* Resources */ = { - isa = PBXGroup; - children = ( - 8D55F177261E710A0020DFB0 /* FUIConfirmEmailViewController.xib */, - 8D55F173261E710A0020DFB0 /* FUIEmailEntryViewController.xib */, - 8D55F171261E710A0020DFB0 /* FUIPasswordRecoveryViewController.xib */, - 8D55F178261E710A0020DFB0 /* FUIPasswordSignInViewController.xib */, - 8D55F175261E710A0020DFB0 /* FUIPasswordSignUpViewController.xib */, - 8D55F174261E710A0020DFB0 /* FUIPasswordVerificationViewController.xib */, - 8D55F176261E710A0020DFB0 /* ic_email.png */, - 8D55F172261E710A0020DFB0 /* ic_email@2x.png */, - 8D55F170261E710A0020DFB0 /* ic_email@3x.png */, - ); - path = Resources; - sourceTree = ""; - }; - 8D69E35B21DD623F00CFA49B = { - isa = PBXGroup; - children = ( - 8D69E36721DD623F00CFA49B /* Sources */, - 8D69E37221DD623F00CFA49B /* FirebaseEmailAuthUITests */, - 8D69E36621DD623F00CFA49B /* Products */, - 3F62AEE76F7ADD8E7928642E /* Pods */, - ); - sourceTree = ""; - }; - 8D69E36621DD623F00CFA49B /* Products */ = { - isa = PBXGroup; - children = ( - 8D69E36521DD623F00CFA49B /* FirebaseEmailAuthUI.framework */, - 8D69E36E21DD623F00CFA49B /* FirebaseEmailAuthUITests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - 8D69E36721DD623F00CFA49B /* Sources */ = { - isa = PBXGroup; - children = ( - 8D55F154261E611A0020DFB0 /* Public */, - 8DB3779F226137CC00BF5095 /* FUIConfirmEmailViewController.m */, - 8D69E38521DD63B200CFA49B /* FUIEmailAuth_Internal.h */, - 8D69E38E21DD63B300CFA49B /* FUIEmailAuth.m */, - 8D69E38421DD63B200CFA49B /* FUIEmailAuthStrings.h */, - 8D69E38921DD63B300CFA49B /* FUIEmailAuthStrings.m */, - 8D69E38221DD63B200CFA49B /* FUIEmailEntryViewController.m */, - 8D69E38C21DD63B300CFA49B /* FUIPasswordRecoveryViewController.m */, - 8D69E37F21DD63B200CFA49B /* FUIPasswordSignInViewController_Internal.h */, - 8D69E38D21DD63B300CFA49B /* FUIPasswordSignInViewController.m */, - 8D69E38621DD63B200CFA49B /* FUIPasswordSignUpViewController.m */, - 8D69E38721DD63B200CFA49B /* FUIPasswordVerificationViewController.m */, - 8D69E36921DD623F00CFA49B /* Info.plist */, - 8D55F16F261E710A0020DFB0 /* Resources */, - ); - path = Sources; - sourceTree = ""; - }; - 8D69E37221DD623F00CFA49B /* FirebaseEmailAuthUITests */ = { - isa = PBXGroup; - children = ( - 8D69E37321DD623F00CFA49B /* FirebaseEmailAuthUITests.m */, - 8D69E37521DD623F00CFA49B /* Info.plist */, - ); - path = FirebaseEmailAuthUITests; - sourceTree = ""; - }; - 8DAB9B4F2637690100FF271F /* FirebaseEmailAuthUI */ = { - isa = PBXGroup; - children = ( - 8D69E36821DD623F00CFA49B /* FirebaseEmailAuthUI.h */, - 8DB3779E226137CC00BF5095 /* FUIConfirmEmailViewController.h */, - 8D69E38121DD63B200CFA49B /* FUIEmailAuth.h */, - 8D69E38821DD63B200CFA49B /* FUIEmailEntryViewController.h */, - 8D69E38B21DD63B300CFA49B /* FUIPasswordRecoveryViewController.h */, - 8D69E38A21DD63B300CFA49B /* FUIPasswordSignInViewController.h */, - 8D69E38021DD63B200CFA49B /* FUIPasswordSignUpViewController.h */, - 8D69E38321DD63B200CFA49B /* FUIPasswordVerificationViewController.h */, - ); - path = FirebaseEmailAuthUI; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - 8D69E36021DD623F00CFA49B /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 8D69E39821DD63B300CFA49B /* FUIEmailEntryViewController.h in Headers */, - 8D69E38F21DD63B300CFA49B /* FUIPasswordSignInViewController_Internal.h in Headers */, - 8D69E39B21DD63B300CFA49B /* FUIPasswordRecoveryViewController.h in Headers */, - 8DB377A0226137CC00BF5095 /* FUIConfirmEmailViewController.h in Headers */, - 8D69E37621DD623F00CFA49B /* FirebaseEmailAuthUI.h in Headers */, - 8D69E39321DD63B300CFA49B /* FUIPasswordVerificationViewController.h in Headers */, - 8D69E39A21DD63B300CFA49B /* FUIPasswordSignInViewController.h in Headers */, - 8D69E39521DD63B300CFA49B /* FUIEmailAuth_Internal.h in Headers */, - 8D69E39121DD63B300CFA49B /* FUIEmailAuth.h in Headers */, - 8D69E39021DD63B300CFA49B /* FUIPasswordSignUpViewController.h in Headers */, - 8D69E39421DD63B300CFA49B /* FUIEmailAuthStrings.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - 8D69E36421DD623F00CFA49B /* FirebaseEmailAuthUI */ = { - isa = PBXNativeTarget; - buildConfigurationList = 8D69E37921DD623F00CFA49B /* Build configuration list for PBXNativeTarget "FirebaseEmailAuthUI" */; - buildPhases = ( - 8D69E36021DD623F00CFA49B /* Headers */, - 8D69E36121DD623F00CFA49B /* Sources */, - 8D69E36221DD623F00CFA49B /* Frameworks */, - 8D69E36321DD623F00CFA49B /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = FirebaseEmailAuthUI; - productName = FirebaseEmailAuthUI; - productReference = 8D69E36521DD623F00CFA49B /* FirebaseEmailAuthUI.framework */; - productType = "com.apple.product-type.framework"; - }; - 8D69E36D21DD623F00CFA49B /* FirebaseEmailAuthUITests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 8D69E37C21DD623F00CFA49B /* Build configuration list for PBXNativeTarget "FirebaseEmailAuthUITests" */; - buildPhases = ( - 8D69E36A21DD623F00CFA49B /* Sources */, - 8D69E36B21DD623F00CFA49B /* Frameworks */, - 8D69E36C21DD623F00CFA49B /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 8D69E37121DD623F00CFA49B /* PBXTargetDependency */, - ); - name = FirebaseEmailAuthUITests; - productName = FirebaseEmailAuthUITests; - productReference = 8D69E36E21DD623F00CFA49B /* FirebaseEmailAuthUITests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 8D69E35C21DD623F00CFA49B /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 1010; - ORGANIZATIONNAME = Firebase; - TargetAttributes = { - 8D69E36421DD623F00CFA49B = { - CreatedOnToolsVersion = 10.1; - }; - 8D69E36D21DD623F00CFA49B = { - CreatedOnToolsVersion = 10.1; - }; - }; - }; - buildConfigurationList = 8D69E35F21DD623F00CFA49B /* Build configuration list for PBXProject "FirebaseEmailAuthUI" */; - compatibilityVersion = "Xcode 9.3"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - ); - mainGroup = 8D69E35B21DD623F00CFA49B; - productRefGroup = 8D69E36621DD623F00CFA49B /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 8D69E36421DD623F00CFA49B /* FirebaseEmailAuthUI */, - 8D69E36D21DD623F00CFA49B /* FirebaseEmailAuthUITests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 8D69E36321DD623F00CFA49B /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8D55F17B261E710A0020DFB0 /* ic_email@2x.png in Resources */, - 8D55F180261E710A0020DFB0 /* FUIConfirmEmailViewController.xib in Resources */, - 8D55F181261E710A0020DFB0 /* FUIPasswordSignInViewController.xib in Resources */, - 8D55F17C261E710A0020DFB0 /* FUIEmailEntryViewController.xib in Resources */, - 8D55F179261E710A0020DFB0 /* ic_email@3x.png in Resources */, - 8D55F17D261E710A0020DFB0 /* FUIPasswordVerificationViewController.xib in Resources */, - 8D55F17E261E710A0020DFB0 /* FUIPasswordSignUpViewController.xib in Resources */, - 8D55F17F261E710A0020DFB0 /* ic_email.png in Resources */, - 8D55F17A261E710A0020DFB0 /* FUIPasswordRecoveryViewController.xib in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8D69E36C21DD623F00CFA49B /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 8D69E36121DD623F00CFA49B /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8D69E39921DD63B300CFA49B /* FUIEmailAuthStrings.m in Sources */, - 8D69E39621DD63B300CFA49B /* FUIPasswordSignUpViewController.m in Sources */, - 8D69E39C21DD63B300CFA49B /* FUIPasswordRecoveryViewController.m in Sources */, - 8DB377A1226137CC00BF5095 /* FUIConfirmEmailViewController.m in Sources */, - 8D69E39721DD63B300CFA49B /* FUIPasswordVerificationViewController.m in Sources */, - 8D69E39E21DD63B300CFA49B /* FUIEmailAuth.m in Sources */, - 8D69E39D21DD63B300CFA49B /* FUIPasswordSignInViewController.m in Sources */, - 8D69E39221DD63B300CFA49B /* FUIEmailEntryViewController.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8D69E36A21DD623F00CFA49B /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8D69E37421DD623F00CFA49B /* FirebaseEmailAuthUITests.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 8D69E37121DD623F00CFA49B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 8D69E36421DD623F00CFA49B /* FirebaseEmailAuthUI */; - targetProxy = 8D69E37021DD623F00CFA49B /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - 8D69E37721DD623F00CFA49B /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../\""; - IPHONEOS_DEPLOYMENT_TARGET = 12.1; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 8D69E37821DD623F00CFA49B /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../\""; - IPHONEOS_DEPLOYMENT_TARGET = 12.1; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 8D69E37A21DD623F00CFA49B /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Automatic; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Sources/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - OTHER_LDFLAGS = "$(inherited)"; - PRODUCT_BUNDLE_IDENTIFIER = com.firebase.FirebaseEmailAuthUI; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 8D69E37B21DD623F00CFA49B /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Automatic; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Sources/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - OTHER_LDFLAGS = "$(inherited)"; - PRODUCT_BUNDLE_IDENTIFIER = com.firebase.FirebaseEmailAuthUI; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; - 8D69E37D21DD623F00CFA49B /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - INFOPLIST_FILE = FirebaseEmailAuthUITests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuth", - "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore", - "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuthInterop", - "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseUI", - "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher", - "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport", - "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities", - "${PODS_CONFIGURATION_BUILD_DIR}/OCMock", - "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC", - "${PODS_CONFIGURATION_BUILD_DIR}/nanopb", - "$(PODS_CONFIGURATION_BUILD_DIR)/FirebaseAuthUI", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreInternal\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreExtension\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAppCheckInterop\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/RecaptchaInterop\"", - ); - OTHER_LDFLAGS = "$(inherited)"; - PRODUCT_BUNDLE_IDENTIFIER = com.firebase.FirebaseEmailAuthUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 8D69E37E21DD623F00CFA49B /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - INFOPLIST_FILE = FirebaseEmailAuthUITests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuth", - "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore", - "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuthInterop", - "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseUI", - "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher", - "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport", - "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities", - "${PODS_CONFIGURATION_BUILD_DIR}/OCMock", - "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC", - "${PODS_CONFIGURATION_BUILD_DIR}/nanopb", - "$(PODS_CONFIGURATION_BUILD_DIR)/FirebaseAuthUI", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreInternal\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreExtension\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAppCheckInterop\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/RecaptchaInterop\"", - ); - OTHER_LDFLAGS = "$(inherited)"; - PRODUCT_BUNDLE_IDENTIFIER = com.firebase.FirebaseEmailAuthUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 8D69E35F21DD623F00CFA49B /* Build configuration list for PBXProject "FirebaseEmailAuthUI" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 8D69E37721DD623F00CFA49B /* Debug */, - 8D69E37821DD623F00CFA49B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 8D69E37921DD623F00CFA49B /* Build configuration list for PBXNativeTarget "FirebaseEmailAuthUI" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 8D69E37A21DD623F00CFA49B /* Debug */, - 8D69E37B21DD623F00CFA49B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 8D69E37C21DD623F00CFA49B /* Build configuration list for PBXNativeTarget "FirebaseEmailAuthUITests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 8D69E37D21DD623F00CFA49B /* Debug */, - 8D69E37E21DD623F00CFA49B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 8D69E35C21DD623F00CFA49B /* Project object */; -} diff --git a/FirebaseEmailAuthUI/FirebaseEmailAuthUI.xcodeproj/xcshareddata/xcschemes/FirebaseEmailAuthUI.xcscheme b/FirebaseEmailAuthUI/FirebaseEmailAuthUI.xcodeproj/xcshareddata/xcschemes/FirebaseEmailAuthUI.xcscheme deleted file mode 100644 index 689eed2fce6..00000000000 --- a/FirebaseEmailAuthUI/FirebaseEmailAuthUI.xcodeproj/xcshareddata/xcschemes/FirebaseEmailAuthUI.xcscheme +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FirebaseEmailAuthUI/FirebaseEmailAuthUITests/FirebaseEmailAuthUITests.m b/FirebaseEmailAuthUI/FirebaseEmailAuthUITests/FirebaseEmailAuthUITests.m deleted file mode 100644 index 812a9a462c4..00000000000 --- a/FirebaseEmailAuthUI/FirebaseEmailAuthUITests/FirebaseEmailAuthUITests.m +++ /dev/null @@ -1,67 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FUIEmailAuth.h" -@import FirebaseAuth; -#import -#import "FUIAuthUtils.h" -#import -#import -#import -#import - -@interface FirebaseEmailAuthUITests : XCTestCase -@property (nonatomic, strong) FUIEmailAuth *provider; -@end - -@implementation FirebaseEmailAuthUITests - -- (void)setUp { - [super setUp]; - - id authUIClass = OCMClassMock([FUIAuth class]); - OCMStub([authUIClass setEmailAuthProvider:[OCMArg any]]).andDo(^(NSInvocation *invocation){ - // do nothing - }); - OCMStub(ClassMethod([authUIClass authUIWithAuth:OCMOCK_ANY])). - andReturn(authUIClass); - - id authClass = OCMClassMock([FIRAuth class]); - OCMStub(ClassMethod([authClass auth])). - andReturn(authClass); - - self.provider = [[FUIEmailAuth alloc] init]; -} - -- (void)tearDown { - self.provider = nil; - [super tearDown]; -} - -- (void)testProviderValidity { - XCTAssertNotNil(self.provider); - XCTAssertNotNil(self.provider.icon); - XCTAssertNotNil(self.provider.signInLabel); - XCTAssertNotNil(self.provider.buttonBackgroundColor); - XCTAssertNotNil(self.provider.buttonTextColor); - XCTAssertNotNil(self.provider.providerID); - XCTAssertNotNil(self.provider.shortName); - XCTAssertTrue(self.provider.signInLabel.length != 0); - XCTAssertNil(self.provider.accessToken); - XCTAssertNil(self.provider.idToken); -} - -@end diff --git a/FirebaseEmailAuthUI/FirebaseEmailAuthUITests/Info.plist b/FirebaseEmailAuthUI/FirebaseEmailAuthUITests/Info.plist deleted file mode 100644 index ba72822e872..00000000000 --- a/FirebaseEmailAuthUI/FirebaseEmailAuthUITests/Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - - diff --git a/FirebaseEmailAuthUI/Podfile b/FirebaseEmailAuthUI/Podfile deleted file mode 100644 index 8c7aaa73a1f..00000000000 --- a/FirebaseEmailAuthUI/Podfile +++ /dev/null @@ -1,18 +0,0 @@ -# source 'sso://cpdc-internal/firebase' -source 'https://github.com/CocoaPods/Specs.git' - -platform :ios, '13.0' - -target 'FirebaseEmailAuthUI' do - use_frameworks! - - # The dependencies in the FirebaseEmailAuthUI podspec should be here. - pod 'FirebaseAuthUI', :path => '../' - pod 'GoogleUtilities/UserDefaults' - - target 'FirebaseEmailAuthUITests' do - inherit! :search_paths - pod 'OCMock' - end - -end diff --git a/FirebaseEmailAuthUI/Sources/FUIConfirmEmailViewController.m b/FirebaseEmailAuthUI/Sources/FUIConfirmEmailViewController.m deleted file mode 100755 index 90687777b57..00000000000 --- a/FirebaseEmailAuthUI/Sources/FUIConfirmEmailViewController.m +++ /dev/null @@ -1,305 +0,0 @@ -// -// Copyright (c) 2018 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebaseEmailAuthUI/Sources/Public/FirebaseEmailAuthUI/FUIConfirmEmailViewController.h" - -@import FirebaseAuth; - -#import - -#import "FirebaseEmailAuthUI/Sources/Public/FirebaseEmailAuthUI/FUIEmailAuth.h" -#import "FirebaseEmailAuthUI/Sources/FUIEmailAuth_Internal.h" -#import "FirebaseEmailAuthUI/Sources/FUIEmailAuthStrings.h" -#import "FirebaseEmailAuthUI/Sources/Public/FirebaseEmailAuthUI/FUIPasswordSignInViewController.h" -#import "FirebaseEmailAuthUI/Sources/Public/FirebaseEmailAuthUI/FUIPasswordSignUpViewController.h" - -/** @var kCellReuseIdentifier - @brief The reuse identifier for table view cell. - */ -static NSString *const kCellReuseIdentifier = @"cellReuseIdentifier"; - -/** @var kAppIDCodingKey - @brief The key used to encode the app ID for NSCoding. - */ -static NSString *const kAppIDCodingKey = @"appID"; - -/** @var kAuthUICodingKey - @brief The key used to encode @c FUIAuth instance for NSCoding. - */ -static NSString *const kAuthUICodingKey = @"authUI"; - -/** @var kEmailCellAccessibilityID - @brief The Accessibility Identifier for the @c email sign in cell. - */ -static NSString *const kEmailCellAccessibilityID = @"EmailCellAccessibilityID"; - -/** @var kNextButtonAccessibilityID - @brief The Accessibility Identifier for the @c next button. - */ -static NSString *const kNextButtonAccessibilityID = @"NextButtonAccessibilityID"; - -@interface FUIConfirmEmailViewController () - -/** @property emailField - @brief The @c UITextField that user enters email address into. - */ -@property (nonatomic) UITextField *emailField; - -/** @property tableView - @brief The @c UITableView used to store all UI elements. - */ -@property (nonatomic, weak) IBOutlet UITableView *tableView; - -/** @property termsOfServiceView - @brief The @c Text view which displays Terms of Service. - */ -@property (nonatomic, weak) IBOutlet FUIPrivacyAndTermsOfServiceView *termsOfServiceView; - -@end - -@implementation FUIConfirmEmailViewController - -- (instancetype)initWithAuthUI:(FUIAuth *)authUI { - return [self initWithNibName:NSStringFromClass([self class]) - bundle:[FUIEmailAuth bundle] - authUI:authUI]; -} - -- (instancetype)initWithNibName:(NSString *)nibNameOrNil - bundle:(NSBundle *)nibBundleOrNil - authUI:(FUIAuth *)authUI { - self = [super initWithNibName:nibNameOrNil - bundle:nibBundleOrNil - authUI:authUI]; - if (self) { - self.title = FUILocalizedString(kStr_ConfirmEmail); - } - return self; -} - -- (void)viewDidLoad { - [super viewDidLoad]; - - UIBarButtonItem *nextButtonItem = - [FUIAuthBaseViewController barItemWithTitle:FUILocalizedString(kStr_Next) - target:self - action:@selector(next)]; - nextButtonItem.accessibilityIdentifier = kNextButtonAccessibilityID; - self.navigationItem.rightBarButtonItem = nextButtonItem; - self.termsOfServiceView.authUI = self.authUI; - [self.termsOfServiceView useFullMessage]; - - [self enableDynamicCellHeightForTableView:self.tableView]; -} - -- (void)viewWillAppear:(BOOL)animated { - [super viewWillAppear:animated]; - - if (self.navigationController.viewControllers.firstObject == self) { - if (!self.authUI.shouldHideCancelButton) { - UIBarButtonItem *cancelBarButton = - [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel - target:self - action:@selector(cancelAuthorization)]; - self.navigationItem.leftBarButtonItem = cancelBarButton; - } - self.navigationItem.backBarButtonItem = - [[UIBarButtonItem alloc] initWithTitle:FUILocalizedString(kStr_Back) - style:UIBarButtonItemStylePlain - target:nil - action:nil]; - - if (@available(iOS 13, *)) { - if (!self.authUI.isInteractiveDismissEnabled) { - self.modalInPresentation = YES; - } - } - } -} - -#pragma mark - Actions - -- (void)next { - [self onNext:self.emailField.text]; -} - -- (void)onNext:(NSString *)emailText { - // TODO: After Firebase 11 minimum, change to EmailAuthProvider.id. - FUIEmailAuth *emailAuth = [self.authUI providerWithID:@"password"]; - - if (![[self class] isValidEmail:emailText]) { - [self showAlertWithMessage:FUILocalizedString(kStr_InvalidEmailError)]; - return; - } - - [self incrementActivity]; - FIRAuthCredential *credential = - [FIREmailAuthProvider credentialWithEmail:emailText link:emailAuth.emailLink]; - - void (^completeSignInBlock)(FIRAuthDataResult *, NSError *) = ^(FIRAuthDataResult *authResult, - NSError *error) { - [self decrementActivity]; - - if (error) { - switch (error.code) { - case FIRAuthErrorCodeWrongPassword: - [self showAlertWithMessage:FUILocalizedString(kStr_WrongPasswordError)]; - return; - case FIRAuthErrorCodeUserNotFound: - [self showAlertWithMessage:FUILocalizedString(kStr_UserNotFoundError)]; - return; - case FIRAuthErrorCodeUserDisabled: - [self showAlertWithMessage:FUILocalizedString(kStr_AccountDisabledError)]; - return; - case FIRAuthErrorCodeTooManyRequests: - [self showAlertWithMessage:FUILocalizedString(kStr_SignInTooManyTimesError)]; - return; - default: - [self showAlertWithMessage:error.description]; - return; - } - } - - [[self class] showAlertWithTitle:FUILocalizedString(kStr_SignedIn) - message:nil - actionTitle:nil - actionHandler:nil - dismissTitle:@"OK" - dismissHandler:^{ - [self.navigationController dismissViewControllerAnimated:YES completion:^{ - [self.authUI invokeResultCallbackWithAuthDataResult:authResult URL:nil error:error]; - }]; - } - presentingViewController:self]; - }; - - [self.auth signInWithCredential:credential completion:completeSignInBlock]; -} - -- (void)textFieldDidChange { - [self didChangeEmail:self.emailField.text]; -} - -- (void)didChangeEmail:(NSString *)emailText { - self.navigationItem.rightBarButtonItem.enabled = (emailText.length > 0); -} - -#pragma mark - UITableViewDataSource - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - return 1; -} - -- (UITableViewCell *)tableView:(UITableView *)tableView - cellForRowAtIndexPath:(NSIndexPath *)indexPath { - FUIAuthTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellReuseIdentifier]; - if (!cell) { - UINib *cellNib = [UINib nibWithNibName:NSStringFromClass([FUIAuthTableViewCell class]) - bundle:[FUIAuthUtils authUIBundle]]; - [tableView registerNib:cellNib forCellReuseIdentifier:kCellReuseIdentifier]; - cell = [tableView dequeueReusableCellWithIdentifier:kCellReuseIdentifier]; - } - cell.label.text = FUILocalizedString(kStr_Email); - cell.textField.placeholder = FUILocalizedString(kStr_ConfirmEmail); - cell.textField.delegate = self; - cell.accessibilityIdentifier = kEmailCellAccessibilityID; - self.emailField = cell.textField; - cell.textField.secureTextEntry = NO; - cell.textField.autocorrectionType = UITextAutocorrectionTypeNo; - cell.textField.autocapitalizationType = UITextAutocapitalizationTypeNone; - cell.textField.returnKeyType = UIReturnKeyNext; - cell.textField.keyboardType = UIKeyboardTypeEmailAddress; - if (@available(iOS 11.0, *)) { - cell.textField.textContentType = UITextContentTypeUsername; - } - [cell.textField addTarget:self - action:@selector(textFieldDidChange) - forControlEvents:UIControlEventEditingChanged]; - [self didChangeEmail:self.emailField.text]; - return cell; -} - -- (nullable id)bestProviderFromProviderIDs:(NSArray *)providerIDs { - NSArray> *providers = self.authUI.providers; - for (NSString *providerID in providerIDs) { - for (id provider in providers) { - if ([providerID isEqual:provider.providerID]) { - return provider; - } - } - } - return nil; -} - -#pragma mark - UITextFieldDelegate - -- (BOOL)textFieldShouldReturn:(UITextField *)textField { - if (textField == self.emailField) { - [self onNext:self.emailField.text]; - } - return NO; -} - -#pragma mark - Utilities - -/** @fn signInWithProvider:email: - @brief Actually kicks off sign in with the provider. - @param provider The identity provider to sign in with. - @param email The email address of the user. - */ -- (void)signInWithProvider:(id)provider email:(NSString *)email { - [self incrementActivity]; - - // Sign out first to make sure sign in starts with a clean state. - [provider signOut]; - [provider signInWithDefaultValue:email - presentingViewController:self - completion:^(FIRAuthCredential * _Nullable credential, - NSError * _Nullable error, - FIRAuthResultCallback _Nullable result, - NSDictionary * _Nullable userInfo) { - if (error) { - [self decrementActivity]; - if (result) { - result(nil, error); - } - - [self dismissNavigationControllerAnimated:YES completion:^{ - [self.authUI invokeResultCallbackWithAuthDataResult:nil URL:nil error:error]; - }]; - return; - } - - [self.auth signInWithCredential:credential - completion:^(FIRAuthDataResult *_Nullable authResult, - NSError *_Nullable error) { - [self decrementActivity]; - if (result) { - result(authResult.user, error); - } - - if (error) { - [self.authUI invokeResultCallbackWithAuthDataResult:nil URL:nil error:error]; - } else { - [self dismissNavigationControllerAnimated:YES completion:^{ - [self.authUI invokeResultCallbackWithAuthDataResult:authResult URL:nil error:error]; - }]; - } - }]; - }]; -} - -@end diff --git a/FirebaseEmailAuthUI/Sources/FUIEmailAuth.m b/FirebaseEmailAuthUI/Sources/FUIEmailAuth.m deleted file mode 100644 index e20405a955a..00000000000 --- a/FirebaseEmailAuthUI/Sources/FUIEmailAuth.m +++ /dev/null @@ -1,868 +0,0 @@ -// -// Copyright (c) 2018 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebaseEmailAuthUI/Sources/Public/FirebaseEmailAuthUI/FUIEmailAuth.h" - -@import FirebaseCore; -@import FirebaseAuth; -#import - -#import - -#import "FirebaseEmailAuthUI/Sources/Public/FirebaseEmailAuthUI/FUIConfirmEmailViewController.h" -#import "FirebaseEmailAuthUI/Sources/FUIEmailAuthStrings.h" -#import "FirebaseEmailAuthUI/Sources/FUIEmailAuth_Internal.h" -#import "FirebaseEmailAuthUI/Sources/Public/FirebaseEmailAuthUI/FUIEmailEntryViewController.h" -#import "FirebaseEmailAuthUI/Sources/FUIPasswordSignInViewController_Internal.h" -#import "FirebaseEmailAuthUI/Sources/Public/FirebaseEmailAuthUI/FUIPasswordVerificationViewController.h" -#import "FirebaseEmailAuthUI/Sources/Public/FirebaseEmailAuthUI/FUIPasswordSignInViewController.h" - -/** @var kErrorUserInfoEmailKey - @brief The key for the email address in the userinfo dictionary of a sign in error. - */ -static NSString *const kErrorUserInfoEmailKey = @"FIRAuthErrorUserInfoEmailKey"; - -/** @var kEmailButtonAccessibilityID - @brief The Accessibility Identifier for the @c email sign in button. - */ -static NSString *const kEmailButtonAccessibilityID = @"EmailButtonAccessibilityID"; - -/** @var kEmailLinkSignInEmailKey - @brief The key of the email which request email link sign in. - */ -static NSString *const kEmailLinkSignInEmailKey = @"FIRAuthEmailLinkSignInEmail"; - -/** @var kEmailLinkSignInLinkingCredentialKey - @brief The key of the auth credential to be linked. - */ -static NSString *const kEmailLinkSignInLinkingCredentialKey = @"FIRAuthEmailLinkSignInLinkingCredential"; - -@interface FUIEmailAuth () -/** @property authUI. - @brief The @c FUIAuth instance of the application. - */ -@property(nonatomic, strong, readonly) FUIAuth *authUI; - -/** @property pendingSignInCallback. - @brief The callback which should be invoked when the sign in flow completes (or is cancelled.) - */ -@property(nonatomic, copy, readwrite) FUIAuthProviderSignInCompletionBlock pendingSignInCallback; - -/** @property presentingViewController - @brief The presenting view controller for interactive sign-in. - */ -@property(nonatomic, strong) UIViewController *presentingViewController; - -@end - -@implementation FUIEmailAuth - -+ (NSBundle *)bundle { - return [FUIAuthUtils bundleNamed:FUIEmailAuthBundleName - inFrameworkBundle:[NSBundle bundleForClass:[self class]]]; -} - -- (instancetype)init { - return [self initAuthAuthUI:[FUIAuth defaultAuthUI] - signInMethod:@"password" - forceSameDevice:NO - allowNewEmailAccounts:YES - requireDisplayName:YES - actionCodeSetting:[[FIRActionCodeSettings alloc] init]]; -} - - -- (instancetype)initAuthAuthUI:(FUIAuth *)authUI - signInMethod:(NSString *)signInMethod - forceSameDevice:(BOOL)forceSameDevice - allowNewEmailAccounts:(BOOL)allowNewEmailAccounts - actionCodeSetting:(FIRActionCodeSettings *)actionCodeSettings { - return [self initAuthAuthUI:authUI - signInMethod:signInMethod - forceSameDevice:forceSameDevice - allowNewEmailAccounts:allowNewEmailAccounts - requireDisplayName:YES - actionCodeSetting:actionCodeSettings]; -} - -- (instancetype)initAuthAuthUI:(FUIAuth *)authUI - signInMethod:(NSString *)signInMethod - forceSameDevice:(BOOL)forceSameDevice - allowNewEmailAccounts:(BOOL)allowNewEmailAccounts - requireDisplayName:(BOOL)requireDisplayName - actionCodeSetting:(FIRActionCodeSettings *)actionCodeSettings { - self = [super init]; - if (self) { - _authUI = authUI; - _authUI.emailAuthProvider = self; - _signInMethod = signInMethod; - _forceSameDevice = forceSameDevice; - _allowNewEmailAccounts = allowNewEmailAccounts; - _requireDisplayName = requireDisplayName; - _actionCodeSettings = actionCodeSettings; - } - return self; -} - - -#pragma mark - FUIAuthProvider - -- (nullable NSString *)providerID { - return @"password"; -} - -/** @fn accessToken: - @brief Email Auth token is matched by FirebaseUI User Access Token - */ -- (nullable NSString *)accessToken { - return nil; -} - -/** @fn idToken: - @brief Email Auth Token Secret is matched by FirebaseUI User Id Token - */ -- (nullable NSString *)idToken { - return nil; -} - -- (NSString *)shortName { - return @"Email"; -} - -- (NSString *)signInLabel { - return FUILocalizedString(kStr_SignInWithEmail); -} - -- (UIImage *)icon { - return [FUIAuthUtils imageNamed:@"ic_email" fromBundle:[FUIEmailAuth bundle]]; -} - -- (UIColor *)buttonBackgroundColor { - return [UIColor colorWithRed:208.f/255.f green:2.f/255.f blue:27.f/255.f alpha:1.0]; -} - -- (UIColor *)buttonTextColor { - return [UIColor whiteColor]; -} - -- (void)signInWithPresentingViewController:(UIViewController *)presentingViewController { - [self signInWithPresentingViewController:presentingViewController - email:nil]; -} - -- (void)signInWithPresentingViewController:(UIViewController *)presentingViewController - email:(nullable NSString *)email { - [self.authUI signInWithProviderUI:self - presentingViewController:presentingViewController - defaultValue:email]; -} - - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-implementations" -- (void)signInWithEmail:(nullable NSString *)email - presentingViewController:(nullable UIViewController *)presentingViewController - completion:(nullable FUIAuthProviderSignInCompletionBlock)completion { - [self signInWithDefaultValue:email - presentingViewController:presentingViewController - completion:completion]; -} -#pragma clang diagnostic pop - -- (void)signInWithDefaultValue:(nullable NSString *)defaultValue - presentingViewController:(nullable UIViewController *)presentingViewController - completion:(nullable FUIAuthProviderSignInCompletionBlock)completion { - self.presentingViewController = presentingViewController; - - self.pendingSignInCallback = completion; - id delegate = self.authUI.delegate; - UIViewController *controller; - if (self.allowNewEmailAccounts) { - if ([delegate respondsToSelector:@selector(emailEntryViewControllerForAuthUI:)]) { - controller = [delegate emailEntryViewControllerForAuthUI:self.authUI]; - } else { - controller = [[FUIEmailEntryViewController alloc] initWithAuthUI:self.authUI]; - } - } else { - if ([delegate respondsToSelector:@selector(passwordSignInViewControllerForAuthUI:email:)]) { - controller = [delegate passwordSignInViewControllerForAuthUI:self.authUI - email:defaultValue]; - } else { - controller = [[FUIPasswordSignInViewController alloc] initWithAuthUI:self.authUI - email:defaultValue]; - } - } - - if ([presentingViewController isKindOfClass:[FUIAuthBaseViewController class]]) { - FUIAuthBaseViewController *authController = - (FUIAuthBaseViewController *)presentingViewController; - [authController pushViewController:controller]; - } else { - UINavigationController *navigationController = - [[UINavigationController alloc] initWithRootViewController:controller]; - [presentingViewController presentViewController:navigationController - animated:YES - completion:nil]; - } -} - -- (void)signOut { - return; -} - -- (BOOL)handleOpenURL:(NSURL *)URL sourceApplication:(nullable NSString *)sourceApplication { - self.emailLink = URL.absoluteString; - - // Retrieve continueUrl from URL - NSURLComponents *urlComponents = [NSURLComponents componentsWithString:URL.absoluteString]; - NSString *continueURLString; - for (NSURLQueryItem *queryItem in urlComponents.queryItems) { - if ([queryItem.name isEqualToString:@"continueUrl"]) { - continueURLString = queryItem.value; - } - } - if (!continueURLString) { - NSLog(@"FUIEmailAuth unable to handle url without continue URL: %@", URL); - return NO; - } - - // Retrieve url parameters from continueUrl - NSMutableDictionary *urlParameterDict= [NSMutableDictionary dictionary]; - NSURLComponents *continueURLComponents = [NSURLComponents componentsWithString:continueURLString]; - for (NSURLQueryItem *queryItem in continueURLComponents.queryItems) { - urlParameterDict[queryItem.name] = queryItem.value; - } - // Retrieve parameters from local storage - NSMutableDictionary *localParameterDict = [NSMutableDictionary dictionary]; - localParameterDict[kEmailLinkSignInEmailKey] = [GULUserDefaults.standardUserDefaults - stringForKey:kEmailLinkSignInEmailKey]; - localParameterDict[@"ui_sid"] = [GULUserDefaults.standardUserDefaults stringForKey:@"ui_sid"]; - - // Handling flows - NSString *urlSessionID = urlParameterDict[@"ui_sid"]; - NSString *localSessionID = localParameterDict[@"ui_sid"]; - BOOL sameDevice = urlSessionID && localSessionID && [urlSessionID isEqualToString:localSessionID]; - - if (sameDevice) { - // Same device - if (urlParameterDict[@"ui_pid"]) { - // Unverified provider linking - NSError *error = nil; - [self handleUnverifiedProviderLinking:urlParameterDict[@"ui_pid"] - email:localParameterDict[kEmailLinkSignInEmailKey] - error:&error]; - if (error != nil) { - NSLog(@"Error verifying provider linking: %@", error); - return NO; - } - } else if (urlParameterDict[@"ui_auid"]) { - // Anonymous upgrade - [self handleAnonymousUpgrade:urlParameterDict[@"ui_auid"] - email:localParameterDict[kEmailLinkSignInEmailKey]]; - } else { - // Normal email link sign in - [self handleEmaiLinkSignIn:localParameterDict[kEmailLinkSignInEmailKey]]; - } - } else { - // Different device - if ([urlParameterDict[@"ui_sd"] isEqualToString:@"1"]) { - // Force same device enabled - [self handleDifferentDevice]; - } else { - // Force same device not enabled - [self handleConfirmEmail]; - } - } - - return YES; -} - -- (void)handleUnverifiedProviderLinking:(NSString *)providerID - email:(NSString *)email - error:(NSError **)error { - if ([providerID isEqualToString:@"facebook.com"]) { - NSData *unverifiedProviderCredentialData = [GULUserDefaults.standardUserDefaults - objectForKey:kEmailLinkSignInLinkingCredentialKey]; - FIRAuthCredential *unverifiedProviderCredential; - - // TODO: - // The replacement method for `unarchiveObjectWithData:` requires NSSecureCoding, which - // FIRAuthCredential does not yet conform to. -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - unverifiedProviderCredential = - [NSKeyedUnarchiver unarchiveObjectWithData:unverifiedProviderCredentialData]; -#pragma clang diagnostic pop - - FIRAuthCredential *emailLinkCredential = - [FIREmailAuthProvider credentialWithEmail:email link:self.emailLink]; - - void (^completeSignInBlock)(FIRAuthDataResult *, NSError *) = ^(FIRAuthDataResult *authResult, - NSError *error) { - if (error) { - switch (error.code) { - case FIRAuthErrorCodeWrongPassword: - [FUIAuthBaseViewController showAlertWithMessage:FUILocalizedString(kStr_WrongPasswordError)]; - return; - case FIRAuthErrorCodeUserNotFound: - [FUIAuthBaseViewController showAlertWithMessage:FUILocalizedString(kStr_UserNotFoundError)]; - return; - case FIRAuthErrorCodeUserDisabled: - [FUIAuthBaseViewController showAlertWithMessage:FUILocalizedString(kStr_AccountDisabledError)]; - return; - case FIRAuthErrorCodeTooManyRequests: - [FUIAuthBaseViewController showAlertWithMessage:FUILocalizedString(kStr_SignInTooManyTimesError)]; - return; - } - } - - void (^dismissHandler)(void) = ^() { - UINavigationController *authViewController = [self.authUI authViewController]; - if (!(authViewController.isViewLoaded && authViewController.view.window)) { - [authViewController.navigationController dismissViewControllerAnimated:YES completion:nil]; - } - [self.authUI invokeResultCallbackWithAuthDataResult:authResult URL:nil error:error]; - }; - - [FUIAuthBaseViewController showAlertWithTitle:FUILocalizedString(kStr_SignedIn) - message:nil - actionTitle:nil - actionHandler:nil - dismissTitle:@"OK" - dismissHandler:dismissHandler - presentingViewController:nil]; - }; - - [self.authUI.auth signInWithCredential:emailLinkCredential - completion:^(FIRAuthDataResult * _Nullable authResult, - NSError * _Nullable error) { - if (error) { - [FUIAuthBaseViewController showAlertWithMessage:error.description]; - return; - } - - [authResult.user linkWithCredential:unverifiedProviderCredential completion:completeSignInBlock]; - }]; - } -} - -- (void)handleAnonymousUpgrade:(NSString *)anonymousUserID email:(NSString *)email { - // Check for the presence of an anonymous user and whether automatic upgrade is enabled. - if (self.authUI.auth.currentUser.isAnonymous && - self.authUI.shouldAutoUpgradeAnonymousUsers && - [anonymousUserID isEqualToString:self.authUI.auth.currentUser.uid]) { - - FIRAuthCredential *credential = - [FIREmailAuthProvider credentialWithEmail:email link:self.emailLink]; - - void (^completeSignInBlock)(FIRAuthDataResult *, NSError *) = ^(FIRAuthDataResult *authResult, - NSError *error) { - if (error) { - switch (error.code) { - case FIRAuthErrorCodeWrongPassword: - [FUIAuthBaseViewController showAlertWithMessage:FUILocalizedString(kStr_WrongPasswordError)]; - return; - case FIRAuthErrorCodeUserNotFound: - [FUIAuthBaseViewController showAlertWithMessage:FUILocalizedString(kStr_UserNotFoundError)]; - return; - case FIRAuthErrorCodeUserDisabled: - [FUIAuthBaseViewController showAlertWithMessage:FUILocalizedString(kStr_AccountDisabledError)]; - return; - case FIRAuthErrorCodeTooManyRequests: - [FUIAuthBaseViewController showAlertWithMessage:FUILocalizedString(kStr_SignInTooManyTimesError)]; - return; - } - } - [FUIAuthBaseViewController showAlertWithMessage:FUILocalizedString(kStr_SignedIn)]; - }; - - [self.authUI.auth.currentUser - linkWithCredential:credential - completion:^(FIRAuthDataResult *_Nullable authResult, - NSError *_Nullable error) { - if (error) { - if (error.code == FIRAuthErrorCodeEmailAlreadyInUse) { - NSDictionary *userInfo = @{ FUIAuthCredentialKey : credential }; - NSError *mergeError = [FUIAuthErrorUtils mergeConflictErrorWithUserInfo:userInfo - underlyingError:error]; - completeSignInBlock(nil, mergeError); - return; - } - completeSignInBlock(nil, error); - return; - } - completeSignInBlock(authResult, nil); - }]; - } else { - [self handleDifferentDevice]; - } -} - -- (void)handleEmaiLinkSignIn:(NSString *)email { - FIRAuthCredential *credential = - [FIREmailAuthProvider credentialWithEmail:email link:self.emailLink]; - - void (^completeSignInBlock)(FIRAuthDataResult *, NSError *) = ^(FIRAuthDataResult *authResult, - NSError *error) { - if (error) { - switch (error.code) { - case FIRAuthErrorCodeWrongPassword: - [FUIAuthBaseViewController showAlertWithMessage:FUILocalizedString(kStr_WrongPasswordError)]; - return; - case FIRAuthErrorCodeUserNotFound: - [FUIAuthBaseViewController showAlertWithMessage:FUILocalizedString(kStr_UserNotFoundError)]; - return; - case FIRAuthErrorCodeUserDisabled: - [FUIAuthBaseViewController showAlertWithMessage:FUILocalizedString(kStr_AccountDisabledError)]; - return; - case FIRAuthErrorCodeTooManyRequests: - [FUIAuthBaseViewController showAlertWithMessage:FUILocalizedString(kStr_SignInTooManyTimesError)]; - return; - } - } - - void (^dismissHandler)(void) = ^() { - UINavigationController *authViewController = [self.authUI authViewController]; - if (!(authViewController.isViewLoaded && authViewController.view.window)) { - [authViewController.navigationController dismissViewControllerAnimated:YES completion:nil]; - } - [self.authUI invokeResultCallbackWithAuthDataResult:authResult URL:nil error:error]; - }; - - [FUIAuthBaseViewController showAlertWithTitle:FUILocalizedString(kStr_SignedIn) - message:nil - actionTitle:nil - actionHandler:nil - dismissTitle:FUILocalizedString(kStr_OK) - dismissHandler:dismissHandler - presentingViewController:nil]; - }; - - [self.authUI.auth signInWithCredential:credential completion:completeSignInBlock]; -} - -- (void)handleDifferentDevice { - UINavigationController *authViewController = [self.authUI authViewController]; - void (^completion)(void) = ^(){ - [FUIAuthBaseViewController showAlertWithTitle:@"New Device detected" - message:@"Try opening the link using the same " - "device where you started the sign-in process" - presentingViewController:authViewController]; - }; - - if (!(authViewController.isViewLoaded && authViewController.view.window)) { - [UIApplication.sharedApplication.keyWindow.rootViewController - presentViewController:authViewController animated:YES completion:completion]; - } else { - completion(); - } -} - -- (void)handleConfirmEmail { - UINavigationController *authViewController = [self.authUI authViewController]; - void (^completion)(void) = ^(){ - UIViewController *controller = [[FUIConfirmEmailViewController alloc] initWithAuthUI:self.authUI]; - [authViewController pushViewController:controller animated:YES]; - }; - - if (!(authViewController.isViewLoaded && authViewController.view.window)) { - [UIApplication.sharedApplication.keyWindow.rootViewController - presentViewController:authViewController animated:YES completion:completion]; - } else { - completion(); - } -} - -/** @fn callbackWithCredential:error: - @brief Ends the sign-in flow by cleaning up and calling back with given credential or error. - @param credential The credential to pass back, if any. - @param error The error to pass back, if any. - @param result The result of sign-in operation using provided @c FIRAuthCredential object. - @see @c FIRAuth.signInWithCredential:completion: - */ -- (void)callbackWithCredential:(nullable FIRAuthCredential *)credential - error:(nullable NSError *)error - result:(nullable FIRAuthResultCallback)result { - FUIAuthProviderSignInCompletionBlock callback = self.pendingSignInCallback; - self.pendingSignInCallback = nil; - if (callback) { - callback(credential, error, result, nil); - } -} - -#pragma mark - FUIEmailAuthProvider - -- (void)signInWithEmailHint:(NSString *)emailHint - presentingViewController:(FUIAuthBaseViewController *)presentingViewController - originalError:(NSError *)originalError - completion:(FUIEmailHintSignInCallback)completion { - NSString *kTempApp = @"tempApp"; - FIROptions *options = [FIROptions defaultOptions]; - // Create an new app instance in order to create a new auth instance. - if (![FIRApp appNamed:kTempApp]) { - [FIRApp configureWithName:kTempApp options:options]; - } - FIRApp *tempApp = [FIRApp appNamed:kTempApp]; - // Create a new auth instance in order to perform a successful sign-in without losing the - // currently signed in user on the default auth instance. - FIRAuth *tempAuth = [FIRAuth authWithApp:tempApp]; - - [self.authUI.auth fetchSignInMethodsForEmail:emailHint - completion:^(NSArray *_Nullable providers, - NSError *_Nullable error) { - if (error) { - if (completion) { - completion(nil, error, nil); - } - return; - } - NSString *existingFederatedProviderID = [self authProviderFromProviders:providers]; - // Set of providers which can be auto-linked. - NSSet *supportedProviders = - [NSSet setWithObjects:@"google.com", - @"facebook.com", - @"password", - nil]; - if ([supportedProviders containsObject:existingFederatedProviderID]) { - if ([existingFederatedProviderID isEqualToString:@"password"]) { - - [FUIAuthBaseViewController showSignInAlertWithEmail:emailHint - providerShortName:@"Email/Password" - providerSignInLabel:@"Sign in with Email/Password" - presentingViewController:presentingViewController - signinHandler:^{ - FUIAuth *authUI = [FUIAuth authUIWithAuth:tempAuth]; - // Email password sign-in - FUIPasswordSignInViewController *controller = - [[FUIPasswordSignInViewController alloc] initWithAuthUI:authUI email:emailHint]; - controller.onDismissCallback = ^(FIRAuthDataResult *result, NSError *error) { - if (completion) { - completion(result, error, nil); - } - }; - [presentingViewController pushViewController:controller]; - } - cancelHandler:^{ - if (completion) { - completion(nil, originalError, nil); - } - }]; - } else { // Federated sign-in case. - id authProviderUI; - // Retrieve the FUIAuthProvider instance from FUIAuth for the existing provider ID. - for (id provider in self.authUI.providers) { - if ([provider.providerID isEqualToString:existingFederatedProviderID]) { - authProviderUI = provider; - break; - } - } - - [FUIAuthBaseViewController showSignInAlertWithEmail:emailHint - provider:authProviderUI - presentingViewController:presentingViewController - signinHandler:^{ - [authProviderUI signOut]; - [authProviderUI signInWithDefaultValue:emailHint - presentingViewController:presentingViewController - completion:^(FIRAuthCredential *_Nullable credential, - NSError *_Nullable error, - FIRAuthResultCallback _Nullable result, - NSDictionary *_Nullable userInfo) { - if (error) { - if (completion) { - completion(nil, error, nil); - } - return; - } - - [tempAuth signInWithCredential:credential - completion:^(FIRAuthDataResult *_Nullable authResult, - NSError *_Nullable error) { - if (error) { - if (completion) { - completion(nil, error, nil); - } - } - - // Handle potential email mismatch. - if (![emailHint isEqualToString:authResult.user.email]) { - NSString *signedInEmail = authResult.user.email; - NSString *title = - [NSString stringWithFormat:@"Continue sign in with %@?", signedInEmail]; - NSString *message = - [NSString stringWithFormat:@"You originally wanted to sign in with %@", - emailHint]; - [FUIAuthBaseViewController showAlertWithTitle:title - message:message - actionTitle:@"Continue" - actionHandler:^{ - if (completion) { - completion(authResult, nil, credential); - } - } - dismissTitle:@"Cancel" - dismissHandler:^{ - if (completion) { - completion(nil, error, credential); - } - } - presentingViewController:presentingViewController]; - } - if (completion) { - completion(authResult, error, credential); - } - }]; - }]; - } - cancelHandler:^{ - if (completion) { - completion(nil, originalError, nil); - } - }]; - } - } - }]; -} - -- (void)handleAccountLinkingForEmail:(NSString *)email - newCredential:(FIRAuthCredential *)newCredential - presentingViewController:(UIViewController *)presentingViewController - signInResult:(_Nullable FIRAuthResultCallback)result { - id delegate = self.authUI.delegate; - [self.authUI.auth fetchSignInMethodsForEmail:email - completion:^(NSArray *_Nullable providers, - NSError *_Nullable error) { - if (result) { - result(nil, error); - } - - if (error) { - if (error.code == FIRAuthErrorCodeInvalidEmail) { - // This should never happen because the email address comes from the backend. - [FUIAuthBaseViewController showAlertWithMessage:FUILocalizedString(kStr_InvalidEmailError) - presentingViewController:presentingViewController]; - } else { - [presentingViewController dismissViewControllerAnimated:YES completion:^{ - [self.authUI invokeResultCallbackWithAuthDataResult:nil URL:nil error:error]; - }]; - } - return; - } - if (!providers.count) { - // This should never happen because the user must be registered. - [FUIAuthBaseViewController showAlertWithMessage: - FUILocalizedString(kStr_CannotAuthenticateError) - presentingViewController:presentingViewController]; - return; - } - NSString *bestProviderID = providers[0]; - if ([bestProviderID isEqual:@"password"]) { - // Password verification. - UIViewController *passwordController; - if ([delegate respondsToSelector: - @selector(passwordVerificationViewControllerForAuthUI:email:newCredential:)]) { - - passwordController = [delegate passwordVerificationViewControllerForAuthUI:self.authUI - email:email - newCredential:newCredential]; - } else { - passwordController = - [[FUIPasswordVerificationViewController alloc] initWithAuthUI:self.authUI - email:email - newCredential:newCredential]; - } - if (presentingViewController.navigationController) { - [FUIAuthBaseViewController pushViewController:passwordController - navigationController: - presentingViewController.navigationController]; - } - return; - } - - if ([bestProviderID isEqual:@"emailLink"]) { - NSString *providerName; - if ([newCredential.provider isEqualToString:@"facebook.com"]) { - providerName = @"Facebook"; - } else if ([newCredential.provider isEqualToString:@"twitter.com"]) { - providerName = @"Twitter"; - } else if ([newCredential.provider isEqualToString:@"github.com" -@"twitter.com"]) { - providerName = @"Github"; - } - NSString *message = [NSString stringWithFormat: - @"You already have an account\n \n You've already used %@. You " - "can connect your %@ account with %@ by signing in with Email " - "link below. \n \n For this flow to successfully connect your " - "account with this email, you have to open the link on the same " - "device or browser.", email, providerName, email]; - void (^actionHandler)(void) = ^() { - [self generateURLParametersAndLocalCache:email - linkingProvider:newCredential.provider]; - - NSData *data = [NSKeyedArchiver archivedDataWithRootObject:newCredential]; - [GULUserDefaults.standardUserDefaults setObject:data forKey:kEmailLinkSignInLinkingCredentialKey]; - - void (^completion)(NSError * _Nullable error) = ^(NSError * _Nullable error){ - if (error) { - [FUIAuthBaseViewController showAlertWithMessage:error.description]; - } else { - NSString *signInMessage = [NSString stringWithFormat: - @"A sign-in email with additional instructions was sent to %@. Check your " - "email to complete sign-in.", email]; - [FUIAuthBaseViewController - showAlertWithTitle:@"Sign-in email sent" - message:signInMessage - presentingViewController:nil]; - } - }; - [self.authUI.auth sendSignInLinkToEmail:email - actionCodeSettings:self.actionCodeSettings - completion:completion]; - }; - - [FUIAuthBaseViewController - showAlertWithTitle:@"Sign in" - message:message - actionTitle:@"Sign in" - actionHandler:actionHandler - dismissTitle:nil - dismissHandler:nil - presentingViewController:nil]; - return; - } - - id bestProvider = [self.authUI providerWithID:bestProviderID]; - if (!bestProvider) { - // Unsupported provider. - [FUIAuthBaseViewController showAlertWithMessage: - FUILocalizedString(kStr_CannotAuthenticateError) - presentingViewController:presentingViewController]; - return; - } - - [FUIAuthBaseViewController showSignInAlertWithEmail:email - provider:bestProvider - presentingViewController:presentingViewController - signinHandler:^{ - // Sign out first to make sure sign in starts with a clean state. - [bestProvider signOut]; - [bestProvider signInWithDefaultValue:email - presentingViewController:presentingViewController - completion:^(FIRAuthCredential *_Nullable credential, - NSError *_Nullable error, - _Nullable FIRAuthResultCallback result, - NSDictionary *_Nullable userInfo) { - if (error) { - if (error.code == FUIAuthErrorCodeUserCancelledSignIn) { - // User cancelled sign in, Do nothing. - if (result) { - result(nil, error); - } - return; - } - [self.authUI invokeResultCallbackWithAuthDataResult:nil URL:nil error:error]; - return; - } - - [self.authUI.auth signInWithCredential:credential - completion:^(FIRAuthDataResult*_Nullable authResult, - NSError *_Nullable error) { - if (error) { - [self.authUI invokeResultCallbackWithAuthDataResult:nil URL:nil error:error]; - if (result) { - result(nil, error); - } - return; - } - - FIRUser *user = authResult.user; - [user linkWithCredential:newCredential - completion:^(FIRAuthDataResult *_Nullable authResult, - NSError *_Nullable error) { - if (result) { - result(authResult.user, error); - } - // Ignore any error (most likely caused by email mismatch) and treat the user as - // successfully signed in. - [presentingViewController dismissViewControllerAnimated:YES completion:^{ - [self.authUI invokeResultCallbackWithAuthDataResult:authResult URL:nil error:nil]; - }]; - }]; - }]; - }]; - } cancelHandler:^{ - [self.authUI signOutWithError:nil]; - }]; - }]; -} - -#pragma mark - Private - -- (void)generateURLParametersAndLocalCache:(NSString *)email linkingProvider:(NSString *)linkingProvider { - NSURL *url = self.actionCodeSettings.URL; - NSURLComponents *urlComponents = [NSURLComponents componentsWithString:url.absoluteString]; - NSMutableArray *urlQuertItems = [NSMutableArray array]; - - [GULUserDefaults.standardUserDefaults setObject:email forKey:kEmailLinkSignInEmailKey]; - - if (self.authUI.auth.currentUser.isAnonymous && self.authUI.shouldAutoUpgradeAnonymousUsers) { - NSString *auid = self.authUI.auth.currentUser.uid; - - NSURLQueryItem *anonymousUserIDQueryItem = - [NSURLQueryItem queryItemWithName:@"ui_auid" value:auid]; - [urlQuertItems addObject:anonymousUserIDQueryItem]; - } - - NSInteger ui_sid = arc4random_uniform(999999999); - NSString *sidString = [NSString stringWithFormat:@"%ld", (long)ui_sid]; - [GULUserDefaults.standardUserDefaults setObject:sidString forKey:@"ui_sid"]; - - NSURLQueryItem *sessionIDQueryItem = - [NSURLQueryItem queryItemWithName:@"ui_sid" value:sidString]; - [urlQuertItems addObject:sessionIDQueryItem]; - - NSString *sameDeviceValueString; - if (self.forceSameDevice) { - sameDeviceValueString = @"1"; - } else { - sameDeviceValueString = @"0"; - } - NSURLQueryItem *sameDeviceQueryItem = [NSURLQueryItem queryItemWithName:@"ui_sd" value:sameDeviceValueString]; - [urlQuertItems addObject:sameDeviceQueryItem]; - - if (linkingProvider) { - NSURLQueryItem *providerIDQueryItem = [NSURLQueryItem queryItemWithName:@"ui_pid" value:linkingProvider]; - [urlQuertItems addObject:providerIDQueryItem]; - } - - urlComponents.queryItems = urlQuertItems; - self.actionCodeSettings.URL = urlComponents.URL; -} - -- (nullable NSString *)authProviderFromProviders:(NSArray *) providers { - NSSet *providerSet = - [NSSet setWithArray:@[ @"facebook.com", - @"google.com", - @"password" ]]; - for (NSString *provider in providers) { - if ( [providerSet containsObject:provider]) { - return provider; - } - } - return nil; -} - -@end diff --git a/FirebaseEmailAuthUI/Sources/FUIEmailAuthStrings.h b/FirebaseEmailAuthUI/Sources/FUIEmailAuthStrings.h deleted file mode 100644 index a7867b8bf30..00000000000 --- a/FirebaseEmailAuthUI/Sources/FUIEmailAuthStrings.h +++ /dev/null @@ -1,39 +0,0 @@ -// -// Copyright (c) 2018 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -/* Name of the FirebaseEmailAuthUI resource bundle. */ -extern NSString *const FUIEmailAuthBundleName; - -#ifdef __cplusplus -extern "C" { -#endif - -/** @fn FUIEmailAuthLocalizedString - @brief Gets a localized string from a name. - @param key The key value of the string. - @return The string by the key localized in the current locale. - */ -NSString *FUIEmailAuthLocalizedString(NSString *key); - -#ifdef __cplusplus -} -#endif - -NS_ASSUME_NONNULL_END diff --git a/FirebaseEmailAuthUI/Sources/FUIEmailAuthStrings.m b/FirebaseEmailAuthUI/Sources/FUIEmailAuthStrings.m deleted file mode 100644 index ff2fcc9de3f..00000000000 --- a/FirebaseEmailAuthUI/Sources/FUIEmailAuthStrings.m +++ /dev/null @@ -1,35 +0,0 @@ -// -// Copyright (c) 2018 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebaseEmailAuthUI/Sources/Public/FirebaseEmailAuthUI/FUIEmailAuth.h" -#import "FirebaseEmailAuthUI/Sources/FUIEmailAuthStrings.h" - -#if SWIFT_PACKAGE -NSString *const FUIEmailAuthBundleName = @"FirebaseUI_FirebaseEmailAuthUI"; -#else -NSString *const FUIEmailAuthBundleName = @"FirebaseEmailAuthUI"; -#endif // SWIFT_PACKAGE - -/** @var kEmailAuthProviderTableName - @brief The name of the strings table to search for localized strings. - */ -NSString *const kEmailAuthProviderTableName = @"FirebaseEmailAuthUI"; - -NSString *FUIEmailAuthLocalizedString(NSString *key) { - return FUILocalizedStringFromTableInBundle(key, - kEmailAuthProviderTableName, - [FUIEmailAuth bundle]); -} diff --git a/FirebaseEmailAuthUI/Sources/FUIEmailAuth_Internal.h b/FirebaseEmailAuthUI/Sources/FUIEmailAuth_Internal.h deleted file mode 100644 index ca43c60571d..00000000000 --- a/FirebaseEmailAuthUI/Sources/FUIEmailAuth_Internal.h +++ /dev/null @@ -1,54 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebaseEmailAuthUI/Sources/Public/FirebaseEmailAuthUI/FUIEmailAuth.h" - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface FUIEmailAuth (Internal) - -/** @fn callbackWithCredential:error: - @brief Ends the sign-in flow by cleaning up and calling back with given credential or error. - @param credential The credential to pass back, if any. - @param error The error to pass back, if any. - @param result The result of sign-in operation using provided @c FIRAuthCredential object. - @see @c FIRAuth.signInWithCredential:completion: -*/ -- (void)callbackWithCredential:(nullable FIRAuthCredential *)credential - error:(nullable NSError *)error - result:(nullable FIRAuthResultCallback)result; - -/** @fn alertControllerForError:actionHandler: - @brief Creates alert controller for specified email auth error. - @param error The error which should be shown in alert. - @param actionHandler The handler of alert action button, if any. - */ -+ (UIAlertController *)alertControllerForError:(NSError *)error - actionHandler:(nullable FUIAuthAlertActionHandler)actionHandler; - -/** @fn generateURLParametersAndLocalCache:linkingProvider: - @brief Generate the parameters before sending out the email link. Append the parameters to - continue url and store them locally. - @param email The email that requested the email sign in link. - @param linkingProvider The id of the auth provider to be linked, if any. - */ -- (void)generateURLParametersAndLocalCache:(NSString *)email linkingProvider:(nullable NSString *)linkingProvider; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebaseEmailAuthUI/Sources/FUIEmailEntryViewController.m b/FirebaseEmailAuthUI/Sources/FUIEmailEntryViewController.m deleted file mode 100755 index 2cb16b3304d..00000000000 --- a/FirebaseEmailAuthUI/Sources/FUIEmailEntryViewController.m +++ /dev/null @@ -1,380 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebaseEmailAuthUI/Sources/Public/FirebaseEmailAuthUI/FUIEmailEntryViewController.h" - -@import FirebaseAuth; - -#import - -#import "FirebaseEmailAuthUI/Sources/Public/FirebaseEmailAuthUI/FUIEmailAuth.h" -#import "FirebaseEmailAuthUI/Sources/FUIEmailAuth_Internal.h" -#import "FirebaseEmailAuthUI/Sources/FUIEmailAuthStrings.h" -#import "FirebaseEmailAuthUI/Sources/Public/FirebaseEmailAuthUI/FUIPasswordSignInViewController.h" -#import "FirebaseEmailAuthUI/Sources/Public/FirebaseEmailAuthUI/FUIPasswordSignUpViewController.h" - -/** @var kCellReuseIdentifier - @brief The reuse identifier for table view cell. - */ -static NSString *const kCellReuseIdentifier = @"cellReuseIdentifier"; - -/** @var kAppIDCodingKey - @brief The key used to encode the app ID for NSCoding. - */ -static NSString *const kAppIDCodingKey = @"appID"; - -/** @var kAuthUICodingKey - @brief The key used to encode @c FUIAuth instance for NSCoding. - */ -static NSString *const kAuthUICodingKey = @"authUI"; - -/** @var kEmailCellAccessibilityID - @brief The Accessibility Identifier for the @c email sign in cell. - */ -static NSString *const kEmailCellAccessibilityID = @"EmailCellAccessibilityID"; - -/** @var kNextButtonAccessibilityID - @brief The Accessibility Identifier for the @c next button. - */ -static NSString *const kNextButtonAccessibilityID = @"NextButtonAccessibilityID"; - -@interface FUIEmailEntryViewController () -@end - -@implementation FUIEmailEntryViewController { - /** @var _emailField - @brief The @c UITextField that user enters email address into. - */ - UITextField *_emailField; - - /** @var _tableView - @brief The @c UITableView used to store all UI elements. - */ - __weak IBOutlet UITableView *_tableView; - - /** @var _termsOfServiceView - @brief The @c Text view which displays Terms of Service. - */ - __weak IBOutlet FUIPrivacyAndTermsOfServiceView *_termsOfServiceView; - -} - -- (instancetype)initWithAuthUI:(FUIAuth *)authUI { - return [self initWithNibName:NSStringFromClass([self class]) - bundle:[FUIEmailAuth bundle] - authUI:authUI]; -} - -- (instancetype)initWithNibName:(NSString *)nibNameOrNil - bundle:(NSBundle *)nibBundleOrNil - authUI:(FUIAuth *)authUI { - - self = [super initWithNibName:nibNameOrNil - bundle:nibBundleOrNil - authUI:authUI]; - if (self) { - self.title = FUILocalizedString(kStr_EnterYourEmail); - } - return self; -} - -- (void)viewDidLoad { - [super viewDidLoad]; - - UIBarButtonItem *nextButtonItem = - [FUIAuthBaseViewController barItemWithTitle:FUILocalizedString(kStr_Next) - target:self - action:@selector(next)]; - nextButtonItem.accessibilityIdentifier = kNextButtonAccessibilityID; - self.navigationItem.rightBarButtonItem = nextButtonItem; - _termsOfServiceView.authUI = self.authUI; - [_termsOfServiceView useFullMessage]; - - [self enableDynamicCellHeightForTableView:_tableView]; -} - -- (void)viewWillAppear:(BOOL)animated { - [super viewWillAppear:animated]; - - if (self.navigationController.viewControllers.firstObject == self) { - if (!self.authUI.shouldHideCancelButton) { - UIBarButtonItem *cancelBarButton = - [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel - target:self - action:@selector(cancelAuthorization)]; - self.navigationItem.leftBarButtonItem = cancelBarButton; - } - self.navigationItem.backBarButtonItem = - [[UIBarButtonItem alloc] initWithTitle:FUILocalizedString(kStr_Back) - style:UIBarButtonItemStylePlain - target:nil - action:nil]; - - if (@available(iOS 13, *)) { - if (!self.authUI.isInteractiveDismissEnabled) { - self.modalInPresentation = YES; - } - } - } -} - -#pragma mark - Actions - -- (void)next { - [self onNext:_emailField.text]; -} - -- (void)onNext:(NSString *)emailText { - FUIEmailAuth *emailAuth = [self.authUI providerWithID:@"password"]; - id delegate = self.authUI.delegate; - - if (![[self class] isValidEmail:emailText]) { - [self showAlertWithMessage:FUILocalizedString(kStr_InvalidEmailError)]; - return; - } - - [self incrementActivity]; - - [self.auth fetchSignInMethodsForEmail:emailText - completion:^(NSArray *_Nullable providers, - NSError *_Nullable error) { - [self decrementActivity]; - - if (error) { - if (error.code == FIRAuthErrorCodeInvalidEmail) { - [self showAlertWithMessage:FUILocalizedString(kStr_InvalidEmailError)]; - } else { - [self dismissNavigationControllerAnimated:YES completion:^{ - [self.authUI invokeResultCallbackWithAuthDataResult:nil URL:nil error:error]; - }]; - } - return; - } - - id provider = [self bestProviderFromProviderIDs:providers]; - if (provider && ![provider.providerID isEqualToString:@"password"]) { - NSString *email = emailText; - [[self class] showSignInAlertWithEmail:email - provider:provider - presentingViewController:self - signinHandler:^{ - [self signInWithProvider:provider email:email]; - } - cancelHandler:^{ - [self.authUI signOutWithError:nil]; - }]; - } else if ([providers containsObject:@"password"]) { - UIViewController *controller; - if ([delegate respondsToSelector:@selector(passwordSignInViewControllerForAuthUI:email:)]) { - controller = [delegate passwordSignInViewControllerForAuthUI:self.authUI - email:emailText]; - } else { - controller = [[FUIPasswordSignInViewController alloc] initWithAuthUI:self.authUI - email:emailText]; - } - [self pushViewController:controller]; - - // TODO: Use API to get string when Firebase 11 is the minimum. - } else if ([emailAuth.signInMethod isEqualToString:@"emailLink"]) { - [self sendSignInLinkToEmail:emailText]; - } else { - if (providers.count) { - // There's some unsupported providers, surface the error to the user. - [self showAlertWithMessage:FUILocalizedString(kStr_CannotAuthenticateError)]; - } else { - // New user. - UIViewController *controller; - if (emailAuth.allowNewEmailAccounts) { - if ([delegate respondsToSelector:@selector(passwordSignUpViewControllerForAuthUI:email:requireDisplayName:)]) { - controller = [delegate passwordSignUpViewControllerForAuthUI:self.authUI - email:emailText - requireDisplayName:emailAuth.requireDisplayName]; - } else { - controller = [[FUIPasswordSignUpViewController alloc] initWithAuthUI:self.authUI - email:emailText - requireDisplayName:emailAuth.requireDisplayName]; - } - } else { - [self showAlertWithMessage:FUILocalizedString(kStr_UserNotFoundError)]; - } - if (controller != nil) { - [self pushViewController:controller]; - } - } - } - }]; -} - -- (void)sendSignInLinkToEmail:(NSString*)email { - if (![[self class] isValidEmail:email]) { - [self showAlertWithMessage:FUILocalizedString(kStr_InvalidEmailError)]; - return; - } - - [self incrementActivity]; - FUIEmailAuth *emailAuth = [self.authUI providerWithID:@"password"]; - [emailAuth generateURLParametersAndLocalCache:email linkingProvider:nil]; - [self.auth sendSignInLinkToEmail:email - actionCodeSettings:emailAuth.actionCodeSettings - completion:^(NSError * _Nullable error) { - [self decrementActivity]; - - if (error) { - [FUIAuthBaseViewController showAlertWithTitle:FUILocalizedString(kStr_Error) - message:error.description - presentingViewController:self]; - } else { - NSString *successMessage = - [NSString stringWithFormat: FUILocalizedString(kStr_EmailSentConfirmationMessage), email]; - [FUIAuthBaseViewController showAlertWithTitle:FUILocalizedString(kStr_SignInEmailSent) - message:successMessage - actionTitle:FUILocalizedString(kStr_TroubleGettingEmailTitle) - actionHandler:^{ - [FUIAuthBaseViewController - showAlertWithTitle:FUILocalizedString(kStr_TroubleGettingEmailTitle) - message:FUILocalizedString(kStr_TroubleGettingEmailMessage) - actionTitle:FUILocalizedString(kStr_Resend) - actionHandler:^{ - [self sendSignInLinkToEmail:email]; - } dismissTitle:FUILocalizedString(kStr_Back) - dismissHandler:^{ - [self.navigationController popToRootViewControllerAnimated:YES]; - } - presentingViewController:self]; - } - dismissTitle:FUILocalizedString(kStr_Back) - dismissHandler:^{ - [self.navigationController dismissViewControllerAnimated:YES - completion:nil]; - } - presentingViewController:self]; - } - }]; -} - -- (void)textFieldDidChange { - [self didChangeEmail:_emailField.text]; -} - -- (void)didChangeEmail:(NSString *)emailText { - self.navigationItem.rightBarButtonItem.enabled = (emailText.length > 0); -} - -#pragma mark - UITableViewDataSource - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - return 1; -} - -- (UITableViewCell *)tableView:(UITableView *)tableView - cellForRowAtIndexPath:(NSIndexPath *)indexPath { - FUIAuthTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellReuseIdentifier]; - if (!cell) { - UINib *cellNib = [UINib nibWithNibName:NSStringFromClass([FUIAuthTableViewCell class]) - bundle:[FUIAuthUtils authUIBundle]]; - [tableView registerNib:cellNib forCellReuseIdentifier:kCellReuseIdentifier]; - cell = [tableView dequeueReusableCellWithIdentifier:kCellReuseIdentifier]; - } - cell.label.text = FUILocalizedString(kStr_Email); - cell.textField.placeholder = FUILocalizedString(kStr_EnterYourEmail); - cell.textField.delegate = self; - cell.accessibilityIdentifier = kEmailCellAccessibilityID; - _emailField = cell.textField; - cell.textField.secureTextEntry = NO; - cell.textField.autocorrectionType = UITextAutocorrectionTypeNo; - cell.textField.autocapitalizationType = UITextAutocapitalizationTypeNone; - cell.textField.returnKeyType = UIReturnKeyNext; - cell.textField.keyboardType = UIKeyboardTypeEmailAddress; - if (@available(iOS 11.0, *)) { - cell.textField.textContentType = UITextContentTypeUsername; - } - [cell.textField addTarget:self - action:@selector(textFieldDidChange) - forControlEvents:UIControlEventEditingChanged]; - [self didChangeEmail:_emailField.text]; - return cell; -} - -- (nullable id)bestProviderFromProviderIDs:(NSArray *)providerIDs { - NSArray> *providers = self.authUI.providers; - for (NSString *providerID in providerIDs) { - for (id provider in providers) { - if ([providerID isEqual:provider.providerID]) { - return provider; - } - } - } - return nil; -} - -#pragma mark - UITextFieldDelegate - -- (BOOL)textFieldShouldReturn:(UITextField *)textField { - if (textField == _emailField) { - [self onNext:_emailField.text]; - } - return NO; -} - -#pragma mark - Utilities - -/** @fn signInWithProvider:email: - @brief Actually kicks off sign in with the provider. - @param provider The identity provider to sign in with. - @param email The email address of the user. - */ -- (void)signInWithProvider:(id)provider email:(NSString *)email { - [self incrementActivity]; - - // Sign out first to make sure sign in starts with a clean state. - [provider signOut]; - [provider signInWithDefaultValue:email - presentingViewController:self - completion:^(FIRAuthCredential *_Nullable credential, - NSError *_Nullable error, - _Nullable FIRAuthResultCallback result, - NSDictionary *_Nullable userInfo) { - if (error) { - [self decrementActivity]; - if (result) { - result(nil, error); - } - - [self dismissNavigationControllerAnimated:YES completion:^{ - [self.authUI invokeResultCallbackWithAuthDataResult:nil URL:nil error:error]; - }]; - return; - } - - [self.auth signInWithCredential:credential - completion:^(FIRAuthDataResult *_Nullable authResult, - NSError *_Nullable error) { - [self decrementActivity]; - if (result) { - result(authResult.user, error); - } - - if (error) { - [self.authUI invokeResultCallbackWithAuthDataResult:nil URL:nil error:error]; - } else { - [self dismissNavigationControllerAnimated:YES completion:^{ - [self.authUI invokeResultCallbackWithAuthDataResult:authResult URL:nil error:error]; - }]; - } - }]; - }]; -} -@end diff --git a/FirebaseEmailAuthUI/Sources/FUIPasswordRecoveryViewController.m b/FirebaseEmailAuthUI/Sources/FUIPasswordRecoveryViewController.m deleted file mode 100755 index 7fb030ead65..00000000000 --- a/FirebaseEmailAuthUI/Sources/FUIPasswordRecoveryViewController.m +++ /dev/null @@ -1,206 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebaseEmailAuthUI/Sources/Public/FirebaseEmailAuthUI/FUIPasswordRecoveryViewController.h" - -@import FirebaseAuth; - -#import - -#import "FirebaseEmailAuthUI/Sources/Public/FirebaseEmailAuthUI/FUIEmailAuth.h" -#import "FirebaseEmailAuthUI/Sources/FUIEmailAuthStrings.h" - -/** @var kCellReuseIdentifier - @brief The reuse identifier for table view cell. - */ -static NSString *const kCellReuseIdentifier = @"cellReuseIdentifier"; - -/** @var kFooterTextViewHorizontalInset - @brief The horizontal inset for @c footerTextView, which should match the iOS standard margin. - */ -static const CGFloat kFooterTextViewHorizontalInset = 8.0f; - -@interface FUIPasswordRecoveryViewController () -/** @property footerTextView - @brief The text view in the footer of the table. - */ -@property(nonatomic, strong) IBOutlet UITextView *footerTextView; -@property(nonatomic, strong) IBOutlet FUIPrivacyAndTermsOfServiceView *termsOfServiceView; - -@end - -@implementation FUIPasswordRecoveryViewController { - /** @var _email - @brief The @c email address of the user from the previous screen. - */ - NSString *_email; - - /** @var _emailField - @brief The @c UITextField that user enters email address into. - */ - UITextField *_emailField; - - /** @var _tableView - @brief The @c UITableView used to store all UI elements. - */ - __weak IBOutlet UITableView *_tableView; -} - -- (instancetype)initWithAuthUI:(FUIAuth *)authUI - email:(NSString *_Nullable)email { - return [self initWithNibName:NSStringFromClass([self class]) - bundle:[FUIEmailAuth bundle] - authUI:authUI - email:email]; -} - -- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil - bundle:(nullable NSBundle *)nibBundleOrNil - authUI:(FUIAuth *)authUI - email:(NSString *_Nullable)email { - self = [super initWithNibName:nibNameOrNil - bundle:nibBundleOrNil - authUI:authUI]; - if (self) { - _email = [email copy]; - - self.title = FUILocalizedString(kStr_PasswordRecoveryTitle); - } - return self; -} - -- (void)viewDidLoad { - [super viewDidLoad]; - - UIBarButtonItem *sendButtonItem = - [FUIAuthBaseViewController barItemWithTitle:FUILocalizedString(kStr_Send) - target:self - action:@selector(send)]; - self.navigationItem.rightBarButtonItem = sendButtonItem; - - [self enableDynamicCellHeightForTableView:_tableView]; - - if (@available(iOS 13.0, *)) { - _tableView.backgroundColor = [UIColor systemBackgroundColor]; - self.footerTextView.textColor = [UIColor secondaryLabelColor]; - } -} - -- (void)viewDidLayoutSubviews { - [super viewDidLayoutSubviews]; - - self.footerTextView.text = FUILocalizedString(kStr_PasswordRecoveryMessage); - - // Adjust the footerTextView to have standard margins. - self.footerTextView.textContainer.lineFragmentPadding = 0; - _footerTextView.textContainerInset = - UIEdgeInsetsMake(0, kFooterTextViewHorizontalInset, 0, kFooterTextViewHorizontalInset); - [self.footerTextView sizeToFit]; - - self.termsOfServiceView.authUI = self.authUI; - [self.termsOfServiceView useFooterMessage]; -} - -#pragma mark - Actions - -- (void)send { - [self recoverEmail:_emailField.text]; -} - -- (void)recoverEmail:(NSString *)email { - if (![[self class] isValidEmail:email]) { - [self showAlertWithMessage:FUILocalizedString(kStr_InvalidEmailError)]; - return; - } - - [self incrementActivity]; - - [self.auth sendPasswordResetWithEmail:email - completion:^(NSError *_Nullable error) { - [self decrementActivity]; - - if (error) { - if (error.code == FIRAuthErrorCodeUserNotFound) { - [self showAlertWithMessage:FUILocalizedString(kStr_UserNotFoundError)]; - return; - } - - [self dismissNavigationControllerAnimated:YES completion:^{ - [self.authUI invokeResultCallbackWithAuthDataResult:nil URL:nil error:error]; - }]; - return; - } - - NSString *message = [NSString stringWithFormat: - FUILocalizedString(kStr_PasswordRecoveryEmailSentMessage), email]; - [self showAlertWithMessage:message]; - }]; -} - -- (void)textFieldDidChange { - [self didChangeEmail:_emailField.text]; -} - -- (void)didChangeEmail:(NSString *)email { - self.navigationItem.rightBarButtonItem.enabled = (email.length > 0); - -} - -#pragma mark - UITableViewDataSource - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - return 1; -} - -- (UITableViewCell *)tableView:(UITableView *)tableView - cellForRowAtIndexPath:(NSIndexPath *)indexPath { - FUIAuthTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellReuseIdentifier]; - if (!cell) { - UINib *cellNib = [UINib nibWithNibName:NSStringFromClass([FUIAuthTableViewCell class]) - bundle:[FUIAuthUtils authUIBundle]]; - [tableView registerNib:cellNib forCellReuseIdentifier:kCellReuseIdentifier]; - cell = [tableView dequeueReusableCellWithIdentifier:kCellReuseIdentifier]; - } - cell.label.text = FUILocalizedString(kStr_Email); - _emailField = cell.textField; - _emailField.delegate = self; - _emailField.text = _email; - _emailField.placeholder = FUILocalizedString(kStr_EnterYourEmail); - _emailField.secureTextEntry = NO; - _emailField.returnKeyType = UIReturnKeyNext; - _emailField.keyboardType = UIKeyboardTypeEmailAddress; - _emailField.autocorrectionType = UITextAutocorrectionTypeNo; - _emailField.autocapitalizationType = UITextAutocapitalizationTypeNone; - if (@available(iOS 11.0, *)) { - _emailField.textContentType = UITextContentTypeUsername; - } - [cell.textField addTarget:self - action:@selector(textFieldDidChange) - forControlEvents:UIControlEventEditingChanged]; - [self didChangeEmail:_emailField.text]; - return cell; -} - -#pragma mark - UITextFieldDelegate - -- (BOOL)textFieldShouldReturn:(UITextField *)textField { - if (textField == _emailField) { - [self send]; - } - return NO; -} - -@end diff --git a/FirebaseEmailAuthUI/Sources/FUIPasswordSignInViewController.m b/FirebaseEmailAuthUI/Sources/FUIPasswordSignInViewController.m deleted file mode 100755 index e9461bfbb74..00000000000 --- a/FirebaseEmailAuthUI/Sources/FUIPasswordSignInViewController.m +++ /dev/null @@ -1,300 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FUIPasswordSignInViewController_Internal.h" - -@import FirebaseAuth; -#import - -#import "FirebaseEmailAuthUI/Sources/Public/FirebaseEmailAuthUI/FUIEmailAuth.h" -#import "FirebaseEmailAuthUI/Sources/FUIEmailAuthStrings.h" -#import "FirebaseEmailAuthUI/Sources/Public/FirebaseEmailAuthUI/FUIPasswordRecoveryViewController.h" - -typedef void (^FIRAuthDataResultCallback)(FIRAuthDataResult *_Nullable authResult, - NSError *_Nullable error); - -/** @var kCellReuseIdentifier - @brief The reuse identifier for table view cell. - */ -static NSString *const kCellReuseIdentifier = @"cellReuseIdentifier"; - -@interface FUIPasswordSignInViewController () -@end - -@implementation FUIPasswordSignInViewController { - /** @var _email - @brief The @c email address of the user from the previous screen. - */ - NSString *_email; - - /** @var _emailField - @brief The @c UITextField that user enters email address into. - */ - UITextField *_emailField; - - /** @var _passwordField - @brief The @c UITextField that user enters password into. - */ - UITextField *_passwordField; - - /** @var _tableView - @brief The @c UITableView used to store all UI elements. - */ - __weak IBOutlet UITableView *_tableView; - - /** @var _forgotPasswordButton - @brief The @c UIButton which handles forgot password action. - */ - __weak IBOutlet UIButton *_forgotPasswordButton; - - /** @var _termsOfServiceView - @brief The @c Text view which displays Terms of Service. - */ - __weak IBOutlet FUIPrivacyAndTermsOfServiceView *_termsOfServiceView; - -} - -- (instancetype)initWithAuthUI:(FUIAuth *)authUI - email:(NSString *_Nullable)email { - return [self initWithNibName:NSStringFromClass([self class]) - bundle:[FUIEmailAuth bundle] - authUI:authUI - email:email]; -} - -- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil - bundle:(nullable NSBundle *)nibBundleOrNil - authUI:(FUIAuth *)authUI - email:(NSString *_Nullable)email { - self = [super initWithNibName:nibNameOrNil - bundle:nibBundleOrNil - authUI:authUI]; - if (self) { - _email = [email copy]; - - self.title = FUILocalizedString(kStr_SignInTitle); - __weak FUIPasswordSignInViewController *weakself = self; - _onDismissCallback = ^(FIRAuthDataResult *authResult, NSError *error){ - [weakself.authUI invokeResultCallbackWithAuthDataResult:authResult URL:nil error:error]; - }; - } - return self; -} - -- (void)viewDidLoad { - [super viewDidLoad]; - - UIBarButtonItem *signInButtonItem = - [FUIAuthBaseViewController barItemWithTitle:FUILocalizedString(kStr_SignInTitle) - target:self - action:@selector(signIn)]; - self.navigationItem.rightBarButtonItem = signInButtonItem; - [_forgotPasswordButton setTitle:FUILocalizedString(kStr_ForgotPasswordTitle) - forState:UIControlStateNormal]; - _termsOfServiceView.authUI = self.authUI; - [_termsOfServiceView useFooterMessage]; - - [self enableDynamicCellHeightForTableView:_tableView]; - - if (@available(iOS 13.0, *)) { - _tableView.backgroundColor = [UIColor systemBackgroundColor]; - } -} - -- (void)viewWillAppear:(BOOL)animated { - [super viewWillAppear:animated]; - - if (self.navigationController.viewControllers.firstObject == self) { - if (!self.authUI.shouldHideCancelButton) { - UIBarButtonItem *cancelBarButton = - [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel - target:self - action:@selector(cancelAuthorization)]; - self.navigationItem.leftBarButtonItem = cancelBarButton; - } - self.navigationItem.backBarButtonItem = - [[UIBarButtonItem alloc] initWithTitle:FUILocalizedString(kStr_Back) - style:UIBarButtonItemStylePlain - target:nil - action:nil]; - - if (@available(iOS 13, *)) { - if (!self.authUI.isInteractiveDismissEnabled) { - self.modalInPresentation = YES; - } - } - } -} - -#pragma mark - Actions - -- (void)signInWithDefaultValue:(NSString *)email andPassword:(NSString *)password { - if (![[self class] isValidEmail:email]) { - [self showAlertWithMessage:FUILocalizedString(kStr_InvalidEmailError)]; - return; - } - if (password.length <= 0) { - [self showAlertWithMessage:FUILocalizedString(kStr_InvalidPasswordError)]; - return; - } - - [self incrementActivity]; - FIRAuthCredential *credential = - [FIREmailAuthProvider credentialWithEmail:email password:password]; - - void (^completeSignInBlock)(FIRAuthDataResult *, NSError *) = ^(FIRAuthDataResult *authResult, - NSError *error) { - [self decrementActivity]; - - if (error) { - switch (error.code) { - case FIRAuthErrorCodeWrongPassword: - [self showAlertWithMessage:FUILocalizedString(kStr_WrongPasswordError)]; - return; - case FIRAuthErrorCodeUserNotFound: - [self showAlertWithMessage:FUILocalizedString(kStr_UserNotFoundError)]; - return; - case FIRAuthErrorCodeUserDisabled: - [self showAlertWithMessage:FUILocalizedString(kStr_AccountDisabledError)]; - return; - case FIRAuthErrorCodeTooManyRequests: - [self showAlertWithMessage:FUILocalizedString(kStr_SignInTooManyTimesError)]; - return; - } - } - - [self dismissNavigationControllerAnimated:YES completion:^{ - if (self->_onDismissCallback) { - self->_onDismissCallback(authResult, error); - } - }]; - }; - - // Check for the presence of an anonymous user and whether automatic upgrade is enabled. - if (self.auth.currentUser.isAnonymous && self.authUI.shouldAutoUpgradeAnonymousUsers) { - [self.auth.currentUser - linkWithCredential:credential - completion:^(FIRAuthDataResult *_Nullable authResult, - NSError *_Nullable error) { - if (error) { - if (error.code == FIRAuthErrorCodeEmailAlreadyInUse) { - NSDictionary *userInfo = @{ FUIAuthCredentialKey : credential }; - NSError *mergeError = [FUIAuthErrorUtils mergeConflictErrorWithUserInfo:userInfo - underlyingError:error]; - completeSignInBlock(nil, mergeError); - return; - } - completeSignInBlock(nil, error); - return; - } - completeSignInBlock(authResult, nil); - }]; - } else { - [self.auth signInWithCredential:credential completion:completeSignInBlock]; - } -} - -- (void)signIn { - [self signInWithDefaultValue:_emailField.text andPassword:_passwordField.text]; -} - -- (void)forgotPasswordForEmail:(NSString *)email { - UIViewController *viewController; - id delegate = self.authUI.delegate; - if ([delegate respondsToSelector:@selector(passwordRecoveryViewControllerForAuthUI:email:)]) { - viewController = [delegate passwordRecoveryViewControllerForAuthUI:self.authUI - email:email]; - } else { - viewController = [[FUIPasswordRecoveryViewController alloc] initWithAuthUI:self.authUI - email:email]; - } - [self pushViewController:viewController]; - -} - -- (IBAction)forgotPassword { - [self forgotPasswordForEmail:_emailField.text]; -} - -- (void)textFieldDidChange { - [self didChangeEmail:_emailField.text andPassword:_passwordField.text]; -} - -- (void)didChangeEmail:(NSString *)email andPassword:(NSString *)password { - BOOL enableActionButton = email.length > 0 && password.length > 0; - self.navigationItem.rightBarButtonItem.enabled = enableActionButton; -} - -#pragma mark - UITableViewDataSource - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - return 2; -} - -- (UITableViewCell *)tableView:(UITableView *)tableView - cellForRowAtIndexPath:(NSIndexPath *)indexPath { - FUIAuthTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellReuseIdentifier]; - if (!cell) { - UINib *cellNib = [UINib nibWithNibName:NSStringFromClass([FUIAuthTableViewCell class]) - bundle:[FUIAuthUtils authUIBundle]]; - [tableView registerNib:cellNib forCellReuseIdentifier:kCellReuseIdentifier]; - cell = [tableView dequeueReusableCellWithIdentifier:kCellReuseIdentifier]; - } - cell.textField.delegate = self; - if (indexPath.row == 0) { - cell.label.text = FUILocalizedString(kStr_Email); - cell.textField.enabled = _email == nil; - _emailField = cell.textField; - _emailField.text = _email; - _emailField.placeholder = FUILocalizedString(kStr_EnterYourEmail); - _emailField.secureTextEntry = NO; - _emailField.returnKeyType = UIReturnKeyNext; - _emailField.keyboardType = UIKeyboardTypeEmailAddress; - _emailField.autocorrectionType = UITextAutocorrectionTypeNo; - _emailField.autocapitalizationType = UITextAutocapitalizationTypeNone; - if (@available(iOS 11.0, *)) { - _emailField.textContentType = UITextContentTypeUsername; - } - } else if (indexPath.row == 1) { - cell.label.text = FUILocalizedString(kStr_Password); - _passwordField = cell.textField; - _passwordField.placeholder = FUILocalizedString(kStr_EnterYourPassword); - _passwordField.secureTextEntry = YES; - _passwordField.returnKeyType = UIReturnKeyNext; - _passwordField.keyboardType = UIKeyboardTypeDefault; - if (@available(iOS 11.0, *)) { - _passwordField.textContentType = UITextContentTypePassword; - } - } - [cell.textField addTarget:self - action:@selector(textFieldDidChange) - forControlEvents:UIControlEventEditingChanged]; - [self didChangeEmail:_emailField.text andPassword:_passwordField.text]; - return cell; -} - -#pragma mark - UITextFieldDelegate - -- (BOOL)textFieldShouldReturn:(UITextField *)textField { - if (textField == _emailField) { - [_passwordField becomeFirstResponder]; - } else if (textField == _passwordField) { - [self signIn]; - } - return NO; -} - -@end diff --git a/FirebaseEmailAuthUI/Sources/FUIPasswordSignInViewController_Internal.h b/FirebaseEmailAuthUI/Sources/FUIPasswordSignInViewController_Internal.h deleted file mode 100644 index b4e43b0d579..00000000000 --- a/FirebaseEmailAuthUI/Sources/FUIPasswordSignInViewController_Internal.h +++ /dev/null @@ -1,36 +0,0 @@ -// -// Copyright (c) 2018 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebaseEmailAuthUI/Sources/Public/FirebaseEmailAuthUI/FUIPasswordSignInViewController.h" -@import FirebaseAuth; - -NS_ASSUME_NONNULL_BEGIN - -@interface FUIPasswordSignInViewController () - -typedef void (^FIRAuthDataResultCallback)(FIRAuthDataResult *_Nullable authResult, - NSError *_Nullable error); - -/** @property onDismissCallback: - @brief Sets an optional custom callback for FUIPasswordSigInViewController during dismissal. This block is NOT set to nil after use, set to nil after using - if you wish to avoid circular references. - */ -@property(nonatomic, strong, nullable) FIRAuthDataResultCallback onDismissCallback; - -NS_ASSUME_NONNULL_END - - -@end diff --git a/FirebaseEmailAuthUI/Sources/FUIPasswordSignUpViewController.m b/FirebaseEmailAuthUI/Sources/FUIPasswordSignUpViewController.m deleted file mode 100755 index 19c377ee9ee..00000000000 --- a/FirebaseEmailAuthUI/Sources/FUIPasswordSignUpViewController.m +++ /dev/null @@ -1,378 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebaseEmailAuthUI/Sources/Public/FirebaseEmailAuthUI/FUIPasswordSignUpViewController.h" - -@import FirebaseAuth; -#import - -#import "FirebaseEmailAuthUI/Sources/Public/FirebaseEmailAuthUI/FUIEmailAuth.h" -#import "FirebaseEmailAuthUI/Sources/FUIEmailAuthStrings.h" - -/** @var kCellReuseIdentifier - @brief The reuse identifier for table view cell. - */ -static NSString *const kCellReuseIdentifier = @"cellReuseIdentifier"; - -/** @var kEmailSignUpCellAccessibilityID - @brief The Accessibility Identifier for the @c email cell. - */ -static NSString *const kEmailSignUpCellAccessibilityID = @"EmailSignUpCellAccessibilityID"; - -/** @var kPasswordSignUpCellAccessibilityID - @brief The Accessibility Identifier for the @c password cell. - */ -static NSString *const kPasswordSignUpCellAccessibilityID = @"PasswordSignUpCellAccessibilityID"; - -/** @var kNameSignUpCellAccessibilityID - @brief The Accessibility Identifier for the @c name cell. - */ -static NSString *const kNameSignUpCellAccessibilityID = @"NameSignUpCellAccessibilityID"; - -/** @var kSaveButtonAccessibilityID - @brief The Accessibility Identifier for the @c next button. - */ -static NSString *const kSaveButtonAccessibilityID = @"SaveButtonAccessibilityID"; - -/** @var kTextFieldRightViewSize - @brief The height and width of the @c rightView of the password text field. - */ -static const CGFloat kTextFieldRightViewSize = 36.0f; - -@interface FUIPasswordSignUpViewController () -@end - -@implementation FUIPasswordSignUpViewController { - /** @var _email - @brief The @c email address of the user from the previous screen. - */ - NSString *_email; - - /** @var _emailField - @brief The @c UITextField that user enters email address into. - */ - UITextField *_emailField; - - /** @var _nameField - @brief The @c UITextField that user enters name into. - */ - UITextField *_nameField; - - /** @var requireDisplayName - @brief Indicate weather display name field is required. - */ - BOOL _requireDisplayName; - - /** @var _passwordField - @brief The @c UITextField that user enters password into. - */ - UITextField *_passwordField; - - /** @var _tableView - @brief The @c UITableView used to store all UI elements. - */ - __weak IBOutlet UITableView *_tableView; -} - -- (instancetype)initWithAuthUI:(FUIAuth *)authUI - email:(NSString *_Nullable)email - requireDisplayName:(BOOL)requireDisplayName { - return [self initWithNibName:NSStringFromClass([self class]) - bundle:[FUIEmailAuth bundle] - authUI:authUI - email:email - requireDisplayName:requireDisplayName]; -} - -- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil - bundle:(nullable NSBundle *)nibBundleOrNil - authUI:(FUIAuth *)authUI - email:(NSString *_Nullable)email - requireDisplayName:(BOOL)requireDisplayName { - self = [super initWithNibName:nibNameOrNil - bundle:nibBundleOrNil - authUI:authUI]; - if (self) { - _email = [email copy]; - _requireDisplayName = requireDisplayName; - self.title = FUILocalizedString(kStr_SignUpTitle); - } - return self; -} - -- (void)viewDidLoad { - [super viewDidLoad]; - - UIBarButtonItem *saveButtonItem = - [FUIAuthBaseViewController barItemWithTitle:FUILocalizedString(kStr_Save) - target:self - action:@selector(save)]; - saveButtonItem.accessibilityIdentifier = kSaveButtonAccessibilityID; - self.navigationItem.rightBarButtonItem = saveButtonItem; - - [self enableDynamicCellHeightForTableView:_tableView]; - - if (@available(iOS 13.0, *)) { - _tableView.backgroundColor = [UIColor systemBackgroundColor]; - } -} - -- (void)viewDidLayoutSubviews { - [super viewDidLayoutSubviews]; - - self.footerView.authUI = self.authUI; - [self.footerView useFooterMessage]; -} - -#pragma mark - Actions - -- (void)save { - [self signUpWithEmail:_emailField.text - andPassword:_passwordField.text - andUsername:_nameField.text]; -} - -- (void)signUpWithEmail:(NSString *)email - andPassword:(NSString *)password - andUsername:(NSString *)username { - if (![[self class] isValidEmail:email]) { - [self showAlertWithMessage:FUILocalizedString(kStr_InvalidEmailError)]; - return; - } - if (password.length <= 0) { - [self showAlertWithMessage:FUILocalizedString(kStr_InvalidPasswordError)]; - return; - } - - [self incrementActivity]; - - // Check for the presence of an anonymous user and whether automatic upgrade is enabled. - if (self.auth.currentUser.isAnonymous && self.authUI.shouldAutoUpgradeAnonymousUsers) { - FIRAuthCredential *credential = - [FIREmailAuthProvider credentialWithEmail:email password:password]; - [self.auth.currentUser - linkWithCredential:credential - completion:^(FIRAuthDataResult *_Nullable authResult, - NSError * _Nullable error) { - if (error) { - [self decrementActivity]; - [self finishSignUpWithAuthDataResult:nil error:error]; - return; - } - FIRUserProfileChangeRequest *request = [authResult.user profileChangeRequest]; - request.displayName = username; - [request commitChangesWithCompletion:^(NSError *_Nullable error) { - [self decrementActivity]; - - if (error) { - [self finishSignUpWithAuthDataResult:nil error:error]; - return; - } - [self finishSignUpWithAuthDataResult:authResult error:nil]; - }]; - }]; - } else { - [self.auth createUserWithEmail:email - password:password - completion:^(FIRAuthDataResult *_Nullable authDataResult, - NSError *_Nullable error) { - if (error) { - [self decrementActivity]; - - [self finishSignUpWithAuthDataResult:nil error:error]; - return; - } - - FIRUserProfileChangeRequest *request = [authDataResult.user profileChangeRequest]; - request.displayName = username; - [request commitChangesWithCompletion:^(NSError *_Nullable error) { - [self decrementActivity]; - - if (error) { - [self finishSignUpWithAuthDataResult:nil error:error]; - return; - } - [self finishSignUpWithAuthDataResult:authDataResult error:nil]; - }]; - }]; - } -} - -- (void)finishSignUpWithAuthDataResult:(nullable FIRAuthDataResult *)authDataResult - error:(nullable NSError *)error { - if (error) { - switch (error.code) { - case FIRAuthErrorCodeEmailAlreadyInUse: - [self showAlertWithMessage:FUILocalizedString(kStr_EmailAlreadyInUseError)]; - return; - case FIRAuthErrorCodeInvalidEmail: - [self showAlertWithMessage:FUILocalizedString(kStr_InvalidEmailError)]; - return; - case FIRAuthErrorCodeWeakPassword: - [self showAlertWithMessage:FUILocalizedString(kStr_WeakPasswordError)]; - return; - case FIRAuthErrorCodeTooManyRequests: - [self showAlertWithMessage:FUILocalizedString(kStr_SignUpTooManyTimesError)]; - return; - } - } - - [self dismissNavigationControllerAnimated:YES completion:^() { - [self.authUI invokeResultCallbackWithAuthDataResult:authDataResult URL:nil error:error]; - }]; -} - -- (void)textFieldDidChange { - [self didChangeEmail:_emailField.text orPassword:_passwordField.text orUserName:_nameField.text]; -} - -- (void)didChangeEmail:(NSString *)email - orPassword:(NSString *)password - orUserName:(NSString *)username { - BOOL enableActionButton = email.length > 0 && password.length > 0; - if (_requireDisplayName) { - enableActionButton = enableActionButton && username.length > 0; - } - self.navigationItem.rightBarButtonItem.enabled = enableActionButton; -} - -#pragma mark - UITableViewDataSource - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - if (_requireDisplayName) { - return 3; - } else { - return 2; - } -} - -- (UITableViewCell *)tableView:(UITableView *)tableView - cellForRowAtIndexPath:(NSIndexPath *)indexPath { - FUIAuthTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellReuseIdentifier]; - if (!cell) { - UINib *cellNib = [UINib nibWithNibName:NSStringFromClass([FUIAuthTableViewCell class]) - bundle:[FUIAuthUtils authUIBundle]]; - [tableView registerNib:cellNib forCellReuseIdentifier:kCellReuseIdentifier]; - cell = [tableView dequeueReusableCellWithIdentifier:kCellReuseIdentifier]; - } - cell.textField.delegate = self; - if (indexPath.row == 0) { - cell.label.text = FUILocalizedString(kStr_Email); - cell.accessibilityIdentifier = kEmailSignUpCellAccessibilityID; - cell.textField.enabled = NO; - _emailField = cell.textField; - _emailField.text = _email; - _emailField.placeholder = FUILocalizedString(kStr_EnterYourEmail); - _emailField.secureTextEntry = NO; - _emailField.returnKeyType = UIReturnKeyNext; - _emailField.keyboardType = UIKeyboardTypeEmailAddress; - _emailField.autocorrectionType = UITextAutocorrectionTypeNo; - _emailField.autocapitalizationType = UITextAutocapitalizationTypeNone; - if (@available(iOS 11.0, *)) { - _emailField.textContentType = UITextContentTypeUsername; - } - } else if (indexPath.row == 1) { - if (_requireDisplayName) { - cell.label.text = FUILocalizedString(kStr_Name); - cell.accessibilityIdentifier = kNameSignUpCellAccessibilityID; - _nameField = cell.textField; - _nameField.placeholder = FUILocalizedString(kStr_FirstAndLastName); - _nameField.secureTextEntry = NO; - _nameField.returnKeyType = UIReturnKeyNext; - _nameField.keyboardType = UIKeyboardTypeDefault; - _nameField.autocapitalizationType = UITextAutocapitalizationTypeWords; - if (@available(iOS 10.0, *)) { - _nameField.textContentType = UITextContentTypeName; - } - } else { - cell.label.text = FUILocalizedString(kStr_Password); - cell.accessibilityIdentifier = kPasswordSignUpCellAccessibilityID; - _passwordField = cell.textField; - _passwordField.placeholder = FUILocalizedString(kStr_ChoosePassword); - _passwordField.secureTextEntry = YES; - _passwordField.rightView = [self visibilityToggleButtonForPasswordField]; - _passwordField.rightViewMode = UITextFieldViewModeAlways; - _passwordField.returnKeyType = UIReturnKeyNext; - _passwordField.keyboardType = UIKeyboardTypeDefault; - if (@available(iOS 11.0, *)) { - _passwordField.textContentType = UITextContentTypePassword; - } - } - } else if (indexPath.row == 2) { - cell.label.text = FUILocalizedString(kStr_Password); - cell.accessibilityIdentifier = kPasswordSignUpCellAccessibilityID; - _passwordField = cell.textField; - _passwordField.placeholder = FUILocalizedString(kStr_ChoosePassword); - _passwordField.secureTextEntry = YES; - _passwordField.rightView = [self visibilityToggleButtonForPasswordField]; - _passwordField.rightViewMode = UITextFieldViewModeAlways; - _passwordField.returnKeyType = UIReturnKeyNext; - _passwordField.keyboardType = UIKeyboardTypeDefault; - if (@available(iOS 11.0, *)) { - _passwordField.textContentType = UITextContentTypePassword; - } - } - [cell.textField addTarget:self - action:@selector(textFieldDidChange) - forControlEvents:UIControlEventEditingChanged]; - [self didChangeEmail:_emailField.text orPassword:_passwordField.text orUserName:_nameField.text]; - return cell; -} - -#pragma mark - UITextFieldDelegate - -- (BOOL)textFieldShouldReturn:(UITextField *)textField { - if (textField == _emailField) { - [_nameField becomeFirstResponder]; - } else if (textField == _nameField) { - [_passwordField becomeFirstResponder]; - } else if (textField == _passwordField) { - [self signUpWithEmail:_emailField.text - andPassword:_passwordField.text - andUsername:_nameField.text]; - } - return NO; -} - -#pragma mark - Password field visibility toggle button - -- (UIButton *)visibilityToggleButtonForPasswordField { - UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem]; - button.frame = CGRectMake(0, 0, kTextFieldRightViewSize, kTextFieldRightViewSize); - button.tintColor = [UIColor lightGrayColor]; - [self updateIconForRightViewButton:button]; - [button addTarget:self - action:@selector(togglePasswordFieldVisibility:) - forControlEvents:UIControlEventTouchUpInside]; - return button; -} - -- (void)updateIconForRightViewButton:(UIButton *)button { - NSString *imageName = _passwordField.secureTextEntry ? @"ic_visibility" : @"ic_visibility_off"; - UIImage *image = [FUIAuthUtils imageNamed:imageName fromBundle:[FUIAuthUtils authUIBundle]]; - [button setImage:image forState:UIControlStateNormal]; -} - -- (void)togglePasswordFieldVisibility:(UIButton *)button { - // Make sure cursor is placed correctly by disabling and enabling the text field. - _passwordField.enabled = NO; - _passwordField.secureTextEntry = !_passwordField.secureTextEntry; - [self updateIconForRightViewButton:button]; - _passwordField.enabled = YES; - [_passwordField becomeFirstResponder]; -} - -@end diff --git a/FirebaseEmailAuthUI/Sources/FUIPasswordVerificationViewController.m b/FirebaseEmailAuthUI/Sources/FUIPasswordVerificationViewController.m deleted file mode 100755 index eb1062e339c..00000000000 --- a/FirebaseEmailAuthUI/Sources/FUIPasswordVerificationViewController.m +++ /dev/null @@ -1,239 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebaseEmailAuthUI/Sources/Public/FirebaseEmailAuthUI/FUIPasswordVerificationViewController.h" - -@import FirebaseAuth; - -#import - -#import "FirebaseEmailAuthUI/Sources/Public/FirebaseEmailAuthUI/FUIEmailAuth.h" -#import "FirebaseEmailAuthUI/Sources/FUIEmailAuthStrings.h" -#import "FirebaseEmailAuthUI/Sources/Public/FirebaseEmailAuthUI/FUIPasswordRecoveryViewController.h" - -/** @var kCellReuseIdentifier - @brief The reuse identifier for table view cell. - */ -static NSString *const kCellReuseIdentifier = @"cellReuseIdentifier"; - -@interface FUIPasswordVerificationViewController () -@end - -@implementation FUIPasswordVerificationViewController { - /** @var _email - @brief The @c The email address of the user collected previously. - */ - NSString *_email; - - /** @var _newCredential - @brief The new @c FIRAuthCredential that the user had never used before. - */ - FIRAuthCredential *_newCredential; - - /** @var _passwordField - @brief The @c UITextField that user enters password into. - */ - UITextField *_passwordField; - - /** @var _tableView - @brief The @c UITableView used to store all UI elements. - */ - __weak IBOutlet UITableView *_tableView; - - /** @var _forgotPasswordButton - @brief The @c UIButton which handles forgot password action. - */ - __weak IBOutlet UIButton *_forgotPasswordButton; - - /** @var _termsOfServiceView - @brief The @c Text view which displays Terms of Service. - */ - __weak IBOutlet FUIPrivacyAndTermsOfServiceView *_termsOfServiceView; - -} - -- (instancetype)initWithAuthUI:(FUIAuth *)authUI - email:(NSString *_Nullable)email - newCredential:(FIRAuthCredential *)newCredential { - return [self initWithNibName:NSStringFromClass([self class]) - bundle:[FUIEmailAuth bundle] - authUI:authUI - email:email - newCredential:newCredential]; -} - -- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil - bundle:(nullable NSBundle *)nibBundleOrNil - authUI:(FUIAuth *)authUI - email:(NSString *_Nullable)email - newCredential:(FIRAuthCredential *)newCredential { - self = [super initWithNibName:nibNameOrNil - bundle:nibBundleOrNil - authUI:authUI]; - if (self) { - _email = [email copy]; - _newCredential = newCredential; - self.title = FUILocalizedString(kStr_SignInTitle); - } - return self; -} - -- (void)viewDidLoad { - [super viewDidLoad]; - - UIBarButtonItem *nextButtonItem = - [FUIAuthBaseViewController barItemWithTitle:FUILocalizedString(kStr_Next) - target:self - action:@selector(next)]; - self.navigationItem.rightBarButtonItem = nextButtonItem; - - // The initial frame doesn't matter as long as it's not CGRectZero, otherwise a default empty - // header is added by UITableView. - FUIAuthTableHeaderView *tableHeaderView = - [[FUIAuthTableHeaderView alloc] initWithFrame:_tableView.bounds]; - _tableView.tableHeaderView = tableHeaderView; - [_forgotPasswordButton setTitle:FUILocalizedString(kStr_ForgotPasswordTitle) - forState:UIControlStateNormal]; - _termsOfServiceView.authUI = self.authUI; - [_termsOfServiceView useFooterMessage]; - [self enableDynamicCellHeightForTableView:_tableView]; -} - -- (void)viewDidLayoutSubviews { - [super viewDidLayoutSubviews]; - - FUIAuthTableHeaderView *tableHeaderView = - (FUIAuthTableHeaderView *)_tableView.tableHeaderView; - tableHeaderView.titleLabel.text = FUILocalizedString(kStr_ExistingAccountTitle); - tableHeaderView.detailLabel.text = - [NSString stringWithFormat:FUILocalizedString(kStr_PasswordVerificationMessage), _email]; - - CGSize previousSize = tableHeaderView.frame.size; - [tableHeaderView sizeToFit]; - if (!CGSizeEqualToSize(tableHeaderView.frame.size, previousSize)) { - // Update the height of table header view by setting the view again. - _tableView.tableHeaderView = tableHeaderView; - } -} - -#pragma mark - Actions - -- (void)next { - [self verifyPassword:_passwordField.text]; -} - -- (void)verifyPassword:(NSString *)password { - if (![[self class] isValidEmail:_email]) { - [self showAlertWithMessage:FUILocalizedString(kStr_InvalidEmailError)]; - return; - } - if (password.length <= 0) { - [self showAlertWithMessage:FUILocalizedString(kStr_InvalidPasswordError)]; - return; - } - - [self incrementActivity]; - - FIRAuthCredential *credential = - [FIREmailAuthProvider credentialWithEmail:_email password:password]; - [self.auth signInWithCredential:credential - completion:^(FIRAuthDataResult *_Nullable authResult, - NSError *_Nullable error) { - if (error) { - [self decrementActivity]; - - [self showAlertWithMessage:FUILocalizedString(kStr_WrongPasswordError)]; - return; - } - - [authResult.user linkWithCredential:self->_newCredential - completion:^(FIRAuthDataResult *_Nullable authResult, - NSError *_Nullable error) { - [self decrementActivity]; - - // Ignore any error (shouldn't happen) and treat the user as successfully signed in. - [self dismissNavigationControllerAnimated:YES completion:^{ - [self.authUI invokeResultCallbackWithAuthDataResult:authResult URL:nil error:nil]; - }]; - }]; - }]; -} - -- (IBAction)forgotPassword { - UIViewController *viewController; - id delegate = self.authUI.delegate; - - if ([delegate respondsToSelector:@selector(passwordRecoveryViewControllerForAuthUI:email:)]) { - viewController = [delegate passwordRecoveryViewControllerForAuthUI:self.authUI - email:_email]; - } else { - viewController = [[FUIPasswordRecoveryViewController alloc] initWithAuthUI:self.authUI - email:_email]; - } - [self pushViewController:viewController]; -} - -- (void)textFieldDidChange { - [self didChangePassword:_passwordField.text]; -} - -- (void)didChangePassword:(NSString *)password { - BOOL enableActionButton = (password.length > 0); - self.navigationItem.rightBarButtonItem.enabled = enableActionButton; -} - -#pragma mark - UITableViewDataSource - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - return 1; -} - -- (UITableViewCell *)tableView:(UITableView *)tableView - cellForRowAtIndexPath:(NSIndexPath *)indexPath { - FUIAuthTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellReuseIdentifier]; - if (!cell) { - UINib *cellNib = [UINib nibWithNibName:NSStringFromClass([FUIAuthTableViewCell class]) - bundle:[FUIAuthUtils authUIBundle]]; - [tableView registerNib:cellNib forCellReuseIdentifier:kCellReuseIdentifier]; - cell = [tableView dequeueReusableCellWithIdentifier:kCellReuseIdentifier]; - } - cell.textField.delegate = self; - cell.label.text = FUILocalizedString(kStr_Password); - _passwordField = cell.textField; - _passwordField.placeholder = FUILocalizedString(kStr_EnterYourPassword); - _passwordField.secureTextEntry = YES; - _passwordField.returnKeyType = UIReturnKeyNext; - _passwordField.keyboardType = UIKeyboardTypeDefault; - if (@available(iOS 11.0, *)) { - _passwordField.textContentType = UITextContentTypePassword; - } - [cell.textField addTarget:self - action:@selector(textFieldDidChange) - forControlEvents:UIControlEventEditingChanged]; - [self didChangePassword:_passwordField.text]; - return cell; -} - -#pragma mark - UITextFieldDelegate - -- (BOOL)textFieldShouldReturn:(UITextField *)textField { - if (textField == _passwordField) { - [self next]; - } - return NO; -} - -@end diff --git a/FirebaseEmailAuthUI/Sources/Info.plist b/FirebaseEmailAuthUI/Sources/Info.plist deleted file mode 100644 index ba72822e872..00000000000 --- a/FirebaseEmailAuthUI/Sources/Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - - diff --git a/FirebaseEmailAuthUI/Sources/Public/FirebaseEmailAuthUI/FUIConfirmEmailViewController.h b/FirebaseEmailAuthUI/Sources/Public/FirebaseEmailAuthUI/FUIConfirmEmailViewController.h deleted file mode 100644 index 56acc3b3c24..00000000000 --- a/FirebaseEmailAuthUI/Sources/Public/FirebaseEmailAuthUI/FUIConfirmEmailViewController.h +++ /dev/null @@ -1,44 +0,0 @@ -// -// Copyright (c) 2018 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** @class FUIConfirmEmailViewController - @brief The view controller that asks for user's email address. - */ -@interface FUIConfirmEmailViewController : FUIAuthBaseViewController - -/** @fn onNext: - @brief Should be called when user entered email. Triggers email verification before - pushing new controller - @param emailText Email value entered by user. - */ -- (void)onNext:(NSString *)emailText; - -/** @fn didChangeEmail: - @brief Update UI control state according to the email provided. Should be called after any - change of email. - @param emailText Email value entered by user. - */ -- (void)didChangeEmail:(NSString *)emailText; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebaseEmailAuthUI/Sources/Public/FirebaseEmailAuthUI/FUIEmailAuth.h b/FirebaseEmailAuthUI/Sources/Public/FirebaseEmailAuthUI/FUIEmailAuth.h deleted file mode 100644 index 22fa242328d..00000000000 --- a/FirebaseEmailAuthUI/Sources/Public/FirebaseEmailAuthUI/FUIEmailAuth.h +++ /dev/null @@ -1,129 +0,0 @@ -// -// Copyright (c) 2018 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -@class FUIAuth; -@class FIRActionCodeSettings; -@class FUIEmailEntryViewController; -@class FUIPasswordSignInViewController; -@class FUIPasswordSignUpViewController; -@class FUIPasswordRecoveryViewController; -@class FUIPasswordVerificationViewController; - -NS_ASSUME_NONNULL_BEGIN - -/** @class FUIEmailAuth - @brief AuthUI components for Email Sign In. - */ -@interface FUIEmailAuth : NSObject - -/** @property emailLink. - @brief The link for email link sign in. - */ -@property(nonatomic, strong, readwrite, nullable) NSString *emailLink; - -/** @property buttonAlignment - @brief The alignment of the icon and text of the button. - */ -@property(nonatomic, readwrite) FUIButtonAlignment buttonAlignment; - -+ (NSBundle *)bundle; - -/** @fn initAuthAuthUI:signInMethod:forceSameDevice:allowNewEmailAccounts:actionCodeSetting: - @brief Initializer with several configurations. - @param authUI The auth UI object that this auth UI provider associate with. - @param signInMethod The email sign in method, which can be password or email link. - @param forceSameDevice Indicate whether for the email sign in link to be open on the same device. - @param allowNewEmailAccounts Indicate whether allow sign up if the user doesn't exist. - @param actionCodeSettings The action code settings for email actions. - */ -- (instancetype)initAuthAuthUI:(FUIAuth *)authUI - signInMethod:(NSString *)signInMethod - forceSameDevice:(BOOL)forceSameDevice - allowNewEmailAccounts:(BOOL)allowNewEmailAccounts - actionCodeSetting:(FIRActionCodeSettings *)actionCodeSettings; - -/** @fn initAuthAuthUI:signInMethod:forceSameDevice:allowNewEmailAccounts:requireDisplayName:actionCodeSetting: - @brief Initializer with several configurations. - @param authUI The auth UI object that this auth UI provider associate with. - @param signInMethod The email sign in method, which can be password or email link. - @param forceSameDevice Indicate whether for the email sign in link to be open on the same device. - @param allowNewEmailAccounts Indicate whether allow sign up if the user doesn't exist. - @param requireDisplayName Indicate whether require display name when sign up. - @param actionCodeSettings The action code settings for email actions. - */ -- (instancetype)initAuthAuthUI:(FUIAuth *)authUI - signInMethod:(NSString *)signInMethod - forceSameDevice:(BOOL)forceSameDevice - allowNewEmailAccounts:(BOOL)allowNewEmailAccounts - requireDisplayName:(BOOL)requireDisplayName - actionCodeSetting:(FIRActionCodeSettings *)actionCodeSettings; - -/** @property signInMethod. - @brief Defines the sign in method for FIREmailAuthProvider. - This can be one of the following string constants: - - FIREmailLinkAuthSignInMethod - - FIREmailPasswordAuthSignInMethod (default). - */ -@property(nonatomic, copy, readonly) NSString *signInMethod; - -/** @property forceSameDevice. - @brief Whether to force same device flow. If not, opening the link on a different device will - display an error message. Note that this should be true when used with anonymous user - upgrade flows. The default is false. - */ -@property(nonatomic, assign, readonly) BOOL forceSameDevice; - -/** @property actionCodeSettings. - @brief Defines the FIRActionCodeSettings configuration to use when sending the link. This gives - the developer the ability to specify how the link can be handled, custom dynamic link, - additional state in the deep link, etc. - */ -@property(nonatomic, strong, readonly) FIRActionCodeSettings *actionCodeSettings; - -/** @property allowNewEmailAccounts - @brief Whether to allow new user sign, defaults to YES. - */ -@property(nonatomic, assign, readonly) BOOL allowNewEmailAccounts; - -/** @property requireDisplayName - @brief Whether signup requires display name, defaults to YES. - */ -@property(nonatomic, assign, readonly) BOOL requireDisplayName; - -/** @fn signInWithPresentingViewController: - @brief Signs in with email auth provider. - @see FUIAuthDelegate.authUI:didSignInWithAuthDataResult:URL:error: for method callback. - @param presentingViewController The view controller used to present the UI. - */ -- (void)signInWithPresentingViewController:(UIViewController *)presentingViewController -__attribute__((deprecated("This is deprecated API and will be removed in a future release." - "Please use signInWithPresentingViewController:email:"))); - -/** @fn signInWithPresentingViewController:email: - @brief Signs in with email auth provider. - @see FUIAuthDelegate.authUI:didSignInWithAuthDataResult:URL:error: for method callback. - @param presentingViewController The view controller used to present the UI. - @param email The default email address. - */ -- (void)signInWithPresentingViewController:(UIViewController *)presentingViewController - email:(nullable NSString *)email; - - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebaseEmailAuthUI/Sources/Public/FirebaseEmailAuthUI/FUIEmailEntryViewController.h b/FirebaseEmailAuthUI/Sources/Public/FirebaseEmailAuthUI/FUIEmailEntryViewController.h deleted file mode 100644 index 570cdef8a7c..00000000000 --- a/FirebaseEmailAuthUI/Sources/Public/FirebaseEmailAuthUI/FUIEmailEntryViewController.h +++ /dev/null @@ -1,44 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** @class FUIEmailEntryViewController - @brief The view controller that asks for user's email address. - */ -@interface FUIEmailEntryViewController : FUIAuthBaseViewController - -/** @fn onNext: - @brief Should be called when user entered email. Triggers email verification before - pushing new controller - @param emailText Email value entered by user. - */ -- (void)onNext:(NSString *)emailText; - -/** @fn didChangeEmail: - @brief Should be called after any change of email value. Updates UI controls state - (e g state of next button) - @param emailText Email value entered by user. - */ -- (void)didChangeEmail:(NSString *)emailText; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebaseEmailAuthUI/Sources/Public/FirebaseEmailAuthUI/FUIPasswordRecoveryViewController.h b/FirebaseEmailAuthUI/Sources/Public/FirebaseEmailAuthUI/FUIPasswordRecoveryViewController.h deleted file mode 100644 index 0a1e55c1ec3..00000000000 --- a/FirebaseEmailAuthUI/Sources/Public/FirebaseEmailAuthUI/FUIPasswordRecoveryViewController.h +++ /dev/null @@ -1,75 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** @class FUIPasswordRecoveryViewController - @brief The view controller that asks for user's password. - */ -@interface FUIPasswordRecoveryViewController : FUIAuthBaseViewController - -/** @fn initWithNibName:bundle:authUI: - @brief Please use @c initWithAuthUI:email:. - */ -- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil - bundle:(nullable NSBundle *)nibBundleOrNil - authUI:(FUIAuth *)authUI NS_UNAVAILABLE; - -/** @fn initWithAuthUI: - @brief Please use @c initWithAuthUI:email:. - */ -- (instancetype)initWithAuthUI:(FUIAuth *)authUI NS_UNAVAILABLE; - -/** @fn initWithNibName:bundle:authUI:email: - @brief Designated initializer. - @param nibNameOrNil The name of the nib file to associate with the view controller. - @param nibBundleOrNil The bundle in which to search for the nib file. - @param authUI The @c FUIAuth instance that manages this view controller. - @param email The email address of the user. - */ -- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil - bundle:(nullable NSBundle *)nibBundleOrNil - authUI:(FUIAuth *)authUI - email:(NSString *_Nullable)email NS_DESIGNATED_INITIALIZER; - -/** @fn initWithAuthUI:email: - @brief Convenience initializer. - @param authUI The @c FUIAuth instance that manages this view controller. - @param email The email address of the user. - */ -- (instancetype)initWithAuthUI:(FUIAuth *)authUI - email:(NSString *_Nullable)email; - -/** @fn didChangeEmail: - @brief Should be called after any change of email value. Updates UI controls state - (e g state of send button) - @param email The email address of the user. - */ -- (void)didChangeEmail:(NSString *)email; - -/** @fn recoverEmail: - @brief Should be called when user want to recover password for specified email. - Sends email recover request. - @param email The email address of the user. - */ -- (void)recoverEmail:(NSString *)email; -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebaseEmailAuthUI/Sources/Public/FirebaseEmailAuthUI/FUIPasswordSignInViewController.h b/FirebaseEmailAuthUI/Sources/Public/FirebaseEmailAuthUI/FUIPasswordSignInViewController.h deleted file mode 100644 index 57987a5c056..00000000000 --- a/FirebaseEmailAuthUI/Sources/Public/FirebaseEmailAuthUI/FUIPasswordSignInViewController.h +++ /dev/null @@ -1,83 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** @class FUIPasswordSignInViewController - @brief The view controller that asks for user's password. - */ -@interface FUIPasswordSignInViewController : FUIAuthBaseViewController - -/** @fn initWithNibName:bundle:authUI: - @brief Please use @c initWithNibName:bundle:authUI:email:. - */ -- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil - bundle:(nullable NSBundle *)nibBundleOrNil - authUI:(FUIAuth *)authUI NS_UNAVAILABLE; - -/** @fn initWithAuthUI: - @brief Please use @c initWithNibName:bundle:authUI:email:. - */ -- (instancetype)initWithAuthUI:(FUIAuth *)authUI NS_UNAVAILABLE; - -/** @fn initWithNibName:bundle:authUI:email: - @brief Designated initializer. - @param nibNameOrNil The name of the nib file to associate with the view controller. - @param nibBundleOrNil The bundle in which to search for the nib file. - @param authUI The @c FUIAuth instance that manages this view controller. - @param email The email address of the user. - */ -- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil - bundle:(nullable NSBundle *)nibBundleOrNil - authUI:(FUIAuth *)authUI - email:(NSString *_Nullable)email NS_DESIGNATED_INITIALIZER; - -/** @fn initWithAuthUI:email: - @brief Convenience initializer. - @param authUI The @c FUIAuth instance that manages this view controller. - @param email The email address of the user. - */ -- (instancetype)initWithAuthUI:(FUIAuth *)authUI - email:(NSString *_Nullable)email; - -/** @fn forgotPasswordForEmail: - @brief Method is called when user forgot password. - @param email The email address of the user. - */ -- (void)forgotPasswordForEmail:(NSString *)email; - -/** @fn didChangeEmail:andPassword: - @brief Should be called after any change of email/password value. Updates UI controls state - (e g state of next button) - @param email The email address of the user. - @param password The password which user uses. - */ -- (void)didChangeEmail:(NSString *)email andPassword:(NSString *)password; - -/** @fn signInWithDefaultValue:andPassword: - @brief Should be called when user entered credentials. Sends authorization request - @param email The email address of the user. - @param password The password which user uses. - */ -- (void)signInWithDefaultValue:(NSString *)email andPassword:(NSString *)password; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebaseEmailAuthUI/Sources/Public/FirebaseEmailAuthUI/FUIPasswordSignUpViewController.h b/FirebaseEmailAuthUI/Sources/Public/FirebaseEmailAuthUI/FUIPasswordSignUpViewController.h deleted file mode 100644 index 41383adf18f..00000000000 --- a/FirebaseEmailAuthUI/Sources/Public/FirebaseEmailAuthUI/FUIPasswordSignUpViewController.h +++ /dev/null @@ -1,95 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -#import - -@class FUIPrivacyAndTermsOfServiceView; - -NS_ASSUME_NONNULL_BEGIN - -/** @class FUIPasswordSignUpViewController - @brief The view controller where user signs up as a password account. - */ -@interface FUIPasswordSignUpViewController : FUIAuthBaseViewController - -/** @property footerTextView - @brief The view in the footer of the table that displays Privacy and Terms of Service. - */ -@property(nonatomic, strong) IBOutlet FUIPrivacyAndTermsOfServiceView *footerView; - -/** @fn initWithNibName:bundle:authUI: - @brief Please use @c initWithAuthUI:email:. - */ -- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil - bundle:(nullable NSBundle *)nibBundleOrNil - authUI:(FUIAuth *)authUI NS_UNAVAILABLE; - -/** @fn initWithAuthUI: - @brief Please use @c initWithAuthUI:email:. - */ -- (instancetype)initWithAuthUI:(FUIAuth *)authUI NS_UNAVAILABLE; - -/** @fn initWithNibName:bundle:authUI:email: - @brief Designated initializer. - @param nibNameOrNil The name of the nib file to associate with the view controller. - @param nibBundleOrNil The bundle in which to search for the nib file. - @param authUI The @c FUIAuth instance that manages this view controller. - @param email The email address of the user. - @param requireDisplayName Whether the displayname field is required . - */ -- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil - bundle:(nullable NSBundle *)nibBundleOrNil - authUI:(FUIAuth *)authUI - email:(NSString *_Nullable)email - requireDisplayName:(BOOL)requireDisplayName NS_DESIGNATED_INITIALIZER; - -/** @fn initWithAuthUI:email: - @brief Convenience initializer. - @param authUI The @c FUIAuth instance that manages this view controller. - @param email The email address of the user. - @param requireDisplayName Whether the displayname field is required . - */ -- (instancetype)initWithAuthUI:(FUIAuth *)authUI - email:(NSString *_Nullable)email - requireDisplayName:(BOOL)requireDisplayName; - -/** @fn didChangeEmail:orPassword:orUserName: - @brief Should be called after any change of email, password or user name value. - Updates UI controls state (e g state of next button) - @param email The email address of the user. - @param password The password which user uses. - @param username The username which user uses. - */ -- (void)didChangeEmail:(NSString *)email - orPassword:(NSString *)password - orUserName:(NSString *)username; - -/** @fn signUpWithEmail:andPassword:andUsername: - @brief Should be called when user entered credentials and name. Sends request to create - new user and second request to update it's name - @param email The email address of the user. - @param password The password which user uses. - @param username The username which user uses. - */ -- (void)signUpWithEmail:(NSString *)email - andPassword:(NSString *)password - andUsername:(NSString *)username; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebaseEmailAuthUI/Sources/Public/FirebaseEmailAuthUI/FUIPasswordVerificationViewController.h b/FirebaseEmailAuthUI/Sources/Public/FirebaseEmailAuthUI/FUIPasswordVerificationViewController.h deleted file mode 100644 index 807e99f28af..00000000000 --- a/FirebaseEmailAuthUI/Sources/Public/FirebaseEmailAuthUI/FUIPasswordVerificationViewController.h +++ /dev/null @@ -1,86 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -#import - -@class FIRAuthCredential; - -NS_ASSUME_NONNULL_BEGIN - -/** @class FUIPasswordVerificationViewController - @brief The view controller that verifies user's password. - */ -@interface FUIPasswordVerificationViewController : FUIAuthBaseViewController - -/** @fn initWithNibName:bundle:authUI: - @brief Please use @c initWithAuthUI:email:. - */ -- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil - bundle:(nullable NSBundle *)nibBundleOrNil - authUI:(FUIAuth *)authUI NS_UNAVAILABLE; - -/** @fn initWithAuthUI: - @brief Please use @c initWithAuthUI:email:. - */ -- (instancetype)initWithAuthUI:(FUIAuth *)authUI NS_UNAVAILABLE; - -/** @fn initWithNibName:bundle:authUI:email:newCredential: - @brief Designated initializer. - @param nibNameOrNil The name of the nib file to associate with the view controller. - @param nibBundleOrNil The bundle in which to search for the nib file. - @param authUI The @c FUIAuth instance that manages this view controller. - @param email The email address of the user. - @param newCredential The new @c FIRAuthCredential that the user had never used before. - */ -- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil - bundle:(nullable NSBundle *)nibBundleOrNil - authUI:(FUIAuth *)authUI - email:(NSString *_Nullable)email - newCredential:(FIRAuthCredential *)newCredential NS_DESIGNATED_INITIALIZER; - -/** @fn initWithAuthUI:email:newCredential: - @brief Convenience initializer. - @param authUI The @c FUIAuth instance that manages this view controller. - @param email The email address of the user. - @param newCredential The new @c FIRAuthCredential that the user had never used before. - */ -- (instancetype)initWithAuthUI:(FUIAuth *)authUI - email:(NSString *_Nullable)email - newCredential:(FIRAuthCredential *)newCredential; - -/** @fn forgotPassword - @brief Method is called when user forgot password. - */ -- (void)forgotPassword; - -/** @fn didChangePassword: - @brief Should be called after any change of password value. Updates UI controls state - (e g state of next button) - @param password The password which user uses. - */ -- (void)didChangePassword:(NSString *)password; - -/** @fn verifyPassword: - @brief Should be called when user entered password. Sends authorization request - @param password The password which user uses. - */ -- (void)verifyPassword:(NSString *)password; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebaseEmailAuthUI/Sources/Public/FirebaseEmailAuthUI/FirebaseEmailAuthUI.h b/FirebaseEmailAuthUI/Sources/Public/FirebaseEmailAuthUI/FirebaseEmailAuthUI.h deleted file mode 100644 index 52e51fa4794..00000000000 --- a/FirebaseEmailAuthUI/Sources/Public/FirebaseEmailAuthUI/FirebaseEmailAuthUI.h +++ /dev/null @@ -1,30 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -//! Project version number for FirebaseEmailAuthUI. -FOUNDATION_EXPORT double FirebaseEmailAuthUIVersionNumber; - -//! Project version string for FirebaseEmailAuthUI. -FOUNDATION_EXPORT const unsigned char FirebaseEmailAuthUIVersionString[]; - -#import "FUIEmailAuth.h" -#import "FUIEmailEntryViewController.h" -#import "FUIPasswordRecoveryViewController.h" -#import "FUIPasswordVerificationViewController.h" -#import "FUIPasswordSignInViewController.h" -#import "FUIPasswordSignUpViewController.h" diff --git a/FirebaseEmailAuthUI/Sources/Resources/FUIConfirmEmailViewController.xib b/FirebaseEmailAuthUI/Sources/Resources/FUIConfirmEmailViewController.xib deleted file mode 100644 index 3656d78bcb6..00000000000 --- a/FirebaseEmailAuthUI/Sources/Resources/FUIConfirmEmailViewController.xib +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FirebaseEmailAuthUI/Sources/Resources/FUIEmailEntryViewController.xib b/FirebaseEmailAuthUI/Sources/Resources/FUIEmailEntryViewController.xib deleted file mode 100644 index 9214352436c..00000000000 --- a/FirebaseEmailAuthUI/Sources/Resources/FUIEmailEntryViewController.xib +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FirebaseEmailAuthUI/Sources/Resources/FUIPasswordRecoveryViewController.xib b/FirebaseEmailAuthUI/Sources/Resources/FUIPasswordRecoveryViewController.xib deleted file mode 100644 index aa1a998d960..00000000000 --- a/FirebaseEmailAuthUI/Sources/Resources/FUIPasswordRecoveryViewController.xib +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FirebaseEmailAuthUI/Sources/Resources/FUIPasswordSignInViewController.xib b/FirebaseEmailAuthUI/Sources/Resources/FUIPasswordSignInViewController.xib deleted file mode 100644 index 1567c2f146c..00000000000 --- a/FirebaseEmailAuthUI/Sources/Resources/FUIPasswordSignInViewController.xib +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FirebaseEmailAuthUI/Sources/Resources/FUIPasswordSignUpViewController.xib b/FirebaseEmailAuthUI/Sources/Resources/FUIPasswordSignUpViewController.xib deleted file mode 100644 index 13fdd24e1fe..00000000000 --- a/FirebaseEmailAuthUI/Sources/Resources/FUIPasswordSignUpViewController.xib +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FirebaseEmailAuthUI/Sources/Resources/FUIPasswordVerificationViewController.xib b/FirebaseEmailAuthUI/Sources/Resources/FUIPasswordVerificationViewController.xib deleted file mode 100644 index c10c58f3399..00000000000 --- a/FirebaseEmailAuthUI/Sources/Resources/FUIPasswordVerificationViewController.xib +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FirebaseEmailAuthUI/Sources/Resources/ic_email.png b/FirebaseEmailAuthUI/Sources/Resources/ic_email.png deleted file mode 100644 index 4cfd6b12894..00000000000 Binary files a/FirebaseEmailAuthUI/Sources/Resources/ic_email.png and /dev/null differ diff --git a/FirebaseEmailAuthUI/Sources/Resources/ic_email@2x.png b/FirebaseEmailAuthUI/Sources/Resources/ic_email@2x.png deleted file mode 100644 index c3e2e44c0a3..00000000000 Binary files a/FirebaseEmailAuthUI/Sources/Resources/ic_email@2x.png and /dev/null differ diff --git a/FirebaseEmailAuthUI/Sources/Resources/ic_email@3x.png b/FirebaseEmailAuthUI/Sources/Resources/ic_email@3x.png deleted file mode 100644 index aae04aea0a9..00000000000 Binary files a/FirebaseEmailAuthUI/Sources/Resources/ic_email@3x.png and /dev/null differ diff --git a/FirebaseFacebookAuthUI.podspec b/FirebaseFacebookAuthUI.podspec deleted file mode 100644 index d75aa6ccc60..00000000000 --- a/FirebaseFacebookAuthUI.podspec +++ /dev/null @@ -1,32 +0,0 @@ -Pod::Spec.new do |s| - s.name = 'FirebaseFacebookAuthUI' - s.version = '15.1.0' - s.summary = 'A Facebook auth provider for FirebaseAuthUI.' - s.homepage = 'https://github.com/firebase/FirebaseUI-iOS' - s.license = { :type => 'Apache 2.0', :file => 'LICENSE' } - s.source = { :git => 'https://github.com/firebase/FirebaseUI-iOS.git', :tag => 'v' + s.version.to_s} - s.author = 'Firebase' - s.platform = :ios - s.ios.deployment_target = '13.0' - s.ios.framework = 'UIKit' - s.requires_arc = true - s.cocoapods_version = '>= 1.8.0' - s.swift_versions = '5.0' - s.pod_target_xcconfig = { - 'HEADER_SEARCH_PATHS' => '"${PODS_TARGET_SRCROOT}"', - } - s.swift_version = '6.0' - - s.platform = :ios, '13.0' - s.public_header_files = 'FirebaseFacebookAuthUI/Sources/Public/FirebaseFacebookAuthUI/*.h' - s.source_files = 'FirebaseFacebookAuthUI/Sources/**/*.{h,m}' - s.dependency 'FirebaseAuth' - s.dependency 'FirebaseCore' - s.dependency 'FirebaseAuthUI', '~> 15.0' - s.dependency 'FBSDKLoginKit', '>= 17.0', '< 18.0' - s.dependency 'FBSDKCoreKit_Basics' - s.resource_bundles = { - 'FirebaseFacebookAuthUI' => ['FirebaseFacebookAuthUI/Sources/{Resources,Strings}/*.{png,lproj}'] - } - -end diff --git a/FirebaseFacebookAuthUI/FirebaseFacebookAuthUI.xcodeproj/project.pbxproj b/FirebaseFacebookAuthUI/FirebaseFacebookAuthUI.xcodeproj/project.pbxproj deleted file mode 100644 index 1147652ba1c..00000000000 --- a/FirebaseFacebookAuthUI/FirebaseFacebookAuthUI.xcodeproj/project.pbxproj +++ /dev/null @@ -1,919 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 50; - objects = { - -/* Begin PBXBuildFile section */ - 8D69E3DB21DD83EB00CFA49B /* FirebaseFacebookAuthUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E3DA21DD83EB00CFA49B /* FirebaseFacebookAuthUITests.m */; }; - 8D69E3DD21DD83EB00CFA49B /* FirebaseFacebookAuthUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E3CF21DD83EB00CFA49B /* FirebaseFacebookAuthUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8D69E3E821DD843800CFA49B /* FUIFacebookAuth.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E3E621DD843800CFA49B /* FUIFacebookAuth.m */; }; - 8D69E3E921DD843800CFA49B /* FUIFacebookAuth.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E3E721DD843800CFA49B /* FUIFacebookAuth.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8D69E44421DD843F00CFA49B /* FirebaseFacebookAuthUI.strings in Resources */ = {isa = PBXBuildFile; fileRef = 8D69E3EB21DD843E00CFA49B /* FirebaseFacebookAuthUI.strings */; }; - 8D69E44521DD843F00CFA49B /* ic_facebook.png in Resources */ = {isa = PBXBuildFile; fileRef = 8D69E44121DD843F00CFA49B /* ic_facebook.png */; }; - 8D69E44621DD843F00CFA49B /* ic_facebook@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8D69E44221DD843F00CFA49B /* ic_facebook@3x.png */; }; - 8D69E44721DD843F00CFA49B /* ic_facebook@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8D69E44321DD843F00CFA49B /* ic_facebook@2x.png */; }; - 8D69E44B21DD845100CFA49B /* FUIFacebookAuthTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E44821DD845100CFA49B /* FUIFacebookAuthTest.m */; }; - 8D69E44C21DD845100CFA49B /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 8D69E44921DD845100CFA49B /* GoogleService-Info.plist */; }; - 8D69E44D21DD88BB00CFA49B /* FirebaseFacebookAuthUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8D69E3CC21DD83EB00CFA49B /* FirebaseFacebookAuthUI.framework */; }; - 8D69E45121DD8A6D00CFA49B /* ic_facebook.png in Resources */ = {isa = PBXBuildFile; fileRef = 8D69E44121DD843F00CFA49B /* ic_facebook.png */; }; - 8D69E45221DD8A6D00CFA49B /* ic_facebook@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8D69E44321DD843F00CFA49B /* ic_facebook@2x.png */; }; - 8D69E45321DD8A6D00CFA49B /* ic_facebook@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8D69E44221DD843F00CFA49B /* ic_facebook@3x.png */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 8D69E3D721DD83EB00CFA49B /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 8D69E3C321DD83EB00CFA49B /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8D69E3CB21DD83EB00CFA49B; - remoteInfo = FirebaseFacebookAuthUI; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 8D69E3CC21DD83EB00CFA49B /* FirebaseFacebookAuthUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FirebaseFacebookAuthUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 8D69E3CF21DD83EB00CFA49B /* FirebaseFacebookAuthUI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FirebaseFacebookAuthUI.h; sourceTree = ""; }; - 8D69E3D021DD83EB00CFA49B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 8D69E3D521DD83EB00CFA49B /* FirebaseFacebookAuthUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FirebaseFacebookAuthUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 8D69E3DA21DD83EB00CFA49B /* FirebaseFacebookAuthUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FirebaseFacebookAuthUITests.m; sourceTree = ""; }; - 8D69E3DC21DD83EB00CFA49B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 8D69E3E621DD843800CFA49B /* FUIFacebookAuth.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUIFacebookAuth.m; sourceTree = ""; }; - 8D69E3E721DD843800CFA49B /* FUIFacebookAuth.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIFacebookAuth.h; sourceTree = ""; }; - 8D69E3EC21DD843E00CFA49B /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/FirebaseFacebookAuthUI.strings; sourceTree = ""; }; - 8D69E3ED21DD843E00CFA49B /* ur */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ur; path = ur.lproj/FirebaseFacebookAuthUI.strings; sourceTree = ""; }; - 8D69E3EE21DD843E00CFA49B /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/FirebaseFacebookAuthUI.strings; sourceTree = ""; }; - 8D69E3EF21DD843E00CFA49B /* es-SV */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-SV"; path = "es-SV.lproj/FirebaseFacebookAuthUI.strings"; sourceTree = ""; }; - 8D69E3F021DD843E00CFA49B /* zh-Hant-TW */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant-TW"; path = "zh-Hant-TW.lproj/FirebaseFacebookAuthUI.strings"; sourceTree = ""; }; - 8D69E3F121DD843E00CFA49B /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/FirebaseFacebookAuthUI.strings; sourceTree = ""; }; - 8D69E3F221DD843E00CFA49B /* el */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = el; path = el.lproj/FirebaseFacebookAuthUI.strings; sourceTree = ""; }; - 8D69E3F321DD843E00CFA49B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/FirebaseFacebookAuthUI.strings"; sourceTree = ""; }; - 8D69E3F421DD843E00CFA49B /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/FirebaseFacebookAuthUI.strings; sourceTree = ""; }; - 8D69E3F521DD843E00CFA49B /* fa */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fa; path = fa.lproj/FirebaseFacebookAuthUI.strings; sourceTree = ""; }; - 8D69E3F621DD843E00CFA49B /* mr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = mr; path = mr.lproj/FirebaseFacebookAuthUI.strings; sourceTree = ""; }; - 8D69E3F721DD843E00CFA49B /* es-GT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-GT"; path = "es-GT.lproj/FirebaseFacebookAuthUI.strings"; sourceTree = ""; }; - 8D69E3F821DD843E00CFA49B /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/FirebaseFacebookAuthUI.strings; sourceTree = ""; }; - 8D69E3F921DD843E00CFA49B /* en-CA */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-CA"; path = "en-CA.lproj/FirebaseFacebookAuthUI.strings"; sourceTree = ""; }; - 8D69E3FA21DD843E00CFA49B /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/FirebaseFacebookAuthUI.strings; sourceTree = ""; }; - 8D69E3FB21DD843E00CFA49B /* es-PY */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-PY"; path = "es-PY.lproj/FirebaseFacebookAuthUI.strings"; sourceTree = ""; }; - 8D69E3FC21DD843E00CFA49B /* gu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = gu; path = gu.lproj/FirebaseFacebookAuthUI.strings; sourceTree = ""; }; - 8D69E3FD21DD843E00CFA49B /* kn */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = kn; path = kn.lproj/FirebaseFacebookAuthUI.strings; sourceTree = ""; }; - 8D69E3FE21DD843E00CFA49B /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/FirebaseFacebookAuthUI.strings; sourceTree = ""; }; - 8D69E3FF21DD843E00CFA49B /* es-US */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-US"; path = "es-US.lproj/FirebaseFacebookAuthUI.strings"; sourceTree = ""; }; - 8D69E40021DD843E00CFA49B /* en-GB */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-GB"; path = "en-GB.lproj/FirebaseFacebookAuthUI.strings"; sourceTree = ""; }; - 8D69E40121DD843E00CFA49B /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/FirebaseFacebookAuthUI.strings; sourceTree = ""; }; - 8D69E40221DD843E00CFA49B /* es-VE */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-VE"; path = "es-VE.lproj/FirebaseFacebookAuthUI.strings"; sourceTree = ""; }; - 8D69E40321DD843E00CFA49B /* es-CL */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-CL"; path = "es-CL.lproj/FirebaseFacebookAuthUI.strings"; sourceTree = ""; }; - 8D69E40421DD843E00CFA49B /* sl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sl; path = sl.lproj/FirebaseFacebookAuthUI.strings; sourceTree = ""; }; - 8D69E40521DD843E00CFA49B /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/FirebaseFacebookAuthUI.strings; sourceTree = ""; }; - 8D69E40621DD843E00CFA49B /* es-419 */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-419"; path = "es-419.lproj/FirebaseFacebookAuthUI.strings"; sourceTree = ""; }; - 8D69E40721DD843E00CFA49B /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/FirebaseFacebookAuthUI.strings; sourceTree = ""; }; - 8D69E40821DD843E00CFA49B /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bg; path = bg.lproj/FirebaseFacebookAuthUI.strings; sourceTree = ""; }; - 8D69E40921DD843E00CFA49B /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/FirebaseFacebookAuthUI.strings; sourceTree = ""; }; - 8D69E40A21DD843E00CFA49B /* sr-Latn */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "sr-Latn"; path = "sr-Latn.lproj/FirebaseFacebookAuthUI.strings"; sourceTree = ""; }; - 8D69E40B21DD843E00CFA49B /* nn-NO */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "nn-NO"; path = "nn-NO.lproj/FirebaseFacebookAuthUI.strings"; sourceTree = ""; }; - 8D69E40C21DD843E00CFA49B /* es-PA */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-PA"; path = "es-PA.lproj/FirebaseFacebookAuthUI.strings"; sourceTree = ""; }; - 8D69E40D21DD843E00CFA49B /* en-SG */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-SG"; path = "en-SG.lproj/FirebaseFacebookAuthUI.strings"; sourceTree = ""; }; - 8D69E40E21DD843E00CFA49B /* sr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sr; path = sr.lproj/FirebaseFacebookAuthUI.strings; sourceTree = ""; }; - 8D69E40F21DD843E00CFA49B /* ms */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ms; path = ms.lproj/FirebaseFacebookAuthUI.strings; sourceTree = ""; }; - 8D69E41021DD843E00CFA49B /* es-CR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-CR"; path = "es-CR.lproj/FirebaseFacebookAuthUI.strings"; sourceTree = ""; }; - 8D69E41121DD843E00CFA49B /* ta */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ta; path = ta.lproj/FirebaseFacebookAuthUI.strings; sourceTree = ""; }; - 8D69E41221DD843E00CFA49B /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/FirebaseFacebookAuthUI.strings; sourceTree = ""; }; - 8D69E41321DD843E00CFA49B /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/FirebaseFacebookAuthUI.strings; sourceTree = ""; }; - 8D69E41421DD843E00CFA49B /* es-AR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-AR"; path = "es-AR.lproj/FirebaseFacebookAuthUI.strings"; sourceTree = ""; }; - 8D69E41521DD843E00CFA49B /* es-PE */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-PE"; path = "es-PE.lproj/FirebaseFacebookAuthUI.strings"; sourceTree = ""; }; - 8D69E41621DD843E00CFA49B /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/FirebaseFacebookAuthUI.strings; sourceTree = ""; }; - 8D69E41721DD843E00CFA49B /* en-IE */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-IE"; path = "en-IE.lproj/FirebaseFacebookAuthUI.strings"; sourceTree = ""; }; - 8D69E41821DD843E00CFA49B /* fil */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fil; path = fil.lproj/FirebaseFacebookAuthUI.strings; sourceTree = ""; }; - 8D69E41921DD843E00CFA49B /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/FirebaseFacebookAuthUI.strings"; sourceTree = ""; }; - 8D69E41A21DD843E00CFA49B /* es-CO */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-CO"; path = "es-CO.lproj/FirebaseFacebookAuthUI.strings"; sourceTree = ""; }; - 8D69E41B21DD843E00CFA49B /* gsw */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = gsw; path = gsw.lproj/FirebaseFacebookAuthUI.strings; sourceTree = ""; }; - 8D69E41C21DD843E00CFA49B /* en-ZA */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-ZA"; path = "en-ZA.lproj/FirebaseFacebookAuthUI.strings"; sourceTree = ""; }; - 8D69E41D21DD843E00CFA49B /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/FirebaseFacebookAuthUI.strings; sourceTree = ""; }; - 8D69E41E21DD843E00CFA49B /* es-PR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-PR"; path = "es-PR.lproj/FirebaseFacebookAuthUI.strings"; sourceTree = ""; }; - 8D69E41F21DD843E00CFA49B /* de-AT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "de-AT"; path = "de-AT.lproj/FirebaseFacebookAuthUI.strings"; sourceTree = ""; }; - 8D69E42021DD843E00CFA49B /* en-AU */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-AU"; path = "en-AU.lproj/FirebaseFacebookAuthUI.strings"; sourceTree = ""; }; - 8D69E42121DD843E00CFA49B /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/FirebaseFacebookAuthUI.strings; sourceTree = ""; }; - 8D69E42221DD843E00CFA49B /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/FirebaseFacebookAuthUI.strings; sourceTree = ""; }; - 8D69E42321DD843E00CFA49B /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/FirebaseFacebookAuthUI.strings"; sourceTree = ""; }; - 8D69E42421DD843E00CFA49B /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/FirebaseFacebookAuthUI.strings; sourceTree = ""; }; - 8D69E42521DD843E00CFA49B /* lv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = lv; path = lv.lproj/FirebaseFacebookAuthUI.strings; sourceTree = ""; }; - 8D69E42621DD843E00CFA49B /* es-MX */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-MX"; path = "es-MX.lproj/FirebaseFacebookAuthUI.strings"; sourceTree = ""; }; - 8D69E42721DD843E00CFA49B /* lt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = lt; path = lt.lproj/FirebaseFacebookAuthUI.strings; sourceTree = ""; }; - 8D69E42821DD843E00CFA49B /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/FirebaseFacebookAuthUI.strings; sourceTree = ""; }; - 8D69E42921DD843E00CFA49B /* es-DO */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-DO"; path = "es-DO.lproj/FirebaseFacebookAuthUI.strings"; sourceTree = ""; }; - 8D69E42A21DD843E00CFA49B /* fr-CH */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "fr-CH"; path = "fr-CH.lproj/FirebaseFacebookAuthUI.strings"; sourceTree = ""; }; - 8D69E42B21DD843E00CFA49B /* es-NI */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-NI"; path = "es-NI.lproj/FirebaseFacebookAuthUI.strings"; sourceTree = ""; }; - 8D69E42C21DD843E00CFA49B /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/FirebaseFacebookAuthUI.strings; sourceTree = ""; }; - 8D69E42D21DD843E00CFA49B /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/FirebaseFacebookAuthUI.strings; sourceTree = ""; }; - 8D69E42E21DD843E00CFA49B /* id */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = id; path = id.lproj/FirebaseFacebookAuthUI.strings; sourceTree = ""; }; - 8D69E42F21DD843E00CFA49B /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/FirebaseFacebookAuthUI.strings; sourceTree = ""; }; - 8D69E43021DD843E00CFA49B /* th */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = th; path = th.lproj/FirebaseFacebookAuthUI.strings; sourceTree = ""; }; - 8D69E43121DD843E00CFA49B /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = pt.lproj/FirebaseFacebookAuthUI.strings; sourceTree = ""; }; - 8D69E43221DD843E00CFA49B /* de-CH */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "de-CH"; path = "de-CH.lproj/FirebaseFacebookAuthUI.strings"; sourceTree = ""; }; - 8D69E43321DD843E00CFA49B /* bn */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bn; path = bn.lproj/FirebaseFacebookAuthUI.strings; sourceTree = ""; }; - 8D69E43421DD843E00CFA49B /* es-EC */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-EC"; path = "es-EC.lproj/FirebaseFacebookAuthUI.strings"; sourceTree = ""; }; - 8D69E43521DD843E00CFA49B /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-PT"; path = "pt-PT.lproj/FirebaseFacebookAuthUI.strings"; sourceTree = ""; }; - 8D69E43621DD843E00CFA49B /* es-BO */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-BO"; path = "es-BO.lproj/FirebaseFacebookAuthUI.strings"; sourceTree = ""; }; - 8D69E43721DD843E00CFA49B /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/FirebaseFacebookAuthUI.strings; sourceTree = ""; }; - 8D69E43821DD843E00CFA49B /* ln */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ln; path = ln.lproj/FirebaseFacebookAuthUI.strings; sourceTree = ""; }; - 8D69E43921DD843E00CFA49B /* es-UY */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-UY"; path = "es-UY.lproj/FirebaseFacebookAuthUI.strings"; sourceTree = ""; }; - 8D69E43A21DD843E00CFA49B /* es-HN */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-HN"; path = "es-HN.lproj/FirebaseFacebookAuthUI.strings"; sourceTree = ""; }; - 8D69E43B21DD843E00CFA49B /* hr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hr; path = hr.lproj/FirebaseFacebookAuthUI.strings; sourceTree = ""; }; - 8D69E43C21DD843E00CFA49B /* hi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hi; path = hi.lproj/FirebaseFacebookAuthUI.strings; sourceTree = ""; }; - 8D69E43D21DD843E00CFA49B /* ca */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ca; path = ca.lproj/FirebaseFacebookAuthUI.strings; sourceTree = ""; }; - 8D69E43E21DD843E00CFA49B /* zh */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = zh; path = zh.lproj/FirebaseFacebookAuthUI.strings; sourceTree = ""; }; - 8D69E43F21DD843E00CFA49B /* en-IN */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-IN"; path = "en-IN.lproj/FirebaseFacebookAuthUI.strings"; sourceTree = ""; }; - 8D69E44121DD843F00CFA49B /* ic_facebook.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_facebook.png; sourceTree = ""; }; - 8D69E44221DD843F00CFA49B /* ic_facebook@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ic_facebook@3x.png"; sourceTree = ""; }; - 8D69E44321DD843F00CFA49B /* ic_facebook@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ic_facebook@2x.png"; sourceTree = ""; }; - 8D69E44821DD845100CFA49B /* FUIFacebookAuthTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUIFacebookAuthTest.m; sourceTree = ""; }; - 8D69E44921DD845100CFA49B /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; - 8D69E44A21DD845100CFA49B /* FUIFacebookAuthTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIFacebookAuthTest.h; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 8D69E3C921DD83EB00CFA49B /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8D69E3D221DD83EB00CFA49B /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 8D69E44D21DD88BB00CFA49B /* FirebaseFacebookAuthUI.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 7DC88936A359F0A20973DC4C /* Pods */ = { - isa = PBXGroup; - children = ( - ); - path = Pods; - sourceTree = ""; - }; - 8D55F157261E6E0D0020DFB0 /* Public */ = { - isa = PBXGroup; - children = ( - 8DAB9B522637691200FF271F /* FirebaseFacebookAuthUI */, - ); - path = Public; - sourceTree = ""; - }; - 8D69E3C221DD83EB00CFA49B = { - isa = PBXGroup; - children = ( - 8D69E3CE21DD83EB00CFA49B /* Sources */, - 8D69E3D921DD83EB00CFA49B /* FirebaseFacebookAuthUITests */, - 8D69E3CD21DD83EB00CFA49B /* Products */, - 7DC88936A359F0A20973DC4C /* Pods */, - ); - sourceTree = ""; - }; - 8D69E3CD21DD83EB00CFA49B /* Products */ = { - isa = PBXGroup; - children = ( - 8D69E3CC21DD83EB00CFA49B /* FirebaseFacebookAuthUI.framework */, - 8D69E3D521DD83EB00CFA49B /* FirebaseFacebookAuthUITests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - 8D69E3CE21DD83EB00CFA49B /* Sources */ = { - isa = PBXGroup; - children = ( - 8D55F157261E6E0D0020DFB0 /* Public */, - 8D69E3E621DD843800CFA49B /* FUIFacebookAuth.m */, - 8D69E3D021DD83EB00CFA49B /* Info.plist */, - 8D69E44021DD843F00CFA49B /* Resources */, - 8D69E3EA21DD843E00CFA49B /* Strings */, - ); - path = Sources; - sourceTree = ""; - }; - 8D69E3D921DD83EB00CFA49B /* FirebaseFacebookAuthUITests */ = { - isa = PBXGroup; - children = ( - 8D69E3DA21DD83EB00CFA49B /* FirebaseFacebookAuthUITests.m */, - 8D69E44A21DD845100CFA49B /* FUIFacebookAuthTest.h */, - 8D69E44821DD845100CFA49B /* FUIFacebookAuthTest.m */, - 8D69E44921DD845100CFA49B /* GoogleService-Info.plist */, - 8D69E3DC21DD83EB00CFA49B /* Info.plist */, - ); - path = FirebaseFacebookAuthUITests; - sourceTree = ""; - }; - 8D69E3EA21DD843E00CFA49B /* Strings */ = { - isa = PBXGroup; - children = ( - 8D69E3EB21DD843E00CFA49B /* FirebaseFacebookAuthUI.strings */, - ); - path = Strings; - sourceTree = ""; - }; - 8D69E44021DD843F00CFA49B /* Resources */ = { - isa = PBXGroup; - children = ( - 8D69E44121DD843F00CFA49B /* ic_facebook.png */, - 8D69E44321DD843F00CFA49B /* ic_facebook@2x.png */, - 8D69E44221DD843F00CFA49B /* ic_facebook@3x.png */, - ); - path = Resources; - sourceTree = ""; - }; - 8DAB9B522637691200FF271F /* FirebaseFacebookAuthUI */ = { - isa = PBXGroup; - children = ( - 8D69E3CF21DD83EB00CFA49B /* FirebaseFacebookAuthUI.h */, - 8D69E3E721DD843800CFA49B /* FUIFacebookAuth.h */, - ); - path = FirebaseFacebookAuthUI; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - 8D69E3C721DD83EB00CFA49B /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 8D69E3DD21DD83EB00CFA49B /* FirebaseFacebookAuthUI.h in Headers */, - 8D69E3E921DD843800CFA49B /* FUIFacebookAuth.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - 8D69E3CB21DD83EB00CFA49B /* FirebaseFacebookAuthUI */ = { - isa = PBXNativeTarget; - buildConfigurationList = 8D69E3E021DD83EB00CFA49B /* Build configuration list for PBXNativeTarget "FirebaseFacebookAuthUI" */; - buildPhases = ( - 8D69E3C721DD83EB00CFA49B /* Headers */, - 8D69E3C821DD83EB00CFA49B /* Sources */, - 8D69E3C921DD83EB00CFA49B /* Frameworks */, - 8D69E3CA21DD83EB00CFA49B /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = FirebaseFacebookAuthUI; - productName = FirebaseFacebookAuthUI; - productReference = 8D69E3CC21DD83EB00CFA49B /* FirebaseFacebookAuthUI.framework */; - productType = "com.apple.product-type.framework"; - }; - 8D69E3D421DD83EB00CFA49B /* FirebaseFacebookAuthUITests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 8D69E3E321DD83EB00CFA49B /* Build configuration list for PBXNativeTarget "FirebaseFacebookAuthUITests" */; - buildPhases = ( - 8D69E3D121DD83EB00CFA49B /* Sources */, - 8D69E3D221DD83EB00CFA49B /* Frameworks */, - 8D69E3D321DD83EB00CFA49B /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 8D69E3D821DD83EB00CFA49B /* PBXTargetDependency */, - ); - name = FirebaseFacebookAuthUITests; - productName = FirebaseFacebookAuthUITests; - productReference = 8D69E3D521DD83EB00CFA49B /* FirebaseFacebookAuthUITests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 8D69E3C321DD83EB00CFA49B /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 1020; - ORGANIZATIONNAME = Firebase; - TargetAttributes = { - 8D69E3CB21DD83EB00CFA49B = { - CreatedOnToolsVersion = 10.1; - }; - 8D69E3D421DD83EB00CFA49B = { - CreatedOnToolsVersion = 10.1; - }; - }; - }; - buildConfigurationList = 8D69E3C621DD83EB00CFA49B /* Build configuration list for PBXProject "FirebaseFacebookAuthUI" */; - compatibilityVersion = "Xcode 9.3"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - de, - ur, - he, - "es-SV", - "zh-Hant-TW", - ar, - el, - "zh-Hans", - ja, - fa, - mr, - "es-GT", - "en-CA", - uk, - "es-PY", - gu, - kn, - nb, - "es-US", - "en-GB", - es, - "es-VE", - "es-CL", - sl, - da, - "es-419", - it, - bg, - sk, - "sr-Latn", - "nn-NO", - "es-PA", - "en-SG", - sr, - ms, - "es-CR", - ta, - sv, - cs, - "es-AR", - "es-PE", - ko, - "en-IE", - fil, - "zh-Hant", - "es-CO", - gsw, - "en-ZA", - hu, - "es-PR", - "de-AT", - "en-AU", - tr, - pl, - "pt-BR", - vi, - lv, - "es-MX", - lt, - ru, - "es-DO", - "fr-CH", - "es-NI", - fr, - fi, - id, - nl, - th, - pt, - "de-CH", - bn, - "es-EC", - "pt-PT", - "es-BO", - ro, - ln, - "es-UY", - "es-HN", - hr, - hi, - ca, - zh, - "en-IN", - ); - mainGroup = 8D69E3C221DD83EB00CFA49B; - productRefGroup = 8D69E3CD21DD83EB00CFA49B /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 8D69E3CB21DD83EB00CFA49B /* FirebaseFacebookAuthUI */, - 8D69E3D421DD83EB00CFA49B /* FirebaseFacebookAuthUITests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 8D69E3CA21DD83EB00CFA49B /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8D69E44721DD843F00CFA49B /* ic_facebook@2x.png in Resources */, - 8D69E44621DD843F00CFA49B /* ic_facebook@3x.png in Resources */, - 8D69E44521DD843F00CFA49B /* ic_facebook.png in Resources */, - 8D69E44421DD843F00CFA49B /* FirebaseFacebookAuthUI.strings in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8D69E3D321DD83EB00CFA49B /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8D69E44C21DD845100CFA49B /* GoogleService-Info.plist in Resources */, - 8D69E45321DD8A6D00CFA49B /* ic_facebook@3x.png in Resources */, - 8D69E45121DD8A6D00CFA49B /* ic_facebook.png in Resources */, - 8D69E45221DD8A6D00CFA49B /* ic_facebook@2x.png in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 8D69E3C821DD83EB00CFA49B /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8D69E3E821DD843800CFA49B /* FUIFacebookAuth.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8D69E3D121DD83EB00CFA49B /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8D69E44B21DD845100CFA49B /* FUIFacebookAuthTest.m in Sources */, - 8D69E3DB21DD83EB00CFA49B /* FirebaseFacebookAuthUITests.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 8D69E3D821DD83EB00CFA49B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 8D69E3CB21DD83EB00CFA49B /* FirebaseFacebookAuthUI */; - targetProxy = 8D69E3D721DD83EB00CFA49B /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - 8D69E3EB21DD843E00CFA49B /* FirebaseFacebookAuthUI.strings */ = { - isa = PBXVariantGroup; - children = ( - 8D69E3EC21DD843E00CFA49B /* de */, - 8D69E3ED21DD843E00CFA49B /* ur */, - 8D69E3EE21DD843E00CFA49B /* he */, - 8D69E3EF21DD843E00CFA49B /* es-SV */, - 8D69E3F021DD843E00CFA49B /* zh-Hant-TW */, - 8D69E3F121DD843E00CFA49B /* ar */, - 8D69E3F221DD843E00CFA49B /* el */, - 8D69E3F321DD843E00CFA49B /* zh-Hans */, - 8D69E3F421DD843E00CFA49B /* ja */, - 8D69E3F521DD843E00CFA49B /* fa */, - 8D69E3F621DD843E00CFA49B /* mr */, - 8D69E3F721DD843E00CFA49B /* es-GT */, - 8D69E3F821DD843E00CFA49B /* en */, - 8D69E3F921DD843E00CFA49B /* en-CA */, - 8D69E3FA21DD843E00CFA49B /* uk */, - 8D69E3FB21DD843E00CFA49B /* es-PY */, - 8D69E3FC21DD843E00CFA49B /* gu */, - 8D69E3FD21DD843E00CFA49B /* kn */, - 8D69E3FE21DD843E00CFA49B /* nb */, - 8D69E3FF21DD843E00CFA49B /* es-US */, - 8D69E40021DD843E00CFA49B /* en-GB */, - 8D69E40121DD843E00CFA49B /* es */, - 8D69E40221DD843E00CFA49B /* es-VE */, - 8D69E40321DD843E00CFA49B /* es-CL */, - 8D69E40421DD843E00CFA49B /* sl */, - 8D69E40521DD843E00CFA49B /* da */, - 8D69E40621DD843E00CFA49B /* es-419 */, - 8D69E40721DD843E00CFA49B /* it */, - 8D69E40821DD843E00CFA49B /* bg */, - 8D69E40921DD843E00CFA49B /* sk */, - 8D69E40A21DD843E00CFA49B /* sr-Latn */, - 8D69E40B21DD843E00CFA49B /* nn-NO */, - 8D69E40C21DD843E00CFA49B /* es-PA */, - 8D69E40D21DD843E00CFA49B /* en-SG */, - 8D69E40E21DD843E00CFA49B /* sr */, - 8D69E40F21DD843E00CFA49B /* ms */, - 8D69E41021DD843E00CFA49B /* es-CR */, - 8D69E41121DD843E00CFA49B /* ta */, - 8D69E41221DD843E00CFA49B /* sv */, - 8D69E41321DD843E00CFA49B /* cs */, - 8D69E41421DD843E00CFA49B /* es-AR */, - 8D69E41521DD843E00CFA49B /* es-PE */, - 8D69E41621DD843E00CFA49B /* ko */, - 8D69E41721DD843E00CFA49B /* en-IE */, - 8D69E41821DD843E00CFA49B /* fil */, - 8D69E41921DD843E00CFA49B /* zh-Hant */, - 8D69E41A21DD843E00CFA49B /* es-CO */, - 8D69E41B21DD843E00CFA49B /* gsw */, - 8D69E41C21DD843E00CFA49B /* en-ZA */, - 8D69E41D21DD843E00CFA49B /* hu */, - 8D69E41E21DD843E00CFA49B /* es-PR */, - 8D69E41F21DD843E00CFA49B /* de-AT */, - 8D69E42021DD843E00CFA49B /* en-AU */, - 8D69E42121DD843E00CFA49B /* tr */, - 8D69E42221DD843E00CFA49B /* pl */, - 8D69E42321DD843E00CFA49B /* pt-BR */, - 8D69E42421DD843E00CFA49B /* vi */, - 8D69E42521DD843E00CFA49B /* lv */, - 8D69E42621DD843E00CFA49B /* es-MX */, - 8D69E42721DD843E00CFA49B /* lt */, - 8D69E42821DD843E00CFA49B /* ru */, - 8D69E42921DD843E00CFA49B /* es-DO */, - 8D69E42A21DD843E00CFA49B /* fr-CH */, - 8D69E42B21DD843E00CFA49B /* es-NI */, - 8D69E42C21DD843E00CFA49B /* fr */, - 8D69E42D21DD843E00CFA49B /* fi */, - 8D69E42E21DD843E00CFA49B /* id */, - 8D69E42F21DD843E00CFA49B /* nl */, - 8D69E43021DD843E00CFA49B /* th */, - 8D69E43121DD843E00CFA49B /* pt */, - 8D69E43221DD843E00CFA49B /* de-CH */, - 8D69E43321DD843E00CFA49B /* bn */, - 8D69E43421DD843E00CFA49B /* es-EC */, - 8D69E43521DD843E00CFA49B /* pt-PT */, - 8D69E43621DD843E00CFA49B /* es-BO */, - 8D69E43721DD843E00CFA49B /* ro */, - 8D69E43821DD843E00CFA49B /* ln */, - 8D69E43921DD843E00CFA49B /* es-UY */, - 8D69E43A21DD843E00CFA49B /* es-HN */, - 8D69E43B21DD843E00CFA49B /* hr */, - 8D69E43C21DD843E00CFA49B /* hi */, - 8D69E43D21DD843E00CFA49B /* ca */, - 8D69E43E21DD843E00CFA49B /* zh */, - 8D69E43F21DD843E00CFA49B /* en-IN */, - ); - name = FirebaseFacebookAuthUI.strings; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 8D69E3DE21DD83EB00CFA49B /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../\""; - IPHONEOS_DEPLOYMENT_TARGET = 12.1; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 8D69E3DF21DD83EB00CFA49B /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../\""; - IPHONEOS_DEPLOYMENT_TARGET = 12.1; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 8D69E3E121DD83EB00CFA49B /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Automatic; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Sources/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - "-framework", - "\"FBSDKCoreKit\"", - "-framework", - "\"FBSDKLoginKit\"", - "-framework", - "\"Foundation\"", - "-framework", - "\"GTMSessionFetcher\"", - "-framework", - "\"GoogleUtilities\"", - "-framework", - "\"SafariServices\"", - "-framework", - "\"Security\"", - "-framework", - "\"UIKit\"", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.firebase.FirebaseFacebookAuthUI; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 8D69E3E221DD83EB00CFA49B /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Automatic; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Sources/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - "-framework", - "\"FBSDKCoreKit\"", - "-framework", - "\"FBSDKLoginKit\"", - "-framework", - "\"Foundation\"", - "-framework", - "\"GTMSessionFetcher\"", - "-framework", - "\"GoogleUtilities\"", - "-framework", - "\"SafariServices\"", - "-framework", - "\"Security\"", - "-framework", - "\"UIKit\"", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.firebase.FirebaseFacebookAuthUI; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; - 8D69E3E421DD83EB00CFA49B /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - INFOPLIST_FILE = FirebaseFacebookAuthUITests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit_Basics\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FBSDKLoginKit\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuth\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuthInterop\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseUI\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/nanopb\"", - "\"$(PODS_CONFIGURATION_BUILD_DIR)/FirebaseAuthUI\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreInternal\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreExtension\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FBAEMKit\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/XCFrameworkIntermediates/FBAEMKit\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/XCFrameworkIntermediates/FBSDKCoreKit\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/XCFrameworkIntermediates/FBSDKCoreKit_Basics\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/XCFrameworkIntermediates/FBSDKLoginKit\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAppCheckInterop\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/RecaptchaInterop\"", - ); - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - "-framework", - "\"FBSDKCoreKit\"", - "-framework", - "\"FBSDKLoginKit\"", - "-framework", - "\"Foundation\"", - "-framework", - "\"GTMSessionFetcher\"", - "-framework", - "\"GoogleUtilities\"", - "-framework", - "\"OCMock\"", - "-framework", - "\"SafariServices\"", - "-framework", - "\"Security\"", - "-framework", - "\"UIKit\"", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.firebase.FirebaseFacebookAuthUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 8D69E3E521DD83EB00CFA49B /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - INFOPLIST_FILE = FirebaseFacebookAuthUITests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit_Basics\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FBSDKLoginKit\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuth\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuthInterop\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseUI\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/nanopb\"", - "\"$(PODS_CONFIGURATION_BUILD_DIR)/FirebaseAuthUI\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreInternal\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreExtension\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FBAEMKit\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/XCFrameworkIntermediates/FBAEMKit\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/XCFrameworkIntermediates/FBSDKCoreKit\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/XCFrameworkIntermediates/FBSDKCoreKit_Basics\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/XCFrameworkIntermediates/FBSDKLoginKit\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAppCheckInterop\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/RecaptchaInterop\"", - ); - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - "-framework", - "\"FBSDKCoreKit\"", - "-framework", - "\"FBSDKLoginKit\"", - "-framework", - "\"Foundation\"", - "-framework", - "\"GTMSessionFetcher\"", - "-framework", - "\"GoogleUtilities\"", - "-framework", - "\"OCMock\"", - "-framework", - "\"SafariServices\"", - "-framework", - "\"Security\"", - "-framework", - "\"UIKit\"", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.firebase.FirebaseFacebookAuthUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 8D69E3C621DD83EB00CFA49B /* Build configuration list for PBXProject "FirebaseFacebookAuthUI" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 8D69E3DE21DD83EB00CFA49B /* Debug */, - 8D69E3DF21DD83EB00CFA49B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 8D69E3E021DD83EB00CFA49B /* Build configuration list for PBXNativeTarget "FirebaseFacebookAuthUI" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 8D69E3E121DD83EB00CFA49B /* Debug */, - 8D69E3E221DD83EB00CFA49B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 8D69E3E321DD83EB00CFA49B /* Build configuration list for PBXNativeTarget "FirebaseFacebookAuthUITests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 8D69E3E421DD83EB00CFA49B /* Debug */, - 8D69E3E521DD83EB00CFA49B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 8D69E3C321DD83EB00CFA49B /* Project object */; -} diff --git a/FirebaseFacebookAuthUI/FirebaseFacebookAuthUI.xcodeproj/xcshareddata/xcschemes/FirebaseFacebookAuthUI.xcscheme b/FirebaseFacebookAuthUI/FirebaseFacebookAuthUI.xcodeproj/xcshareddata/xcschemes/FirebaseFacebookAuthUI.xcscheme deleted file mode 100644 index 65d0c58cb38..00000000000 --- a/FirebaseFacebookAuthUI/FirebaseFacebookAuthUI.xcodeproj/xcshareddata/xcschemes/FirebaseFacebookAuthUI.xcscheme +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FirebaseFacebookAuthUI/FirebaseFacebookAuthUITests/FUIFacebookAuthTest.h b/FirebaseFacebookAuthUI/FirebaseFacebookAuthUITests/FUIFacebookAuthTest.h deleted file mode 100644 index b92a65bf704..00000000000 --- a/FirebaseFacebookAuthUI/FirebaseFacebookAuthUITests/FUIFacebookAuthTest.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import -#import - -@interface FUIFacebookAuth (Testing) -- (FBSDKLoginManager *)createLoginManager; -- (void)configureProvider; -@end - -@interface FUIFacebookAuthTest : FUIFacebookAuth -- (void)configureLoginManager:(FBSDKLoginManagerLoginResult *)result withError:(NSError *)error; - -@end diff --git a/FirebaseFacebookAuthUI/FirebaseFacebookAuthUITests/FUIFacebookAuthTest.m b/FirebaseFacebookAuthUI/FirebaseFacebookAuthUITests/FUIFacebookAuthTest.m deleted file mode 100644 index 98f89ef682d..00000000000 --- a/FirebaseFacebookAuthUI/FirebaseFacebookAuthUITests/FUIFacebookAuthTest.m +++ /dev/null @@ -1,47 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FUIFacebookAuthTest.h" -#import -#import - -@interface FUIFacebookAuthTest () -@property(nonatomic) FBSDKLoginManagerLoginResult *result; -@property(nonatomic) NSError *error; -@end - -@implementation FUIFacebookAuthTest - -- (FBSDKLoginManager *)createLoginManager { - id mock = OCMClassMock([FBSDKLoginManager class]); - OCMStub( - [mock logInWithPermissions:[OCMArg any] - fromViewController:[OCMArg any] - handler:[OCMArg any]] - ).andDo(^(NSInvocation *invocation) { - void (^completion)(FBSDKLoginManagerLoginResult *, NSError *); - [invocation getArgument:&completion atIndex:4]; - completion(self.result, self.error); - }); - return mock; -} - -- (void)configureLoginManager:(FBSDKLoginManagerLoginResult *)result withError:(NSError *)error { - self.result = result; - self.error = error; -} - -@end diff --git a/FirebaseFacebookAuthUI/FirebaseFacebookAuthUITests/FirebaseFacebookAuthUITests.m b/FirebaseFacebookAuthUI/FirebaseFacebookAuthUITests/FirebaseFacebookAuthUITests.m deleted file mode 100644 index 4da8a54d2ba..00000000000 --- a/FirebaseFacebookAuthUI/FirebaseFacebookAuthUITests/FirebaseFacebookAuthUITests.m +++ /dev/null @@ -1,300 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -@import XCTest; - -#import "FUIFacebookAuth.h" -#import "FUIFacebookAuthTest.h" - -#import "FUIAuthUtils.h" -#import -@import FirebaseAuth; -#import -#import -#import -#import - -@interface FirebaseFacebookAuthUITests : XCTestCase -@property (nonatomic, strong) FUIFacebookAuthTest *provider; -@property (nonatomic, strong) FUIAuth *authUI; -@property (nonatomic, strong) id mockOAuthProvider; -@end - -@implementation FirebaseFacebookAuthUITests - -+ (void)initialize { - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - [[FBSDKSettings sharedSettings] setAppID:@"0000000"]; - }); -} - -- (void)setUp { - [super setUp]; - - id authClass = OCMClassMock([FIRAuth class]); - OCMStub(ClassMethod([authClass auth])). - andReturn(authClass); - - self.mockOAuthProvider = OCMClassMock([FIROAuthProvider class]); - OCMStub(ClassMethod([self.mockOAuthProvider providerWithProviderID:OCMOCK_ANY])). - andReturn(self.mockOAuthProvider); - - id mockUtilsClass = OCMClassMock([FUIAuthUtils class]); - OCMStub(ClassMethod([mockUtilsClass bundleNamed:OCMOCK_ANY - inFrameworkBundle:OCMOCK_ANY])). - andReturn([NSBundle bundleForClass:[FUIFacebookAuthTest class]]); - - FIRAuth *auth = [FIRAuth auth]; - self.authUI = [FUIAuth authUIWithAuth:auth]; - self.provider = [[FUIFacebookAuthTest alloc] initWithAuthUI:self.authUI]; -} - -- (void)tearDown { - self.provider = nil; - self.authUI = nil; - self.mockOAuthProvider = nil; - [super tearDown]; -} - -- (void)testProviderValidity { - self.provider = [[FUIFacebookAuthTest alloc] initWithAuthUI:self.authUI]; - - XCTAssertNotNil(self.provider); - XCTAssertNotNil(self.provider.icon); - XCTAssertNotNil(self.provider.signInLabel); - XCTAssertNotNil(self.provider.buttonBackgroundColor); - XCTAssertNotNil(self.provider.buttonTextColor); - XCTAssertNotNil(self.provider.providerID); - XCTAssertNotNil(self.provider.shortName); - XCTAssertTrue(self.provider.signInLabel.length != 0); - - OCMVerify(never(), [self.mockOAuthProvider providerWithProviderID:@"facebook.com"]); -} - -- (void)testUseEmulatorCreatesOAuthProvider { - [self.authUI useEmulatorWithHost:@"host" port:12345]; - self.provider = [[FUIFacebookAuthTest alloc] initWithAuthUI:self.authUI]; - - XCTAssertNotNil(self.provider); - OCMVerify([self.mockOAuthProvider providerWithProviderID:@"facebook.com"]); -} - -- (void)testSuccessfullLogin { - NSString *testToken = @"fakeToken"; - XCTAssertNotNil(self.provider); - XCTAssertNil(self.provider.accessToken); - - FBSDKAccessToken *token = [[FBSDKAccessToken alloc] initWithTokenString:testToken - permissions:@[] - declinedPermissions:@[] - expiredPermissions:@[] - appID:@"testAppId" - userID:@"testUserId" - expirationDate:nil - refreshDate:nil - dataAccessExpirationDate:nil]; - id mockToken = OCMPartialMock(token); - - NSSet *emptySet = [NSSet set]; - FBSDKLoginManagerLoginResult *result = - [[FBSDKLoginManagerLoginResult alloc] initWithToken:mockToken - authenticationToken:nil - isCancelled:NO - grantedPermissions:emptySet - declinedPermissions:emptySet]; - XCTAssertNil(_provider.accessToken); - [self.provider configureLoginManager:result withError:nil]; - - XCTestExpectation *expectation = [self expectationWithDescription:@"logged in"]; - [self.provider signInWithDefaultValue:nil - presentingViewController:nil - completion:^(FIRAuthCredential *_Nullable credential, - NSError *_Nullable error, - FIRAuthResultCallback _Nullable result, - NSDictionary *_Nullable userInfo) { - XCTAssertNil(error); - XCTAssertNotNil(credential); - XCTAssertNotNil(result); - FIRAuthCredential *expectedCredential = [FIRFacebookAuthProvider credentialWithAccessToken:testToken]; - XCTAssertEqualObjects(credential.provider, expectedCredential.provider); - XCTAssertNil(self.provider.idToken); - - //verify that we are using token from server - OCMVerify([mockToken tokenString]); - - [expectation fulfill]; - }]; - [self waitForExpectationsWithTimeout:0.1 handler:^(NSError *_Nullable error) { - XCTAssertNil(error); - }]; - - OCMVerify(never(), [self.mockOAuthProvider getCredentialWithUIDelegate:nil completion:OCMOCK_ANY]); -} - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" -- (void)testLegacyInitSuccessfulLogin { - self.provider = [[FUIFacebookAuthTest alloc] init]; - - NSString *testToken = @"fakeToken"; - XCTAssertNotNil(self.provider); - XCTAssertNil(self.provider.accessToken); - - FBSDKAccessToken *token = [[FBSDKAccessToken alloc] initWithTokenString:testToken - permissions:@[] - declinedPermissions:@[] - expiredPermissions:@[] - appID:@"testAppId" - userID:@"testUserId" - expirationDate:nil - refreshDate:nil - dataAccessExpirationDate:nil]; - id mockToken = OCMPartialMock(token); - - NSSet *emptySet = [NSSet set]; - FBSDKLoginManagerLoginResult *result = - [[FBSDKLoginManagerLoginResult alloc] initWithToken:mockToken - authenticationToken:nil - isCancelled:NO - grantedPermissions:emptySet - declinedPermissions:emptySet]; - XCTAssertNil(_provider.accessToken); - [self.provider configureLoginManager:result withError:nil]; - - XCTestExpectation *expectation = [self expectationWithDescription:@"logged in"]; - [self.provider signInWithDefaultValue:nil - presentingViewController:nil - completion:^(FIRAuthCredential *_Nullable credential, - NSError *_Nullable error, - FIRAuthResultCallback _Nullable result, - NSDictionary *_Nullable userInfo) { - XCTAssertNil(error); - XCTAssertNotNil(credential); - XCTAssertNotNil(result); - FIRAuthCredential *expectedCredential = [FIRFacebookAuthProvider credentialWithAccessToken:testToken]; - XCTAssertEqualObjects(credential.provider, expectedCredential.provider); - XCTAssertNil(self.provider.idToken); - - //verify that we are using token from server - OCMVerify([mockToken tokenString]); - - [expectation fulfill]; - }]; - [self waitForExpectationsWithTimeout:0.1 handler:^(NSError *_Nullable error) { - XCTAssertNil(error); - }]; - - OCMVerify(never(), [self.mockOAuthProvider getCredentialWithUIDelegate:nil completion:OCMOCK_ANY]); -} -#pragma clang diagnostic pop - -- (void)testCancelLogin { - NSString *testToken = @"fakeToken"; - FBSDKAccessToken *token = [[FBSDKAccessToken alloc] initWithTokenString:testToken - permissions:@[] - declinedPermissions:@[] - expiredPermissions:@[] - appID:@"testAppId" - userID:@"testUserId" - expirationDate:nil - refreshDate:nil - dataAccessExpirationDate:nil]; - id mockToken = OCMPartialMock(token); - FBSDKLoginManagerLoginResult *result = - [[FBSDKLoginManagerLoginResult alloc] initWithToken:mockToken - authenticationToken:nil - isCancelled:YES - grantedPermissions:[NSSet set] - declinedPermissions:[NSSet set]]; - [self.provider configureLoginManager:result withError:nil]; - - XCTestExpectation *expectation = [self expectationWithDescription:@"logged in"]; - [self.provider signInWithDefaultValue:nil - presentingViewController:nil - completion:^(FIRAuthCredential *_Nullable credential, - NSError *_Nullable error, - FIRAuthResultCallback _Nullable result, - NSDictionary *_Nullable userInfo) { - XCTAssertNotNil(error); - XCTAssertEqual(error.code, FUIAuthErrorCodeUserCancelledSignIn); - XCTAssertNil(credential); - XCTAssertNil(result); - XCTAssertNil(self.provider.idToken); - - //verify that we are not using token from server if user canceled request - OCMReject([mockToken tokenString]); - - [expectation fulfill]; - }]; - [self waitForExpectationsWithTimeout:0.1 handler:^(NSError *_Nullable error) { - XCTAssertNil(error); - }]; -} - -- (void)testErrorLogin { - NSError *testError = [NSError errorWithDomain:@"testErrorDomain" code:777 userInfo:nil]; - - [self.provider configureLoginManager:nil withError:testError]; - - XCTestExpectation *expectation = [self expectationWithDescription:@"logged in"]; - [self.provider signInWithDefaultValue:nil - presentingViewController:nil - completion:^(FIRAuthCredential *_Nullable credential, - NSError *_Nullable error, - FIRAuthResultCallback _Nullable result, - NSDictionary *_Nullable userInfo) { - XCTAssertNotNil(error); - XCTAssertEqual(error.userInfo[NSUnderlyingErrorKey], testError); - XCTAssertNil(credential); - XCTAssertNil(result); - XCTAssertNil(self.provider.idToken); - [expectation fulfill]; - }]; - [self waitForExpectationsWithTimeout:0.1 handler:^(NSError *_Nullable error) { - XCTAssertNil(error); - }]; -} - -- (void)testSignOut { - id mockProvider = OCMPartialMock([[FUIFacebookAuth alloc] initWithAuthUI:self.authUI]); - id mockFacebookManager = OCMClassMock([FBSDKLoginManager class]); - - OCMExpect([mockProvider createLoginManager]).andReturn(mockFacebookManager); - [mockProvider configureProvider]; - - OCMExpect([mockFacebookManager logOut]); - [mockProvider signOut]; - - OCMVerifyAll(mockFacebookManager); - OCMVerifyAll(mockProvider); - -} - -- (void)testUseEmulatorUsesOAuthProvider { - [self.authUI useEmulatorWithHost:@"host" port:12345]; - self.provider = [[FUIFacebookAuthTest alloc] initWithAuthUI:self.authUI]; - - [self.provider signInWithDefaultValue:nil - presentingViewController:nil - completion:^(FIRAuthCredential *_Nullable credential, - NSError *_Nullable error, - FIRAuthResultCallback _Nullable result, - NSDictionary *_Nullable userInfo) {}]; - OCMVerify([self.mockOAuthProvider getCredentialWithUIDelegate:nil completion:OCMOCK_ANY]); -} - -@end diff --git a/FirebaseFacebookAuthUI/FirebaseFacebookAuthUITests/GoogleService-Info.plist b/FirebaseFacebookAuthUI/FirebaseFacebookAuthUITests/GoogleService-Info.plist deleted file mode 100644 index 5f2ebaa9e38..00000000000 --- a/FirebaseFacebookAuthUI/FirebaseFacebookAuthUITests/GoogleService-Info.plist +++ /dev/null @@ -1,40 +0,0 @@ - - - - - AD_UNIT_ID_FOR_BANNER_TEST - ad-unit-banner - AD_UNIT_ID_FOR_INTERSTITIAL_TEST - ad-unit-interstitial - CLIENT_ID - client-id.apps.googleusercontent.com - REVERSED_CLIENT_ID - com.googleusercontent.apps.client-id - API_KEY - api-key - GCM_SENDER_ID - sender-id - PLIST_VERSION - 1 - BUNDLE_ID - com.firebase.FirebaseFacebookAuthUITests - PROJECT_ID - project-id - STORAGE_BUCKET - storage-bucket - IS_ADS_ENABLED - - IS_ANALYTICS_ENABLED - - IS_APPINVITE_ENABLED - - IS_GCM_ENABLED - - IS_SIGNIN_ENABLED - - GOOGLE_APP_ID - 0:000000000000:ios:0000000000000000 - DATABASE_URL - database-url - - diff --git a/FirebaseFacebookAuthUI/FirebaseFacebookAuthUITests/Info.plist b/FirebaseFacebookAuthUI/FirebaseFacebookAuthUITests/Info.plist deleted file mode 100644 index cc6aa6a73ee..00000000000 --- a/FirebaseFacebookAuthUI/FirebaseFacebookAuthUITests/Info.plist +++ /dev/null @@ -1,42 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - CFBundleURLTypes - - - CFBundleURLSchemes - - fb00000000 - - - - FacebookAppID - 00000000 - FacebookDisplayName - FirebaseUI - LSApplicationQueriesSchemes - - fbapi - fb-messenger-share-api - fbauth2 - fbshareextension - - - diff --git a/FirebaseFacebookAuthUI/Podfile b/FirebaseFacebookAuthUI/Podfile deleted file mode 100644 index eacb2eac8a1..00000000000 --- a/FirebaseFacebookAuthUI/Podfile +++ /dev/null @@ -1,22 +0,0 @@ -# source 'sso://cpdc-internal/firebase' -source 'https://github.com/CocoaPods/Specs.git' - -platform :ios, '14.0' - -target 'FirebaseFacebookAuthUI' do - use_frameworks! - - # The facebook pods generate an unreasonable number of warnings. - inhibit_all_warnings! - - pod 'FBSDKLoginKit', '~> 17.0' - pod 'FBSDKCoreKit' - - pod 'FirebaseAuthUI', :path => '../' - - target 'FirebaseFacebookAuthUITests' do - inherit! :search_paths - pod 'OCMock' - end - -end diff --git a/FirebaseFacebookAuthUI/Sources/FUIFacebookAuth.m b/FirebaseFacebookAuthUI/Sources/FUIFacebookAuth.m deleted file mode 100644 index edea630ef47..00000000000 --- a/FirebaseFacebookAuthUI/Sources/FUIFacebookAuth.m +++ /dev/null @@ -1,405 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebaseFacebookAuthUI/Sources/Public/FirebaseFacebookAuthUI/FUIFacebookAuth.h" - -#import -@import FirebaseAuth; - -#if SWIFT_PACKAGE -@import FBSDKCoreKit; -@import FBSDKLoginKit; -#else -#import -#import -#endif // SWIFT_PACKAGE - -/** @var kTableName - @brief The name of the strings table to search for localized strings. - */ -static NSString *const kTableName = @"FirebaseFacebookAuthUI"; - -/** @var kBundleName - @brief The name of the bundle to search for resources. - */ -#if SWIFT_PACKAGE -static NSString *const kBundleName = @"FirebaseUI_FirebaseFacebookAuthUI"; -#else -static NSString *const kBundleName = @"FirebaseFacebookAuthUI"; -#endif // SWIFT_PACKAGE - -/** @var kSignInWithFacebook - @brief The string key for localized button text. - */ -static NSString *const kSignInWithFacebook = @"SignInWithFacebook"; - -/** @var kFacebookAppId - @brief The string key used to read Facebook App Id from Info.plist. - */ -static NSString *const kFacebookAppId = @"FacebookAppID"; - -/** @var kFacebookDisplayName - @brief The string key used to read Facebook App Name from Info.plist. - */ -static NSString *const kFacebookDisplayName = @"FacebookDisplayName"; - -@interface FUIFacebookAuth () - -/** @property authUI - @brief FUIAuth instance of the application. - */ -@property(nonatomic, strong) FUIAuth *authUI; - -/** @property providerForEmulator - @brief The OAuth provider to be used when the emulator is enabled. - */ -@property(nonatomic, strong) FIROAuthProvider *providerForEmulator; - -/** @property currentNonce - @brief The nonce for the current Facebook Limited Login session, if any. - */ -@property(nonatomic, copy, nullable) NSString *currentNonce; - -@end - -@implementation FUIFacebookAuth { - - /** @var _pendingSignInCallback - @brief The callback which should be invoked when the sign in flow completes (or is cancelled.) - */ - FUIAuthProviderSignInCompletionBlock _pendingSignInCallback; - - /** @var _presentingViewController - @brief The presenting view controller for interactive sign-in. - */ - UIViewController *_presentingViewController; - - /** @var _email - @brief The email address associated with this account. - */ - NSString *_email; -} - -+ (NSBundle *)bundle { - return [FUIAuthUtils bundleNamed:kBundleName - inFrameworkBundle:[NSBundle bundleForClass:[self class]]]; -} - -- (instancetype)initWithAuthUI:(FUIAuth *)authUI - permissions:(NSArray *)permissions { - self = [super init]; - if (self != nil) { - _authUI = authUI; - _scopes = permissions; - [self configureProvider]; - } - return self; -} - -- (instancetype)initWithAuthUI:(FUIAuth *)authUI { - return [self initWithAuthUI:authUI permissions:@[ @"email" ]]; -} - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-implementations" -- (instancetype)initWithPermissions:(NSArray *)permissions { - self = [super init]; - if (self != nil) { - _scopes = permissions; - [self configureProvider]; - } - return self; -} - -- (instancetype)init { - return [self initWithPermissions:@[ @"email" ]]; -} -#pragma clang diagnostic pop - - -#pragma mark - FUIAuthProvider - -- (nullable NSString *)providerID { - return @"facebook.com"; -} - -/** @fn accessToken: - @brief The access token provided by Facebook's login flow. - */ -- (nullable NSString *)accessToken { - if (self.authUI.isEmulatorEnabled) { - return nil; - } - return [FBSDKAccessToken currentAccessToken].tokenString; -} - -/** @fn idToken: - @brief The ID token provided by Facebook's login flow. - */ -- (nullable NSString *)idToken { - if (self.authUI.isEmulatorEnabled) { - return nil; - } - return FBSDKAuthenticationToken.currentAuthenticationToken.tokenString; -} - -- (NSString *)shortName { - return @"Facebook"; -} - -- (NSString *)signInLabel { - return FUILocalizedStringFromTableInBundle(kSignInWithFacebook, - kTableName, - [FUIFacebookAuth bundle]); -} - -- (UIImage *)icon { - return [FUIAuthUtils imageNamed:@"ic_facebook" fromBundle:[FUIFacebookAuth bundle]]; -} - -- (UIColor *)buttonBackgroundColor { - return [UIColor colorWithRed:59.0f/255.0f green:89.0f/255.0f blue:152.0f/255.0f alpha:1.0f]; -} - -- (UIColor *)buttonTextColor { - return [UIColor whiteColor]; -} - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-implementations" -- (void)signInWithEmail:(nullable NSString *)email - presentingViewController:(nullable UIViewController *)presentingViewController - completion:(nullable FUIAuthProviderSignInCompletionBlock)completion { - [self signInWithDefaultValue:email - presentingViewController:presentingViewController - completion:completion]; -} -#pragma clang diagnostic pop - -- (void)signInWithDefaultValue:(nullable NSString *)defaultValue - presentingViewController:(nullable UIViewController *)presentingViewController - completion:(nullable FUIAuthProviderSignInCompletionBlock)completion { - _pendingSignInCallback = completion; - _presentingViewController = presentingViewController; - - if (self.authUI.isEmulatorEnabled) { - [self signInWithOAuthProvider:self.providerForEmulator - presentingViewController:presentingViewController - completion:completion]; - return; - } - - if (self.useLimitedLogin) { - // Facebook Limited Login - NSString *nonce = [FUIAuthUtils randomNonce]; - self.currentNonce = nonce; - FBSDKLoginConfiguration *configuration = - [[FBSDKLoginConfiguration alloc] initWithPermissions:_scopes - tracking:FBSDKLoginTrackingLimited - nonce:[FUIAuthUtils stringBySHA256HashingString:nonce]]; - [_loginManager logInFromViewController:presentingViewController - configuration:configuration - completion:^(FBSDKLoginManagerLoginResult *result, NSError *error) { - if ([self maybeHandleCancelledResult:result error:error]) { - return; - } - self->_email = FBSDKProfile.currentProfile.email; - NSString *idToken = FBSDKAuthenticationToken.currentAuthenticationToken.tokenString; - [self completeSignInFlowWithAccessToken:nil idToken:idToken error:nil]; - }]; - } else { - [_loginManager logInWithPermissions:_scopes - fromViewController:presentingViewController - handler:^(FBSDKLoginManagerLoginResult *result, - NSError *error) { - if ([self maybeHandleCancelledResult:result error:error]) { - return; - } - // Retrieve email. - [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" - parameters:@{ @"fields" : @"email" }] - startWithCompletion:^(id connection, - id result, - NSError *error) { - self->_email = result[@"email"]; - }]; - [self completeSignInFlowWithAccessToken:result.token.tokenString - idToken:nil - error:nil]; - }]; - } -} - -- (void)signInWithOAuthProvider:(FIROAuthProvider *)oauthProvider - presentingViewController:(nullable UIViewController *)presentingViewController - completion:(nullable FUIAuthProviderSignInCompletionBlock)completion { - oauthProvider.scopes = self.scopes; - - [oauthProvider getCredentialWithUIDelegate:nil - completion:^(FIRAuthCredential *_Nullable credential, - NSError *_Nullable error) { - if (error) { - [FUIAuthBaseViewController showAlertWithMessage:error.localizedDescription - presentingViewController:presentingViewController]; - if (completion) { - completion(nil, error, nil, nil); - } - return; - } - if (completion) { - UIActivityIndicatorView *activityView = - [FUIAuthBaseViewController addActivityIndicator:presentingViewController.view]; - [activityView startAnimating]; - FIRAuthResultCallback result = ^(FIRUser *_Nullable user, - NSError *_Nullable error) { - [activityView stopAnimating]; - [activityView removeFromSuperview]; - }; - completion(credential, nil, result, nil); - } - }]; -} - -- (NSString *)email { - return _email; -} - -- (void)signOut { - if (self.authUI.isEmulatorEnabled) { - return; - } - [_loginManager logOut]; -} - -- (BOOL)handleOpenURL:(NSURL *)URL sourceApplication:(NSString *)sourceApplication { - if (self.authUI.isEmulatorEnabled) { - return NO; - } - return [[FBSDKApplicationDelegate sharedInstance] application:[UIApplication sharedApplication] - openURL:URL - sourceApplication:sourceApplication - annotation:nil]; -} - -#pragma mark - - -/** @fn completeSignInFlowWithAccessToken:idToken:error: - @brief Called with the result of a Facebook sign-in attempt. Invokes and clears any pending - sign in callback block. - @param accessToken The Facebook access token, if the Facebook sign-in attempt with tracking enabled is successful. - @param idToken The Facebook ID token, if the Facebook Limited Login attempt is successful. - @param error An error which occurred during the sign-in attempt. - */ -- (void)completeSignInFlowWithAccessToken:(nullable NSString *)accessToken - idToken:(nullable NSString *)idToken - error:(nullable NSError *)error { - if (error) { - [self callbackWithCredential:nil error:error result:nil]; - return; - } - FIRAuthCredential *credential; - if (idToken) { - NSString *rawNonce = self.currentNonce; - credential = [FIROAuthProvider credentialWithProviderID:@"facebook.com" - IDToken:idToken - rawNonce:rawNonce]; - } else { - // Assume accessToken cannot be nil if there's no error and idToken is nil. - NSString *_Nonnull token = (id _Nonnull)accessToken; - credential = [FIRFacebookAuthProvider credentialWithAccessToken:token]; - } - UIActivityIndicatorView *activityView = - [FUIAuthBaseViewController addActivityIndicator:_presentingViewController.view]; - [activityView startAnimating]; - [self callbackWithCredential:credential error:nil result:^(FIRUser *_Nullable user, - NSError *_Nullable error) { - [activityView stopAnimating]; - [activityView removeFromSuperview]; - }]; -} - -/** @fn callbackWithCredential:error: - @brief Ends the sign-in flow by cleaning up and calling back with given credential or error. - @param credential The credential to pass back, if any. - @param error The error to pass back, if any. - @param result The result of sign-in operation using provided @c FIRAuthCredential object. - @see @c FIRAuth.signInWithCredential:completion: - */ -- (void)callbackWithCredential:(nullable FIRAuthCredential *)credential - error:(nullable NSError *)error - result:(nullable FIRAuthResultCallback)result { - FUIAuthProviderSignInCompletionBlock callback = _pendingSignInCallback; - _pendingSignInCallback = nil; - if (callback) { - callback(credential, error, result, nil); - } -} - -/** @fn callbackWithCredential:error: - @brief Validates that Facebook SDK data was filled in Info.plist and creates Facebook login manager - */ -- (void)configureProvider { - NSBundle *bundle = [NSBundle mainBundle]; - NSString *facebookAppId = [bundle objectForInfoDictionaryKey:kFacebookAppId]; - NSString *facebookDisplayName = [bundle objectForInfoDictionaryKey:kFacebookDisplayName]; - - if (facebookAppId == nil || facebookDisplayName == nil) { - // Executes in test targets only. - bundle = [FUIFacebookAuth bundle]; - facebookAppId = facebookAppId ?: [bundle objectForInfoDictionaryKey:kFacebookAppId]; - facebookDisplayName = facebookDisplayName ?: - [bundle objectForInfoDictionaryKey:kFacebookDisplayName]; - } - - if (!(facebookAppId && facebookDisplayName)) { - [NSException raise:NSInternalInconsistencyException - format:@"Please set FacebookAppID, FacebookDisplayName, and\nURL types > Url " - @"Schemes in `Supporting Files/Info.plist` according to " - @"https://developers.facebook.com/docs/ios/getting-started"]; - } - - if (self.authUI.isEmulatorEnabled) { - _providerForEmulator = [FIROAuthProvider providerWithProviderID:self.providerID]; - } else { - _loginManager = [self createLoginManager]; - } -} - -#pragma mark - Private methods - -- (FBSDKLoginManager *)createLoginManager { - return [[FBSDKLoginManager alloc] init]; -} - -- (BOOL)maybeHandleCancelledResult:(FBSDKLoginManagerLoginResult *)result - error:(NSError *)error { - if (error) { - NSError *newError = - [FUIAuthErrorUtils providerErrorWithUnderlyingError:error - providerID:@"facebook.com"]; - [self completeSignInFlowWithAccessToken:nil idToken:nil error:newError]; - return true; - } - - if (result.isCancelled) { - NSError *newError = [FUIAuthErrorUtils userCancelledSignInError]; - [self completeSignInFlowWithAccessToken:nil idToken:nil error:newError]; - return true; - } - return false; -} - -@end diff --git a/FirebaseFacebookAuthUI/Sources/Info.plist b/FirebaseFacebookAuthUI/Sources/Info.plist deleted file mode 100644 index e688d8b94f8..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - FMWK - CFBundleShortVersionString - 0.5 - CFBundleSignature - ???? - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - NSPrincipalClass - - - diff --git a/FirebaseFacebookAuthUI/Sources/Public/FirebaseFacebookAuthUI/FUIFacebookAuth.h b/FirebaseFacebookAuthUI/Sources/Public/FirebaseFacebookAuthUI/FUIFacebookAuth.h deleted file mode 100644 index ae088d38f8f..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Public/FirebaseFacebookAuthUI/FUIFacebookAuth.h +++ /dev/null @@ -1,86 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -@class FBSDKLoginManager; - -#if SWIFT_PACKAGE -#import -#else -#import -#endif // SWIFT_PACKAGE - -NS_ASSUME_NONNULL_BEGIN - -/** @class FUIFacebookAuth - @brief AuthUI components for Facebook Login. - */ -@interface FUIFacebookAuth : NSObject -{ - @protected - /** @var _loginManager - @brief The Facebook login manager. - */ - FBSDKLoginManager *_loginManager; - -} - -/** @property scopes - @brief The scopes to use with Facebook Login. - @remarks Defaults to using "email" scopes. - */ -@property(nonatomic, readonly, copy) NSArray *scopes; - -/** @property buttonAlignment - @brief The alignment of the icon and text of the button. - */ -@property(nonatomic, readwrite) FUIButtonAlignment buttonAlignment; - -/** @property useLimitedLogin - @brief Whether or not Facebook Login should use Limited Login mode. - */ -@property(nonatomic, assign) BOOL useLimitedLogin; - -/** @fn initWithAuthUI - @brief Convenience initializer. Uses a default permission of `@[ "email" ]`. - @param authUI The @c FUIAuth instance that manages this provider. - */ -- (instancetype)initWithAuthUI:(FUIAuth *)authUI; - -/** @fn initWithAuthUI:permissions: - @brief Designated initializer. - @param authUI The @c FUIAuth instance that manages this provider. - @param permissions The permissions of the app. This array must be an array of specific string values - as defined in https://developers.facebook.com/docs/facebook-login/permissions/ - */ -- (instancetype)initWithAuthUI:(FUIAuth *)authUI - permissions:(NSArray *)permissions NS_DESIGNATED_INITIALIZER; - -/** @fn init - @brief Conevenience initializer. Uses a default permission of `@[ "email" ]`. - */ -- (instancetype)init -__attribute__((deprecated("Instead use initWithAuthUI:"))); - -/** @fn initWithPermissions: - @param permissions The permissions of the app. This array must be an array of specific string values - as defined in https://developers.facebook.com/docs/facebook-login/permissions/ - */ -- (instancetype)initWithPermissions:(NSArray *)permissions -__attribute__((deprecated("Instead use initWithAuthUI:permissions:"))) NS_DESIGNATED_INITIALIZER; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebaseFacebookAuthUI/Sources/Public/FirebaseFacebookAuthUI/FirebaseFacebookAuthUI.h b/FirebaseFacebookAuthUI/Sources/Public/FirebaseFacebookAuthUI/FirebaseFacebookAuthUI.h deleted file mode 100644 index acf563353d9..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Public/FirebaseFacebookAuthUI/FirebaseFacebookAuthUI.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -//! Project version number for FirebaseFacebookAuthUI. -FOUNDATION_EXPORT double FirebaseFacebookAuthUIVersionNumber; - -//! Project version string for FirebaseFacebookAuthUI. -FOUNDATION_EXPORT const unsigned char FirebaseFacebookAuthUIVersionString[]; - -#import "FUIFacebookAuth.h" - - - diff --git a/FirebaseFacebookAuthUI/Sources/Resources/ic_facebook.png b/FirebaseFacebookAuthUI/Sources/Resources/ic_facebook.png deleted file mode 100644 index 98e08279526..00000000000 Binary files a/FirebaseFacebookAuthUI/Sources/Resources/ic_facebook.png and /dev/null differ diff --git a/FirebaseFacebookAuthUI/Sources/Resources/ic_facebook@2x.png b/FirebaseFacebookAuthUI/Sources/Resources/ic_facebook@2x.png deleted file mode 100644 index ca19a0c4947..00000000000 Binary files a/FirebaseFacebookAuthUI/Sources/Resources/ic_facebook@2x.png and /dev/null differ diff --git a/FirebaseFacebookAuthUI/Sources/Resources/ic_facebook@3x.png b/FirebaseFacebookAuthUI/Sources/Resources/ic_facebook@3x.png deleted file mode 100644 index 4b325a14fbf..00000000000 Binary files a/FirebaseFacebookAuthUI/Sources/Resources/ic_facebook@3x.png and /dev/null differ diff --git a/FirebaseFacebookAuthUI/Sources/Strings/ar.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/ar.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index bdee46d5fca..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/ar.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "تسجيل الدخول عبر Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/bg.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/bg.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index a761182d574..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/bg.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Вход с Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/bn.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/bn.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index e86fd13ddd4..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/bn.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Facebook দিয়ে সাইন-ইন করুন"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/ca.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/ca.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 30902659483..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/ca.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Inicia la sessió amb Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/cs.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/cs.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 6c7f4d8adef..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/cs.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Přihlaste se přes Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/da.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/da.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index e63fc451cd0..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/da.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Log ind med Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/de-AT.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/de-AT.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 4ec8b9656fe..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/de-AT.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Über Facebook anmelden"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/de-CH.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/de-CH.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 4ec8b9656fe..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/de-CH.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Über Facebook anmelden"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/de.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/de.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 4ec8b9656fe..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/de.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Über Facebook anmelden"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/el.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/el.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index bc98f4d43fe..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/el.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Σύνδεση μέσω Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/en-AU.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/en-AU.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 703d19e1942..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/en-AU.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Sign in with Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/en-CA.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/en-CA.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 703d19e1942..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/en-CA.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Sign in with Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/en-GB.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/en-GB.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 703d19e1942..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/en-GB.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Sign in with Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/en-IE.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/en-IE.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 703d19e1942..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/en-IE.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Sign in with Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/en-IN.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/en-IN.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 703d19e1942..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/en-IN.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Sign in with Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/en-SG.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/en-SG.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 703d19e1942..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/en-SG.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Sign in with Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/en-ZA.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/en-ZA.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 703d19e1942..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/en-ZA.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Sign in with Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/en.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/en.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 703d19e1942..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/en.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Sign in with Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/es-419.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/es-419.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 2ed151d5338..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/es-419.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Acceder con Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/es-AR.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/es-AR.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 2ed151d5338..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/es-AR.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Acceder con Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/es-BO.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/es-BO.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 2ed151d5338..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/es-BO.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Acceder con Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/es-CL.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/es-CL.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 2ed151d5338..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/es-CL.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Acceder con Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/es-CO.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/es-CO.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 2ed151d5338..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/es-CO.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Acceder con Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/es-CR.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/es-CR.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 2ed151d5338..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/es-CR.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Acceder con Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/es-DO.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/es-DO.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 2ed151d5338..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/es-DO.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Acceder con Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/es-EC.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/es-EC.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 2ed151d5338..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/es-EC.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Acceder con Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/es-GT.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/es-GT.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 2ed151d5338..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/es-GT.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Acceder con Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/es-HN.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/es-HN.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 2ed151d5338..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/es-HN.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Acceder con Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/es-MX.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/es-MX.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 2ed151d5338..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/es-MX.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Acceder con Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/es-NI.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/es-NI.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 2ed151d5338..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/es-NI.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Acceder con Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/es-PA.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/es-PA.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 2ed151d5338..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/es-PA.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Acceder con Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/es-PE.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/es-PE.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 2ed151d5338..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/es-PE.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Acceder con Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/es-PR.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/es-PR.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 2ed151d5338..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/es-PR.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Acceder con Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/es-PY.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/es-PY.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 2ed151d5338..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/es-PY.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Acceder con Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/es-SV.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/es-SV.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 2ed151d5338..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/es-SV.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Acceder con Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/es-US.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/es-US.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 2ed151d5338..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/es-US.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Acceder con Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/es-UY.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/es-UY.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 2ed151d5338..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/es-UY.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Acceder con Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/es-VE.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/es-VE.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 2ed151d5338..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/es-VE.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Acceder con Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/es.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/es.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 53fa28ce4dd..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/es.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Iniciar sesión con Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/fa.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/fa.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 882982afb54..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/fa.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "ورود به سیستم با Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/fi.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/fi.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index c8acd558b4d..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/fi.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Kirjaudu Facebook-tilillä"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/fil.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/fil.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 5d2a1d2fb0a..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/fil.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Mag-sign in sa Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/fr-CH.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/fr-CH.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index cb12ebc4c3d..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/fr-CH.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Se connecter avec Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/fr.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/fr.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index cb12ebc4c3d..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/fr.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Se connecter avec Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/gsw.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/gsw.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 4ec8b9656fe..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/gsw.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Über Facebook anmelden"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/gu.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/gu.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 4d5eb97e12d..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/gu.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Facebook વડે સાઇન ઇન કરો"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/he.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/he.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 4fd9c6d3608..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/he.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "כניסה באמצעות Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/hi.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/hi.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index cdd37f4bcc4..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/hi.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Facebook से प्रवेश करें"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/hr.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/hr.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index e0e3d2d2d92..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/hr.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Prijava putem Facebooka"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/hu.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/hu.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 9a05d8aefc9..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/hu.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Bejelentkezés Facebook-fiókkal"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/id.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/id.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 835f04ce141..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/id.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Login dengan Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/it.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/it.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 529a01a90e1..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/it.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Accedi con Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/ja.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/ja.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 641cf18e64d..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/ja.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Facebook でログイン"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/kn.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/kn.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 5c1006ccb62..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/kn.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Facebook ಮೂಲಕ ಸೈನ್ ಇನ್ ಮಾಡಿ"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/ko.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/ko.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index ad5a9dd68f2..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/ko.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Facebook으로 로그인"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/ln.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/ln.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index cb12ebc4c3d..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/ln.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Se connecter avec Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/lt.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/lt.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 236aaa6423c..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/lt.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Prisijungti per „Facebook“"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/lv.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/lv.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index aad17cb3750..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/lv.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Pierakstīties ar Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/mr.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/mr.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 38d7414e45c..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/mr.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Facebookने साइन इन करा"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/ms.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/ms.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index ca54ea442e5..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/ms.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Log masuk dengan Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/nb.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/nb.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 2c86df22023..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/nb.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Logg på med Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/nl.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/nl.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 9ab8f0e8765..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/nl.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Inloggen met Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/nn-NO.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/nn-NO.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 2c86df22023..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/nn-NO.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Logg på med Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/pl.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/pl.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 8493300a958..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/pl.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Zaloguj się przez Facebooka"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/pt-BR.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/pt-BR.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index ea5135997a6..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/pt-BR.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Fazer login com o Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/pt-PT.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/pt-PT.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 1f97cf42a88..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/pt-PT.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Iniciar sessão com o Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/pt.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/pt.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index ea5135997a6..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/pt.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Fazer login com o Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/ro.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/ro.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 9bbe7a6f56c..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/ro.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Conectați-vă cu Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/ru.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/ru.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 1249f673400..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/ru.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Войти через аккаунт Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/sk.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/sk.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 31acfbdc39a..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/sk.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Prihlásiť sa cez Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/sl.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/sl.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 76722c118ab..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/sl.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Prijava z računom za Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/sr-Latn.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/sr-Latn.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 626d8b47b65..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/sr-Latn.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Prijavi me pomoću Facebook-a"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/sr.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/sr.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 77ba841f3cf..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/sr.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Пријави ме помоћу Facebook-а"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/sv.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/sv.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index b0f01c2ef54..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/sv.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Logga in med Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/ta.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/ta.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 1fddd58e997..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/ta.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Facebook மூலம் உள்நுழைக"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/th.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/th.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 276f8968b11..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/th.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "ลงชื่อเข้าใช้ด้วย Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/tr.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/tr.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index bbed81d639c..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/tr.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Facebook ile oturum aç"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/uk.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/uk.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 85f368f07fd..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/uk.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Увійти через Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/ur.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/ur.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 24bd3ad32fa..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/ur.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Facebook کے ساتھ سائن ان کریں"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/vi.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/vi.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 1b564e8606a..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/vi.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "Đăng nhập bằng Facebook"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/zh-Hans.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/zh-Hans.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 582e856aa33..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/zh-Hans.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "使用 Facebook 帐号登录"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/zh-Hant-TW.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/zh-Hant-TW.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 389383c194f..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/zh-Hant-TW.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "使用 Facebook 帳戶登入"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/zh-Hant.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/zh-Hant.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 389383c194f..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/zh-Hant.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "使用 Facebook 帳戶登入"; diff --git a/FirebaseFacebookAuthUI/Sources/Strings/zh.lproj/FirebaseFacebookAuthUI.strings b/FirebaseFacebookAuthUI/Sources/Strings/zh.lproj/FirebaseFacebookAuthUI.strings deleted file mode 100644 index 582e856aa33..00000000000 --- a/FirebaseFacebookAuthUI/Sources/Strings/zh.lproj/FirebaseFacebookAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Facebook. */ -"SignInWithFacebook" = "使用 Facebook 帐号登录"; diff --git a/FirebaseGoogleAuthUI.podspec b/FirebaseGoogleAuthUI.podspec deleted file mode 100644 index 84252f5a558..00000000000 --- a/FirebaseGoogleAuthUI.podspec +++ /dev/null @@ -1,29 +0,0 @@ -Pod::Spec.new do |s| - s.name = 'FirebaseGoogleAuthUI' - s.version = '15.1.0' - s.summary = 'Google authentication for FirebaseAuthUI.' - s.homepage = 'https://github.com/firebase/FirebaseUI-iOS' - s.license = { :type => 'Apache 2.0', :file => 'LICENSE' } - s.source = { :git => 'https://github.com/firebase/FirebaseUI-iOS.git', :tag => 'v' + s.version.to_s} - s.author = 'Firebase' - s.platform = :ios - s.ios.deployment_target = '13.0' - s.ios.framework = 'UIKit' - s.requires_arc = true - s.cocoapods_version = '>= 1.8.0' - s.pod_target_xcconfig = { - 'HEADER_SEARCH_PATHS' => '"${PODS_TARGET_SRCROOT}"', - } - s.swift_version = '6.0' - - s.public_header_files = 'FirebaseGoogleAuthUI/Sources/Public/FirebaseGoogleAuthUI/*.h' - s.source_files = 'FirebaseGoogleAuthUI/Sources/**/*.{h,m}' - s.dependency 'FirebaseAuth' - s.dependency 'FirebaseCore' - s.dependency 'FirebaseAuthUI', '~> 15.0' - s.dependency 'GoogleSignIn', '~> 8.0' - s.resource_bundles = { - 'FirebaseGoogleAuthUI' => ['FirebaseGoogleAuthUI/Sources/{Resources,Strings}/*.{png,lproj}'] - } - -end diff --git a/FirebaseGoogleAuthUI/FirebaseGoogleAuthUI.xcodeproj/project.pbxproj b/FirebaseGoogleAuthUI/FirebaseGoogleAuthUI.xcodeproj/project.pbxproj deleted file mode 100644 index 4a0f4cab6f3..00000000000 --- a/FirebaseGoogleAuthUI/FirebaseGoogleAuthUI.xcodeproj/project.pbxproj +++ /dev/null @@ -1,913 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 50; - objects = { - -/* Begin PBXBuildFile section */ - 8D69E4A121DE8CAF00CFA49B /* FirebaseGoogleAuthUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8D69E49721DE8CAF00CFA49B /* FirebaseGoogleAuthUI.framework */; }; - 8D69E4A621DE8CAF00CFA49B /* FirebaseGoogleAuthUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E4A521DE8CAF00CFA49B /* FirebaseGoogleAuthUITests.m */; }; - 8D69E4A821DE8CAF00CFA49B /* FirebaseGoogleAuthUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E49A21DE8CAF00CFA49B /* FirebaseGoogleAuthUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8D69E50D21DE8CF000CFA49B /* FirebaseGoogleAuthUI.strings in Resources */ = {isa = PBXBuildFile; fileRef = 8D69E4B221DE8CF000CFA49B /* FirebaseGoogleAuthUI.strings */; }; - 8D69E50E21DE8CF000CFA49B /* ic_google.png in Resources */ = {isa = PBXBuildFile; fileRef = 8D69E50821DE8CF000CFA49B /* ic_google.png */; }; - 8D69E50F21DE8CF000CFA49B /* ic_google@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8D69E50921DE8CF000CFA49B /* ic_google@2x.png */; }; - 8D69E51021DE8CF000CFA49B /* ic_google@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8D69E50A21DE8CF000CFA49B /* ic_google@3x.png */; }; - 8D69E51121DE8CF000CFA49B /* FUIGoogleAuth.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E50B21DE8CF000CFA49B /* FUIGoogleAuth.h */; }; - 8D69E51221DE8CF000CFA49B /* FUIGoogleAuth.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E50C21DE8CF000CFA49B /* FUIGoogleAuth.m */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 8D69E4A221DE8CAF00CFA49B /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 8D69E48E21DE8CAF00CFA49B /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8D69E49621DE8CAF00CFA49B; - remoteInfo = FirebaseGoogleAuthUI; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 8D69E49721DE8CAF00CFA49B /* FirebaseGoogleAuthUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FirebaseGoogleAuthUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 8D69E49A21DE8CAF00CFA49B /* FirebaseGoogleAuthUI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FirebaseGoogleAuthUI.h; sourceTree = ""; }; - 8D69E49B21DE8CAF00CFA49B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 8D69E4A021DE8CAF00CFA49B /* FirebaseGoogleAuthUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FirebaseGoogleAuthUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 8D69E4A521DE8CAF00CFA49B /* FirebaseGoogleAuthUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FirebaseGoogleAuthUITests.m; sourceTree = ""; }; - 8D69E4A721DE8CAF00CFA49B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 8D69E4B321DE8CF000CFA49B /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/FirebaseGoogleAuthUI.strings; sourceTree = ""; }; - 8D69E4B421DE8CF000CFA49B /* ur */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ur; path = ur.lproj/FirebaseGoogleAuthUI.strings; sourceTree = ""; }; - 8D69E4B521DE8CF000CFA49B /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/FirebaseGoogleAuthUI.strings; sourceTree = ""; }; - 8D69E4B621DE8CF000CFA49B /* es-SV */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-SV"; path = "es-SV.lproj/FirebaseGoogleAuthUI.strings"; sourceTree = ""; }; - 8D69E4B721DE8CF000CFA49B /* zh-Hant-TW */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant-TW"; path = "zh-Hant-TW.lproj/FirebaseGoogleAuthUI.strings"; sourceTree = ""; }; - 8D69E4B821DE8CF000CFA49B /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/FirebaseGoogleAuthUI.strings; sourceTree = ""; }; - 8D69E4B921DE8CF000CFA49B /* el */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = el; path = el.lproj/FirebaseGoogleAuthUI.strings; sourceTree = ""; }; - 8D69E4BA21DE8CF000CFA49B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/FirebaseGoogleAuthUI.strings"; sourceTree = ""; }; - 8D69E4BB21DE8CF000CFA49B /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/FirebaseGoogleAuthUI.strings; sourceTree = ""; }; - 8D69E4BC21DE8CF000CFA49B /* fa */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fa; path = fa.lproj/FirebaseGoogleAuthUI.strings; sourceTree = ""; }; - 8D69E4BD21DE8CF000CFA49B /* mr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = mr; path = mr.lproj/FirebaseGoogleAuthUI.strings; sourceTree = ""; }; - 8D69E4BE21DE8CF000CFA49B /* es-GT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-GT"; path = "es-GT.lproj/FirebaseGoogleAuthUI.strings"; sourceTree = ""; }; - 8D69E4BF21DE8CF000CFA49B /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/FirebaseGoogleAuthUI.strings; sourceTree = ""; }; - 8D69E4C021DE8CF000CFA49B /* en-CA */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-CA"; path = "en-CA.lproj/FirebaseGoogleAuthUI.strings"; sourceTree = ""; }; - 8D69E4C121DE8CF000CFA49B /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/FirebaseGoogleAuthUI.strings; sourceTree = ""; }; - 8D69E4C221DE8CF000CFA49B /* es-PY */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-PY"; path = "es-PY.lproj/FirebaseGoogleAuthUI.strings"; sourceTree = ""; }; - 8D69E4C321DE8CF000CFA49B /* gu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = gu; path = gu.lproj/FirebaseGoogleAuthUI.strings; sourceTree = ""; }; - 8D69E4C421DE8CF000CFA49B /* kn */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = kn; path = kn.lproj/FirebaseGoogleAuthUI.strings; sourceTree = ""; }; - 8D69E4C521DE8CF000CFA49B /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/FirebaseGoogleAuthUI.strings; sourceTree = ""; }; - 8D69E4C621DE8CF000CFA49B /* es-US */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-US"; path = "es-US.lproj/FirebaseGoogleAuthUI.strings"; sourceTree = ""; }; - 8D69E4C721DE8CF000CFA49B /* en-GB */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-GB"; path = "en-GB.lproj/FirebaseGoogleAuthUI.strings"; sourceTree = ""; }; - 8D69E4C821DE8CF000CFA49B /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/FirebaseGoogleAuthUI.strings; sourceTree = ""; }; - 8D69E4C921DE8CF000CFA49B /* es-VE */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-VE"; path = "es-VE.lproj/FirebaseGoogleAuthUI.strings"; sourceTree = ""; }; - 8D69E4CA21DE8CF000CFA49B /* es-CL */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-CL"; path = "es-CL.lproj/FirebaseGoogleAuthUI.strings"; sourceTree = ""; }; - 8D69E4CB21DE8CF000CFA49B /* sl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sl; path = sl.lproj/FirebaseGoogleAuthUI.strings; sourceTree = ""; }; - 8D69E4CC21DE8CF000CFA49B /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/FirebaseGoogleAuthUI.strings; sourceTree = ""; }; - 8D69E4CD21DE8CF000CFA49B /* es-419 */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-419"; path = "es-419.lproj/FirebaseGoogleAuthUI.strings"; sourceTree = ""; }; - 8D69E4CE21DE8CF000CFA49B /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/FirebaseGoogleAuthUI.strings; sourceTree = ""; }; - 8D69E4CF21DE8CF000CFA49B /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bg; path = bg.lproj/FirebaseGoogleAuthUI.strings; sourceTree = ""; }; - 8D69E4D021DE8CF000CFA49B /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/FirebaseGoogleAuthUI.strings; sourceTree = ""; }; - 8D69E4D121DE8CF000CFA49B /* sr-Latn */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "sr-Latn"; path = "sr-Latn.lproj/FirebaseGoogleAuthUI.strings"; sourceTree = ""; }; - 8D69E4D221DE8CF000CFA49B /* nn-NO */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "nn-NO"; path = "nn-NO.lproj/FirebaseGoogleAuthUI.strings"; sourceTree = ""; }; - 8D69E4D321DE8CF000CFA49B /* es-PA */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-PA"; path = "es-PA.lproj/FirebaseGoogleAuthUI.strings"; sourceTree = ""; }; - 8D69E4D421DE8CF000CFA49B /* en-SG */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-SG"; path = "en-SG.lproj/FirebaseGoogleAuthUI.strings"; sourceTree = ""; }; - 8D69E4D521DE8CF000CFA49B /* sr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sr; path = sr.lproj/FirebaseGoogleAuthUI.strings; sourceTree = ""; }; - 8D69E4D621DE8CF000CFA49B /* ms */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ms; path = ms.lproj/FirebaseGoogleAuthUI.strings; sourceTree = ""; }; - 8D69E4D721DE8CF000CFA49B /* es-CR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-CR"; path = "es-CR.lproj/FirebaseGoogleAuthUI.strings"; sourceTree = ""; }; - 8D69E4D821DE8CF000CFA49B /* ta */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ta; path = ta.lproj/FirebaseGoogleAuthUI.strings; sourceTree = ""; }; - 8D69E4D921DE8CF000CFA49B /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/FirebaseGoogleAuthUI.strings; sourceTree = ""; }; - 8D69E4DA21DE8CF000CFA49B /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/FirebaseGoogleAuthUI.strings; sourceTree = ""; }; - 8D69E4DB21DE8CF000CFA49B /* es-AR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-AR"; path = "es-AR.lproj/FirebaseGoogleAuthUI.strings"; sourceTree = ""; }; - 8D69E4DC21DE8CF000CFA49B /* es-PE */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-PE"; path = "es-PE.lproj/FirebaseGoogleAuthUI.strings"; sourceTree = ""; }; - 8D69E4DD21DE8CF000CFA49B /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/FirebaseGoogleAuthUI.strings; sourceTree = ""; }; - 8D69E4DE21DE8CF000CFA49B /* en-IE */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-IE"; path = "en-IE.lproj/FirebaseGoogleAuthUI.strings"; sourceTree = ""; }; - 8D69E4DF21DE8CF000CFA49B /* fil */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fil; path = fil.lproj/FirebaseGoogleAuthUI.strings; sourceTree = ""; }; - 8D69E4E021DE8CF000CFA49B /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/FirebaseGoogleAuthUI.strings"; sourceTree = ""; }; - 8D69E4E121DE8CF000CFA49B /* es-CO */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-CO"; path = "es-CO.lproj/FirebaseGoogleAuthUI.strings"; sourceTree = ""; }; - 8D69E4E221DE8CF000CFA49B /* gsw */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = gsw; path = gsw.lproj/FirebaseGoogleAuthUI.strings; sourceTree = ""; }; - 8D69E4E321DE8CF000CFA49B /* en-ZA */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-ZA"; path = "en-ZA.lproj/FirebaseGoogleAuthUI.strings"; sourceTree = ""; }; - 8D69E4E421DE8CF000CFA49B /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/FirebaseGoogleAuthUI.strings; sourceTree = ""; }; - 8D69E4E521DE8CF000CFA49B /* es-PR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-PR"; path = "es-PR.lproj/FirebaseGoogleAuthUI.strings"; sourceTree = ""; }; - 8D69E4E621DE8CF000CFA49B /* de-AT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "de-AT"; path = "de-AT.lproj/FirebaseGoogleAuthUI.strings"; sourceTree = ""; }; - 8D69E4E721DE8CF000CFA49B /* en-AU */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-AU"; path = "en-AU.lproj/FirebaseGoogleAuthUI.strings"; sourceTree = ""; }; - 8D69E4E821DE8CF000CFA49B /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/FirebaseGoogleAuthUI.strings; sourceTree = ""; }; - 8D69E4E921DE8CF000CFA49B /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/FirebaseGoogleAuthUI.strings; sourceTree = ""; }; - 8D69E4EA21DE8CF000CFA49B /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/FirebaseGoogleAuthUI.strings"; sourceTree = ""; }; - 8D69E4EB21DE8CF000CFA49B /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/FirebaseGoogleAuthUI.strings; sourceTree = ""; }; - 8D69E4EC21DE8CF000CFA49B /* lv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = lv; path = lv.lproj/FirebaseGoogleAuthUI.strings; sourceTree = ""; }; - 8D69E4ED21DE8CF000CFA49B /* es-MX */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-MX"; path = "es-MX.lproj/FirebaseGoogleAuthUI.strings"; sourceTree = ""; }; - 8D69E4EE21DE8CF000CFA49B /* lt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = lt; path = lt.lproj/FirebaseGoogleAuthUI.strings; sourceTree = ""; }; - 8D69E4EF21DE8CF000CFA49B /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/FirebaseGoogleAuthUI.strings; sourceTree = ""; }; - 8D69E4F021DE8CF000CFA49B /* es-DO */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-DO"; path = "es-DO.lproj/FirebaseGoogleAuthUI.strings"; sourceTree = ""; }; - 8D69E4F121DE8CF000CFA49B /* fr-CH */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "fr-CH"; path = "fr-CH.lproj/FirebaseGoogleAuthUI.strings"; sourceTree = ""; }; - 8D69E4F221DE8CF000CFA49B /* es-NI */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-NI"; path = "es-NI.lproj/FirebaseGoogleAuthUI.strings"; sourceTree = ""; }; - 8D69E4F321DE8CF000CFA49B /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/FirebaseGoogleAuthUI.strings; sourceTree = ""; }; - 8D69E4F421DE8CF000CFA49B /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/FirebaseGoogleAuthUI.strings; sourceTree = ""; }; - 8D69E4F521DE8CF000CFA49B /* id */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = id; path = id.lproj/FirebaseGoogleAuthUI.strings; sourceTree = ""; }; - 8D69E4F621DE8CF000CFA49B /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/FirebaseGoogleAuthUI.strings; sourceTree = ""; }; - 8D69E4F721DE8CF000CFA49B /* th */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = th; path = th.lproj/FirebaseGoogleAuthUI.strings; sourceTree = ""; }; - 8D69E4F821DE8CF000CFA49B /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = pt.lproj/FirebaseGoogleAuthUI.strings; sourceTree = ""; }; - 8D69E4F921DE8CF000CFA49B /* de-CH */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "de-CH"; path = "de-CH.lproj/FirebaseGoogleAuthUI.strings"; sourceTree = ""; }; - 8D69E4FA21DE8CF000CFA49B /* bn */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bn; path = bn.lproj/FirebaseGoogleAuthUI.strings; sourceTree = ""; }; - 8D69E4FB21DE8CF000CFA49B /* es-EC */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-EC"; path = "es-EC.lproj/FirebaseGoogleAuthUI.strings"; sourceTree = ""; }; - 8D69E4FC21DE8CF000CFA49B /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-PT"; path = "pt-PT.lproj/FirebaseGoogleAuthUI.strings"; sourceTree = ""; }; - 8D69E4FD21DE8CF000CFA49B /* es-BO */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-BO"; path = "es-BO.lproj/FirebaseGoogleAuthUI.strings"; sourceTree = ""; }; - 8D69E4FE21DE8CF000CFA49B /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/FirebaseGoogleAuthUI.strings; sourceTree = ""; }; - 8D69E4FF21DE8CF000CFA49B /* ln */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ln; path = ln.lproj/FirebaseGoogleAuthUI.strings; sourceTree = ""; }; - 8D69E50021DE8CF000CFA49B /* es-UY */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-UY"; path = "es-UY.lproj/FirebaseGoogleAuthUI.strings"; sourceTree = ""; }; - 8D69E50121DE8CF000CFA49B /* es-HN */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-HN"; path = "es-HN.lproj/FirebaseGoogleAuthUI.strings"; sourceTree = ""; }; - 8D69E50221DE8CF000CFA49B /* hr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hr; path = hr.lproj/FirebaseGoogleAuthUI.strings; sourceTree = ""; }; - 8D69E50321DE8CF000CFA49B /* hi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hi; path = hi.lproj/FirebaseGoogleAuthUI.strings; sourceTree = ""; }; - 8D69E50421DE8CF000CFA49B /* ca */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ca; path = ca.lproj/FirebaseGoogleAuthUI.strings; sourceTree = ""; }; - 8D69E50521DE8CF000CFA49B /* zh */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = zh; path = zh.lproj/FirebaseGoogleAuthUI.strings; sourceTree = ""; }; - 8D69E50621DE8CF000CFA49B /* en-IN */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-IN"; path = "en-IN.lproj/FirebaseGoogleAuthUI.strings"; sourceTree = ""; }; - 8D69E50821DE8CF000CFA49B /* ic_google.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_google.png; sourceTree = ""; }; - 8D69E50921DE8CF000CFA49B /* ic_google@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ic_google@2x.png"; sourceTree = ""; }; - 8D69E50A21DE8CF000CFA49B /* ic_google@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ic_google@3x.png"; sourceTree = ""; }; - 8D69E50B21DE8CF000CFA49B /* FUIGoogleAuth.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIGoogleAuth.h; sourceTree = ""; }; - 8D69E50C21DE8CF000CFA49B /* FUIGoogleAuth.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUIGoogleAuth.m; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 8D69E49421DE8CAF00CFA49B /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8D69E49D21DE8CAF00CFA49B /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 8D69E4A121DE8CAF00CFA49B /* FirebaseGoogleAuthUI.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 2F1A7A9CC42931C0584896C1 /* Pods */ = { - isa = PBXGroup; - children = ( - ); - path = Pods; - sourceTree = ""; - }; - 8D55F15D261E6E470020DFB0 /* Public */ = { - isa = PBXGroup; - children = ( - 8DF993742637694800DC12D1 /* FirebaseGoogleAuthUI */, - ); - path = Public; - sourceTree = ""; - }; - 8D69E48D21DE8CAF00CFA49B = { - isa = PBXGroup; - children = ( - 8D69E49921DE8CAF00CFA49B /* Sources */, - 8D69E4A421DE8CAF00CFA49B /* FirebaseGoogleAuthUITests */, - 8D69E49821DE8CAF00CFA49B /* Products */, - 2F1A7A9CC42931C0584896C1 /* Pods */, - ); - sourceTree = ""; - }; - 8D69E49821DE8CAF00CFA49B /* Products */ = { - isa = PBXGroup; - children = ( - 8D69E49721DE8CAF00CFA49B /* FirebaseGoogleAuthUI.framework */, - 8D69E4A021DE8CAF00CFA49B /* FirebaseGoogleAuthUITests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - 8D69E49921DE8CAF00CFA49B /* Sources */ = { - isa = PBXGroup; - children = ( - 8D55F15D261E6E470020DFB0 /* Public */, - 8D69E50C21DE8CF000CFA49B /* FUIGoogleAuth.m */, - 8D69E49B21DE8CAF00CFA49B /* Info.plist */, - 8D69E50721DE8CF000CFA49B /* Resources */, - 8D69E4B121DE8CF000CFA49B /* Strings */, - ); - path = Sources; - sourceTree = ""; - }; - 8D69E4A421DE8CAF00CFA49B /* FirebaseGoogleAuthUITests */ = { - isa = PBXGroup; - children = ( - 8D69E4A521DE8CAF00CFA49B /* FirebaseGoogleAuthUITests.m */, - 8D69E4A721DE8CAF00CFA49B /* Info.plist */, - ); - path = FirebaseGoogleAuthUITests; - sourceTree = ""; - }; - 8D69E4B121DE8CF000CFA49B /* Strings */ = { - isa = PBXGroup; - children = ( - 8D69E4B221DE8CF000CFA49B /* FirebaseGoogleAuthUI.strings */, - ); - path = Strings; - sourceTree = ""; - }; - 8D69E50721DE8CF000CFA49B /* Resources */ = { - isa = PBXGroup; - children = ( - 8D69E50821DE8CF000CFA49B /* ic_google.png */, - 8D69E50921DE8CF000CFA49B /* ic_google@2x.png */, - 8D69E50A21DE8CF000CFA49B /* ic_google@3x.png */, - ); - path = Resources; - sourceTree = ""; - }; - 8DF993742637694800DC12D1 /* FirebaseGoogleAuthUI */ = { - isa = PBXGroup; - children = ( - 8D69E49A21DE8CAF00CFA49B /* FirebaseGoogleAuthUI.h */, - 8D69E50B21DE8CF000CFA49B /* FUIGoogleAuth.h */, - ); - path = FirebaseGoogleAuthUI; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - 8D69E49221DE8CAF00CFA49B /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 8D69E51121DE8CF000CFA49B /* FUIGoogleAuth.h in Headers */, - 8D69E4A821DE8CAF00CFA49B /* FirebaseGoogleAuthUI.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - 8D69E49621DE8CAF00CFA49B /* FirebaseGoogleAuthUI */ = { - isa = PBXNativeTarget; - buildConfigurationList = 8D69E4AB21DE8CAF00CFA49B /* Build configuration list for PBXNativeTarget "FirebaseGoogleAuthUI" */; - buildPhases = ( - 8D69E49221DE8CAF00CFA49B /* Headers */, - 8D69E49321DE8CAF00CFA49B /* Sources */, - 8D69E49421DE8CAF00CFA49B /* Frameworks */, - 8D69E49521DE8CAF00CFA49B /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = FirebaseGoogleAuthUI; - productName = FirebaseGoogleAuthUI; - productReference = 8D69E49721DE8CAF00CFA49B /* FirebaseGoogleAuthUI.framework */; - productType = "com.apple.product-type.framework"; - }; - 8D69E49F21DE8CAF00CFA49B /* FirebaseGoogleAuthUITests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 8D69E4AE21DE8CAF00CFA49B /* Build configuration list for PBXNativeTarget "FirebaseGoogleAuthUITests" */; - buildPhases = ( - 8D69E49C21DE8CAF00CFA49B /* Sources */, - 8D69E49D21DE8CAF00CFA49B /* Frameworks */, - 8D69E49E21DE8CAF00CFA49B /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 8D69E4A321DE8CAF00CFA49B /* PBXTargetDependency */, - ); - name = FirebaseGoogleAuthUITests; - productName = FirebaseGoogleAuthUITests; - productReference = 8D69E4A021DE8CAF00CFA49B /* FirebaseGoogleAuthUITests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 8D69E48E21DE8CAF00CFA49B /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 1140; - ORGANIZATIONNAME = Firebase; - TargetAttributes = { - 8D69E49621DE8CAF00CFA49B = { - CreatedOnToolsVersion = 10.1; - }; - 8D69E49F21DE8CAF00CFA49B = { - CreatedOnToolsVersion = 10.1; - }; - }; - }; - buildConfigurationList = 8D69E49121DE8CAF00CFA49B /* Build configuration list for PBXProject "FirebaseGoogleAuthUI" */; - compatibilityVersion = "Xcode 9.3"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - de, - ur, - he, - "es-SV", - "zh-Hant-TW", - ar, - el, - "zh-Hans", - ja, - fa, - mr, - "es-GT", - "en-CA", - uk, - "es-PY", - gu, - kn, - nb, - "es-US", - "en-GB", - es, - "es-VE", - "es-CL", - sl, - da, - "es-419", - it, - bg, - sk, - "sr-Latn", - "nn-NO", - "es-PA", - "en-SG", - sr, - ms, - "es-CR", - ta, - sv, - cs, - "es-AR", - "es-PE", - ko, - "en-IE", - fil, - "zh-Hant", - "es-CO", - gsw, - "en-ZA", - hu, - "es-PR", - "de-AT", - "en-AU", - tr, - pl, - "pt-BR", - vi, - lv, - "es-MX", - lt, - ru, - "es-DO", - "fr-CH", - "es-NI", - fr, - fi, - id, - nl, - th, - pt, - "de-CH", - bn, - "es-EC", - "pt-PT", - "es-BO", - ro, - ln, - "es-UY", - "es-HN", - hr, - hi, - ca, - zh, - "en-IN", - ); - mainGroup = 8D69E48D21DE8CAF00CFA49B; - productRefGroup = 8D69E49821DE8CAF00CFA49B /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 8D69E49621DE8CAF00CFA49B /* FirebaseGoogleAuthUI */, - 8D69E49F21DE8CAF00CFA49B /* FirebaseGoogleAuthUITests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 8D69E49521DE8CAF00CFA49B /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8D69E50F21DE8CF000CFA49B /* ic_google@2x.png in Resources */, - 8D69E50E21DE8CF000CFA49B /* ic_google.png in Resources */, - 8D69E51021DE8CF000CFA49B /* ic_google@3x.png in Resources */, - 8D69E50D21DE8CF000CFA49B /* FirebaseGoogleAuthUI.strings in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8D69E49E21DE8CAF00CFA49B /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 8D69E49321DE8CAF00CFA49B /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8D69E51221DE8CF000CFA49B /* FUIGoogleAuth.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8D69E49C21DE8CAF00CFA49B /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8D69E4A621DE8CAF00CFA49B /* FirebaseGoogleAuthUITests.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 8D69E4A321DE8CAF00CFA49B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 8D69E49621DE8CAF00CFA49B /* FirebaseGoogleAuthUI */; - targetProxy = 8D69E4A221DE8CAF00CFA49B /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - 8D69E4B221DE8CF000CFA49B /* FirebaseGoogleAuthUI.strings */ = { - isa = PBXVariantGroup; - children = ( - 8D69E4B321DE8CF000CFA49B /* de */, - 8D69E4B421DE8CF000CFA49B /* ur */, - 8D69E4B521DE8CF000CFA49B /* he */, - 8D69E4B621DE8CF000CFA49B /* es-SV */, - 8D69E4B721DE8CF000CFA49B /* zh-Hant-TW */, - 8D69E4B821DE8CF000CFA49B /* ar */, - 8D69E4B921DE8CF000CFA49B /* el */, - 8D69E4BA21DE8CF000CFA49B /* zh-Hans */, - 8D69E4BB21DE8CF000CFA49B /* ja */, - 8D69E4BC21DE8CF000CFA49B /* fa */, - 8D69E4BD21DE8CF000CFA49B /* mr */, - 8D69E4BE21DE8CF000CFA49B /* es-GT */, - 8D69E4BF21DE8CF000CFA49B /* en */, - 8D69E4C021DE8CF000CFA49B /* en-CA */, - 8D69E4C121DE8CF000CFA49B /* uk */, - 8D69E4C221DE8CF000CFA49B /* es-PY */, - 8D69E4C321DE8CF000CFA49B /* gu */, - 8D69E4C421DE8CF000CFA49B /* kn */, - 8D69E4C521DE8CF000CFA49B /* nb */, - 8D69E4C621DE8CF000CFA49B /* es-US */, - 8D69E4C721DE8CF000CFA49B /* en-GB */, - 8D69E4C821DE8CF000CFA49B /* es */, - 8D69E4C921DE8CF000CFA49B /* es-VE */, - 8D69E4CA21DE8CF000CFA49B /* es-CL */, - 8D69E4CB21DE8CF000CFA49B /* sl */, - 8D69E4CC21DE8CF000CFA49B /* da */, - 8D69E4CD21DE8CF000CFA49B /* es-419 */, - 8D69E4CE21DE8CF000CFA49B /* it */, - 8D69E4CF21DE8CF000CFA49B /* bg */, - 8D69E4D021DE8CF000CFA49B /* sk */, - 8D69E4D121DE8CF000CFA49B /* sr-Latn */, - 8D69E4D221DE8CF000CFA49B /* nn-NO */, - 8D69E4D321DE8CF000CFA49B /* es-PA */, - 8D69E4D421DE8CF000CFA49B /* en-SG */, - 8D69E4D521DE8CF000CFA49B /* sr */, - 8D69E4D621DE8CF000CFA49B /* ms */, - 8D69E4D721DE8CF000CFA49B /* es-CR */, - 8D69E4D821DE8CF000CFA49B /* ta */, - 8D69E4D921DE8CF000CFA49B /* sv */, - 8D69E4DA21DE8CF000CFA49B /* cs */, - 8D69E4DB21DE8CF000CFA49B /* es-AR */, - 8D69E4DC21DE8CF000CFA49B /* es-PE */, - 8D69E4DD21DE8CF000CFA49B /* ko */, - 8D69E4DE21DE8CF000CFA49B /* en-IE */, - 8D69E4DF21DE8CF000CFA49B /* fil */, - 8D69E4E021DE8CF000CFA49B /* zh-Hant */, - 8D69E4E121DE8CF000CFA49B /* es-CO */, - 8D69E4E221DE8CF000CFA49B /* gsw */, - 8D69E4E321DE8CF000CFA49B /* en-ZA */, - 8D69E4E421DE8CF000CFA49B /* hu */, - 8D69E4E521DE8CF000CFA49B /* es-PR */, - 8D69E4E621DE8CF000CFA49B /* de-AT */, - 8D69E4E721DE8CF000CFA49B /* en-AU */, - 8D69E4E821DE8CF000CFA49B /* tr */, - 8D69E4E921DE8CF000CFA49B /* pl */, - 8D69E4EA21DE8CF000CFA49B /* pt-BR */, - 8D69E4EB21DE8CF000CFA49B /* vi */, - 8D69E4EC21DE8CF000CFA49B /* lv */, - 8D69E4ED21DE8CF000CFA49B /* es-MX */, - 8D69E4EE21DE8CF000CFA49B /* lt */, - 8D69E4EF21DE8CF000CFA49B /* ru */, - 8D69E4F021DE8CF000CFA49B /* es-DO */, - 8D69E4F121DE8CF000CFA49B /* fr-CH */, - 8D69E4F221DE8CF000CFA49B /* es-NI */, - 8D69E4F321DE8CF000CFA49B /* fr */, - 8D69E4F421DE8CF000CFA49B /* fi */, - 8D69E4F521DE8CF000CFA49B /* id */, - 8D69E4F621DE8CF000CFA49B /* nl */, - 8D69E4F721DE8CF000CFA49B /* th */, - 8D69E4F821DE8CF000CFA49B /* pt */, - 8D69E4F921DE8CF000CFA49B /* de-CH */, - 8D69E4FA21DE8CF000CFA49B /* bn */, - 8D69E4FB21DE8CF000CFA49B /* es-EC */, - 8D69E4FC21DE8CF000CFA49B /* pt-PT */, - 8D69E4FD21DE8CF000CFA49B /* es-BO */, - 8D69E4FE21DE8CF000CFA49B /* ro */, - 8D69E4FF21DE8CF000CFA49B /* ln */, - 8D69E50021DE8CF000CFA49B /* es-UY */, - 8D69E50121DE8CF000CFA49B /* es-HN */, - 8D69E50221DE8CF000CFA49B /* hr */, - 8D69E50321DE8CF000CFA49B /* hi */, - 8D69E50421DE8CF000CFA49B /* ca */, - 8D69E50521DE8CF000CFA49B /* zh */, - 8D69E50621DE8CF000CFA49B /* en-IN */, - ); - name = FirebaseGoogleAuthUI.strings; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 8D69E4A921DE8CAF00CFA49B /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../\""; - IPHONEOS_DEPLOYMENT_TARGET = 12.1; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 8D69E4AA21DE8CAF00CFA49B /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../\""; - IPHONEOS_DEPLOYMENT_TARGET = 12.1; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 8D69E4AC21DE8CAF00CFA49B /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Automatic; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Sources/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - "-framework", - "\"CoreGraphics\"", - "-framework", - "\"CoreText\"", - "-framework", - "\"Foundation\"", - "-framework", - "\"GTMSessionFetcher\"", - "-framework", - "\"GoogleSignIn\"", - "-framework", - "\"GoogleUtilities\"", - "-framework", - "\"LocalAuthentication\"", - "-framework", - "\"SafariServices\"", - "-framework", - "\"Security\"", - "-framework", - "\"SystemConfiguration\"", - "-framework", - "\"UIKit\"", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.firebase.FirebaseGoogleAuthUI; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 8D69E4AD21DE8CAF00CFA49B /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Automatic; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Sources/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - "-framework", - "\"CoreGraphics\"", - "-framework", - "\"CoreText\"", - "-framework", - "\"Foundation\"", - "-framework", - "\"GTMSessionFetcher\"", - "-framework", - "\"GoogleSignIn\"", - "-framework", - "\"GoogleUtilities\"", - "-framework", - "\"LocalAuthentication\"", - "-framework", - "\"SafariServices\"", - "-framework", - "\"Security\"", - "-framework", - "\"SystemConfiguration\"", - "-framework", - "\"UIKit\"", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.firebase.FirebaseGoogleAuthUI; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; - 8D69E4AF21DE8CAF00CFA49B /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - INFOPLIST_FILE = FirebaseGoogleAuthUITests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuth\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuthInterop\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseUI\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/AppAuth\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/GTMAppAuth\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/nanopb\"", - "\"$(PODS_CONFIGURATION_BUILD_DIR)/FirebaseAuthUI\"", - "\"$(PODS_CONFIGURATION_BUILD_DIR)/GoogleSignIn\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreInternal\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreExtension\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAppCheckInterop\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/RecaptchaInterop\"", - ); - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - "-framework", - "\"CoreGraphics\"", - "-framework", - "\"CoreText\"", - "-framework", - "\"Foundation\"", - "-framework", - "\"GTMSessionFetcher\"", - "-framework", - "\"GoogleUtilities\"", - "-framework", - "\"LocalAuthentication\"", - "-framework", - "\"OCMock\"", - "-framework", - "\"SafariServices\"", - "-framework", - "\"Security\"", - "-framework", - "\"SystemConfiguration\"", - "-framework", - "\"UIKit\"", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.firebase.FirebaseGoogleAuthUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 8D69E4B021DE8CAF00CFA49B /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - INFOPLIST_FILE = FirebaseGoogleAuthUITests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuth\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuthInterop\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseUI\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/AppAuth\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/GTMAppAuth\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/nanopb\"", - "\"$(PODS_CONFIGURATION_BUILD_DIR)/FirebaseAuthUI\"", - "\"$(PODS_CONFIGURATION_BUILD_DIR)/GoogleSignIn\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreInternal\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreExtension\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAppCheckInterop\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/RecaptchaInterop\"", - ); - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - "-framework", - "\"CoreGraphics\"", - "-framework", - "\"CoreText\"", - "-framework", - "\"Foundation\"", - "-framework", - "\"GTMSessionFetcher\"", - "-framework", - "\"GoogleUtilities\"", - "-framework", - "\"LocalAuthentication\"", - "-framework", - "\"OCMock\"", - "-framework", - "\"SafariServices\"", - "-framework", - "\"Security\"", - "-framework", - "\"SystemConfiguration\"", - "-framework", - "\"UIKit\"", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.firebase.FirebaseGoogleAuthUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 8D69E49121DE8CAF00CFA49B /* Build configuration list for PBXProject "FirebaseGoogleAuthUI" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 8D69E4A921DE8CAF00CFA49B /* Debug */, - 8D69E4AA21DE8CAF00CFA49B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 8D69E4AB21DE8CAF00CFA49B /* Build configuration list for PBXNativeTarget "FirebaseGoogleAuthUI" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 8D69E4AC21DE8CAF00CFA49B /* Debug */, - 8D69E4AD21DE8CAF00CFA49B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 8D69E4AE21DE8CAF00CFA49B /* Build configuration list for PBXNativeTarget "FirebaseGoogleAuthUITests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 8D69E4AF21DE8CAF00CFA49B /* Debug */, - 8D69E4B021DE8CAF00CFA49B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 8D69E48E21DE8CAF00CFA49B /* Project object */; -} diff --git a/FirebaseGoogleAuthUI/FirebaseGoogleAuthUI.xcodeproj/xcshareddata/xcschemes/FirebaseGoogleAuthUI.xcscheme b/FirebaseGoogleAuthUI/FirebaseGoogleAuthUI.xcodeproj/xcshareddata/xcschemes/FirebaseGoogleAuthUI.xcscheme deleted file mode 100644 index ae29f511ce2..00000000000 --- a/FirebaseGoogleAuthUI/FirebaseGoogleAuthUI.xcodeproj/xcshareddata/xcschemes/FirebaseGoogleAuthUI.xcscheme +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FirebaseGoogleAuthUI/FirebaseGoogleAuthUITests/FirebaseGoogleAuthUITests.m b/FirebaseGoogleAuthUI/FirebaseGoogleAuthUITests/FirebaseGoogleAuthUITests.m deleted file mode 100644 index 60e871d224a..00000000000 --- a/FirebaseGoogleAuthUI/FirebaseGoogleAuthUITests/FirebaseGoogleAuthUITests.m +++ /dev/null @@ -1,374 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -@import FirebaseAuth; -#import -#import -#import -@import XCTest; - -#import "FUIGoogleAuth.h" - -@interface FUIGoogleAuth (Testing) -- (NSString *)clientID; -- (GIDSignIn *)googleSignIn; -- (void)handleSignInWithUser:(GIDGoogleUser *)user - error:(NSError *)error - presentingViewController:(UIViewController *)presentingViewController - callback:(FUIAuthProviderSignInCompletionBlock)callback; -@end - -@interface FirebaseGoogleAuthUITests : XCTestCase -@property (nonatomic, strong) id mockProvider; -@property (nonatomic, strong) id mockOAuthProvider; -@property (nonatomic, strong) FUIAuth *authUI; -@end - -@implementation FirebaseGoogleAuthUITests - -- (void)setUp { - [super setUp]; - - id authClass = OCMClassMock([FIRAuth class]); - OCMStub(ClassMethod([authClass auth])). - andReturn(authClass); - - self.mockOAuthProvider = OCMClassMock([FIROAuthProvider class]); - OCMStub(ClassMethod([_mockOAuthProvider providerWithProviderID:OCMOCK_ANY])). - andReturn(_mockOAuthProvider); - - FIRAuth *auth = [FIRAuth auth]; - self.authUI = [FUIAuth authUIWithAuth:auth]; - self.mockProvider = OCMPartialMock([[FUIGoogleAuth alloc] initWithAuthUI:self.authUI]); - OCMStub([_mockProvider clientID]).andReturn(@"clientID"); -} - -- (void)tearDown { - self.mockProvider = nil; - self.mockOAuthProvider = nil; - self.authUI = nil; - [super tearDown]; -} - -- (void)testProviderValidity { - FUIGoogleAuth *provider = [[FUIGoogleAuth alloc] initWithAuthUI:self.authUI]; - - XCTAssertNotNil(provider); - XCTAssertNotNil(provider.icon); - XCTAssertNotNil(provider.signInLabel); - XCTAssertNotNil(provider.buttonBackgroundColor); - XCTAssertNotNil(provider.buttonTextColor); - XCTAssertNotNil(provider.providerID); - XCTAssertNotNil(provider.shortName); - XCTAssertTrue(provider.signInLabel.length != 0); - XCTAssertNil(provider.accessToken); - XCTAssertNil(provider.idToken); - - OCMVerify(never(), [self.mockOAuthProvider providerWithProviderID:@"google.com"]); -} - -#ifdef PORT_REST_OF_FILE_TO_GSI_7 - -- (void)testUseEmulatorCreatesOAuthProvider { - [self.authUI useEmulatorWithHost:@"host" port:12345]; - FUIGoogleAuth *provider = [[FUIGoogleAuth alloc] initWithAuthUI:self.authUI]; - - XCTAssertNotNil(provider); - OCMVerify([self.mockOAuthProvider providerWithProviderID:@"google.com"]); -} - -- (void)testSuccessfulLogin { - NSString *testIdToken = @"idToken"; - NSString *testAccessToken = @"accessToken"; - - id mockSignInDelegate = _mockProvider; - id mockSignIn = OCMClassMock([GIDSignIn class]); - id mockAuthentication = OCMClassMock([GIDAuthentication class]); - id mockGoogleUser = OCMClassMock([GIDGoogleUser class]); - - // mock accessToken - OCMExpect([mockGoogleUser authentication]).andReturn(mockAuthentication); - OCMExpect([mockAuthentication accessToken]).andReturn(testAccessToken); - - // mock idToken - OCMExpect([mockGoogleUser authentication]).andReturn(mockAuthentication); - OCMExpect([mockAuthentication idToken]).andReturn(testIdToken); - - OCMExpect([_mockProvider googleSignIn]).andReturn(mockSignIn); - - // forward call to signIn delegate - OCMExpect([mockSignIn signInWithConfiguration:[OCMArg any] - presentingViewController:[OCMArg any] - hint:[OCMArg any] - callback:[OCMArg any]]).andDo(^(NSInvocation *invocation) { - void (^callback)(GIDGoogleUser *, NSError *) = nil; - [invocation getArgument:&callback atIndex:5]; - callback(mockGoogleUser, nil); - }); - - XCTestExpectation *expectation = [self expectationWithDescription:@"logged in"]; - - [_mockProvider signInWithDefaultValue:nil - presentingViewController:nil - completion:^(FIRAuthCredential *_Nullable credential, - NSError *_Nullable error, - FIRAuthResultCallback _Nullable result, - NSDictionary *_Nullable userInfo) { - XCTAssertNil(error); - XCTAssertNotNil(result); - XCTAssertNotNil(credential); - FIRAuthCredential *expectedCredential = - [FIRGoogleAuthProvider credentialWithIDToken:testIdToken accessToken:testAccessToken]; - XCTAssertEqualObjects(credential.provider, expectedCredential.provider); - - [expectation fulfill]; - // We can't compare result and resultCallback. Thus verifying with expectation that result - // is called. - result(mockGoogleUser, error); - }]; - [self waitForExpectationsWithTimeout:0.1 handler:^(NSError *_Nullable error) { - XCTAssertNil(error); - }]; - - OCMVerifyAll(_mockProvider); - OCMVerifyAll(mockSignInDelegate); - OCMVerifyAll(mockGoogleUser); - - //verify that we are doing actual sign in - OCMVerifyAll(mockSignIn); - //verify that we are using token from server - OCMVerifyAll(mockAuthentication); - OCMVerify(never(), [self.mockOAuthProvider getCredentialWithUIDelegate:nil completion:OCMOCK_ANY]); -} - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" -- (void)testLegacyInitSuccessfulLogin { - NSString *testIdToken = @"idToken"; - NSString *testAccessToken = @"accessToken"; - - _mockProvider = OCMPartialMock([[FUIGoogleAuth alloc] init]); - - id mockSignInDelegate = _mockProvider; - id mockSignIn = OCMClassMock([GIDSignIn class]); - id mockAuthentication = OCMClassMock([GIDAuthentication class]); - id mockGoogleUser = OCMClassMock([GIDGoogleUser class]); - - OCMStub([_mockProvider clientID]).andReturn(@"clientID"); - - // mock accessToken - OCMExpect([mockGoogleUser authentication]).andReturn(mockAuthentication); - OCMExpect([mockAuthentication accessToken]).andReturn(testAccessToken); - - // mock idToken - OCMExpect([mockGoogleUser authentication]).andReturn(mockAuthentication); - OCMExpect([mockAuthentication idToken]).andReturn(testIdToken); - - OCMExpect([_mockProvider googleSignIn]).andReturn(mockSignIn); - - // forward call to signIn delegate - OCMExpect([mockSignIn signInWithConfiguration:[OCMArg any] - presentingViewController:[OCMArg any] - hint:[OCMArg any] - callback:[OCMArg any]]).andDo(^(NSInvocation *invocation) { - void (^callback)(GIDGoogleUser *, NSError *) = nil; - [invocation getArgument:&callback atIndex:5]; - callback(mockGoogleUser, nil); - }); - - XCTestExpectation *expectation = [self expectationWithDescription:@"logged in"]; - - [_mockProvider signInWithDefaultValue:nil - presentingViewController:nil - completion:^(FIRAuthCredential *_Nullable credential, - NSError *_Nullable error, - FIRAuthResultCallback _Nullable result, - NSDictionary *_Nullable userInfo) { - XCTAssertNil(error); - XCTAssertNotNil(result); - XCTAssertNotNil(credential); - FIRAuthCredential *expectedCredential = - [FIRGoogleAuthProvider credentialWithIDToken:testIdToken accessToken:testAccessToken]; - XCTAssertEqualObjects(credential.provider, expectedCredential.provider); - - [expectation fulfill]; - // We can't compare result and resultCallback. Thus verifying with expectation that result - // is called. - result(mockGoogleUser, error); - }]; - [self waitForExpectationsWithTimeout:0.1 handler:^(NSError *_Nullable error) { - XCTAssertNil(error); - }]; - - OCMVerifyAll(_mockProvider); - OCMVerifyAll(mockSignInDelegate); - OCMVerifyAll(mockGoogleUser); - - //verify that we are doing actual sign in - OCMVerifyAll(mockSignIn); - //verify that we are using token from server - OCMVerifyAll(mockAuthentication); - OCMVerify(never(), [self.mockOAuthProvider getCredentialWithUIDelegate:nil completion:OCMOCK_ANY]); -} -#pragma clang diagnostic pop - -- (void)testErrorLogin { - NSString *testIdToken = @"idToken"; - NSString *testAccessToken = @"accessToken"; - - id mockSignInDelegate = _mockProvider; - id mockSignIn = OCMClassMock([GIDSignIn class]); - id mockAuthentication = OCMClassMock([GIDAuthentication class]); - id mockGoogleUser = OCMClassMock([GIDGoogleUser class]); - - // mock accessToken - OCMStub([mockGoogleUser authentication]).andReturn(mockAuthentication); - OCMStub([mockAuthentication accessToken]).andReturn(testAccessToken); - - // mock idToken - OCMStub([mockGoogleUser authentication]).andReturn(mockAuthentication); - OCMStub([mockAuthentication idToken]).andReturn(testIdToken); - - OCMExpect([_mockProvider googleSignIn]).andReturn(mockSignIn); - NSError *signInError = [NSError errorWithDomain:@"sign in domain" code:kGIDSignInErrorCodeUnknown userInfo:@{}]; - - // forward call to signIn delegate - OCMExpect([mockSignIn signInWithConfiguration:[OCMArg any] - presentingViewController:[OCMArg any] - hint:[OCMArg any] - callback:[OCMArg any]]).andDo(^(NSInvocation *invocation) { - void (^callback)(GIDGoogleUser *, NSError *) = nil; - [invocation getArgument:&callback atIndex:5]; - callback(mockGoogleUser, signInError); - }); - - - XCTestExpectation *expectation = [self expectationWithDescription:@"logged in"]; - - [_mockProvider signInWithDefaultValue:nil - presentingViewController:nil - completion:^(FIRAuthCredential *_Nullable credential, - NSError *_Nullable error, - FIRAuthResultCallback _Nullable result, - NSDictionary *_Nullable userInfo) { - XCTAssertNotNil(error); - XCTAssertEqualObjects(error.userInfo[NSUnderlyingErrorKey], signInError); - XCTAssertNil(credential); - XCTAssertNil(result); - [expectation fulfill]; - }]; - [self waitForExpectationsWithTimeout:0.1 handler:^(NSError *_Nullable error) { - XCTAssertNil(error); - }]; - - OCMVerifyAll(_mockProvider); - OCMVerifyAll(mockSignInDelegate); - OCMVerifyAll(mockGoogleUser); - - //verify that we are doing actual sign in - OCMVerifyAll(mockSignIn); - //verify that we are using token from server - OCMVerifyAll(mockAuthentication); -} - -- (void)testCancelLogin { - NSString *testIdToken = @"idToken"; - NSString *testAccessToken = @"accessToken"; - - id mockSignInDelegate = _mockProvider; - id mockSignIn = OCMClassMock([GIDSignIn class]); - id mockAuthentication = OCMClassMock([GIDAuthentication class]); - id mockGoogleUser = OCMClassMock([GIDGoogleUser class]); - - // mock accessToken - OCMStub([mockGoogleUser authentication]).andReturn(mockAuthentication); - OCMStub([mockAuthentication accessToken]).andReturn(testAccessToken); - - // mock idToken - OCMStub([mockGoogleUser authentication]).andReturn(mockAuthentication); - OCMStub([mockAuthentication idToken]).andReturn(testIdToken); - - OCMExpect([_mockProvider googleSignIn]).andReturn(mockSignIn); - NSError *signInError = [NSError errorWithDomain:@"sign in domain" code:kGIDSignInErrorCodeCanceled userInfo:@{}]; - - // forward call to signIn delegate - OCMExpect([mockSignIn signInWithConfiguration:[OCMArg any] - presentingViewController:[OCMArg any] - hint:[OCMArg any] - callback:[OCMArg any]]).andDo(^(NSInvocation *invocation) { - void (^callback)(GIDGoogleUser *, NSError *) = nil; - [invocation getArgument:&callback atIndex:5]; - callback(mockGoogleUser, signInError); - }); - - XCTestExpectation *expectation = [self expectationWithDescription:@"logged in"]; - - [_mockProvider signInWithDefaultValue:nil - presentingViewController:nil - completion:^(FIRAuthCredential *_Nullable credential, - NSError *_Nullable error, - FIRAuthResultCallback _Nullable result, - NSDictionary *_Nullable userInfo) { - XCTAssertNotNil(error); - XCTAssertEqualObjects(error, [FUIAuthErrorUtils userCancelledSignInError]); - XCTAssertNil(credential); - XCTAssertNil(result); - - [expectation fulfill]; - }]; - [self waitForExpectationsWithTimeout:0.1 handler:^(NSError *_Nullable error) { - XCTAssertNil(error); - }]; - - OCMVerifyAll(_mockProvider); - OCMVerifyAll(mockSignInDelegate); - OCMVerifyAll(mockGoogleUser); - - //verify that we are doing actual sign in - OCMVerifyAll(mockSignIn); - //verify that we are using token from server - OCMVerifyAll(mockAuthentication); -} -#endif - -- (void)testSignOut { - id mockSignIn = OCMClassMock([GIDSignIn class]); - OCMExpect([_mockProvider googleSignIn]).andReturn(mockSignIn); - OCMExpect([mockSignIn signOut]); - - [_mockProvider signOut]; - - OCMVerifyAll(_mockProvider); - OCMVerifyAll(mockSignIn); -} - -- (void)testUseEmulatorUsesOAuthProvider { - [self.authUI useEmulatorWithHost:@"host" port:12345]; - self.mockProvider = OCMPartialMock([[FUIGoogleAuth alloc] initWithAuthUI:self.authUI]); - - [self.mockProvider signInWithDefaultValue:nil - presentingViewController:nil - completion:^(FIRAuthCredential *_Nullable credential, - NSError *_Nullable error, - FIRAuthResultCallback _Nullable result, - NSDictionary *_Nullable userInfo) {}]; - - OCMVerify([self.mockOAuthProvider getCredentialWithUIDelegate:nil completion:OCMOCK_ANY]); - OCMVerify(never(), [self.mockProvider googleSignIn]); -} - - -@end diff --git a/FirebaseGoogleAuthUI/FirebaseGoogleAuthUITests/Info.plist b/FirebaseGoogleAuthUI/FirebaseGoogleAuthUITests/Info.plist deleted file mode 100644 index 0b3caea4471..00000000000 --- a/FirebaseGoogleAuthUI/FirebaseGoogleAuthUITests/Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - - diff --git a/FirebaseGoogleAuthUI/Podfile b/FirebaseGoogleAuthUI/Podfile deleted file mode 100644 index f6ac224ca9f..00000000000 --- a/FirebaseGoogleAuthUI/Podfile +++ /dev/null @@ -1,18 +0,0 @@ -# source 'sso://cpdc-internal/firebase' -source 'https://github.com/CocoaPods/Specs.git' - -platform :ios, '13.0' - -target 'FirebaseGoogleAuthUI' do - use_frameworks! - - pod 'FirebaseAuth' - pod 'GoogleSignIn', '~> 7.0' - pod 'FirebaseAuthUI', :path => '../' - - target 'FirebaseGoogleAuthUITests' do - inherit! :search_paths - pod 'OCMock' - end - -end diff --git a/FirebaseGoogleAuthUI/Sources/FUIGoogleAuth.m b/FirebaseGoogleAuthUI/Sources/FUIGoogleAuth.m deleted file mode 100644 index 1f28fdc4a5d..00000000000 --- a/FirebaseGoogleAuthUI/Sources/FUIGoogleAuth.m +++ /dev/null @@ -1,294 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebaseGoogleAuthUI/Sources/Public/FirebaseGoogleAuthUI/FUIGoogleAuth.h" - -@import FirebaseAuth; - -#import -#import -#import - -/** @var kTableName - @brief The name of the strings table to search for localized strings. - */ -static NSString *const kTableName = @"FirebaseGoogleAuthUI"; - -/** @var kBundleName - @brief The name of the bundle to search for resources. - */ -#if SWIFT_PACKAGE -static NSString *const kBundleName = @"FirebaseUI_FirebaseGoogleAuthUI"; -#else -static NSString *const kBundleName = @"FirebaseGoogleAuthUI"; -#endif // SWIFT_PACKAGE - -/** @var kSignInWithGoogle - @brief The string key for localized button text. - */ -static NSString *const kSignInWithGoogle = @"SignInWithGoogle"; - -@interface FUIGoogleAuth () - -/** @property authUI - @brief FUIAuth instance of the application. - */ -@property(nonatomic, strong) FUIAuth *authUI; - -/** @property providerForEmulator - @brief The OAuth provider to be used when the emulator is enabled. - */ -@property(nonatomic, strong) FIROAuthProvider *providerForEmulator; - -@end -@implementation FUIGoogleAuth { - /** @var _email - @brief The email address associated with this account. - */ - NSString *_email; -} - -+ (NSBundle *)bundle { - return [FUIAuthUtils bundleNamed:kBundleName - inFrameworkBundle:[NSBundle bundleForClass:[self class]]]; -} - -+ (NSArray *)defaultScopes { - return @[kGoogleUserInfoEmailScope, kGoogleUserInfoProfileScope]; -} - -- (instancetype)initWithAuthUI:(FUIAuth *)authUI { - return [self initWithAuthUI:authUI scopes:@[kGoogleUserInfoEmailScope, kGoogleUserInfoProfileScope]]; -} - -- (instancetype)initWithAuthUI:(FUIAuth *)authUI scopes:(NSArray *)scopes { - self = [super init]; - if (self) { - _authUI = authUI; - _scopes = [scopes copy]; - if (_authUI.isEmulatorEnabled) { - _providerForEmulator = [FIROAuthProvider providerWithProviderID:self.providerID]; - } - } - return self; -} - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-implementations" -- (instancetype)init { - return [self initWithScopes:[[self class] defaultScopes]]; -} - -- (instancetype)initWithScopes:(NSArray *)scopes { - self = [super init]; - if (self) { - _scopes = [scopes copy]; - } - return self; -} -#pragma clang diagnostic pop - -- (GIDSignIn *)googleSignIn { - return GIDSignIn.sharedInstance; -} - -- (NSString *)clientID { - return self.authUI.auth.app.options.clientID; -} - -#pragma mark - FUIAuthProvider - -- (nullable NSString *)providerID { - // TODO: Replace with FIRGoogleAuthProvider.id when Firebase 11 is the minimum. - return @"google.com"; -} - -- (nullable NSString *)accessToken { - if (self.authUI.isEmulatorEnabled) { - return nil; - } - return [self googleSignIn].currentUser.accessToken.tokenString; -} - -- (nullable NSString *)idToken { - if (self.authUI.isEmulatorEnabled) { - return nil; - } - return [self googleSignIn].currentUser.idToken.tokenString; -} - -- (NSString *)shortName { - return @"Google"; -} - -- (NSString *)signInLabel { - return FUILocalizedStringFromTableInBundle(kSignInWithGoogle, - kTableName, - [FUIGoogleAuth bundle]); -} - -- (UIImage *)icon { - return [FUIAuthUtils imageNamed:@"ic_google" fromBundle:[FUIGoogleAuth bundle]]; -} - -- (UIColor *)buttonBackgroundColor { - return [UIColor whiteColor]; -} - -- (UIColor *)buttonTextColor { - return [UIColor colorWithWhite:0 alpha:0.54f]; -} - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-implementations" -- (void)signInWithEmail:(nullable NSString *)email - presentingViewController:(nullable UIViewController *)presentingViewController - completion:(nullable FUIAuthProviderSignInCompletionBlock)completion { - [self signInWithDefaultValue:email - presentingViewController:presentingViewController - completion:completion]; -} -#pragma clang diagnostic pop - -- (void)signInWithDefaultValue:(nullable NSString *)defaultValue - presentingViewController:(nullable UIViewController *)presentingViewController - completion:(nullable FUIAuthProviderSignInCompletionBlock)completion { - - if (self.authUI.isEmulatorEnabled) { - [self signInWithOAuthProvider:self.providerForEmulator - presentingViewController:presentingViewController - completion:completion]; - return; - } - - GIDSignIn *signIn = [self googleSignIn]; - NSString *clientID = [self clientID]; - - if (!clientID) { - [NSException raise:NSInternalInconsistencyException - format:@"OAuth client ID not found. Please make sure Google Sign-In is enabled in " - @"the Firebase console. You may have to download a new GoogleService-Info.plist file after " - @"enabling Google Sign-In."]; - } - - FUIAuthProviderSignInCompletionBlock callback = ^(FIRAuthCredential *_Nullable credential, - NSError *_Nullable error, - _Nullable FIRAuthResultCallback result, - NSDictionary *_Nullable userInfo) { - if (completion) { - completion(credential, error, result, userInfo); - } - }; - - signIn.configuration = [[GIDConfiguration alloc] initWithClientID:clientID]; - - [signIn signInWithPresentingViewController:presentingViewController - hint:defaultValue completion:^(GIDSignInResult * _Nullable signInResult, NSError * _Nullable error) { - [self handleSignInWithUser:signInResult.user - error:error - presentingViewController:presentingViewController - callback:callback]; - }]; -} - -- (void)signInWithOAuthProvider:(FIROAuthProvider *)oauthProvider - presentingViewController:(nullable UIViewController *)presentingViewController - completion:(nullable FUIAuthProviderSignInCompletionBlock)completion { - oauthProvider.scopes = [[self class] defaultScopes]; - - [oauthProvider getCredentialWithUIDelegate:nil - completion:^(FIRAuthCredential *_Nullable credential, - NSError *_Nullable error) { - if (error) { - [FUIAuthBaseViewController showAlertWithMessage:error.localizedDescription - presentingViewController:presentingViewController]; - if (completion) { - completion(nil, error, nil, nil); - } - return; - } - if (completion) { - UIActivityIndicatorView *activityView = - [FUIAuthBaseViewController addActivityIndicator:presentingViewController.view]; - [activityView startAnimating]; - FIRAuthResultCallback result = ^(FIRUser *_Nullable user, - NSError *_Nullable error) { - [activityView stopAnimating]; - [activityView removeFromSuperview]; - }; - completion(credential, nil, result, nil); - } - }]; -} - -- (void)signOut { - if (self.authUI.isEmulatorEnabled) { - return; - } - GIDSignIn *signIn = [self googleSignIn]; - [signIn signOut]; -} - -- (BOOL)handleOpenURL:(NSURL *)URL sourceApplication:(NSString *)sourceApplication { - if (self.authUI.isEmulatorEnabled) { - return NO; - } - GIDSignIn *signIn = [self googleSignIn]; - return [signIn handleURL:URL]; -} - -- (NSString *)email { - return _email; -} - -- (void)handleSignInWithUser:(GIDGoogleUser *)user - error:(NSError *)error - presentingViewController:(UIViewController *)presentingViewController - callback:(FUIAuthProviderSignInCompletionBlock)callback { - if (error) { - if (error.code == kGIDSignInErrorCodeCanceled) { - NSError *newError = [FUIAuthErrorUtils userCancelledSignInError]; - if (callback) { - callback(nil, newError, nil, nil); - } - } else { - NSError *newError = - [FUIAuthErrorUtils providerErrorWithUnderlyingError:error - providerID:@"google.com"]; - if (callback) { - callback(nil, newError, nil, nil); - } - } - return; - } - _email = user.profile.email; - UIActivityIndicatorView *activityView = - [FUIAuthBaseViewController addActivityIndicator:presentingViewController.view]; - [activityView startAnimating]; - FIRAuthCredential *credential = - [FIRGoogleAuthProvider credentialWithIDToken:user.idToken.tokenString - accessToken:user.accessToken.tokenString]; - FIRAuthResultCallback result = ^(FIRUser *_Nullable user, - NSError *_Nullable error) { - [activityView stopAnimating]; - [activityView removeFromSuperview]; - }; - if (callback) { - callback(credential, error, result, nil); - } -} - -@end diff --git a/FirebaseGoogleAuthUI/Sources/Info.plist b/FirebaseGoogleAuthUI/Sources/Info.plist deleted file mode 100644 index e688d8b94f8..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - FMWK - CFBundleShortVersionString - 0.5 - CFBundleSignature - ???? - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - NSPrincipalClass - - - diff --git a/FirebaseGoogleAuthUI/Sources/Public/FirebaseGoogleAuthUI/FUIGoogleAuth.h b/FirebaseGoogleAuthUI/Sources/Public/FirebaseGoogleAuthUI/FUIGoogleAuth.h deleted file mode 100644 index d0c39c76735..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Public/FirebaseGoogleAuthUI/FUIGoogleAuth.h +++ /dev/null @@ -1,94 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** @var kGoogleGamesScope - @brief The OAuth scope string for the "Games" scope. - */ -static NSString *const kGoogleGamesScope = @"https://www.googleapis.com/auth/games"; - -/** @var kGooglePlusMeScope - @brief The OAuth scope string for the "plus.me" scope. - */ -static NSString *const kGooglePlusMeScope = @"https://www.googleapis.com/auth/plus.me"; - -/** @var kGooglePlusMeScope - @brief The OAuth scope string for the user's email scope. - */ -static NSString *const kGoogleUserInfoEmailScope = @"https://www.googleapis.com/auth/userinfo.email"; - -/** @var kGooglePlusMeScope - @brief The OAuth scope string for the basic G+ profile information scope. - */ -static NSString *const kGoogleUserInfoProfileScope = @"https://www.googleapis.com/auth/userinfo.profile"; - -/** @class FUIGoogleAuth - @brief AuthUI components for Google Sign In. - */ -@interface FUIGoogleAuth : NSObject - -/** @property scopes - @brief The scopes to use with Google Sign In. - @remarks Defaults to using email and profile scopes. For a list of all scopes - see https://developers.google.com/identity/protocols/googlescopes. - Starting with GoogleSignIn 6.0, scopes are no longer granted upon first authentication and - should be requested lazily. - */ -@property(nonatomic, copy, readonly) NSArray *scopes; - -/** @property buttonAlignment - @brief The alignment of the icon and text of the button. - */ -@property(nonatomic, readwrite) FUIButtonAlignment buttonAlignment; - -/** @fn initWithAuthUI - @brief Convenience initializer. Calls designated init with default - scopes of "email" and "profile". - @param authUI The @c FUIAuth instance that manages this provider. - */ -- (instancetype)initWithAuthUI:(FUIAuth *)authUI; - -/** @fn initWithAuthUI:scopes: - @brief Designated initializer. - @param authUI The @c FUIAuth instance that manages this provider. - @param scopes The user account scopes required by the app. A list of possible scopes can be - found at https://developers.google.com/identity/protocols/googlescopes. - Starting with GoogleSignIn 6.0, scopes are no longer granted upon first authentication and - should be requested lazily. - */ -- (instancetype)initWithAuthUI:(FUIAuth *)authUI - scopes:(NSArray *)scopes NS_DESIGNATED_INITIALIZER; - -/** @fn init - @brief Convenience initializer. Calls designated init with default - scopes of "email" and "profile". - */ -- (instancetype)init -__attribute__((deprecated("Instead use initWithAuthUI:"))); - -/** @fn initWithScopes: - @param scopes The user account scopes required by the app. A list of possible scopes can be - found at https://developers.google.com/identity/protocols/googlescopes - */ -- (instancetype)initWithScopes:(NSArray *)scopes -__attribute__((deprecated("Instead use initWithAuthUI:permissions:"))) NS_DESIGNATED_INITIALIZER; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebaseGoogleAuthUI/Sources/Public/FirebaseGoogleAuthUI/FirebaseGoogleAuthUI.h b/FirebaseGoogleAuthUI/Sources/Public/FirebaseGoogleAuthUI/FirebaseGoogleAuthUI.h deleted file mode 100644 index 8ebc7aca199..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Public/FirebaseGoogleAuthUI/FirebaseGoogleAuthUI.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -//! Project version number for FirebaseGoogleAuthUI. -FOUNDATION_EXPORT double FirebaseGoogleAuthUIVersionNumber; - -//! Project version string for FirebaseGoogleAuthUI. -FOUNDATION_EXPORT const unsigned char FirebaseGoogleAuthUIVersionString[]; - -#import "FUIGoogleAuth.h" diff --git a/FirebaseGoogleAuthUI/Sources/Resources/ic_google.png b/FirebaseGoogleAuthUI/Sources/Resources/ic_google.png deleted file mode 100644 index 4b0e1c00598..00000000000 Binary files a/FirebaseGoogleAuthUI/Sources/Resources/ic_google.png and /dev/null differ diff --git a/FirebaseGoogleAuthUI/Sources/Resources/ic_google@2x.png b/FirebaseGoogleAuthUI/Sources/Resources/ic_google@2x.png deleted file mode 100644 index 62b29c6a027..00000000000 Binary files a/FirebaseGoogleAuthUI/Sources/Resources/ic_google@2x.png and /dev/null differ diff --git a/FirebaseGoogleAuthUI/Sources/Resources/ic_google@3x.png b/FirebaseGoogleAuthUI/Sources/Resources/ic_google@3x.png deleted file mode 100644 index 2a2ac76cd98..00000000000 Binary files a/FirebaseGoogleAuthUI/Sources/Resources/ic_google@3x.png and /dev/null differ diff --git a/FirebaseGoogleAuthUI/Sources/Strings/ar.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/ar.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 4efe22304ad..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/ar.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "تسجيل الدخول عبر Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/bg.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/bg.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 839b9a1568d..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/bg.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Вход с Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/bn.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/bn.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index e31fe5224d2..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/bn.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Google দিয়ে সাইন-ইন করুন"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/ca.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/ca.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 63865fea9ef..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/ca.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Inicia la sessió amb Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/cs.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/cs.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 42c972b2eb8..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/cs.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Přihlaste se účtem Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/da.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/da.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 2db7de8b1e3..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/da.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Log ind med Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/de-AT.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/de-AT.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index f34ffa78781..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/de-AT.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Über Google anmelden"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/de-CH.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/de-CH.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index f34ffa78781..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/de-CH.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Über Google anmelden"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/de.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/de.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index f34ffa78781..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/de.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Über Google anmelden"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/el.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/el.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 76a035b4c06..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/el.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Σύνδεση μέσω Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/en-AU.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/en-AU.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index f8145396bff..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/en-AU.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Sign in with Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/en-CA.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/en-CA.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index f8145396bff..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/en-CA.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Sign in with Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/en-GB.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/en-GB.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index f8145396bff..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/en-GB.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Sign in with Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/en-IE.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/en-IE.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index f8145396bff..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/en-IE.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Sign in with Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/en-IN.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/en-IN.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index f8145396bff..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/en-IN.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Sign in with Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/en-SG.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/en-SG.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index f8145396bff..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/en-SG.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Sign in with Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/en-ZA.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/en-ZA.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index f8145396bff..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/en-ZA.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Sign in with Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/en.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/en.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index f8145396bff..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/en.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Sign in with Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/es-419.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/es-419.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 874628731b1..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/es-419.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Acceder con Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/es-AR.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/es-AR.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 874628731b1..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/es-AR.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Acceder con Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/es-BO.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/es-BO.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 874628731b1..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/es-BO.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Acceder con Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/es-CL.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/es-CL.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 874628731b1..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/es-CL.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Acceder con Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/es-CO.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/es-CO.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 874628731b1..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/es-CO.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Acceder con Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/es-CR.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/es-CR.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 874628731b1..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/es-CR.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Acceder con Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/es-DO.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/es-DO.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 874628731b1..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/es-DO.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Acceder con Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/es-EC.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/es-EC.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 874628731b1..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/es-EC.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Acceder con Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/es-GT.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/es-GT.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 874628731b1..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/es-GT.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Acceder con Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/es-HN.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/es-HN.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 874628731b1..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/es-HN.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Acceder con Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/es-MX.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/es-MX.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 874628731b1..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/es-MX.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Acceder con Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/es-NI.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/es-NI.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 874628731b1..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/es-NI.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Acceder con Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/es-PA.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/es-PA.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 874628731b1..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/es-PA.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Acceder con Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/es-PE.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/es-PE.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 874628731b1..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/es-PE.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Acceder con Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/es-PR.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/es-PR.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 874628731b1..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/es-PR.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Acceder con Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/es-PY.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/es-PY.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 874628731b1..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/es-PY.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Acceder con Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/es-SV.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/es-SV.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 874628731b1..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/es-SV.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Acceder con Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/es-US.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/es-US.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 874628731b1..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/es-US.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Acceder con Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/es-UY.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/es-UY.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 874628731b1..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/es-UY.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Acceder con Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/es-VE.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/es-VE.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 874628731b1..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/es-VE.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Acceder con Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/es.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/es.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 0c63fccaa75..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/es.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Iniciar sesión con Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/fa.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/fa.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 9675abcf7e6..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/fa.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "ورود به سیستم با Google‎"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/fi.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/fi.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 3eb0d25c1e9..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/fi.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Kirjaudu Google-tilillä"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/fil.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/fil.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index a2df5adf86e..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/fil.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Mag-sign in sa Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/fr-CH.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/fr-CH.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 890742b1bd2..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/fr-CH.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Se connecter avec Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/fr.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/fr.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 890742b1bd2..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/fr.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Se connecter avec Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/gsw.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/gsw.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index f34ffa78781..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/gsw.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Über Google anmelden"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/gu.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/gu.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 395c7b2f0d1..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/gu.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Google વડે સાઇન ઇન કરો"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/he.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/he.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index a1e7afc26ed..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/he.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "כניסה באמצעות Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/hi.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/hi.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index bca4cb818a8..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/hi.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Google से प्रवेश करें"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/hr.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/hr.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 733dc1fe6c7..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/hr.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Prijava putem Googlea"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/hu.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/hu.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 6512cffe095..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/hu.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Bejelentkezés Google-fiókkal"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/id.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/id.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 01e14638732..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/id.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Login dengan Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/it.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/it.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 5e0b7c7921e..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/it.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Accedi con Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/ja.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/ja.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index f56a07b2c7f..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/ja.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Google でログイン"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/kn.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/kn.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index b9e52fdac39..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/kn.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Google ಮೂಲಕ ಸೈನ್ ಇನ್ ಮಾಡಿ"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/ko.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/ko.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index bb872f3e762..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/ko.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Google 계정으로 로그인"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/ln.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/ln.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 890742b1bd2..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/ln.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Se connecter avec Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/lt.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/lt.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 7743afbf5aa..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/lt.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Prisijungti per „Google“"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/lv.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/lv.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 079aad36c18..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/lv.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Pierakstīties ar Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/mr.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/mr.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 22347ebdaf8..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/mr.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Googleने साइन इन करा"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/ms.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/ms.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index dfedb53cb1d..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/ms.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Log masuk dengan Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/nb.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/nb.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index e4f3243c1ac..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/nb.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Logg på med Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/nl.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/nl.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 42bfe001721..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/nl.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Inloggen met Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/nn-NO.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/nn-NO.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index e4f3243c1ac..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/nn-NO.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Logg på med Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/pl.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/pl.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 149abf6a1a8..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/pl.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Zaloguj się przez Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/pt-BR.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/pt-BR.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 0fa304fb2a2..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/pt-BR.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Fazer login com o Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/pt-PT.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/pt-PT.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 2ca321d981e..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/pt-PT.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Iniciar sessão com o Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/pt.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/pt.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 0fa304fb2a2..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/pt.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Fazer login com o Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/ro.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/ro.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index e5d25a7e0eb..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/ro.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Conectați-vă cu Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/ru.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/ru.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index dba30be2cdc..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/ru.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Войти через аккаунт Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/sk.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/sk.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 854dad1cb6d..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/sk.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Prihlásiť sa cez Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/sl.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/sl.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 40bfec3cf7d..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/sl.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Prijava z Google Računom"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/sr-Latn.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/sr-Latn.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 65a17604dd6..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/sr-Latn.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Prijavi me pomoću Google-a"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/sr.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/sr.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index b3cde9919b3..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/sr.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Пријави ме помоћу Google-а"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/sv.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/sv.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 2292766a226..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/sv.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Logga in med Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/ta.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/ta.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 4affb1375d3..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/ta.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Google மூலம் உள்நுழைக"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/th.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/th.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index a0713d48bb7..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/th.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "ลงชื่อเข้าใช้ด้วย Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/tr.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/tr.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index a715b653e2c..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/tr.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Google ile oturum aç"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/uk.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/uk.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index f1a8af112a7..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/uk.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Увійти через Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/ur.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/ur.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 5d012107c6f..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/ur.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Google کے ساتھ سائن ان کریں"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/vi.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/vi.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 8a4d2921625..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/vi.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "Đăng nhập bằng Google"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/zh-Hans.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/zh-Hans.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 25c7aef4395..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/zh-Hans.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "使用 Google 帐号登录"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/zh-Hant-TW.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/zh-Hant-TW.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 26e20b9d65a..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/zh-Hant-TW.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "使用 Google 帳戶登入"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/zh-Hant.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/zh-Hant.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 26e20b9d65a..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/zh-Hant.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "使用 Google 帳戶登入"; diff --git a/FirebaseGoogleAuthUI/Sources/Strings/zh.lproj/FirebaseGoogleAuthUI.strings b/FirebaseGoogleAuthUI/Sources/Strings/zh.lproj/FirebaseGoogleAuthUI.strings deleted file mode 100644 index 25c7aef4395..00000000000 --- a/FirebaseGoogleAuthUI/Sources/Strings/zh.lproj/FirebaseGoogleAuthUI.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* The text of the button used to sign-in with Google. */ -"SignInWithGoogle" = "使用 Google 帐号登录"; diff --git a/FirebaseOAuthUI.podspec b/FirebaseOAuthUI.podspec deleted file mode 100644 index c2d271cb9b8..00000000000 --- a/FirebaseOAuthUI.podspec +++ /dev/null @@ -1,27 +0,0 @@ -Pod::Spec.new do |s| - s.name = 'FirebaseOAuthUI' - s.version = '15.1.0' - s.summary = 'A collection of OAuth providers for FirebaseAuthUI.' - s.homepage = 'https://github.com/firebase/FirebaseUI-iOS' - s.license = { :type => 'Apache 2.0', :file => 'LICENSE' } - s.source = { :git => 'https://github.com/firebase/FirebaseUI-iOS.git', :tag => 'v' + s.version.to_s} - s.author = 'Firebase' - s.platform = :ios - s.ios.deployment_target = '13.0' - s.ios.framework = 'UIKit' - s.requires_arc = true - s.cocoapods_version = '>= 1.8.0' - s.pod_target_xcconfig = { - 'HEADER_SEARCH_PATHS' => '"${PODS_TARGET_SRCROOT}"', - } - s.swift_version = '6.0' - - s.public_header_files = 'FirebaseOAuthUI/Sources/Public/FirebaseOAuthUI/*.h' - s.source_files = 'FirebaseOAuthUI/Sources/**/*.{h,m}' - s.dependency 'FirebaseAuthUI', '~> 15.0' - s.dependency 'FirebaseAuth', '>= 8.0', '< 13.0' - s.resource_bundles = { - 'FirebaseOAuthUI' => ['FirebaseOAuthUI/Sources/{Resources,Strings}/*.{png,lproj}'] - } - -end diff --git a/FirebaseOAuthUI/FirebaseOAuthUI.xcodeproj/project.pbxproj b/FirebaseOAuthUI/FirebaseOAuthUI.xcodeproj/project.pbxproj deleted file mode 100644 index 84eb76a8da9..00000000000 --- a/FirebaseOAuthUI/FirebaseOAuthUI.xcodeproj/project.pbxproj +++ /dev/null @@ -1,531 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 50; - objects = { - -/* Begin PBXBuildFile section */ - 8D69E22721DD476D00CFA49B /* FirebaseOAuthUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8D69E21D21DD476C00CFA49B /* FirebaseOAuthUI.framework */; }; - 8D69E22C21DD476D00CFA49B /* FirebaseOAuthUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E22B21DD476D00CFA49B /* FirebaseOAuthUITests.m */; }; - 8D69E22E21DD476D00CFA49B /* FirebaseOAuthUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E22021DD476D00CFA49B /* FirebaseOAuthUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8D69E23921DD47B400CFA49B /* FUIOAuth.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E23721DD47B400CFA49B /* FUIOAuth.m */; }; - 8D69E23A21DD47B400CFA49B /* FUIOAuth.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E23821DD47B400CFA49B /* FUIOAuth.h */; settings = {ATTRIBUTES = (Public, ); }; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 8D69E22821DD476D00CFA49B /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 8D69E21421DD476C00CFA49B /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8D69E21C21DD476C00CFA49B; - remoteInfo = FirebaseOAuthUI; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 8D69E21D21DD476C00CFA49B /* FirebaseOAuthUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FirebaseOAuthUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 8D69E22021DD476D00CFA49B /* FirebaseOAuthUI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FirebaseOAuthUI.h; sourceTree = ""; }; - 8D69E22121DD476D00CFA49B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 8D69E22621DD476D00CFA49B /* FirebaseOAuthUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FirebaseOAuthUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 8D69E22B21DD476D00CFA49B /* FirebaseOAuthUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FirebaseOAuthUITests.m; sourceTree = ""; }; - 8D69E22D21DD476D00CFA49B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 8D69E23721DD47B400CFA49B /* FUIOAuth.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUIOAuth.m; sourceTree = ""; }; - 8D69E23821DD47B400CFA49B /* FUIOAuth.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIOAuth.h; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 8D69E21A21DD476C00CFA49B /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8D69E22321DD476D00CFA49B /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 8D69E22721DD476D00CFA49B /* FirebaseOAuthUI.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 5763488F2FEC8FD187D3A6FB /* Pods */ = { - isa = PBXGroup; - children = ( - ); - path = Pods; - sourceTree = ""; - }; - 8D55F164261E6E9F0020DFB0 /* Public */ = { - isa = PBXGroup; - children = ( - 8DF993772637696200DC12D1 /* FirebaseOAuthUI */, - ); - path = Public; - sourceTree = ""; - }; - 8D69E21321DD476C00CFA49B = { - isa = PBXGroup; - children = ( - 8D69E21F21DD476C00CFA49B /* Sources */, - 8D69E22A21DD476D00CFA49B /* FirebaseOAuthUITests */, - 8D69E21E21DD476C00CFA49B /* Products */, - 5763488F2FEC8FD187D3A6FB /* Pods */, - ); - sourceTree = ""; - }; - 8D69E21E21DD476C00CFA49B /* Products */ = { - isa = PBXGroup; - children = ( - 8D69E21D21DD476C00CFA49B /* FirebaseOAuthUI.framework */, - 8D69E22621DD476D00CFA49B /* FirebaseOAuthUITests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - 8D69E21F21DD476C00CFA49B /* Sources */ = { - isa = PBXGroup; - children = ( - 8D55F164261E6E9F0020DFB0 /* Public */, - 8D69E23721DD47B400CFA49B /* FUIOAuth.m */, - 8D69E22121DD476D00CFA49B /* Info.plist */, - ); - path = Sources; - sourceTree = ""; - }; - 8D69E22A21DD476D00CFA49B /* FirebaseOAuthUITests */ = { - isa = PBXGroup; - children = ( - 8D69E22B21DD476D00CFA49B /* FirebaseOAuthUITests.m */, - 8D69E22D21DD476D00CFA49B /* Info.plist */, - ); - path = FirebaseOAuthUITests; - sourceTree = ""; - }; - 8DF993772637696200DC12D1 /* FirebaseOAuthUI */ = { - isa = PBXGroup; - children = ( - 8D69E22021DD476D00CFA49B /* FirebaseOAuthUI.h */, - 8D69E23821DD47B400CFA49B /* FUIOAuth.h */, - ); - path = FirebaseOAuthUI; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - 8D69E21821DD476C00CFA49B /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 8D69E22E21DD476D00CFA49B /* FirebaseOAuthUI.h in Headers */, - 8D69E23A21DD47B400CFA49B /* FUIOAuth.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - 8D69E21C21DD476C00CFA49B /* FirebaseOAuthUI */ = { - isa = PBXNativeTarget; - buildConfigurationList = 8D69E23121DD476D00CFA49B /* Build configuration list for PBXNativeTarget "FirebaseOAuthUI" */; - buildPhases = ( - 8D69E21821DD476C00CFA49B /* Headers */, - 8D69E21921DD476C00CFA49B /* Sources */, - 8D69E21A21DD476C00CFA49B /* Frameworks */, - 8D69E21B21DD476C00CFA49B /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = FirebaseOAuthUI; - productName = FirebaseOAuthUI; - productReference = 8D69E21D21DD476C00CFA49B /* FirebaseOAuthUI.framework */; - productType = "com.apple.product-type.framework"; - }; - 8D69E22521DD476D00CFA49B /* FirebaseOAuthUITests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 8D69E23421DD476D00CFA49B /* Build configuration list for PBXNativeTarget "FirebaseOAuthUITests" */; - buildPhases = ( - 8D69E22221DD476D00CFA49B /* Sources */, - 8D69E22321DD476D00CFA49B /* Frameworks */, - 8D69E22421DD476D00CFA49B /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 8D69E22921DD476D00CFA49B /* PBXTargetDependency */, - ); - name = FirebaseOAuthUITests; - productName = FirebaseOAuthUITests; - productReference = 8D69E22621DD476D00CFA49B /* FirebaseOAuthUITests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 8D69E21421DD476C00CFA49B /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 1010; - ORGANIZATIONNAME = Firebase; - TargetAttributes = { - 8D69E21C21DD476C00CFA49B = { - CreatedOnToolsVersion = 10.1; - }; - 8D69E22521DD476D00CFA49B = { - CreatedOnToolsVersion = 10.1; - }; - }; - }; - buildConfigurationList = 8D69E21721DD476C00CFA49B /* Build configuration list for PBXProject "FirebaseOAuthUI" */; - compatibilityVersion = "Xcode 9.3"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - ); - mainGroup = 8D69E21321DD476C00CFA49B; - productRefGroup = 8D69E21E21DD476C00CFA49B /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 8D69E21C21DD476C00CFA49B /* FirebaseOAuthUI */, - 8D69E22521DD476D00CFA49B /* FirebaseOAuthUITests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 8D69E21B21DD476C00CFA49B /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8D69E22421DD476D00CFA49B /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 8D69E21921DD476C00CFA49B /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8D69E23921DD47B400CFA49B /* FUIOAuth.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8D69E22221DD476D00CFA49B /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8D69E22C21DD476D00CFA49B /* FirebaseOAuthUITests.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 8D69E22921DD476D00CFA49B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 8D69E21C21DD476C00CFA49B /* FirebaseOAuthUI */; - targetProxy = 8D69E22821DD476D00CFA49B /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - 8D69E22F21DD476D00CFA49B /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../\""; - IPHONEOS_DEPLOYMENT_TARGET = 12.1; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 8D69E23021DD476D00CFA49B /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../\""; - IPHONEOS_DEPLOYMENT_TARGET = 12.1; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 8D69E23221DD476D00CFA49B /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Automatic; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Sources/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.firebase.FirebaseOAuthUI; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 8D69E23321DD476D00CFA49B /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Automatic; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Sources/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.firebase.FirebaseOAuthUI; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; - 8D69E23521DD476D00CFA49B /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - INFOPLIST_FILE = FirebaseOAuthUITests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuth\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuthInterop\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseUI\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/OCMock\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/nanopb\"", - "\"$(PODS_CONFIGURATION_BUILD_DIR)/FirebaseAuthUI\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreInternal\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreExtension\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAppCheckInterop\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/RecaptchaInterop\"", - ); - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - "-framework", - "\"GTMSessionFetcher\"", - "-framework", - "\"GoogleUtilities\"", - "-framework", - "\"OCMock\"", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.firebase.FirebaseOAuthUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 8D69E23621DD476D00CFA49B /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - INFOPLIST_FILE = FirebaseOAuthUITests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuth\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuthInterop\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseUI\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/OCMock\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/nanopb\"", - "\"$(PODS_CONFIGURATION_BUILD_DIR)/FirebaseAuthUI\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreInternal\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreExtension\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAppCheckInterop\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/RecaptchaInterop\"", - ); - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - "-framework", - "\"GTMSessionFetcher\"", - "-framework", - "\"GoogleUtilities\"", - "-framework", - "\"OCMock\"", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.firebase.FirebaseOAuthUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 8D69E21721DD476C00CFA49B /* Build configuration list for PBXProject "FirebaseOAuthUI" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 8D69E22F21DD476D00CFA49B /* Debug */, - 8D69E23021DD476D00CFA49B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 8D69E23121DD476D00CFA49B /* Build configuration list for PBXNativeTarget "FirebaseOAuthUI" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 8D69E23221DD476D00CFA49B /* Debug */, - 8D69E23321DD476D00CFA49B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 8D69E23421DD476D00CFA49B /* Build configuration list for PBXNativeTarget "FirebaseOAuthUITests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 8D69E23521DD476D00CFA49B /* Debug */, - 8D69E23621DD476D00CFA49B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 8D69E21421DD476C00CFA49B /* Project object */; -} diff --git a/FirebaseOAuthUI/FirebaseOAuthUI.xcodeproj/xcshareddata/xcschemes/FirebaseOAuthUI.xcscheme b/FirebaseOAuthUI/FirebaseOAuthUI.xcodeproj/xcshareddata/xcschemes/FirebaseOAuthUI.xcscheme deleted file mode 100644 index 86e56de6152..00000000000 --- a/FirebaseOAuthUI/FirebaseOAuthUI.xcodeproj/xcshareddata/xcschemes/FirebaseOAuthUI.xcscheme +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FirebaseOAuthUI/FirebaseOAuthUITests/FirebaseOAuthUITests.m b/FirebaseOAuthUI/FirebaseOAuthUITests/FirebaseOAuthUITests.m deleted file mode 100644 index 4896dd53bc5..00000000000 --- a/FirebaseOAuthUI/FirebaseOAuthUITests/FirebaseOAuthUITests.m +++ /dev/null @@ -1,112 +0,0 @@ -// -// Copyright (c) 2019 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import -#import - -@import FirebaseAuth; -#import -#import - -#import "FUIOAuth.h" - -@interface FirebaseOAuthUITests : XCTestCase -@property (nonatomic, strong) FUIOAuth *provider; -@property (nonatomic, strong) FUIAuth *authUI; -@property (nonatomic, strong) id mockOAuthProvider; -@end - -@implementation FirebaseOAuthUITests - -- (void)setUp { - [super setUp]; - - id authClass = OCMClassMock([FIRAuth class]); - OCMStub(ClassMethod([authClass auth])). - andReturn(authClass); - - id appClass = OCMClassMock([FIRApp class]); - OCMStub([authClass app]).andReturn(appClass); - - FIRAuth *auth = [FIRAuth auth]; - self.authUI = [FUIAuth authUIWithAuth:auth]; - - self.mockOAuthProvider = OCMClassMock([FIROAuthProvider class]); - OCMStub(ClassMethod([_mockOAuthProvider providerWithProviderID:OCMOCK_ANY auth:self.authUI.auth])). - andReturn(_mockOAuthProvider); -} - -- (void)tearDown { - self.provider = nil; - self.authUI = nil; - self.mockOAuthProvider = nil; - [super tearDown]; -} - -- (void)testProviderValidity { - self.provider = [[FUIOAuth alloc] initWithAuthUI:self.authUI - providerID:@"dummy" - buttonLabelText:@"Sign in with dummy" - shortName:@"Dummy" - buttonColor:[UIColor clearColor] - iconImage:[UIImage imageNamed:@""] - scopes:@[] - customParameters:@{} - loginHintKey:nil]; - - XCTAssertNotNil(self.provider); - XCTAssertNil(self.provider.icon); - XCTAssertNotNil(self.provider.signInLabel); - XCTAssertNotNil(self.provider.buttonBackgroundColor); - XCTAssertNotNil(self.provider.buttonTextColor); - XCTAssertNotNil(self.provider.providerID); - XCTAssertNotNil(self.provider.shortName); - XCTAssertTrue(self.provider.signInLabel.length != 0); - XCTAssertNil(self.provider.accessToken); - XCTAssertNil(self.provider.idToken); - - OCMVerify([self.mockOAuthProvider providerWithProviderID:@"dummy" auth:self.authUI.auth]); -} - -- (void)testAppleUsesEmulatorCreatesOAuthProvider { - [self.authUI useEmulatorWithHost:@"host" port:12345]; - - self.provider = [[FUIOAuth alloc] initWithAuthUI:self.authUI - providerID:@"apple.com" - buttonLabelText:@"Sign in with Apple" - shortName:@"Apple" - buttonColor:[UIColor clearColor] - iconImage:[UIImage imageNamed:@""] - scopes:@[] - customParameters:@{} - loginHintKey:nil]; - OCMVerify([self.mockOAuthProvider providerWithProviderID:@"apple.com" auth:self.authUI.auth]); -} - -- (void)testAppleNoUseEmulatorNoOAuthProvider { - self.provider = [[FUIOAuth alloc] initWithAuthUI:self.authUI - providerID:@"apple.com" - buttonLabelText:@"Sign in with Apple" - shortName:@"Apple" - buttonColor:[UIColor clearColor] - iconImage:[UIImage imageNamed:@""] - scopes:@[] - customParameters:@{} - loginHintKey:nil]; - OCMVerify(never(), [self.mockOAuthProvider providerWithProviderID:@"apple.com" auth:self.authUI.auth]); -} - -@end diff --git a/FirebaseOAuthUI/FirebaseOAuthUITests/Info.plist b/FirebaseOAuthUI/FirebaseOAuthUITests/Info.plist deleted file mode 100644 index ba72822e872..00000000000 --- a/FirebaseOAuthUI/FirebaseOAuthUITests/Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - - diff --git a/FirebaseOAuthUI/Podfile b/FirebaseOAuthUI/Podfile deleted file mode 100644 index eb6235ebc54..00000000000 --- a/FirebaseOAuthUI/Podfile +++ /dev/null @@ -1,16 +0,0 @@ -# source 'sso://cpdc-internal/firebase' -source 'https://github.com/CocoaPods/Specs.git' - -platform :ios, '13.0' - -target 'FirebaseOAuthUI' do - use_frameworks! - - pod 'FirebaseAuthUI', :path => '../' - - target 'FirebaseOAuthUITests' do - inherit! :search_paths - pod 'OCMock' - end - -end diff --git a/FirebaseOAuthUI/Sources/FUIOAuth.m b/FirebaseOAuthUI/Sources/FUIOAuth.m deleted file mode 100644 index 452db652824..00000000000 --- a/FirebaseOAuthUI/Sources/FUIOAuth.m +++ /dev/null @@ -1,395 +0,0 @@ -// -// Copyright (c) 2019 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -@import FirebaseAuth; - -#import "FirebaseOAuthUI/Sources/Public/FirebaseOAuthUI/FUIOAuth.h" - -#import -#import - -/** @var kTableName - @brief The name of the strings table to search for localized strings. - */ -static NSString *const kTableName = @"FirebaseOAuthUI"; - -/** @var kBundleName - @brief The name of the bundle to search for resources. - */ -#if SWIFT_PACKAGE -static NSString *const kBundleName = @"FirebaseUI_FirebaseOAuthUI"; -#else -static NSString *const kBundleName = @"FirebaseOAuthUI"; -#endif // SWIFT_PACKAGE - -/** @var kSignInAsGuest - @brief The string key for localized button text. - */ -static NSString *const kSignInAsGuest = @"SignInAsGuest"; - -NS_ASSUME_NONNULL_BEGIN - -@interface FUIOAuth () { - FUIAuthProviderSignInCompletionBlock _providerSignInCompletion; -} - -/** @property authUI - @brief FUIAuth instance of the application. - */ -@property(nonatomic, strong) FUIAuth *authUI; - -/** @property presentingViewController - @brief The presenting view controller for interactive sign-in. - */ -@property(nonatomic, strong) UIViewController *presentingViewController; - -/** @property providerID - @brief A unique identifier for the provider. - */ -@property(nonatomic, copy, nullable) NSString *providerID; - -/** @property signInLabel - @brief A localized label for the provider's sign-in button. - */ -@property(nonatomic, copy) NSString *signInLabel; - -/** @property shortName - @brief A short display name for the provider. - */ -@property(nonatomic, copy) NSString *shortName; - -/** @property icon - @brief The icon image of the provider. - */ -@property(nonatomic, strong) UIImage *icon; - -/** @property buttonBackgroundColor - @brief The background color that should be used for the sign in button of the provider. - */ -@property(nonatomic, strong) UIColor *buttonBackgroundColor; - -/** @property buttonTextColor - @brief The text color that should be used for the sign in button of the provider. - */ -@property(nonatomic, readwrite) UIColor *buttonTextColor; - -/** @property scopes - @brief Array used to configure the OAuth scopes. - */ -@property(nonatomic, copy, nullable) NSArray *scopes; - -/** @property customParameters - @brief Dictionary used to configure the OAuth custom parameters. - */ -@property(nonatomic, copy, nullable) NSDictionary *customParameters; - -/** @property loginHintKey - @brief The key of the custom parameter, with which the login hint can be passed to the IdP. - */ -@property(nonatomic, copy, nullable) NSString *loginHintKey; - -/** @property currentNonce - @brief The nonce for the current Sign in with Apple session, if any. - */ -@property(nonatomic, copy, nullable) NSString *currentNonce; - -/** @property provider - @brief The OAuth provider that does the actual sign in. - */ -@property(nonatomic, strong) FIROAuthProvider *provider; - -@end - -@implementation FUIOAuth - -+ (NSBundle *)bundle { - return [FUIAuthUtils bundleNamed:kBundleName - inFrameworkBundle:[NSBundle bundleForClass:[self class]]]; -} - -- (instancetype)initWithAuthUI:(FUIAuth *)authUI - providerID:(NSString *)providerID - buttonLabelText:(NSString *)buttonLabelText - shortName:(NSString *)shortName - buttonColor:(UIColor *)buttonColor - iconImage:(UIImage *)iconImage - scopes:(nullable NSArray *)scopes - customParameters:(nullable NSDictionary *)customParameters - loginHintKey:(nullable NSString *)loginHintKey { - if (self = [super init]) { - _authUI = authUI; - _providerID = providerID; - _signInLabel = buttonLabelText; - _shortName = shortName; - _buttonBackgroundColor = buttonColor; - _buttonTextColor = [UIColor whiteColor]; - _icon = iconImage; - _scopes = scopes; - _customParameters = customParameters; - _loginHintKey = loginHintKey; - if ((_authUI.isEmulatorEnabled || ![_providerID isEqualToString:@"apple.com"]) && ![_providerID isEqualToString:@"facebook.com"]) { - _provider = [FIROAuthProvider providerWithProviderID:self.providerID auth:_authUI.auth]; - } - } - return self; -} - -+ (FUIOAuth *)twitterAuthProvider { - return [FUIOAuth twitterAuthProviderWithAuthUI:[FUIAuth defaultAuthUI]]; -} - -+ (FUIOAuth *)twitterAuthProviderWithAuthUI:(FUIAuth *)authUI { - return [[FUIOAuth alloc] initWithAuthUI:authUI - providerID:@"twitter.com" - buttonLabelText:@"Sign in with Twitter" - shortName:@"Twitter" - buttonColor:[UIColor colorWithRed:71.0f/255.0f - green:154.0f/255.0f - blue:234.0f/255.0f - alpha:1.0f] - iconImage:[FUIAuthUtils imageNamed:@"ic_twitter" - fromBundle:[FUIOAuth bundle]] - scopes:@[@"user.readwrite"] - customParameters:@{@"prompt" : @"consent"} - loginHintKey:nil]; -} - -+ (FUIOAuth *)githubAuthProvider { - return [FUIOAuth githubAuthProviderWithAuthUI:[FUIAuth defaultAuthUI]]; -} - -+ (FUIOAuth *)githubAuthProviderWithAuthUI:(FUIAuth *)authUI -{ - return [[FUIOAuth alloc] initWithAuthUI:authUI - providerID:@"github.com" - buttonLabelText:@"Sign in with GitHub" - shortName:@"GitHub" - buttonColor:[UIColor colorWithRed:0.2 green:0.2 blue:0.2 alpha:1.0] - iconImage:[FUIAuthUtils imageNamed:@"ic_github" - fromBundle:[FUIOAuth bundle]] - scopes:nil - customParameters:nil - loginHintKey:nil]; -} - -+ (FUIOAuth *)microsoftAuthProvider { - return [FUIOAuth microsoftAuthProviderWithAuthUI:[FUIAuth defaultAuthUI]]; -} - -+ (FUIOAuth *)microsoftAuthProviderWithAuthUI:(FUIAuth *)authUI { - return [[FUIOAuth alloc] initWithAuthUI:authUI - providerID:@"microsoft.com" - buttonLabelText:@"Sign in with Microsoft" - shortName:@"Microsoft" - buttonColor:[UIColor colorWithRed:.18 green:.18 blue:.18 alpha:1.0] - iconImage:[FUIAuthUtils imageNamed:@"ic_microsoft" - fromBundle:[FUIOAuth bundle]] - scopes:@[@"user.readwrite"] - customParameters:@{@"prompt" : @"consent"} - loginHintKey:@"login_hint"]; -} - -+ (FUIOAuth *)yahooAuthProvider { - return [FUIOAuth yahooAuthProviderWithAuthUI:[FUIAuth defaultAuthUI]]; -} - -+ (FUIOAuth *)yahooAuthProviderWithAuthUI:(FUIAuth *)authUI { - return [[FUIOAuth alloc] initWithAuthUI:authUI - providerID:@"yahoo.com" - buttonLabelText:@"Sign in with Yahoo" - shortName:@"Yahoo" - buttonColor:[UIColor colorWithRed:.45 green:.05 blue:.62 alpha:1.0] - iconImage:[FUIAuthUtils imageNamed:@"ic_yahoo" - fromBundle:[FUIOAuth bundle]] - scopes:@[@"user.readwrite"] - customParameters:@{@"prompt" : @"consent"} - loginHintKey:nil]; -} - -+ (FUIOAuth *)appleAuthProvider { - return [FUIOAuth appleAuthProviderWithAuthUI:[FUIAuth defaultAuthUI]]; -} - -+ (FUIOAuth *)appleAuthProviderWithAuthUI:(FUIAuth *)authUI { - UIUserInterfaceStyle style = UITraitCollection.currentTraitCollection.userInterfaceStyle; - return [self appleAuthProviderWithAuthUI:authUI userInterfaceStyle:style]; -} - -+ (FUIOAuth *)appleAuthProviderWithUserInterfaceStyle:(UIUserInterfaceStyle)userInterfaceStyle { - return [FUIOAuth appleAuthProviderWithAuthUI:[FUIAuth defaultAuthUI] userInterfaceStyle:userInterfaceStyle]; -} - -+ (FUIOAuth *)appleAuthProviderWithAuthUI:(FUIAuth *)authUI - userInterfaceStyle:(UIUserInterfaceStyle)userInterfaceStyle { - UIImage *iconImage = [FUIAuthUtils imageNamed:@"ic_apple" - fromBundle:[FUIOAuth bundle]]; - UIColor *buttonColor = [UIColor blackColor]; - UIColor *buttonTextColor = [UIColor whiteColor]; - if (userInterfaceStyle == UIUserInterfaceStyleDark) { - iconImage = [iconImage imageWithTintColor:[UIColor blackColor]]; - buttonColor = [UIColor whiteColor]; - buttonTextColor = [UIColor blackColor]; - } else if (userInterfaceStyle == UIUserInterfaceStyleLight) { - iconImage = [iconImage imageWithTintColor:[UIColor whiteColor]]; - buttonColor = [UIColor blackColor]; - buttonTextColor = [UIColor whiteColor]; - } else { - iconImage = [iconImage imageWithTintColor:[UIColor whiteColor]]; - } - FUIOAuth *provider = [[FUIOAuth alloc] initWithAuthUI:authUI - providerID:@"apple.com" - buttonLabelText:@"Sign in with Apple" - shortName:@"Apple" - buttonColor:buttonColor - iconImage:iconImage - scopes:@[@"name", @"email"] - customParameters:nil - loginHintKey:nil]; - provider.buttonAlignment = FUIButtonAlignmentCenter; - provider.buttonTextColor = buttonTextColor; - return provider; -} - -#pragma mark - FUIAuthProvider - -/** @fn accessToken: - @brief OAuth token is matched by FirebaseUI User Access Token - */ -- (nullable NSString *)accessToken { - return nil; -} - -/** @fn idToken: - @brief OAuth Token Secret is matched by FirebaseUI User Id Token - */ -- (nullable NSString *)idToken { - return nil; -} - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-implementations" -- (void)signInWithEmail:(nullable NSString *)email - presentingViewController:(nullable UIViewController *)presentingViewController - completion:(nullable FUIAuthProviderSignInCompletionBlock)completion { - [self signInWithDefaultValue:email - presentingViewController:presentingViewController - completion:completion]; -} -#pragma clang diagnostic pop - -- (void)signInWithDefaultValue:(nullable NSString *)defaultValue - presentingViewController:(nullable UIViewController *)presentingViewController - completion:(nullable FUIAuthProviderSignInCompletionBlock)completion { - self.presentingViewController = presentingViewController; - FIROAuthProvider *provider = self.provider; - _providerSignInCompletion = completion; - - if ([self.providerID isEqualToString:@"apple.com"] && !self.authUI.isEmulatorEnabled) { - if (@available(iOS 13.0, *)) { - NSString *nonce = [FUIAuthUtils randomNonce]; - self.currentNonce = nonce; - ASAuthorizationAppleIDRequest *request = [[[ASAuthorizationAppleIDProvider alloc] init] createRequest]; - request.requestedScopes = @[ASAuthorizationScopeFullName, ASAuthorizationScopeEmail]; - request.nonce = [FUIAuthUtils stringBySHA256HashingString:nonce]; - ASAuthorizationController* controller = [[ASAuthorizationController alloc] initWithAuthorizationRequests:@[request]]; - controller.delegate = self; - controller.presentationContextProvider = self; - [controller performRequests]; - } else { - NSLog(@"Sign in with Apple is only available on iOS 13+."); - } - } else { - provider.scopes = self.scopes; - NSMutableDictionary *customParameters = [NSMutableDictionary dictionary]; - if (self.customParameters.count) { - [customParameters addEntriesFromDictionary:self.customParameters]; - } - if (self.loginHintKey.length && defaultValue.length) { - customParameters[self.loginHintKey] = defaultValue; - } - provider.customParameters = [customParameters copy]; - - [self.provider getCredentialWithUIDelegate:nil - completion:^(FIRAuthCredential *_Nullable credential, - NSError *_Nullable error) { - if (error) { - [FUIAuthBaseViewController showAlertWithMessage:error.localizedDescription - presentingViewController:presentingViewController]; - if (completion) { - completion(nil, error, nil, nil); - } - return; - } - if (completion) { - UIActivityIndicatorView *activityView = - [FUIAuthBaseViewController addActivityIndicator:presentingViewController.view]; - [activityView startAnimating]; - FIRAuthResultCallback result = ^(FIRUser *_Nullable user, - NSError *_Nullable error) { - [activityView stopAnimating]; - [activityView removeFromSuperview]; - }; - completion(credential, nil, result, nil); - } - }]; - } -} - -- (void)signOut { - return; -} - -- (BOOL)handleOpenURL:(NSURL *)URL sourceApplication:(nullable NSString *)sourceApplication { - return NO; -} - -#pragma mark - ASAuthorizationControllerDelegate - -- (void)authorizationController:(ASAuthorizationController *)controller didCompleteWithAuthorization:(ASAuthorization *)authorization API_AVAILABLE(ios(13.0)) { - ASAuthorizationAppleIDCredential *appleIDCredential = authorization.credential; - NSData *rawIdentityToken = appleIDCredential.identityToken; - if (rawIdentityToken == nil) { - // It's pretty awful to not have an error when login is unsuccessful, but Apple's docs - // don't provide any useful information here. - // https://developer.apple.com/documentation/authenticationservices/asauthorizationappleidcredential - NSLog(@"Sign in with Apple completed with authorization, but no jwt: %@", authorization); - _providerSignInCompletion(nil, nil, nil, nil); - } - NSString *idToken = [[NSString alloc] initWithData:appleIDCredential.identityToken encoding:NSUTF8StringEncoding]; - NSString *rawNonce = self.currentNonce; - FIROAuthCredential *credential = [FIROAuthProvider credentialWithProviderID:@"apple.com" - IDToken:idToken - rawNonce:rawNonce]; - _providerSignInCompletion(credential, nil, nil, nil); -} - -- (void)authorizationController:(ASAuthorizationController *)controller didCompleteWithError:(NSError *)error API_AVAILABLE(ios(13.0)) { - NSLog(@"%@", error.description); - // canceled/failed/invalid/Nothandled/Unknown - if (_providerSignInCompletion) { - _providerSignInCompletion(nil, error, nil, nil); - } -} - -#pragma mark - ASAuthorizationControllerPresentationContextProviding - -- (ASPresentationAnchor)presentationAnchorForAuthorizationController:(ASAuthorizationController *)controller API_AVAILABLE(ios(13.0)) { - return self.presentingViewController.view.window; -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebaseOAuthUI/Sources/Info.plist b/FirebaseOAuthUI/Sources/Info.plist deleted file mode 100644 index d3de8eefb69..00000000000 --- a/FirebaseOAuthUI/Sources/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - NSPrincipalClass - - - diff --git a/FirebaseOAuthUI/Sources/Public/FirebaseOAuthUI/FUIOAuth.h b/FirebaseOAuthUI/Sources/Public/FirebaseOAuthUI/FUIOAuth.h deleted file mode 100644 index 79951516d17..00000000000 --- a/FirebaseOAuthUI/Sources/Public/FirebaseOAuthUI/FUIOAuth.h +++ /dev/null @@ -1,133 +0,0 @@ -// -// Copyright (c) 2019 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -@class FUIAuth; - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** @class FUIOAuth - @brief AuthUI components for OAuth Sign In. - */ -@interface FUIOAuth : NSObject - -/** @property buttonAlignment - @brief The alignment of the icon and text of the button. - */ -@property(nonatomic, readwrite) FUIButtonAlignment buttonAlignment; - -/** @fn init - @brief Please use `initWithAuthUI:providerID:providerName:buttonColor:iconImage:scopes: - customParameters:` instead. - */ -- (instancetype)init NS_UNAVAILABLE; - -/** @fn init - @brief Please use `initWithAuthUI:providerID:providerName:buttonColor:iconImage:scopes: - customParameters:` instead. - */ -- (instancetype)initWithAuthUI:(FUIAuth *)authUI NS_UNAVAILABLE; - -/** @fn initWithAuthUI:providerID:buttonLabelText:buttonColor:iconImage:scopes:customParameters: - @brief AuthUI components for OAuth Sign In. - @param authUI The @c FUIAuth instance that manages controllers of this provider. - @param providerID The unique identifier for the provider. - @param buttonLabelText The text label for the sign in button. - @param shortName A short display name for the provider. - @param buttonColor The background color that should be used for the sign in button of the - provider. - @param iconImage The icon image of the provider. - @param scopes Array used to configure the OAuth scopes. - @param customParameters Dictionary used to configure the OAuth custom parameters. - @param loginHintKey The key of the custom parameter, with which the login hint can be passed to - the IdP. - - */ -- (instancetype)initWithAuthUI:(FUIAuth *)authUI - providerID:(NSString *)providerID - buttonLabelText:(NSString *)buttonLabelText - shortName:(NSString *)shortName - buttonColor:(UIColor *)buttonColor - iconImage:(UIImage *)iconImage - scopes:(nullable NSArray *)scopes - customParameters:(nullable NSDictionary *)customParameters - loginHintKey:(nullable NSString *)loginHintKey - NS_DESIGNATED_INITIALIZER; - -/** @fn twitterAuthProvider - @brief Built-in OAuth provider for Twitter. -*/ -+ (FUIOAuth *)twitterAuthProvider; - -/** @fn twitterAuthProvider - @brief Built-in OAuth provider for Twitter. -*/ -+ (FUIOAuth *)twitterAuthProviderWithAuthUI:(FUIAuth *)authUI; - -/** @fn githubAuthProvider - @brief Built-in OAuth provider for Github. -*/ -+ (FUIOAuth *)githubAuthProvider; - -/** @fn githubAuthProvider - @brief Built-in OAuth provider for Github. -*/ -+ (FUIOAuth *)githubAuthProviderWithAuthUI:(FUIAuth *)authUI; - -/** @fn microsoftAuthProvider - @brief Built-in OAuth provider for Microsoft. -*/ -+ (FUIOAuth *)microsoftAuthProvider; - -/** @fn microsoftAuthProvider - @brief Built-in OAuth provider for Microsoft. -*/ -+ (FUIOAuth *)microsoftAuthProviderWithAuthUI:(FUIAuth *)authUI; - -/** @fn yahooAuthProvider - @brief Built-in OAuth provider for Yahoo. -*/ -+ (FUIOAuth *)yahooAuthProvider; - -/** @fn yahooAuthProvider - @brief Built-in OAuth provider for Yahoo. -*/ -+ (FUIOAuth *)yahooAuthProviderWithAuthUI:(FUIAuth *)authUI; - -/** @fn appleAuthProvider - @brief Built-in OAuth provider for Apple. -*/ -+ (FUIOAuth *)appleAuthProvider API_AVAILABLE(ios(13.0)); - -/** @fn appleAuthProvider - @brief Built-in OAuth provider for Apple. -*/ -+ (FUIOAuth *)appleAuthProviderWithAuthUI:(FUIAuth *)authUI API_AVAILABLE(ios(13.0)); - -/** @fn appleAuthProvider - @brief Built-in OAuth provider with custom UserInterfaceStyle for Apple. -*/ -+ (FUIOAuth *)appleAuthProviderWithUserInterfaceStyle:(UIUserInterfaceStyle)userInterfaceStyle API_AVAILABLE(ios(13.0)); - -/** @fn appleAuthProvider - @brief Built-in OAuth provider with custom UserInterfaceStyle for Apple. -*/ -+ (FUIOAuth *)appleAuthProviderWithAuthUI:(FUIAuth *)authUI userInterfaceStyle:(UIUserInterfaceStyle)userInterfaceStyle API_AVAILABLE(ios(13.0)); - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebaseOAuthUI/Sources/Public/FirebaseOAuthUI/FirebaseOAuthUI.h b/FirebaseOAuthUI/Sources/Public/FirebaseOAuthUI/FirebaseOAuthUI.h deleted file mode 100644 index 3d5aa8aacfd..00000000000 --- a/FirebaseOAuthUI/Sources/Public/FirebaseOAuthUI/FirebaseOAuthUI.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// Copyright (c) 2019 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -//! Project version number for FirebaseOAuthUI. -FOUNDATION_EXPORT double FirebaseOAuthUIVersionNumber; - -//! Project version string for FirebaseOAuthUI. -FOUNDATION_EXPORT const unsigned char FirebaseOAuthUIVersionString[]; - -#import "FUIOAuth.h" - - diff --git a/FirebaseOAuthUI/Sources/Resources/ic_apple.png b/FirebaseOAuthUI/Sources/Resources/ic_apple.png deleted file mode 100644 index 49f66fcf10a..00000000000 Binary files a/FirebaseOAuthUI/Sources/Resources/ic_apple.png and /dev/null differ diff --git a/FirebaseOAuthUI/Sources/Resources/ic_apple@2x.png b/FirebaseOAuthUI/Sources/Resources/ic_apple@2x.png deleted file mode 100644 index 5a7f9023cb0..00000000000 Binary files a/FirebaseOAuthUI/Sources/Resources/ic_apple@2x.png and /dev/null differ diff --git a/FirebaseOAuthUI/Sources/Resources/ic_apple@3x.png b/FirebaseOAuthUI/Sources/Resources/ic_apple@3x.png deleted file mode 100644 index 42e64f962cb..00000000000 Binary files a/FirebaseOAuthUI/Sources/Resources/ic_apple@3x.png and /dev/null differ diff --git a/FirebaseOAuthUI/Sources/Resources/ic_github.png b/FirebaseOAuthUI/Sources/Resources/ic_github.png deleted file mode 100644 index cae7a5ddfc2..00000000000 Binary files a/FirebaseOAuthUI/Sources/Resources/ic_github.png and /dev/null differ diff --git a/FirebaseOAuthUI/Sources/Resources/ic_github@2x.png b/FirebaseOAuthUI/Sources/Resources/ic_github@2x.png deleted file mode 100644 index acd642bc19f..00000000000 Binary files a/FirebaseOAuthUI/Sources/Resources/ic_github@2x.png and /dev/null differ diff --git a/FirebaseOAuthUI/Sources/Resources/ic_github@3x.png b/FirebaseOAuthUI/Sources/Resources/ic_github@3x.png deleted file mode 100644 index ffcfd198a44..00000000000 Binary files a/FirebaseOAuthUI/Sources/Resources/ic_github@3x.png and /dev/null differ diff --git a/FirebaseOAuthUI/Sources/Resources/ic_microsoft.png b/FirebaseOAuthUI/Sources/Resources/ic_microsoft.png deleted file mode 100644 index 3a57a3e967a..00000000000 Binary files a/FirebaseOAuthUI/Sources/Resources/ic_microsoft.png and /dev/null differ diff --git a/FirebaseOAuthUI/Sources/Resources/ic_microsoft@2x.png b/FirebaseOAuthUI/Sources/Resources/ic_microsoft@2x.png deleted file mode 100644 index baf89791056..00000000000 Binary files a/FirebaseOAuthUI/Sources/Resources/ic_microsoft@2x.png and /dev/null differ diff --git a/FirebaseOAuthUI/Sources/Resources/ic_microsoft@3x.png b/FirebaseOAuthUI/Sources/Resources/ic_microsoft@3x.png deleted file mode 100644 index ca78fa69de5..00000000000 Binary files a/FirebaseOAuthUI/Sources/Resources/ic_microsoft@3x.png and /dev/null differ diff --git a/FirebaseOAuthUI/Sources/Resources/ic_twitter.png b/FirebaseOAuthUI/Sources/Resources/ic_twitter.png deleted file mode 100644 index f1d8c9b4c65..00000000000 Binary files a/FirebaseOAuthUI/Sources/Resources/ic_twitter.png and /dev/null differ diff --git a/FirebaseOAuthUI/Sources/Resources/ic_twitter@2x.png b/FirebaseOAuthUI/Sources/Resources/ic_twitter@2x.png deleted file mode 100644 index 66f60060d0e..00000000000 Binary files a/FirebaseOAuthUI/Sources/Resources/ic_twitter@2x.png and /dev/null differ diff --git a/FirebaseOAuthUI/Sources/Resources/ic_twitter@3x.png b/FirebaseOAuthUI/Sources/Resources/ic_twitter@3x.png deleted file mode 100644 index 5a17a16a498..00000000000 Binary files a/FirebaseOAuthUI/Sources/Resources/ic_twitter@3x.png and /dev/null differ diff --git a/FirebaseOAuthUI/Sources/Resources/ic_yahoo.png b/FirebaseOAuthUI/Sources/Resources/ic_yahoo.png deleted file mode 100644 index 3d0060050d2..00000000000 Binary files a/FirebaseOAuthUI/Sources/Resources/ic_yahoo.png and /dev/null differ diff --git a/FirebaseOAuthUI/Sources/Resources/ic_yahoo@2x.png b/FirebaseOAuthUI/Sources/Resources/ic_yahoo@2x.png deleted file mode 100644 index 0deffb137a2..00000000000 Binary files a/FirebaseOAuthUI/Sources/Resources/ic_yahoo@2x.png and /dev/null differ diff --git a/FirebaseOAuthUI/Sources/Resources/ic_yahoo@3x.png b/FirebaseOAuthUI/Sources/Resources/ic_yahoo@3x.png deleted file mode 100644 index f3bf49ed073..00000000000 Binary files a/FirebaseOAuthUI/Sources/Resources/ic_yahoo@3x.png and /dev/null differ diff --git a/FirebasePhoneAuthUI.podspec b/FirebasePhoneAuthUI.podspec deleted file mode 100644 index ffdb3b8888a..00000000000 --- a/FirebasePhoneAuthUI.podspec +++ /dev/null @@ -1,27 +0,0 @@ -Pod::Spec.new do |s| - s.name = 'FirebasePhoneAuthUI' - s.version = '15.1.0' - s.summary = 'A phone auth provider for FirebaseAuthUI.' - s.homepage = 'https://github.com/firebase/FirebaseUI-iOS' - s.license = { :type => 'Apache 2.0', :file => 'LICENSE' } - s.source = { :git => 'https://github.com/firebase/FirebaseUI-iOS.git', :tag => 'v' + s.version.to_s} - s.author = 'Firebase' - s.platform = :ios - s.ios.deployment_target = '13.0' - s.ios.framework = 'UIKit' - s.requires_arc = true - s.cocoapods_version = '>= 1.8.0' - s.pod_target_xcconfig = { - 'HEADER_SEARCH_PATHS' => '"${PODS_TARGET_SRCROOT}"', - } - s.swift_version = '6.0' - - s.public_header_files = 'FirebasePhoneAuthUI/Sources/Public/FirebasePhoneAuthUI/*.h' - s.source_files = 'FirebasePhoneAuthUI/Sources/**/*.{h,m}' - s.dependency 'FirebaseAuth' - s.dependency 'FirebaseAuthUI', '~> 15.0' - s.resource_bundles = { - 'FirebasePhoneAuthUI' => ['FirebasePhoneAuthUI/Sources/{Resources,Strings}/*.{xib,json,lproj,png}'] - } - -end diff --git a/FirebasePhoneAuthUI/FirebasePhoneAuthUI.xcodeproj/project.pbxproj b/FirebasePhoneAuthUI/FirebasePhoneAuthUI.xcodeproj/project.pbxproj deleted file mode 100644 index c47f3b34d87..00000000000 --- a/FirebasePhoneAuthUI/FirebasePhoneAuthUI.xcodeproj/project.pbxproj +++ /dev/null @@ -1,937 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 50; - objects = { - -/* Begin PBXBuildFile section */ - 8D69E54B21DE915A00CFA49B /* FirebasePhoneAuthUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8D69E54121DE915A00CFA49B /* FirebasePhoneAuthUI.framework */; }; - 8D69E55021DE915A00CFA49B /* FirebasePhoneAuthUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E54F21DE915A00CFA49B /* FirebasePhoneAuthUITests.m */; }; - 8D69E55221DE915A00CFA49B /* FirebasePhoneAuthUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E54421DE915A00CFA49B /* FirebasePhoneAuthUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8D69E5D221DE91D400CFA49B /* FUIPhoneAuthStrings.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E55B21DE91D200CFA49B /* FUIPhoneAuthStrings.m */; }; - 8D69E5D321DE91D400CFA49B /* FUIPrivacyAndTermsOfServiceView+PhoneAuth.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E55C21DE91D200CFA49B /* FUIPrivacyAndTermsOfServiceView+PhoneAuth.h */; }; - 8D69E5D421DE91D400CFA49B /* FirebasePhoneAuthUI.strings in Resources */ = {isa = PBXBuildFile; fileRef = 8D69E55E21DE91D200CFA49B /* FirebasePhoneAuthUI.strings */; }; - 8D69E5D621DE91D400CFA49B /* ic_phone.png in Resources */ = {isa = PBXBuildFile; fileRef = 8D69E5B521DE91D300CFA49B /* ic_phone.png */; }; - 8D69E5D721DE91D400CFA49B /* ic_phone@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8D69E5B621DE91D300CFA49B /* ic_phone@3x.png */; }; - 8D69E5D821DE91D400CFA49B /* ic_phone@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8D69E5B721DE91D300CFA49B /* ic_phone@2x.png */; }; - 8D69E5D921DE91D400CFA49B /* country-codes.json in Resources */ = {isa = PBXBuildFile; fileRef = 8D69E5B821DE91D300CFA49B /* country-codes.json */; }; - 8D69E5DA21DE91D400CFA49B /* FUIPhoneAuth.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E5B921DE91D300CFA49B /* FUIPhoneAuth.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8D69E5DB21DE91D400CFA49B /* FUIPhoneAuthStrings.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E5BA21DE91D300CFA49B /* FUIPhoneAuthStrings.h */; }; - 8D69E5DC21DE91D400CFA49B /* FUICodeField.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E5BB21DE91D300CFA49B /* FUICodeField.m */; }; - 8D69E5DD21DE91D400CFA49B /* FUICollationForCountries.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E5BD21DE91D300CFA49B /* FUICollationForCountries.m */; }; - 8D69E5DE21DE91D400CFA49B /* FUICountryTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E5BE21DE91D300CFA49B /* FUICountryTableViewController.h */; }; - 8D69E5DF21DE91D400CFA49B /* FUICountryCodes.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E5BF21DE91D300CFA49B /* FUICountryCodes.m */; }; - 8D69E5E021DE91D400CFA49B /* FUIFeatureSwitch.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E5C021DE91D300CFA49B /* FUIFeatureSwitch.h */; }; - 8D69E5E121DE91D400CFA49B /* FUIPhoneNumber.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E5C121DE91D300CFA49B /* FUIPhoneNumber.h */; }; - 8D69E5E221DE91D400CFA49B /* FUICountryTableViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8D69E5C221DE91D300CFA49B /* FUICountryTableViewController.xib */; }; - 8D69E5E321DE91D400CFA49B /* FUICountryTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E5C321DE91D300CFA49B /* FUICountryTableViewController.m */; }; - 8D69E5E421DE91D400CFA49B /* FUICollationForCountries.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E5C421DE91D300CFA49B /* FUICollationForCountries.h */; }; - 8D69E5E521DE91D400CFA49B /* FUICountryCodes.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E5C521DE91D300CFA49B /* FUICountryCodes.h */; }; - 8D69E5E621DE91D400CFA49B /* FUIPhoneNumber.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E5C621DE91D300CFA49B /* FUIPhoneNumber.m */; }; - 8D69E5E721DE91D400CFA49B /* FUIFeatureSwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E5C721DE91D300CFA49B /* FUIFeatureSwitch.m */; }; - 8D69E5E821DE91D400CFA49B /* FUIPhoneEntryViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E5C821DE91D300CFA49B /* FUIPhoneEntryViewController.m */; }; - 8D69E5E921DE91D400CFA49B /* FUIPhoneVerificationViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E5C921DE91D300CFA49B /* FUIPhoneVerificationViewController.h */; }; - 8D69E5EA21DE91D400CFA49B /* FUIPhoneVerificationViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8D69E5CA21DE91D300CFA49B /* FUIPhoneVerificationViewController.xib */; }; - 8D69E5EB21DE91D400CFA49B /* FUIPhoneEntryViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8D69E5CB21DE91D300CFA49B /* FUIPhoneEntryViewController.xib */; }; - 8D69E5EC21DE91D400CFA49B /* FUIPhoneAuth_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E5CC21DE91D300CFA49B /* FUIPhoneAuth_Internal.h */; }; - 8D69E5ED21DE91D400CFA49B /* FUIPrivacyAndTermsOfServiceView+PhoneAuth.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E5CD21DE91D300CFA49B /* FUIPrivacyAndTermsOfServiceView+PhoneAuth.m */; }; - 8D69E5EE21DE91D400CFA49B /* FUIPhoneVerificationViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E5CE21DE91D300CFA49B /* FUIPhoneVerificationViewController.m */; }; - 8D69E5EF21DE91D400CFA49B /* FUIPhoneAuth.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E5CF21DE91D300CFA49B /* FUIPhoneAuth.m */; }; - 8D69E5F021DE91D400CFA49B /* FUICodeField.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E5D021DE91D300CFA49B /* FUICodeField.h */; }; - 8D69E5F121DE91D400CFA49B /* FUIPhoneEntryViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D69E5D121DE91D300CFA49B /* FUIPhoneEntryViewController.h */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 8D69E54C21DE915A00CFA49B /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 8D69E53821DE915A00CFA49B /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8D69E54021DE915A00CFA49B; - remoteInfo = FirebasePhoneAuthUI; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 8D69E54121DE915A00CFA49B /* FirebasePhoneAuthUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FirebasePhoneAuthUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 8D69E54421DE915A00CFA49B /* FirebasePhoneAuthUI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FirebasePhoneAuthUI.h; sourceTree = ""; }; - 8D69E54521DE915A00CFA49B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 8D69E54A21DE915A00CFA49B /* FirebasePhoneAuthUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FirebasePhoneAuthUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 8D69E54F21DE915A00CFA49B /* FirebasePhoneAuthUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FirebasePhoneAuthUITests.m; sourceTree = ""; }; - 8D69E55121DE915A00CFA49B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 8D69E55B21DE91D200CFA49B /* FUIPhoneAuthStrings.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUIPhoneAuthStrings.m; sourceTree = ""; }; - 8D69E55C21DE91D200CFA49B /* FUIPrivacyAndTermsOfServiceView+PhoneAuth.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "FUIPrivacyAndTermsOfServiceView+PhoneAuth.h"; sourceTree = ""; }; - 8D69E55F21DE91D200CFA49B /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/FirebasePhoneAuthUI.strings; sourceTree = ""; }; - 8D69E56021DE91D200CFA49B /* ur */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ur; path = ur.lproj/FirebasePhoneAuthUI.strings; sourceTree = ""; }; - 8D69E56121DE91D200CFA49B /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/FirebasePhoneAuthUI.strings; sourceTree = ""; }; - 8D69E56221DE91D200CFA49B /* es-SV */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-SV"; path = "es-SV.lproj/FirebasePhoneAuthUI.strings"; sourceTree = ""; }; - 8D69E56321DE91D200CFA49B /* zh-Hant-TW */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant-TW"; path = "zh-Hant-TW.lproj/FirebasePhoneAuthUI.strings"; sourceTree = ""; }; - 8D69E56421DE91D200CFA49B /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/FirebasePhoneAuthUI.strings; sourceTree = ""; }; - 8D69E56521DE91D200CFA49B /* el */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = el; path = el.lproj/FirebasePhoneAuthUI.strings; sourceTree = ""; }; - 8D69E56621DE91D200CFA49B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/FirebasePhoneAuthUI.strings"; sourceTree = ""; }; - 8D69E56721DE91D200CFA49B /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/FirebasePhoneAuthUI.strings; sourceTree = ""; }; - 8D69E56821DE91D200CFA49B /* fa */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fa; path = fa.lproj/FirebasePhoneAuthUI.strings; sourceTree = ""; }; - 8D69E56921DE91D200CFA49B /* mr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = mr; path = mr.lproj/FirebasePhoneAuthUI.strings; sourceTree = ""; }; - 8D69E56A21DE91D200CFA49B /* es-GT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-GT"; path = "es-GT.lproj/FirebasePhoneAuthUI.strings"; sourceTree = ""; }; - 8D69E56B21DE91D200CFA49B /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/FirebasePhoneAuthUI.strings; sourceTree = ""; }; - 8D69E56C21DE91D200CFA49B /* en-CA */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-CA"; path = "en-CA.lproj/FirebasePhoneAuthUI.strings"; sourceTree = ""; }; - 8D69E56D21DE91D200CFA49B /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/FirebasePhoneAuthUI.strings; sourceTree = ""; }; - 8D69E56E21DE91D200CFA49B /* es-PY */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-PY"; path = "es-PY.lproj/FirebasePhoneAuthUI.strings"; sourceTree = ""; }; - 8D69E56F21DE91D200CFA49B /* gu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = gu; path = gu.lproj/FirebasePhoneAuthUI.strings; sourceTree = ""; }; - 8D69E57021DE91D200CFA49B /* kn */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = kn; path = kn.lproj/FirebasePhoneAuthUI.strings; sourceTree = ""; }; - 8D69E57121DE91D200CFA49B /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/FirebasePhoneAuthUI.strings; sourceTree = ""; }; - 8D69E57221DE91D200CFA49B /* es-US */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-US"; path = "es-US.lproj/FirebasePhoneAuthUI.strings"; sourceTree = ""; }; - 8D69E57321DE91D200CFA49B /* en-GB */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-GB"; path = "en-GB.lproj/FirebasePhoneAuthUI.strings"; sourceTree = ""; }; - 8D69E57421DE91D200CFA49B /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/FirebasePhoneAuthUI.strings; sourceTree = ""; }; - 8D69E57521DE91D200CFA49B /* es-VE */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-VE"; path = "es-VE.lproj/FirebasePhoneAuthUI.strings"; sourceTree = ""; }; - 8D69E57621DE91D200CFA49B /* es-CL */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-CL"; path = "es-CL.lproj/FirebasePhoneAuthUI.strings"; sourceTree = ""; }; - 8D69E57721DE91D200CFA49B /* sl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sl; path = sl.lproj/FirebasePhoneAuthUI.strings; sourceTree = ""; }; - 8D69E57821DE91D200CFA49B /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/FirebasePhoneAuthUI.strings; sourceTree = ""; }; - 8D69E57921DE91D200CFA49B /* es-419 */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-419"; path = "es-419.lproj/FirebasePhoneAuthUI.strings"; sourceTree = ""; }; - 8D69E57A21DE91D200CFA49B /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/FirebasePhoneAuthUI.strings; sourceTree = ""; }; - 8D69E57B21DE91D200CFA49B /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bg; path = bg.lproj/FirebasePhoneAuthUI.strings; sourceTree = ""; }; - 8D69E57C21DE91D200CFA49B /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/FirebasePhoneAuthUI.strings; sourceTree = ""; }; - 8D69E57D21DE91D200CFA49B /* sr-Latn */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "sr-Latn"; path = "sr-Latn.lproj/FirebasePhoneAuthUI.strings"; sourceTree = ""; }; - 8D69E57E21DE91D200CFA49B /* nn-NO */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "nn-NO"; path = "nn-NO.lproj/FirebasePhoneAuthUI.strings"; sourceTree = ""; }; - 8D69E57F21DE91D200CFA49B /* es-PA */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-PA"; path = "es-PA.lproj/FirebasePhoneAuthUI.strings"; sourceTree = ""; }; - 8D69E58021DE91D200CFA49B /* en-SG */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-SG"; path = "en-SG.lproj/FirebasePhoneAuthUI.strings"; sourceTree = ""; }; - 8D69E58121DE91D200CFA49B /* sr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sr; path = sr.lproj/FirebasePhoneAuthUI.strings; sourceTree = ""; }; - 8D69E58221DE91D200CFA49B /* ms */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ms; path = ms.lproj/FirebasePhoneAuthUI.strings; sourceTree = ""; }; - 8D69E58321DE91D200CFA49B /* es-CR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-CR"; path = "es-CR.lproj/FirebasePhoneAuthUI.strings"; sourceTree = ""; }; - 8D69E58421DE91D200CFA49B /* ta */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ta; path = ta.lproj/FirebasePhoneAuthUI.strings; sourceTree = ""; }; - 8D69E58521DE91D200CFA49B /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/FirebasePhoneAuthUI.strings; sourceTree = ""; }; - 8D69E58621DE91D200CFA49B /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/FirebasePhoneAuthUI.strings; sourceTree = ""; }; - 8D69E58721DE91D200CFA49B /* es-AR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-AR"; path = "es-AR.lproj/FirebasePhoneAuthUI.strings"; sourceTree = ""; }; - 8D69E58821DE91D200CFA49B /* es-PE */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-PE"; path = "es-PE.lproj/FirebasePhoneAuthUI.strings"; sourceTree = ""; }; - 8D69E58921DE91D200CFA49B /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/FirebasePhoneAuthUI.strings; sourceTree = ""; }; - 8D69E58A21DE91D200CFA49B /* en-IE */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-IE"; path = "en-IE.lproj/FirebasePhoneAuthUI.strings"; sourceTree = ""; }; - 8D69E58B21DE91D200CFA49B /* fil */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fil; path = fil.lproj/FirebasePhoneAuthUI.strings; sourceTree = ""; }; - 8D69E58C21DE91D200CFA49B /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/FirebasePhoneAuthUI.strings"; sourceTree = ""; }; - 8D69E58D21DE91D200CFA49B /* es-CO */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-CO"; path = "es-CO.lproj/FirebasePhoneAuthUI.strings"; sourceTree = ""; }; - 8D69E58E21DE91D200CFA49B /* gsw */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = gsw; path = gsw.lproj/FirebasePhoneAuthUI.strings; sourceTree = ""; }; - 8D69E58F21DE91D200CFA49B /* en-ZA */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-ZA"; path = "en-ZA.lproj/FirebasePhoneAuthUI.strings"; sourceTree = ""; }; - 8D69E59021DE91D200CFA49B /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/FirebasePhoneAuthUI.strings; sourceTree = ""; }; - 8D69E59121DE91D200CFA49B /* es-PR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-PR"; path = "es-PR.lproj/FirebasePhoneAuthUI.strings"; sourceTree = ""; }; - 8D69E59221DE91D200CFA49B /* de-AT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "de-AT"; path = "de-AT.lproj/FirebasePhoneAuthUI.strings"; sourceTree = ""; }; - 8D69E59321DE91D200CFA49B /* en-AU */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-AU"; path = "en-AU.lproj/FirebasePhoneAuthUI.strings"; sourceTree = ""; }; - 8D69E59421DE91D200CFA49B /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/FirebasePhoneAuthUI.strings; sourceTree = ""; }; - 8D69E59521DE91D200CFA49B /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/FirebasePhoneAuthUI.strings; sourceTree = ""; }; - 8D69E59621DE91D200CFA49B /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/FirebasePhoneAuthUI.strings"; sourceTree = ""; }; - 8D69E59721DE91D200CFA49B /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/FirebasePhoneAuthUI.strings; sourceTree = ""; }; - 8D69E59821DE91D200CFA49B /* lv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = lv; path = lv.lproj/FirebasePhoneAuthUI.strings; sourceTree = ""; }; - 8D69E59921DE91D200CFA49B /* es-MX */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-MX"; path = "es-MX.lproj/FirebasePhoneAuthUI.strings"; sourceTree = ""; }; - 8D69E59A21DE91D200CFA49B /* lt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = lt; path = lt.lproj/FirebasePhoneAuthUI.strings; sourceTree = ""; }; - 8D69E59B21DE91D200CFA49B /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/FirebasePhoneAuthUI.strings; sourceTree = ""; }; - 8D69E59C21DE91D200CFA49B /* es-DO */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-DO"; path = "es-DO.lproj/FirebasePhoneAuthUI.strings"; sourceTree = ""; }; - 8D69E59D21DE91D200CFA49B /* fr-CH */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "fr-CH"; path = "fr-CH.lproj/FirebasePhoneAuthUI.strings"; sourceTree = ""; }; - 8D69E59E21DE91D200CFA49B /* es-NI */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-NI"; path = "es-NI.lproj/FirebasePhoneAuthUI.strings"; sourceTree = ""; }; - 8D69E59F21DE91D200CFA49B /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/FirebasePhoneAuthUI.strings; sourceTree = ""; }; - 8D69E5A021DE91D200CFA49B /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/FirebasePhoneAuthUI.strings; sourceTree = ""; }; - 8D69E5A121DE91D200CFA49B /* id */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = id; path = id.lproj/FirebasePhoneAuthUI.strings; sourceTree = ""; }; - 8D69E5A221DE91D200CFA49B /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/FirebasePhoneAuthUI.strings; sourceTree = ""; }; - 8D69E5A321DE91D200CFA49B /* th */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = th; path = th.lproj/FirebasePhoneAuthUI.strings; sourceTree = ""; }; - 8D69E5A421DE91D200CFA49B /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = pt.lproj/FirebasePhoneAuthUI.strings; sourceTree = ""; }; - 8D69E5A521DE91D200CFA49B /* de-CH */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "de-CH"; path = "de-CH.lproj/FirebasePhoneAuthUI.strings"; sourceTree = ""; }; - 8D69E5A621DE91D200CFA49B /* bn */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bn; path = bn.lproj/FirebasePhoneAuthUI.strings; sourceTree = ""; }; - 8D69E5A721DE91D200CFA49B /* es-EC */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-EC"; path = "es-EC.lproj/FirebasePhoneAuthUI.strings"; sourceTree = ""; }; - 8D69E5A821DE91D200CFA49B /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-PT"; path = "pt-PT.lproj/FirebasePhoneAuthUI.strings"; sourceTree = ""; }; - 8D69E5A921DE91D200CFA49B /* es-BO */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-BO"; path = "es-BO.lproj/FirebasePhoneAuthUI.strings"; sourceTree = ""; }; - 8D69E5AA21DE91D200CFA49B /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/FirebasePhoneAuthUI.strings; sourceTree = ""; }; - 8D69E5AB21DE91D200CFA49B /* ln */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ln; path = ln.lproj/FirebasePhoneAuthUI.strings; sourceTree = ""; }; - 8D69E5AC21DE91D200CFA49B /* es-UY */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-UY"; path = "es-UY.lproj/FirebasePhoneAuthUI.strings"; sourceTree = ""; }; - 8D69E5AD21DE91D200CFA49B /* es-HN */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-HN"; path = "es-HN.lproj/FirebasePhoneAuthUI.strings"; sourceTree = ""; }; - 8D69E5AE21DE91D200CFA49B /* hr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hr; path = hr.lproj/FirebasePhoneAuthUI.strings; sourceTree = ""; }; - 8D69E5AF21DE91D200CFA49B /* hi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hi; path = hi.lproj/FirebasePhoneAuthUI.strings; sourceTree = ""; }; - 8D69E5B021DE91D200CFA49B /* ca */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ca; path = ca.lproj/FirebasePhoneAuthUI.strings; sourceTree = ""; }; - 8D69E5B121DE91D200CFA49B /* zh */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = zh; path = zh.lproj/FirebasePhoneAuthUI.strings; sourceTree = ""; }; - 8D69E5B221DE91D200CFA49B /* en-IN */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-IN"; path = "en-IN.lproj/FirebasePhoneAuthUI.strings"; sourceTree = ""; }; - 8D69E5B521DE91D300CFA49B /* ic_phone.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_phone.png; sourceTree = ""; }; - 8D69E5B621DE91D300CFA49B /* ic_phone@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ic_phone@3x.png"; sourceTree = ""; }; - 8D69E5B721DE91D300CFA49B /* ic_phone@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ic_phone@2x.png"; sourceTree = ""; }; - 8D69E5B821DE91D300CFA49B /* country-codes.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "country-codes.json"; sourceTree = ""; }; - 8D69E5B921DE91D300CFA49B /* FUIPhoneAuth.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIPhoneAuth.h; sourceTree = ""; }; - 8D69E5BA21DE91D300CFA49B /* FUIPhoneAuthStrings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIPhoneAuthStrings.h; sourceTree = ""; }; - 8D69E5BB21DE91D300CFA49B /* FUICodeField.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUICodeField.m; sourceTree = ""; }; - 8D69E5BD21DE91D300CFA49B /* FUICollationForCountries.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUICollationForCountries.m; sourceTree = ""; }; - 8D69E5BE21DE91D300CFA49B /* FUICountryTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUICountryTableViewController.h; sourceTree = ""; }; - 8D69E5BF21DE91D300CFA49B /* FUICountryCodes.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUICountryCodes.m; sourceTree = ""; }; - 8D69E5C021DE91D300CFA49B /* FUIFeatureSwitch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIFeatureSwitch.h; sourceTree = ""; }; - 8D69E5C121DE91D300CFA49B /* FUIPhoneNumber.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIPhoneNumber.h; sourceTree = ""; }; - 8D69E5C221DE91D300CFA49B /* FUICountryTableViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = FUICountryTableViewController.xib; sourceTree = ""; }; - 8D69E5C321DE91D300CFA49B /* FUICountryTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUICountryTableViewController.m; sourceTree = ""; }; - 8D69E5C421DE91D300CFA49B /* FUICollationForCountries.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUICollationForCountries.h; sourceTree = ""; }; - 8D69E5C521DE91D300CFA49B /* FUICountryCodes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUICountryCodes.h; sourceTree = ""; }; - 8D69E5C621DE91D300CFA49B /* FUIPhoneNumber.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUIPhoneNumber.m; sourceTree = ""; }; - 8D69E5C721DE91D300CFA49B /* FUIFeatureSwitch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUIFeatureSwitch.m; sourceTree = ""; }; - 8D69E5C821DE91D300CFA49B /* FUIPhoneEntryViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUIPhoneEntryViewController.m; sourceTree = ""; }; - 8D69E5C921DE91D300CFA49B /* FUIPhoneVerificationViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIPhoneVerificationViewController.h; sourceTree = ""; }; - 8D69E5CA21DE91D300CFA49B /* FUIPhoneVerificationViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = FUIPhoneVerificationViewController.xib; sourceTree = ""; }; - 8D69E5CB21DE91D300CFA49B /* FUIPhoneEntryViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = FUIPhoneEntryViewController.xib; sourceTree = ""; }; - 8D69E5CC21DE91D300CFA49B /* FUIPhoneAuth_Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIPhoneAuth_Internal.h; sourceTree = ""; }; - 8D69E5CD21DE91D300CFA49B /* FUIPrivacyAndTermsOfServiceView+PhoneAuth.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "FUIPrivacyAndTermsOfServiceView+PhoneAuth.m"; sourceTree = ""; }; - 8D69E5CE21DE91D300CFA49B /* FUIPhoneVerificationViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUIPhoneVerificationViewController.m; sourceTree = ""; }; - 8D69E5CF21DE91D300CFA49B /* FUIPhoneAuth.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUIPhoneAuth.m; sourceTree = ""; }; - 8D69E5D021DE91D300CFA49B /* FUICodeField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUICodeField.h; sourceTree = ""; }; - 8D69E5D121DE91D300CFA49B /* FUIPhoneEntryViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIPhoneEntryViewController.h; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 8D69E53E21DE915A00CFA49B /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8D69E54721DE915A00CFA49B /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 8D69E54B21DE915A00CFA49B /* FirebasePhoneAuthUI.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 4132CF4029104D5AA0E7B64A /* Pods */ = { - isa = PBXGroup; - children = ( - ); - path = Pods; - sourceTree = ""; - }; - 8D55F167261E6ECE0020DFB0 /* Public */ = { - isa = PBXGroup; - children = ( - 8DF9937A2637697800DC12D1 /* FirebasePhoneAuthUI */, - ); - path = Public; - sourceTree = ""; - }; - 8D69E53721DE915A00CFA49B = { - isa = PBXGroup; - children = ( - 8D69E54321DE915A00CFA49B /* Sources */, - 8D69E54E21DE915A00CFA49B /* FirebasePhoneAuthUITests */, - 8D69E54221DE915A00CFA49B /* Products */, - 4132CF4029104D5AA0E7B64A /* Pods */, - ); - sourceTree = ""; - }; - 8D69E54221DE915A00CFA49B /* Products */ = { - isa = PBXGroup; - children = ( - 8D69E54121DE915A00CFA49B /* FirebasePhoneAuthUI.framework */, - 8D69E54A21DE915A00CFA49B /* FirebasePhoneAuthUITests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - 8D69E54321DE915A00CFA49B /* Sources */ = { - isa = PBXGroup; - children = ( - 8D55F167261E6ECE0020DFB0 /* Public */, - 8D69E5D021DE91D300CFA49B /* FUICodeField.h */, - 8D69E5BB21DE91D300CFA49B /* FUICodeField.m */, - 8D69E5CC21DE91D300CFA49B /* FUIPhoneAuth_Internal.h */, - 8D69E5CF21DE91D300CFA49B /* FUIPhoneAuth.m */, - 8D69E5BA21DE91D300CFA49B /* FUIPhoneAuthStrings.h */, - 8D69E55B21DE91D200CFA49B /* FUIPhoneAuthStrings.m */, - 8D69E5D121DE91D300CFA49B /* FUIPhoneEntryViewController.h */, - 8D69E5C821DE91D300CFA49B /* FUIPhoneEntryViewController.m */, - 8D69E5C921DE91D300CFA49B /* FUIPhoneVerificationViewController.h */, - 8D69E5CE21DE91D300CFA49B /* FUIPhoneVerificationViewController.m */, - 8D69E55C21DE91D200CFA49B /* FUIPrivacyAndTermsOfServiceView+PhoneAuth.h */, - 8D69E5CD21DE91D300CFA49B /* FUIPrivacyAndTermsOfServiceView+PhoneAuth.m */, - 8D69E5BD21DE91D300CFA49B /* FUICollationForCountries.m */, - 8D69E5BE21DE91D300CFA49B /* FUICountryTableViewController.h */, - 8D69E5BF21DE91D300CFA49B /* FUICountryCodes.m */, - 8D69E5C021DE91D300CFA49B /* FUIFeatureSwitch.h */, - 8D69E5C121DE91D300CFA49B /* FUIPhoneNumber.h */, - 8D69E5C321DE91D300CFA49B /* FUICountryTableViewController.m */, - 8D69E5C421DE91D300CFA49B /* FUICollationForCountries.h */, - 8D69E5C521DE91D300CFA49B /* FUICountryCodes.h */, - 8D69E5C621DE91D300CFA49B /* FUIPhoneNumber.m */, - 8D69E5C721DE91D300CFA49B /* FUIFeatureSwitch.m */, - 8D69E5B421DE91D300CFA49B /* Resources */, - 8D69E55D21DE91D200CFA49B /* Strings */, - 8D69E54521DE915A00CFA49B /* Info.plist */, - ); - path = Sources; - sourceTree = ""; - }; - 8D69E54E21DE915A00CFA49B /* FirebasePhoneAuthUITests */ = { - isa = PBXGroup; - children = ( - 8D69E54F21DE915A00CFA49B /* FirebasePhoneAuthUITests.m */, - 8D69E55121DE915A00CFA49B /* Info.plist */, - ); - path = FirebasePhoneAuthUITests; - sourceTree = ""; - }; - 8D69E55D21DE91D200CFA49B /* Strings */ = { - isa = PBXGroup; - children = ( - 8D69E55E21DE91D200CFA49B /* FirebasePhoneAuthUI.strings */, - ); - path = Strings; - sourceTree = ""; - }; - 8D69E5B421DE91D300CFA49B /* Resources */ = { - isa = PBXGroup; - children = ( - 8D69E5CB21DE91D300CFA49B /* FUIPhoneEntryViewController.xib */, - 8D69E5CA21DE91D300CFA49B /* FUIPhoneVerificationViewController.xib */, - 8D69E5C221DE91D300CFA49B /* FUICountryTableViewController.xib */, - 8D69E5B521DE91D300CFA49B /* ic_phone.png */, - 8D69E5B621DE91D300CFA49B /* ic_phone@3x.png */, - 8D69E5B721DE91D300CFA49B /* ic_phone@2x.png */, - 8D69E5B821DE91D300CFA49B /* country-codes.json */, - ); - path = Resources; - sourceTree = ""; - }; - 8DF9937A2637697800DC12D1 /* FirebasePhoneAuthUI */ = { - isa = PBXGroup; - children = ( - 8D69E54421DE915A00CFA49B /* FirebasePhoneAuthUI.h */, - 8D69E5B921DE91D300CFA49B /* FUIPhoneAuth.h */, - ); - path = FirebasePhoneAuthUI; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - 8D69E53C21DE915A00CFA49B /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 8D69E5E921DE91D400CFA49B /* FUIPhoneVerificationViewController.h in Headers */, - 8D69E55221DE915A00CFA49B /* FirebasePhoneAuthUI.h in Headers */, - 8D69E5DE21DE91D400CFA49B /* FUICountryTableViewController.h in Headers */, - 8D69E5DB21DE91D400CFA49B /* FUIPhoneAuthStrings.h in Headers */, - 8D69E5F121DE91D400CFA49B /* FUIPhoneEntryViewController.h in Headers */, - 8D69E5DA21DE91D400CFA49B /* FUIPhoneAuth.h in Headers */, - 8D69E5E521DE91D400CFA49B /* FUICountryCodes.h in Headers */, - 8D69E5E421DE91D400CFA49B /* FUICollationForCountries.h in Headers */, - 8D69E5E021DE91D400CFA49B /* FUIFeatureSwitch.h in Headers */, - 8D69E5EC21DE91D400CFA49B /* FUIPhoneAuth_Internal.h in Headers */, - 8D69E5D321DE91D400CFA49B /* FUIPrivacyAndTermsOfServiceView+PhoneAuth.h in Headers */, - 8D69E5E121DE91D400CFA49B /* FUIPhoneNumber.h in Headers */, - 8D69E5F021DE91D400CFA49B /* FUICodeField.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - 8D69E54021DE915A00CFA49B /* FirebasePhoneAuthUI */ = { - isa = PBXNativeTarget; - buildConfigurationList = 8D69E55521DE915A00CFA49B /* Build configuration list for PBXNativeTarget "FirebasePhoneAuthUI" */; - buildPhases = ( - 8D69E53C21DE915A00CFA49B /* Headers */, - 8D69E53D21DE915A00CFA49B /* Sources */, - 8D69E53E21DE915A00CFA49B /* Frameworks */, - 8D69E53F21DE915A00CFA49B /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = FirebasePhoneAuthUI; - productName = FirebasePhoneAuthUI; - productReference = 8D69E54121DE915A00CFA49B /* FirebasePhoneAuthUI.framework */; - productType = "com.apple.product-type.framework"; - }; - 8D69E54921DE915A00CFA49B /* FirebasePhoneAuthUITests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 8D69E55821DE915A00CFA49B /* Build configuration list for PBXNativeTarget "FirebasePhoneAuthUITests" */; - buildPhases = ( - 8D69E54621DE915A00CFA49B /* Sources */, - 8D69E54721DE915A00CFA49B /* Frameworks */, - 8D69E54821DE915A00CFA49B /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 8D69E54D21DE915A00CFA49B /* PBXTargetDependency */, - ); - name = FirebasePhoneAuthUITests; - productName = FirebasePhoneAuthUITests; - productReference = 8D69E54A21DE915A00CFA49B /* FirebasePhoneAuthUITests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 8D69E53821DE915A00CFA49B /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 1010; - ORGANIZATIONNAME = Firebase; - TargetAttributes = { - 8D69E54021DE915A00CFA49B = { - CreatedOnToolsVersion = 10.1; - }; - 8D69E54921DE915A00CFA49B = { - CreatedOnToolsVersion = 10.1; - }; - }; - }; - buildConfigurationList = 8D69E53B21DE915A00CFA49B /* Build configuration list for PBXProject "FirebasePhoneAuthUI" */; - compatibilityVersion = "Xcode 9.3"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - de, - ur, - he, - "es-SV", - "zh-Hant-TW", - ar, - el, - "zh-Hans", - ja, - fa, - mr, - "es-GT", - "en-CA", - uk, - "es-PY", - gu, - kn, - nb, - "es-US", - "en-GB", - es, - "es-VE", - "es-CL", - sl, - da, - "es-419", - it, - bg, - sk, - "sr-Latn", - "nn-NO", - "es-PA", - "en-SG", - sr, - ms, - "es-CR", - ta, - sv, - cs, - "es-AR", - "es-PE", - ko, - "en-IE", - fil, - "zh-Hant", - "es-CO", - gsw, - "en-ZA", - hu, - "es-PR", - "de-AT", - "en-AU", - tr, - pl, - "pt-BR", - vi, - lv, - "es-MX", - lt, - ru, - "es-DO", - "fr-CH", - "es-NI", - fr, - fi, - id, - nl, - th, - pt, - "de-CH", - bn, - "es-EC", - "pt-PT", - "es-BO", - ro, - ln, - "es-UY", - "es-HN", - hr, - hi, - ca, - zh, - "en-IN", - ); - mainGroup = 8D69E53721DE915A00CFA49B; - productRefGroup = 8D69E54221DE915A00CFA49B /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 8D69E54021DE915A00CFA49B /* FirebasePhoneAuthUI */, - 8D69E54921DE915A00CFA49B /* FirebasePhoneAuthUITests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 8D69E53F21DE915A00CFA49B /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8D69E5D821DE91D400CFA49B /* ic_phone@2x.png in Resources */, - 8D69E5E221DE91D400CFA49B /* FUICountryTableViewController.xib in Resources */, - 8D69E5D621DE91D400CFA49B /* ic_phone.png in Resources */, - 8D69E5EB21DE91D400CFA49B /* FUIPhoneEntryViewController.xib in Resources */, - 8D69E5D921DE91D400CFA49B /* country-codes.json in Resources */, - 8D69E5D721DE91D400CFA49B /* ic_phone@3x.png in Resources */, - 8D69E5D421DE91D400CFA49B /* FirebasePhoneAuthUI.strings in Resources */, - 8D69E5EA21DE91D400CFA49B /* FUIPhoneVerificationViewController.xib in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8D69E54821DE915A00CFA49B /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 8D69E53D21DE915A00CFA49B /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8D69E5E621DE91D400CFA49B /* FUIPhoneNumber.m in Sources */, - 8D69E5DD21DE91D400CFA49B /* FUICollationForCountries.m in Sources */, - 8D69E5ED21DE91D400CFA49B /* FUIPrivacyAndTermsOfServiceView+PhoneAuth.m in Sources */, - 8D69E5E321DE91D400CFA49B /* FUICountryTableViewController.m in Sources */, - 8D69E5DC21DE91D400CFA49B /* FUICodeField.m in Sources */, - 8D69E5EE21DE91D400CFA49B /* FUIPhoneVerificationViewController.m in Sources */, - 8D69E5DF21DE91D400CFA49B /* FUICountryCodes.m in Sources */, - 8D69E5E721DE91D400CFA49B /* FUIFeatureSwitch.m in Sources */, - 8D69E5EF21DE91D400CFA49B /* FUIPhoneAuth.m in Sources */, - 8D69E5D221DE91D400CFA49B /* FUIPhoneAuthStrings.m in Sources */, - 8D69E5E821DE91D400CFA49B /* FUIPhoneEntryViewController.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8D69E54621DE915A00CFA49B /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8D69E55021DE915A00CFA49B /* FirebasePhoneAuthUITests.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 8D69E54D21DE915A00CFA49B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 8D69E54021DE915A00CFA49B /* FirebasePhoneAuthUI */; - targetProxy = 8D69E54C21DE915A00CFA49B /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - 8D69E55E21DE91D200CFA49B /* FirebasePhoneAuthUI.strings */ = { - isa = PBXVariantGroup; - children = ( - 8D69E55F21DE91D200CFA49B /* de */, - 8D69E56021DE91D200CFA49B /* ur */, - 8D69E56121DE91D200CFA49B /* he */, - 8D69E56221DE91D200CFA49B /* es-SV */, - 8D69E56321DE91D200CFA49B /* zh-Hant-TW */, - 8D69E56421DE91D200CFA49B /* ar */, - 8D69E56521DE91D200CFA49B /* el */, - 8D69E56621DE91D200CFA49B /* zh-Hans */, - 8D69E56721DE91D200CFA49B /* ja */, - 8D69E56821DE91D200CFA49B /* fa */, - 8D69E56921DE91D200CFA49B /* mr */, - 8D69E56A21DE91D200CFA49B /* es-GT */, - 8D69E56B21DE91D200CFA49B /* en */, - 8D69E56C21DE91D200CFA49B /* en-CA */, - 8D69E56D21DE91D200CFA49B /* uk */, - 8D69E56E21DE91D200CFA49B /* es-PY */, - 8D69E56F21DE91D200CFA49B /* gu */, - 8D69E57021DE91D200CFA49B /* kn */, - 8D69E57121DE91D200CFA49B /* nb */, - 8D69E57221DE91D200CFA49B /* es-US */, - 8D69E57321DE91D200CFA49B /* en-GB */, - 8D69E57421DE91D200CFA49B /* es */, - 8D69E57521DE91D200CFA49B /* es-VE */, - 8D69E57621DE91D200CFA49B /* es-CL */, - 8D69E57721DE91D200CFA49B /* sl */, - 8D69E57821DE91D200CFA49B /* da */, - 8D69E57921DE91D200CFA49B /* es-419 */, - 8D69E57A21DE91D200CFA49B /* it */, - 8D69E57B21DE91D200CFA49B /* bg */, - 8D69E57C21DE91D200CFA49B /* sk */, - 8D69E57D21DE91D200CFA49B /* sr-Latn */, - 8D69E57E21DE91D200CFA49B /* nn-NO */, - 8D69E57F21DE91D200CFA49B /* es-PA */, - 8D69E58021DE91D200CFA49B /* en-SG */, - 8D69E58121DE91D200CFA49B /* sr */, - 8D69E58221DE91D200CFA49B /* ms */, - 8D69E58321DE91D200CFA49B /* es-CR */, - 8D69E58421DE91D200CFA49B /* ta */, - 8D69E58521DE91D200CFA49B /* sv */, - 8D69E58621DE91D200CFA49B /* cs */, - 8D69E58721DE91D200CFA49B /* es-AR */, - 8D69E58821DE91D200CFA49B /* es-PE */, - 8D69E58921DE91D200CFA49B /* ko */, - 8D69E58A21DE91D200CFA49B /* en-IE */, - 8D69E58B21DE91D200CFA49B /* fil */, - 8D69E58C21DE91D200CFA49B /* zh-Hant */, - 8D69E58D21DE91D200CFA49B /* es-CO */, - 8D69E58E21DE91D200CFA49B /* gsw */, - 8D69E58F21DE91D200CFA49B /* en-ZA */, - 8D69E59021DE91D200CFA49B /* hu */, - 8D69E59121DE91D200CFA49B /* es-PR */, - 8D69E59221DE91D200CFA49B /* de-AT */, - 8D69E59321DE91D200CFA49B /* en-AU */, - 8D69E59421DE91D200CFA49B /* tr */, - 8D69E59521DE91D200CFA49B /* pl */, - 8D69E59621DE91D200CFA49B /* pt-BR */, - 8D69E59721DE91D200CFA49B /* vi */, - 8D69E59821DE91D200CFA49B /* lv */, - 8D69E59921DE91D200CFA49B /* es-MX */, - 8D69E59A21DE91D200CFA49B /* lt */, - 8D69E59B21DE91D200CFA49B /* ru */, - 8D69E59C21DE91D200CFA49B /* es-DO */, - 8D69E59D21DE91D200CFA49B /* fr-CH */, - 8D69E59E21DE91D200CFA49B /* es-NI */, - 8D69E59F21DE91D200CFA49B /* fr */, - 8D69E5A021DE91D200CFA49B /* fi */, - 8D69E5A121DE91D200CFA49B /* id */, - 8D69E5A221DE91D200CFA49B /* nl */, - 8D69E5A321DE91D200CFA49B /* th */, - 8D69E5A421DE91D200CFA49B /* pt */, - 8D69E5A521DE91D200CFA49B /* de-CH */, - 8D69E5A621DE91D200CFA49B /* bn */, - 8D69E5A721DE91D200CFA49B /* es-EC */, - 8D69E5A821DE91D200CFA49B /* pt-PT */, - 8D69E5A921DE91D200CFA49B /* es-BO */, - 8D69E5AA21DE91D200CFA49B /* ro */, - 8D69E5AB21DE91D200CFA49B /* ln */, - 8D69E5AC21DE91D200CFA49B /* es-UY */, - 8D69E5AD21DE91D200CFA49B /* es-HN */, - 8D69E5AE21DE91D200CFA49B /* hr */, - 8D69E5AF21DE91D200CFA49B /* hi */, - 8D69E5B021DE91D200CFA49B /* ca */, - 8D69E5B121DE91D200CFA49B /* zh */, - 8D69E5B221DE91D200CFA49B /* en-IN */, - ); - name = FirebasePhoneAuthUI.strings; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 8D69E55321DE915A00CFA49B /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../\""; - IPHONEOS_DEPLOYMENT_TARGET = 12.1; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 8D69E55421DE915A00CFA49B /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../\""; - IPHONEOS_DEPLOYMENT_TARGET = 12.1; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 8D69E55621DE915A00CFA49B /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Automatic; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Sources/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.firebase.FirebasePhoneAuthUI; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 8D69E55721DE915A00CFA49B /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Automatic; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Sources/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.firebase.FirebasePhoneAuthUI; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; - 8D69E55921DE915A00CFA49B /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - INFOPLIST_FILE = FirebasePhoneAuthUITests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuth\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuthInterop\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseUI\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/nanopb\"", - "\"$(PODS_CONFIGURATION_BUILD_DIR)/FirebaseAuthUI\"", - "\"$(PODS_CONFIGURATION_BUILD_DIR)/FirebaseCoreInternal\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreExtension\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAppCheckInterop\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/RecaptchaInterop\"", - ); - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - "-framework", - "\"Foundation\"", - "-framework", - "\"GTMSessionFetcher\"", - "-framework", - "\"GoogleUtilities\"", - "-framework", - "\"OCMock\"", - "-framework", - "\"SafariServices\"", - "-framework", - "\"Security\"", - "-framework", - "\"UIKit\"", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.firebase.FirebasePhoneAuthUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 8D69E55A21DE915A00CFA49B /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - INFOPLIST_FILE = FirebasePhoneAuthUITests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuth\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuthInterop\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseUI\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/nanopb\"", - "\"$(PODS_CONFIGURATION_BUILD_DIR)/FirebaseAuthUI\"", - "\"$(PODS_CONFIGURATION_BUILD_DIR)/FirebaseCoreInternal\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreExtension\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAppCheckInterop\"", - "\"${PODS_CONFIGURATION_BUILD_DIR}/RecaptchaInterop\"", - ); - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - "-framework", - "\"Foundation\"", - "-framework", - "\"GTMSessionFetcher\"", - "-framework", - "\"GoogleUtilities\"", - "-framework", - "\"OCMock\"", - "-framework", - "\"SafariServices\"", - "-framework", - "\"Security\"", - "-framework", - "\"UIKit\"", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.firebase.FirebasePhoneAuthUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 8D69E53B21DE915A00CFA49B /* Build configuration list for PBXProject "FirebasePhoneAuthUI" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 8D69E55321DE915A00CFA49B /* Debug */, - 8D69E55421DE915A00CFA49B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 8D69E55521DE915A00CFA49B /* Build configuration list for PBXNativeTarget "FirebasePhoneAuthUI" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 8D69E55621DE915A00CFA49B /* Debug */, - 8D69E55721DE915A00CFA49B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 8D69E55821DE915A00CFA49B /* Build configuration list for PBXNativeTarget "FirebasePhoneAuthUITests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 8D69E55921DE915A00CFA49B /* Debug */, - 8D69E55A21DE915A00CFA49B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 8D69E53821DE915A00CFA49B /* Project object */; -} diff --git a/FirebasePhoneAuthUI/FirebasePhoneAuthUI.xcodeproj/xcshareddata/xcschemes/FirebasePhoneAuthUI.xcscheme b/FirebasePhoneAuthUI/FirebasePhoneAuthUI.xcodeproj/xcshareddata/xcschemes/FirebasePhoneAuthUI.xcscheme deleted file mode 100644 index e75675c3d62..00000000000 --- a/FirebasePhoneAuthUI/FirebasePhoneAuthUI.xcodeproj/xcshareddata/xcschemes/FirebasePhoneAuthUI.xcscheme +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FirebasePhoneAuthUI/FirebasePhoneAuthUITests/FirebasePhoneAuthUITests.m b/FirebasePhoneAuthUI/FirebasePhoneAuthUITests/FirebasePhoneAuthUITests.m deleted file mode 100644 index 52ad866692b..00000000000 --- a/FirebasePhoneAuthUI/FirebasePhoneAuthUITests/FirebasePhoneAuthUITests.m +++ /dev/null @@ -1,112 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -#import "FUIAuthUtils.h" -#import -@import FirebaseAuth; -#import -#import -#import "FUIAuthUtils.h" -#import "FUIPhoneAuth_Internal.h" - -@interface FirebasePhoneAuthUITests : XCTestCase -@property (nonatomic, strong) FUIPhoneAuth *provider; -@end - -@implementation FirebasePhoneAuthUITests - -- (void)setUp { - [super setUp]; - - id authUIClass = OCMClassMock([FUIAuth class]); - OCMStub(ClassMethod([authUIClass authUIWithAuth:OCMOCK_ANY])). - andReturn(authUIClass); - - id authClass = OCMClassMock([FIRAuth class]); - OCMStub(ClassMethod([authClass auth])). - andReturn(authClass); - - FIRAuth *auth = [FIRAuth auth]; - FUIAuth *authUI = [FUIAuth authUIWithAuth:auth]; - self.provider = [[FUIPhoneAuth alloc] initWithAuthUI:authUI]; -} - -- (void)tearDown { - self.provider = nil; - [super tearDown]; -} - -- (void)testProviderValidity { - XCTAssertNotNil(self.provider); - XCTAssertNotNil(self.provider.icon); - XCTAssertNotNil(self.provider.signInLabel); - XCTAssertNotNil(self.provider.buttonBackgroundColor); - XCTAssertNotNil(self.provider.buttonTextColor); - XCTAssertNotNil(self.provider.providerID); - XCTAssertNotNil(self.provider.shortName); - XCTAssertTrue(self.provider.signInLabel.length != 0); - XCTAssertNil(self.provider.accessToken); - XCTAssertNil(self.provider.idToken); -} - -- (void)DISABLED_testSignIn { - XCTAssertNotNil(self.provider); - XCTAssertNil(self.provider.accessToken); - - id mockedProvider = OCMPartialMock(self.provider); - - XCTestExpectation *expectation = [self expectationWithDescription:@"logged in"]; - XCTestExpectation *expectationCallback = [self expectationWithDescription:@"result is called"]; - id mockedCredential = OCMClassMock([FIRAuthCredential class]); - id mockedError = OCMClassMock([NSError class]); - id mockedUser = OCMClassMock([FIRUser class]); - FIRAuthResultCallback resultCallback = ^(FIRUser *_Nullable user, NSError *_Nullable error) { - [expectationCallback fulfill]; - XCTAssertEqual(error, mockedError); - XCTAssertEqual(user, mockedUser); - }; - - id mockedController = OCMClassMock([UIViewController class]); - OCMExpect([mockedController presentViewController:OCMOCK_ANY - animated:OCMOCK_ANY - completion:OCMOCK_ANY]).andDo(^(NSInvocation *invocation) { - [mockedProvider callbackWithCredential:mockedCredential - error:mockedError - result:resultCallback]; - }); - - [mockedProvider signInWithDefaultValue:nil - presentingViewController:mockedController - completion:^(FIRAuthCredential *_Nullable credential, - NSError *_Nullable error, - FIRAuthResultCallback _Nullable result, - NSDictionary *_Nullable userInfo) { - XCTAssertEqual(credential, mockedCredential); - XCTAssertEqual(error, mockedError); - [expectation fulfill]; - - // We can't compare result and resultCallback. Thus verifying with expectation that result - // is called. - result(mockedUser, error); - }]; - [self waitForExpectationsWithTimeout:0.1 handler:nil]; - - OCMVerifyAll(mockedProvider); -} - -@end diff --git a/FirebasePhoneAuthUI/FirebasePhoneAuthUITests/Info.plist b/FirebasePhoneAuthUI/FirebasePhoneAuthUITests/Info.plist deleted file mode 100644 index 6c6c23c43ad..00000000000 --- a/FirebasePhoneAuthUI/FirebasePhoneAuthUITests/Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - - diff --git a/FirebasePhoneAuthUI/Podfile b/FirebasePhoneAuthUI/Podfile deleted file mode 100644 index e0177625aed..00000000000 --- a/FirebasePhoneAuthUI/Podfile +++ /dev/null @@ -1,16 +0,0 @@ -# source 'sso://cpdc-internal/firebase' -source 'https://github.com/CocoaPods/Specs.git' - -platform :ios, '13.0' - -target 'FirebasePhoneAuthUI' do - use_frameworks! - - pod 'FirebaseAuthUI', :path => '../' - - target 'FirebasePhoneAuthUITests' do - inherit! :search_paths - pod 'OCMock' - end - -end diff --git a/FirebasePhoneAuthUI/README.md b/FirebasePhoneAuthUI/README.md deleted file mode 100644 index 7ea29af0b8e..00000000000 --- a/FirebasePhoneAuthUI/README.md +++ /dev/null @@ -1,110 +0,0 @@ -# FirebaseUI for iOS — Phone Auth - -You can use Firebase Phone Authentication to sign in a user by sending an SMS message to the user's phone.The user signs in using a one-time code contained in the SMS message. - -## Table of Contents - -1. [Installation](#installation) -1. [Integration](#using-firebasephoneui-for-authentication) -1. [Customization](#customizing) -1. [Integration cheat sheet](#integration-cheat-sheet) - -## Installation -### Importing FirebaseUI Phone Auth components -Add the following to your `Podfile`: -```ruby - pod 'FirebaseUI/Auth' - pod 'FirebaseUI/Phone' -``` - -### Configuring sign-in provider -To use FirebaseUI to authenticate users you first need to configure each provider you want to use in -their own developer app settings. Please read the *Before you begin* section of the [Firebase -Phone Auth configuration guides](https://firebase.google.com/docs/auth/ios/phone-auth#before_you_begin). - -## Using FirebasePhoneUI for Authentication - -### Integration - -In order to use Phone Auth you should initialize Phone provider and add it to the list of FUIAuth providers. Please notice that you should use only one instance of Phone Auth providers. It can be retrieved form FUIAuth providers list. - -```swift -// Swift -import FirebasePhoneAuthUI - -/* ... */ - -FUIAuth.defaultAuthUI()?.delegate = self -let phoneProvider = FUIPhoneAuth.init(authUI: FUIAuth.defaultAuthUI()!) -FUIAuth.defaultAuthUI()?.providers = [phoneProvider] -``` - -```objective-c -// Objective-C -@import FirebasePhoneAuthUI; - -/* ... */ - -[FUIAuth defaultAuthUI].delegate = self; // delegate should be retained by you! -FUIPhoneAuth *phoneProvider = [[FUIPhoneAuth alloc] initWithAuthUI:[FUIAuth defaultAuthUI]]; -[FUIAuth defaultAuthUI].providers = @[phoneProvider]; -``` - -### Sign In - -To start the authentication flow: - -```swift -// Swift -let phoneProvider = FUIAuth.defaultAuthUI()?.providers.first as! FUIPhoneAuth -phoneProvider.signIn(withPresenting: currentlyVisibleController, phoneNumber: nil) -``` - -```objective-c -// Objective-C -FUIPhoneAuth *phoneProvider = [FUIAuth defaultAuthUI].providers.firstObject; -[phoneProvider signInWithPresentingViewController:currentlyVisibleController phoneNumber:nil]; -``` - -## Integration cheat sheet -Here you can find steps things that need to be checked in case of any issues with Firebase Phone Auth integration problems. - -In case need to handle push notifications yourself: - -1. Add `APNS Key` or `APNS cert` to Firebase console project. -
If `APNS cert` is used than check that you uploaded certificate with the same `bundleID` as Firebase iOS app `bundleID`. -1. In the Xcode `Project settings` -> `Capabilities` enable `Push Notifications` -1. In the project `Info.plist` set to `NO` value of `FirebaseAppDelegateProxyEnabled` (add this key if needed) -1. In the `AppDelegate` `didRegisterForRemoteNotificationsWithDeviceToken` call `[FUIAuth.defaultAuthUI.auth setAPNSToken:deviceToken]` -
In this case The type of the token (production or sandbox) will be attempted to be automatically detected. There is other method to set it manually. -1. In the `AppDelegate` `application:didReceiveRemoteNotification:fetchCompletionHandler:` call `[FUIAuth.defaultAuthUI.auth canHandleNotification:userInfo]` -1. In the `AppDelegate` `application:didFinishLaunchingWithOptions:` call `[FIRApp configure]` -1. In the `AppDelegate` `application:openURL:options:` return `[FUIAuth.defaultAuthUI handleOpenURL:url sourceApplication:sourceApplication]` -1. Add `REVERSED_CLIENT_ID` as URL scheme to `Project settings` -1. Add `GoogleService-Info.plist` to your project -1. In you controller call: -```objective-c - [FUIAuth defaultAuthUI].delegate = self; // delegate should be retained by you! - FUIPhoneAuth *phoneProvider = [[FUIPhoneAuth alloc] initWithAuthUI:[FUIAuth defaultAuthUI]]; - [FUIAuth defaultAuthUI].providers = \@[phoneProvider]; -``` -11\. To start Phone Auth, please call: -```objective-c - FUIPhoneAuth *phoneProvider = [FUIAuth defaultAuthUI].providers.firstObject; - [phoneProvider signInWithPresentingViewController:self phoneNumber:nil]; -``` -You can skip all errors, FirbaseUI Phone Auth will display all error messages for you. -
You may need only to handle error code `FUIAuthErrorCodeUserCancelledSignIn`. - -If you don't need to handle APNS yourself, than don't do steps 3, 4, 5. - -Please notice that you can use either APNS key OR APNS certificate. -
One APNS Key can be used for all your iOS app from the same Apple Developer account. - -12\. (Optional) To receive the callback response after the user attempt to sign in. - -```swift -func authUI(_ authUI: FUIAuth, didSignInWith authDataResult: AuthDataResult?, error: Error?) { - // Do something with the response -} -``` diff --git a/FirebasePhoneAuthUI/Sources/FUICodeField.h b/FirebasePhoneAuthUI/Sources/FUICodeField.h deleted file mode 100644 index ccc6cf07619..00000000000 --- a/FirebasePhoneAuthUI/Sources/FUICodeField.h +++ /dev/null @@ -1,40 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@protocol FUICodeFieldDelegate - -- (void) entryIsCompletedWithCode:(NSString *)code; -- (void) entryIsIncomplete; - -@end - -@interface FUICodeField : UITextField - -@property (nonatomic, retain, readonly) NSMutableString *codeEntry; - -@property (nonatomic, readwrite) IBOutlet id codeDelegate; - -@property (nonatomic, readonly) IBInspectable NSInteger codeLength; - -- (void)clearCodeInput; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebasePhoneAuthUI/Sources/FUICodeField.m b/FirebasePhoneAuthUI/Sources/FUICodeField.m deleted file mode 100644 index 458b0745c7c..00000000000 --- a/FirebasePhoneAuthUI/Sources/FUICodeField.m +++ /dev/null @@ -1,163 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebasePhoneAuthUI/Sources/FUICodeField.h" - -#if SWIFT_PACKAGE -#import -#else -#import -#endif - -NS_ASSUME_NONNULL_BEGIN - -const CGFloat FUICodeFieldMinInputFieldHeight = 60.0f; - -@interface FUICodeField () - -@property (nonatomic, readonly) IBInspectable NSString *placeholderChar; - -@end - -@implementation FUICodeField - -- (instancetype)initWithFrame:(CGRect)frame { - if (self = [super initWithFrame:frame]){ - [self commonInit]; - } - return self; -} - -- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder { - if (self = [super initWithCoder:aDecoder]){ - [self commonInit]; - } - return self; -} - -- (void)commonInit { - // Initialization code - _codeEntry = [NSMutableString string]; - self.backgroundColor = UIColor.clearColor; - self.tintColor = UIColor.clearColor; - self.font = [UIFont fontWithName:@"Courier" size:40]; - self.textAlignment = NSTextAlignmentLeft; - UIView *paddingView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 20, self.bounds.size.height)]; - self.leftView = paddingView; - self.leftViewMode = UITextFieldViewModeAlways; - if (@available(iOS 12.0, *)) { - self.textContentType = UITextContentTypeOneTimeCode; - } - - // Default values - if (!self.codeLength) { - _codeLength = 6; - } else { - _codeLength = MIN(self.codeLength, 12); - } - - if (!self.placeholderChar || !self.placeholderChar.length) { - _placeholderChar = @"-"; - } - - self.delegate = self; - [self updateText]; -} - -- (UIKeyboardType)keyboardType { - if (@available(iOS 10, *)) { - return UIKeyboardTypeASCIICapableNumberPad; - } else { - return UIKeyboardTypeNumberPad; - } -} - -- (BOOL)hasText { - return self.codeEntry.length > 0; -} - -- (void)insertText:(NSString *)theText { - if (self.codeEntry.length >= self.codeLength){ - // UX: if code was submitted and there is an error message, - // typing a new number should clear the field and start over - [self updateText]; - return; - } - - [self.codeEntry appendString:theText]; - [self updateText]; - [self notifyEntryCompletion]; -} - -- (void)deleteBackward { - if (!self.codeEntry.length) { - return; - } - - NSRange theRange = NSMakeRange(self.codeEntry.length - 1, 1); - [self.codeEntry deleteCharactersInRange:theRange]; - [self updateText]; - [self notifyEntryCompletion]; -} - -- (void)clearCodeInput { - [self.codeEntry setString:@""]; - [self updateText]; - [self notifyEntryCompletion]; -} - -- (void)notifyEntryCompletion { - if (self.codeEntry.length >= self.codeLength) { - [self.codeDelegate entryIsCompletedWithCode:[self.codeEntry copy]]; - } else { - [self.codeDelegate entryIsIncomplete]; - } -} - -- (void)updateText { - NSString *code = [self.codeEntry copy]; - if (self.secureTextEntry) { - code = [[NSString string] stringByPaddingToLength:code.length - withString:@"\u2022" startingAtIndex:0]; - } - - NSInteger add = self.codeLength - code.length; - if (add > 0) { - NSString *pad = [[NSString string] stringByPaddingToLength:add - withString:self.placeholderChar - startingAtIndex:0]; - code = [code stringByAppendingString:pad]; - } - - NSMutableAttributedString *attributedString = - [[NSMutableAttributedString alloc] initWithString:code]; - [attributedString addAttribute:NSKernAttributeName value:@20 - range:NSMakeRange(0, attributedString.length - 1)]; - self.attributedText = attributedString; -} - -- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { - if (string.length == 0) { - [self deleteBackward]; - } else { - [self insertText:string]; - } - return false; -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebasePhoneAuthUI/Sources/FUICollationForCountries.h b/FirebasePhoneAuthUI/Sources/FUICollationForCountries.h deleted file mode 100644 index c2e336cd2d5..00000000000 --- a/FirebasePhoneAuthUI/Sources/FUICollationForCountries.h +++ /dev/null @@ -1,56 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -#import "FirebasePhoneAuthUI/Sources/FUICountryCodes.h" - -NS_ASSUME_NONNULL_BEGIN - -/** @class FUICollationForCountries - @brief Replacement class for UILocalizedIndexedCollation tailored to FUICountryCodes, used to - create UITableView alphabetical indices. Main difference from UILocalizedIndexedCollation - is sectionTitles and sectionIndexTitles methods remove sections with zero countries in them. - */ -@interface FUICollationForCountries : NSObject - -- (instancetype)initWithCountryCodes:(FUICountryCodes *)countryCodes NS_DESIGNATED_INITIALIZER; -+ (instancetype)new __unavailable; -- (instancetype)init __unavailable; - -/** @fn sectionTitles - @brief Drop-in replacement for [UILocalizedIndexedCollation sectionTitles] - */ -- (NSArray *)sectionTitles; - -/** @fn sectionIndexTitles - @brief Drop-in replacement for [UILocalizedIndexedCollation sectionIndexTitles] - */ -- (NSArray *)sectionIndexTitles; - -/** @fn numberOfCountriesInSection: - @brief Returns number of countries that belong to a given alphabetical section (e.g. how many - countries are there in section "A"). Works by counting how many countries are lexically - greater than the section but smaller than the next section (e.g. how many countries are - greater than "A" but smaller than "B"). - @param sectionIndex Index of the section. - @return Returns number of countries. - */ -- (NSInteger)numberOfCountriesInSection:(NSInteger)sectionIndex; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebasePhoneAuthUI/Sources/FUICollationForCountries.m b/FirebasePhoneAuthUI/Sources/FUICollationForCountries.m deleted file mode 100644 index e2762916587..00000000000 --- a/FirebasePhoneAuthUI/Sources/FUICollationForCountries.m +++ /dev/null @@ -1,100 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebasePhoneAuthUI/Sources/FUICollationForCountries.h" - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface FUICollationForCountries () - -@property (nonatomic, readonly) FUICountryCodes *countryCodes; -@property (nonatomic, readonly, copy) NSArray *sectionTitlesArray; - -@end - -@implementation FUICollationForCountries - -- (instancetype)initWithCountryCodes:(FUICountryCodes *)countryCodes { - if (self = [super init]) { - _countryCodes = countryCodes; - - // Apple's default collation ordering is not lexically sorted, so fix it - NSArray *sortedSectionTitlesArray = - [[[UILocalizedIndexedCollation currentCollation] sectionTitles] - sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)]; - - // Remove section indices with zero countries in it - NSIndexSet *indexesOfFilteredArray = - [sortedSectionTitlesArray indexesOfObjectsPassingTest: - ^BOOL(id obj, NSUInteger sectionIndex, BOOL *stop) { - BOOL sectionHasCountries = - [self numberOfCountriesInSection:sectionIndex titlesArray:sortedSectionTitlesArray] > 0; - return sectionHasCountries; - }]; - _sectionTitlesArray = [sortedSectionTitlesArray objectsAtIndexes:indexesOfFilteredArray]; - } - return self; -} - -- (NSArray *)sectionTitles { - return self.sectionTitlesArray; -} - -- (NSArray *)sectionIndexTitles { - return self.sectionTitlesArray; -} - -- (NSInteger)numberOfCountriesInSection:(NSInteger)sectionIndex { - return [self numberOfCountriesInSection:sectionIndex titlesArray:self.sectionTitlesArray]; -} - -- (NSInteger)numberOfCountriesInSection:(NSInteger)sectionIndex titlesArray:(NSArray *)titlesArray { - // sectionTitle and nextSectionTitle are e.g. "A" and "B" - // However when sectionTitle is the last available section (e.g. "Z"), nextSectionTitle is the - // last unicode char available (\uFFFF). This is to ensure all remaining countries are lexically - // smaller than that section, so that all remaining countries fall in sectionTitle - NSString *sectionTitle = [titlesArray objectAtIndex:sectionIndex]; - NSString *nextSectionTitle = - (sectionIndex+1 < titlesArray.count) ? [titlesArray objectAtIndex:(sectionIndex+1)] - : @"\uFFFF"; - - NSInteger countriesInSection = 0; - for (NSInteger row = 0; row < self.countryCodes.count; row++) { - NSString* localizedCountryName = - [self.countryCodes countryCodeInfoAtIndex:row].localizedCountryName; - BOOL countryNameIsInBetweenTitles = - ([sectionTitle localizedCaseInsensitiveCompare:localizedCountryName] == NSOrderedAscending - && [nextSectionTitle localizedCaseInsensitiveCompare:localizedCountryName] == - NSOrderedDescending); - BOOL countryNameIsPastTitles = - [nextSectionTitle localizedCaseInsensitiveCompare:localizedCountryName] == - NSOrderedAscending; - - if (countryNameIsInBetweenTitles) { - countriesInSection++; - } else if (countryNameIsPastTitles) { - break; - } - } - - return countriesInSection; -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebasePhoneAuthUI/Sources/FUICountryCodes.h b/FirebasePhoneAuthUI/Sources/FUICountryCodes.h deleted file mode 100644 index 4b69dcc2114..00000000000 --- a/FirebasePhoneAuthUI/Sources/FUICountryCodes.h +++ /dev/null @@ -1,87 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface FUICountryCodeInfo : NSObject - -@property (nonatomic, copy) NSString *countryName; -@property (nonatomic, copy) NSString *localizedCountryName; -@property (nonatomic, copy) NSString *countryCode; -@property (nonatomic, copy) NSString *dialCode; -@property (nonatomic, copy) NSNumber *level; - -- (NSString *)countryFlagEmoji; - -@end - -@interface FUICountryCodes : NSObject - -/** @property defaultCountryCodeInfo - @brief Get the default country code info - The default country code. Formerly this was set via CTCarrier information, but CTCarrier is now - deprecated, so this value must be manually set. Defaults to the country code for the United States. -*/ -@property (nonatomic, copy) FUICountryCodeInfo *defaultCountryCodeInfo; - -/** @fn count: - @brief Return the number of available country codes. -*/ -- (NSUInteger)count; - -/** @fn countryCodeInfoAtIndex: - @brief Get the @c FUICountryCodeInfo object with provided index. - @param index The index number of the object. -*/ -- (FUICountryCodeInfo *)countryCodeInfoAtIndex:(NSInteger)index; - -/** @fn countryCodeInfoForPhoneNumber: - @brief Get the @c FUICountryCodeInfo object based on the provided phone number. - @param phoneNumber The phone number in string format. -*/ -- (FUICountryCodeInfo *)countryCodeInfoForPhoneNumber:(NSString *)phoneNumber; - -/** @fn countryCodeInfoForCode: - @brief Get the @c FUICountryCodeInfo object of the selected country code. - @param countryCode Country codes are in NSString format, and ISO (alpha-2) formatted. -*/ -- (nullable FUICountryCodeInfo *)countryCodeInfoForCode:(NSString *)countryCode; - -/** @fn blacklistCountries: - @brief Remove the set of countries from available country codes. - @param countries A set of blacklisted country codes. Country codes are in NSString format, and - are either ISO (alpha-2) or E164 formatted. -*/ -- (void)blacklistCountries:(NSSet *)countries; - -/** @fn blacklistCountries: - @brief Filter the available country codes, leaving only the set of whitelisted countries. - @param countries A set of whitelisted country codes. Country codes are in NSString format, and - are either ISO (alpha-2) or E164 formatted. -*/ -- (void)whitelistCountries:(NSSet *)countries; - -/** @fn searchCountriesByName: - @brief Get a filtered instance based on provided country name query. - @param nameQuery The search query. -*/ -- (instancetype)searchCountriesByName:(NSString *)nameQuery; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebasePhoneAuthUI/Sources/FUICountryCodes.m b/FirebasePhoneAuthUI/Sources/FUICountryCodes.m deleted file mode 100644 index 7671696fe3c..00000000000 --- a/FirebasePhoneAuthUI/Sources/FUICountryCodes.m +++ /dev/null @@ -1,295 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebasePhoneAuthUI/Sources/FUICountryCodes.h" - -#import -#import -#import - -#import "FirebasePhoneAuthUI/Sources/Public/FirebasePhoneAuthUI/FUIPhoneAuth.h" -#import "FirebasePhoneAuthUI/Sources/FUIPhoneAuthStrings.h" - -NS_ASSUME_NONNULL_BEGIN - -NSString* const kFUIJSONCountryNameKey = @"name"; -NSString* const kFUIJSONLocalizedCountryNameKey = @"localized_name"; -NSString* const kFUIJSONCountryCodeKey = @"iso2_cc"; -NSString* const kFUIJSONDialcodeKey = @"e164_cc"; -NSString* const kFUIJSONLevelKey = @"level"; -NSString* const kFUIJSONCountryCodePredicate = @"(iso2_cc like[c] %@)"; -NSString* const kFUIJSONCountryNamePredicate = @"(localized_name beginswith[cd] %@)"; -NSString* const kFUIDefaultCountryCode = @"US"; - -@implementation FUICountryCodeInfo - -- (NSString *)countryFlagEmoji { - NSAssert(self.countryCode.length == 2, @"Expecting ISO country code"); - if (self.countryCode.length != 2) { - return nil; - } - - // Unicode offset for regional characters. - // Country code flag emoji are the result of the combination of the two regional characters - // that make up that country's two-character code. - // https://en.wikipedia.org/wiki/Regional_Indicator_Symbol - const int base = 127397; - - const wchar_t bytes[2] = { - base + [self.countryCode characterAtIndex:0], - base + [self.countryCode characterAtIndex:1] - }; - - return [[NSString alloc] initWithBytes:bytes - length:sizeof(bytes) - encoding:NSUTF32LittleEndianStringEncoding]; -} - -- (id)copyWithZone:(NSZone *_Nullable)zone { - FUICountryCodeInfo *newInfo = [[FUICountryCodeInfo alloc] init]; - newInfo.countryName = self.countryName; - newInfo.localizedCountryName = self.localizedCountryName; - newInfo.countryCode = self.countryCode; - newInfo.dialCode = self.dialCode; - newInfo.level = self.level; - return newInfo; -} - -- (BOOL)isEqual:(FUICountryCodeInfo *)object { - if (object == self) { - return YES; - } - if (![object isKindOfClass:[self class]]) { - return NO; - } - return object.countryName == self.countryName && - object.localizedCountryName == self.localizedCountryName && - object.countryCode == self.countryCode && - object.dialCode == self.dialCode && - object.level == self.level; -} - -@end - -@interface FUICountryCodes () -@property (nonatomic, readonly) NSArray *countryCodesArray; -@end - -@implementation FUICountryCodes - -- (instancetype)init { - if (self = [super init]) { - // Country codes JSON containing country codes and phone number info. - NSBundle *bundle = [FUIPhoneAuth bundle]; - NSString *countryCodeFilePath = [bundle pathForResource:@"country-codes" ofType:@"json"]; - NSAssert([[NSFileManager defaultManager] fileExistsAtPath:countryCodeFilePath], - @"Could not find country code file"); - - NSInputStream *inputStream = [[NSInputStream alloc] initWithFileAtPath:countryCodeFilePath]; - [inputStream open]; - - NSError* error = nil; - _countryCodesArray = - [NSJSONSerialization JSONObjectWithStream:inputStream - options:NSJSONReadingMutableContainers - error:&error]; - - [inputStream close]; - - NSAssert(error == nil, @"Could not parse country codes JSON"); - - [self localizeCountryCodesArray]; - [self sortCountryCodesArray]; - } - return self; -} - -- (NSUInteger)count { - return [self.countryCodesArray count]; -} - -- (nullable FUICountryCodeInfo *)countryCodeInfoForCode:(NSString *)countryCode { - NSArray *filtered = - [self.countryCodesArray filteredArrayUsingPredicate: - [NSPredicate predicateWithFormat:kFUIJSONCountryCodePredicate, countryCode]]; - if (filtered.count != 1) { - return nil; - } - NSDictionary *match = filtered[0]; - - return [self countryCodeInfoForDictionary:match]; -} - -- (FUICountryCodeInfo *)countryCodeInfoAtIndex:(NSInteger)index { - NSDictionary *match = [self.countryCodesArray objectAtIndex:index]; - return [self countryCodeInfoForDictionary:match]; -} - -- (FUICountryCodeInfo *)defaultCountryCodeInfo { - if (_defaultCountryCodeInfo == nil) { - return [self countryCodeInfoForCode:kFUIDefaultCountryCode] ?: [self countryCodeInfoAtIndex:0]; - } - return _defaultCountryCodeInfo; -} - -- (FUICountryCodeInfo *)countryCodeInfoForPhoneNumber:(NSString *)phoneNumber { - if (phoneNumber.length == 0 || [phoneNumber characterAtIndex:0] != '+') { - return nil; - } - - phoneNumber = [phoneNumber substringFromIndex:1]; - - NSDictionary *countryCodes = [self countryCodesByDialCode]; - const NSUInteger maxCountryCodeLengh = 3; - - for (NSUInteger i = maxCountryCodeLengh; i > 0; i -= 1) { - if (phoneNumber.length < i) { - continue; - } - - NSString *candidateDialCode = [phoneNumber substringToIndex:i]; - - if (countryCodes[candidateDialCode]) { - return countryCodes[candidateDialCode]; - } - } - - return nil; -} - -- (void)blacklistCountries:(NSSet *)countries { - NSMutableArray *array = - [[NSMutableArray alloc] initWithCapacity:_countryCodesArray.count]; - for (NSDictionary *dict in self.countryCodesArray) { - NSString *countryCode = dict[kFUIJSONCountryCodeKey]; - NSString *dialCode = dict[kFUIJSONDialcodeKey]; - if ([countries containsObject:countryCode] || [countries containsObject:dialCode]) { - continue; - } - [array addObject:dict]; - } - _countryCodesArray = array.mutableCopy; -} - -- (void)whitelistCountries:(NSSet *)countries { - NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity:countries.count]; - for (NSDictionary *dict in self.countryCodesArray) { - NSString *countryCode = dict[kFUIJSONCountryCodeKey]; - NSString *dialCode = dict[kFUIJSONDialcodeKey]; - if ([countries containsObject:countryCode] || [countries containsObject:dialCode]) { - [array addObject:dict]; - } - } - _countryCodesArray = array.mutableCopy; -} - -- (instancetype)searchCountriesByName:(NSString *)nameQuery { - NSArray *results = - [self.countryCodesArray filteredArrayUsingPredicate: - [NSPredicate predicateWithFormat:kFUIJSONCountryNamePredicate, nameQuery]]; - return [[FUICountryCodes alloc] initWithCountriesArray:results]; -} - -#pragma mark Helper methods - -- (instancetype)initWithCountriesArray:(NSArray *)countries { - NSParameterAssert(countries); - - if (self = [super init]) { - _countryCodesArray = countries; - - [self localizeCountryCodesArray]; - [self sortCountryCodesArray]; - - } - return self; -} - -- (FUICountryCodeInfo *)countryCodeInfoForDictionary:(NSDictionary *)dictionary { - FUICountryCodeInfo* countryCodeInfo = [[FUICountryCodeInfo alloc] init]; - countryCodeInfo.countryName = dictionary[kFUIJSONCountryNameKey]; - countryCodeInfo.countryCode = dictionary[kFUIJSONCountryCodeKey]; - countryCodeInfo.localizedCountryName = dictionary[kFUIJSONLocalizedCountryNameKey]; - countryCodeInfo.dialCode = dictionary[kFUIJSONDialcodeKey]; - countryCodeInfo.level = dictionary[kFUIJSONLevelKey]; - - return countryCodeInfo; -} - -- (void)localizeCountryCodesArray { - NSMutableArray *array = [NSMutableArray new]; - for (NSDictionary *dict in self.countryCodesArray) { - NSMutableDictionary *newDict = [[NSMutableDictionary alloc] initWithDictionary:dict]; - NSString *localizedCountryName = - [FUICountryCodes localizedCountryNameForCountryCode:dict[kFUIJSONCountryCodeKey]]; - if (localizedCountryName == nil) { - localizedCountryName = dict[kFUIJSONCountryNameKey]; - } - [newDict setValue:localizedCountryName forKey:kFUIJSONLocalizedCountryNameKey]; - [array addObject:newDict]; - } - _countryCodesArray = array; -} - -- (void)sortCountryCodesArray { - NSSortDescriptor *descriptor = - [[NSSortDescriptor alloc] initWithKey:kFUIJSONLocalizedCountryNameKey - ascending:YES - selector:@selector(localizedCaseInsensitiveCompare:)]; - _countryCodesArray = [self.countryCodesArray sortedArrayUsingDescriptors: - [NSArray arrayWithObjects:descriptor, nil]]; -} - -- (NSDictionary *)countryCodesByDialCode { - NSMutableDictionary *countryCodes = - [NSMutableDictionary dictionaryWithCapacity:self.countryCodesArray.count]; - - for (NSDictionary *dict in self.countryCodesArray) { - NSString *dialCode = dict[kFUIJSONDialcodeKey]; - NSNumber *level = dict[kFUIJSONLevelKey]; - - if (!countryCodes[dialCode]) { - countryCodes[dialCode] = [self countryCodeInfoForDictionary:dict]; - } else if (level != nil) { - FUICountryCodeInfo *existing = countryCodes[dialCode]; - - if (level.integerValue < existing.level.integerValue) { - countryCodes[dialCode] = [self countryCodeInfoForDictionary:dict]; - } - } - } - - return countryCodes; -} - -+ (NSString *)localizedCountryNameForCountryCode:(NSString *)countryCode { - NSLocale *locale = [NSLocale currentLocale]; - NSString *localizedCountryName = [locale displayNameForKey:NSLocaleCountryCode value:countryCode]; - return localizedCountryName; -} - -+ (NSString *)countryCodeFromDeviceLocale { - NSString *countryCode = kFUIDefaultCountryCode; - NSLocale *currentLocale = [NSLocale currentLocale]; - if (currentLocale) { - countryCode = [currentLocale objectForKey:NSLocaleCountryCode]; - } - return countryCode; -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebasePhoneAuthUI/Sources/FUICountryTableViewController.h b/FirebasePhoneAuthUI/Sources/FUICountryTableViewController.h deleted file mode 100644 index fb9a254ff7c..00000000000 --- a/FirebasePhoneAuthUI/Sources/FUICountryTableViewController.h +++ /dev/null @@ -1,43 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebasePhoneAuthUI/Sources/FUICountryCodes.h" - -#import - -NS_ASSUME_NONNULL_BEGIN - -@protocol FUICountryTableViewDelegate - -- (void)didSelectCountry:(FUICountryCodeInfo*)countryCodeInfo; - -@end - -@interface FUICountryTableViewController : UIViewController - - -@property (nonatomic, weak) id delegate; - -- (instancetype)initWithCountryCodes:(FUICountryCodes *)countryCodes; - -+ (instancetype)new __unavailable; -- (instancetype)init __unavailable; -- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil - bundle:(nullable NSBundle *)nibBundleOrNil __unavailable; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebasePhoneAuthUI/Sources/FUICountryTableViewController.m b/FirebasePhoneAuthUI/Sources/FUICountryTableViewController.m deleted file mode 100644 index be2a3a015cf..00000000000 --- a/FirebasePhoneAuthUI/Sources/FUICountryTableViewController.m +++ /dev/null @@ -1,216 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebasePhoneAuthUI/Sources/FUICollationForCountries.h" - -#import - -#import "FirebasePhoneAuthUI/Sources/Public/FirebasePhoneAuthUI/FUIPhoneAuth.h" -#import "FirebasePhoneAuthUI/Sources/FUICountryCodes.h" -#import "FirebasePhoneAuthUI/Sources/FUICountryTableViewController.h" -#import "FirebasePhoneAuthUI/Sources/FUIFeatureSwitch.h" -#import "FirebasePhoneAuthUI/Sources/FUIPhoneAuthStrings.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FUICountryTableViewController () - -@property (nonatomic, readonly) FUICountryCodes *countryCodes; -@property (nonatomic, readwrite) FUICountryCodes *searchResults; -@property (nonatomic, readonly) FUICollationForCountries *collationForCountries; -@property (nonatomic, readonly) NSMutableDictionary *cachedNumberOfCountriesInSection; -@property (nonatomic, readonly) UISearchController *searchController; -@property (unsafe_unretained, nonatomic) IBOutlet UITableView *tableView; -@end - - -@implementation FUICountryTableViewController - -- (instancetype)initWithCountryCodes:(FUICountryCodes *)countryCodes { - if ((self = [super initWithNibName:NSStringFromClass([self class]) - bundle:[FUIPhoneAuth bundle]])) { - _countryCodes = countryCodes; - _collationForCountries = - [[FUICollationForCountries alloc] initWithCountryCodes:self.countryCodes]; - _cachedNumberOfCountriesInSection = [NSMutableDictionary new]; - _searchController = [[UISearchController alloc] initWithSearchResultsController:nil]; - self.searchController.searchResultsUpdater = self; - if (@available(iOS 12, *)) { - self.searchController.obscuresBackgroundDuringPresentation = NO; - } else { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - self.searchController.dimsBackgroundDuringPresentation = NO; -#pragma clang diagnostic pop - } - self.definesPresentationContext = YES; - } - return self; -} - -- (void)viewDidLoad { - [super viewDidLoad]; - - self.tableView.tableHeaderView = self.searchController.searchBar; -} - -- (UITableViewCell*)tableView:(UITableView*)tableView - cellForRowAtIndexPath:(NSIndexPath*)indexPath { - static NSString *identifier = @"fui-country-cell"; - NSInteger textLabelTag = 1; - NSInteger detailTextLabelTag = 2; - UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier]; - UILabel *detailTextLabel; - UILabel *textLabel; - if (cell == nil) { - cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault - reuseIdentifier:identifier]; - detailTextLabel = [[UILabel alloc] init]; - [detailTextLabel setTranslatesAutoresizingMaskIntoConstraints:NO]; - detailTextLabel.textColor = [UIColor grayColor]; - detailTextLabel.tag = detailTextLabelTag; - [cell.contentView addSubview:detailTextLabel]; - - textLabel = [[UILabel alloc] init]; - [textLabel setTranslatesAutoresizingMaskIntoConstraints:NO]; - textLabel.tag = textLabelTag; - [cell.contentView addSubview:textLabel]; - - NSDictionary *views = NSDictionaryOfVariableBindings(detailTextLabel, textLabel); - NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[detailTextLabel]|" - options:0 - metrics:nil - views:views]; - [cell.contentView addConstraints:constraints]; - - constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[textLabel]|" - options: 0 - metrics:nil - views:views]; - [cell.contentView addConstraints:constraints]; - - constraints = - [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[textLabel]-[detailTextLabel(<=90)]|" - options: 0 - metrics:nil - views:views]; - [cell.contentView addConstraints:constraints]; - } else { - detailTextLabel = [cell.contentView viewWithTag:detailTextLabelTag]; - textLabel = [cell.contentView viewWithTag:textLabelTag]; - } - - FUICountryCodeInfo* countryCodeInfo; - NSInteger row = [self cumulativeRowForTableView:tableView indexPath:indexPath]; - if ([self isSearchActive]) { - countryCodeInfo = [self.searchResults countryCodeInfoAtIndex:row]; - } else { - countryCodeInfo = [self.countryCodes countryCodeInfoAtIndex:row]; - } - - if (countryCodeInfo) { - if ([FUIFeatureSwitch isCountryFlagEmojiEnabled]) { - NSString *countryFlag = [countryCodeInfo countryFlagEmoji]; - textLabel.text = - [NSString stringWithFormat:@"%@ %@", countryFlag, countryCodeInfo.localizedCountryName]; - } else { - textLabel.text = countryCodeInfo.localizedCountryName; - } - detailTextLabel.text = countryCodeInfo.dialCode; - } - return cell; -} - -- (NSInteger)cumulativeRowForTableView:(UITableView*)tableView indexPath:(NSIndexPath*)indexPath { - NSInteger row = indexPath.row; - NSInteger section; - for (section = 0; section < indexPath.section; section++) { - row += [self tableView:tableView numberOfRowsInSection:section]; - } - return row; -} - -- (void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath { - NSInteger row = [self cumulativeRowForTableView:tableView indexPath:indexPath]; - - FUICountryCodeInfo *selectedCountry; - if ([self isSearchActive]) { - selectedCountry = [self.searchResults countryCodeInfoAtIndex:row]; - } else { - selectedCountry = [self.countryCodes countryCodeInfoAtIndex:row]; - } - [self.delegate didSelectCountry:selectedCountry]; - - [self.navigationController popViewControllerAnimated:YES]; -} - -#pragma mark Section index - -- (nullable NSString *)tableView:(UITableView *)tableView - titleForHeaderInSection:(NSInteger)section { - if ([self isSearchActive]) { - NSString *queryString = self.searchController.searchBar.text; - return queryString.length ? [[queryString substringToIndex:1] capitalizedString] : @""; - } - - return [[self.collationForCountries sectionTitles] objectAtIndex:section]; -} - -- (nullable NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView { - return [self.collationForCountries sectionIndexTitles]; -} - -- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title - atIndex:(NSInteger)index { - return index; -} - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { - if ([self isSearchActive]) { - return 1; - } - - return [self.collationForCountries sectionIndexTitles].count; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)sectionIndex { - if ([self isSearchActive]) { - return [self.searchResults count]; - } - - if (self.cachedNumberOfCountriesInSection[@(sectionIndex)] != nil) { - return [self.cachedNumberOfCountriesInSection[@(sectionIndex)] integerValue]; - } - - NSInteger rows = [self.collationForCountries numberOfCountriesInSection:sectionIndex]; - self.cachedNumberOfCountriesInSection[@(sectionIndex)] = @(rows); - - return rows; -} - -- (void)updateSearchResultsForSearchController:(UISearchController *)searchController { - self.searchResults = [self.countryCodes searchCountriesByName:searchController.searchBar.text]; - - [self.tableView reloadData]; -} - -- (BOOL)isSearchActive { - return self.searchResults != nil; -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebasePhoneAuthUI/Sources/FUIFeatureSwitch.h b/FirebasePhoneAuthUI/Sources/FUIFeatureSwitch.h deleted file mode 100644 index e841e764d64..00000000000 --- a/FirebasePhoneAuthUI/Sources/FUIFeatureSwitch.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** @class FUIFeatureSwitch - @brief A helper class for setting and detecting os dependent features. - */ -@interface FUIFeatureSwitch : NSObject -+ (BOOL)isCountryFlagEmojiEnabled; -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebasePhoneAuthUI/Sources/FUIFeatureSwitch.m b/FirebasePhoneAuthUI/Sources/FUIFeatureSwitch.m deleted file mode 100644 index 29e7dd71562..00000000000 --- a/FirebasePhoneAuthUI/Sources/FUIFeatureSwitch.m +++ /dev/null @@ -1,34 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebasePhoneAuthUI/Sources/FUIFeatureSwitch.h" - -NS_ASSUME_NONNULL_BEGIN - -@implementation FUIFeatureSwitch -+ (BOOL)isCountryFlagEmojiEnabled { - static BOOL useEmoji = false; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - // Cutoff version of using country flag emoji is ios 8.4 - static NSOperatingSystemVersion ios8_4_0 = (NSOperatingSystemVersion){8, 4, 0}; - useEmoji = [[NSProcessInfo processInfo] isOperatingSystemAtLeastVersion:ios8_4_0]; - }); - return useEmoji; -} -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebasePhoneAuthUI/Sources/FUIPhoneAuth.m b/FirebasePhoneAuthUI/Sources/FUIPhoneAuth.m deleted file mode 100644 index b9b10590d72..00000000000 --- a/FirebasePhoneAuthUI/Sources/FUIPhoneAuth.m +++ /dev/null @@ -1,238 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -@import FirebaseAuth; - -#import "FirebasePhoneAuthUI/Sources/FUIPhoneAuth_Internal.h" - -#import - -#import "FirebasePhoneAuthUI/Sources/FUICountryCodes.h" -#import "FirebasePhoneAuthUI/Sources/FUIPhoneAuthStrings.h" -#import "FirebasePhoneAuthUI/Sources/FUIPhoneEntryViewController.h" - -NS_ASSUME_NONNULL_BEGIN - -@implementation FUIPhoneAuth { - /** The @c FUIAuth instance of the application. */ - FUIAuth *_authUI; - - /** The callback which should be invoked when the sign in flow completes (or is cancelled.) */ - FUIAuthProviderSignInCompletionBlock _pendingSignInCallback; - - /** Available country codes For the authUI to use. */ - FUICountryCodes *_countryCodes; -} - -+ (NSBundle *)bundle { - return [FUIAuthUtils bundleNamed:FUIPhoneAuthBundleName - inFrameworkBundle:[NSBundle bundleForClass:[self class]]]; -} - -- (instancetype)initWithAuthUI:(FUIAuth *)authUI { - if (self = [super init]) { - _authUI = authUI; - _countryCodes = [[FUICountryCodes alloc] init]; - } - - return self; -} - -- (instancetype)initWithAuthUI:(FUIAuth *)authUI - whitelistedCountries:(NSSet *)countries { - NSParameterAssert(countries); - NSParameterAssert(countries.count > 0); - if (self = [self initWithAuthUI:authUI]) { - [_countryCodes whitelistCountries:countries]; - NSAssert(_countryCodes.count, @"No available country code found."); - if (!_countryCodes.count) { - return nil; - } - } - return self; -} - -- (instancetype)initWithAuthUI:(FUIAuth *)authUI - blacklistedCountries:(NSSet *)countries { - if (!countries.count) { - return nil; - } - if (self = [self initWithAuthUI:authUI]) { - [_countryCodes blacklistCountries:countries]; - NSAssert(_countryCodes.count, @"No available country code found."); - if (!_countryCodes.count) { - return nil; - } - } - return self; -} - -#pragma mark - FUIAuthProvider - -- (nullable NSString *)providerID { - return @"phone"; -} - -/** @fn accessToken: - @brief Phone Auth token is matched by FirebaseUI User Access Token - */ -- (nullable NSString *)accessToken { - return nil; -} - -/** @fn idToken: - @brief Phone Auth Token Secret is matched by FirebaseUI User Id Token - */ -- (nullable NSString *)idToken { - return nil; -} - -- (NSString *)shortName { - return @"Phone"; -} - -- (NSString *)signInLabel { - return FUIPhoneAuthLocalizedString(kPAStr_SignInWithPhone); -} - -- (UIImage *)icon { - return [FUIAuthUtils imageNamed:@"ic_phone" fromBundle:[FUIPhoneAuth bundle]]; -} - -- (UIColor *)buttonBackgroundColor { - return [UIColor colorWithRed:68.0f/255.0f green:197.0f/255.0f blue:166.0f/255.0f alpha:1.0f]; -} - -- (UIColor *)buttonTextColor { - return [UIColor whiteColor]; -} - -- (void)signInWithPresentingViewController:(UIViewController *)presentingViewController { - [self signInWithPresentingViewController:presentingViewController phoneNumber:nil]; -} - - -- (void)signInWithPresentingViewController:(UIViewController *)presentingViewController - phoneNumber:(nullable NSString *)phoneNumber { - [_authUI signInWithProviderUI:self presentingViewController:presentingViewController - defaultValue:phoneNumber]; -} - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-implementations" -- (void)signInWithEmail:(nullable NSString *)email - presentingViewController:(nullable UIViewController *)presentingViewController - completion:(nullable FUIAuthProviderSignInCompletionBlock)completion { - [self signInWithDefaultValue:email - presentingViewController:presentingViewController - completion:completion]; -} -#pragma clang diagnostic pop - -- (void)signInWithDefaultValue:(nullable NSString *)defaultValue - presentingViewController:(nullable UIViewController *)presentingViewController - completion:(nullable FUIAuthProviderSignInCompletionBlock)completion { - _pendingSignInCallback = completion; - - FUIPhoneAuth *delegate = [_authUI providerWithID:@"phone"]; - if (!delegate) { - NSError *error = [FUIAuthErrorUtils errorWithCode:FUIAuthErrorCodeCantFindProvider - userInfo:@{ - FUIAuthErrorUserInfoProviderIDKey : @"phone" - }]; - [self callbackWithCredential:nil error:error result:^(FIRUser *_Nullable user, - NSError *_Nullable error) { - if (error) { - [FUIAuthBaseViewController showAlertWithMessage:error.localizedDescription - presentingViewController:presentingViewController]; - } - }]; - return; - } - - UIViewController *controller = [[FUIPhoneEntryViewController alloc] initWithAuthUI:_authUI - phoneNumber:defaultValue - countryCodes:_countryCodes]; - UINavigationController *navigationController = - [[UINavigationController alloc] initWithRootViewController:controller]; - [presentingViewController presentViewController:navigationController animated:YES completion:nil]; -} - -- (void)signOut { - return; -} - -- (BOOL)handleOpenURL:(NSURL *)URL sourceApplication:(nullable NSString *)sourceApplication { - return NO; -} - -- (void)callbackWithCredential:(nullable FIRAuthCredential *)credential - error:(nullable NSError *)error - result:(nullable FIRAuthResultCallback)result { - FUIAuthProviderSignInCompletionBlock callback = _pendingSignInCallback; - - FIRAuthResultCallback resultAuthCallback = ^(FIRUser *_Nullable user, NSError *_Nullable error) { - if (!error) { - self->_pendingSignInCallback = nil; - } - if (result) { - result(user, error); - } - }; - if (callback) { - callback(credential, error, resultAuthCallback, nil); - } -} - -+ (UIAlertController *)alertControllerForError:(NSError *)error - actionHandler:(nullable FUIAuthAlertActionHandler)actionHandler { - NSString *message; - if (error.code == FIRAuthErrorCodeInvalidPhoneNumber) { - message = FUIPhoneAuthLocalizedString(kPAStr_IncorrectPhoneMessage); - } else if (error.code == FIRAuthErrorCodeInvalidVerificationCode) { - message = FUIPhoneAuthLocalizedString(kPAStr_IncorrectCodeMessage); - } else if (error.code == FIRAuthErrorCodeTooManyRequests) { - message = FUIPhoneAuthLocalizedString(kPAStr_TooManyCodesSent); - } else if (error.code == FIRAuthErrorCodeQuotaExceeded) { - message = FUIPhoneAuthLocalizedString(kPAStr_MessageQuotaExceeded); - } else if (error.code == FIRAuthErrorCodeSessionExpired) { - message = FUIPhoneAuthLocalizedString(kPAStr_MessageExpired); - } else if ((error.code >= FIRAuthErrorCodeMissingPhoneNumber - && error.code <= FIRAuthErrorCodeAppNotVerified) - || error.code >= FIRAuthErrorCodeInternalError) { - message = FUIPhoneAuthLocalizedString(kPAStr_InternalErrorMessage); - } else { - message = error.localizedDescription; - } - UIAlertController *alertController = - [UIAlertController alertControllerWithTitle:nil - message:message - preferredStyle:UIAlertControllerStyleAlert]; - UIAlertAction *okAction = - [UIAlertAction actionWithTitle:FUIPhoneAuthLocalizedString(kPAStr_Done) - style:UIAlertActionStyleDefault - handler:^(UIAlertAction *_Nonnull action) { - if (actionHandler) { - actionHandler(); - } - }]; - [alertController addAction:okAction]; - return alertController; -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebasePhoneAuthUI/Sources/FUIPhoneAuthStrings.h b/FirebasePhoneAuthUI/Sources/FUIPhoneAuthStrings.h deleted file mode 100644 index 41830f63146..00000000000 --- a/FirebasePhoneAuthUI/Sources/FUIPhoneAuthStrings.h +++ /dev/null @@ -1,65 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -extern NSString *const kPAStr_EnterPhoneTitle; -extern NSString *const kPAStr_SignInWithPhone; -extern NSString *const kPAStr_Next; -extern NSString *const kPAStr_Verify; -extern NSString *const kPAStr_EmptyVerificationCode; -extern NSString *const kPAStr_EmptyPhoneNumber; -extern NSString *const kPAStr_PhoneNumber; -extern NSString *const kPAStr_EnterYourPhoneNumber; -extern NSString *const kPAStr_Country; -extern NSString *const kPAStr_EnterCodeDescription; -extern NSString *const kPAStr_ResendCode; -extern NSString *const kPAStr_ResendCodeTimer; -extern NSString *const kPAStr_VerifyPhoneTitle; -extern NSString *const kPAStr_ResendCodeResult; -extern NSString *const kPAStr_IncorrectCodeTitle; -extern NSString *const kPAStr_IncorrectCodeMessage; -extern NSString *const kPAStr_Done; -extern NSString *const kPAStr_Back; -extern NSString *const kPAStr_IncorrectPhoneTitle; -extern NSString *const kPAStr_IncorrectPhoneMessage; -extern NSString *const kPAStr_InternalErrorMessage; -extern NSString *const kPAStr_TooManyCodesSent; -extern NSString *const kPAStr_MessageQuotaExceeded; -extern NSString *const kPAStr_MessageExpired; -extern NSString *const kPAStr_TermsSMS; - -/* Name of the FirebasePhoneAuthUI resource bundle. */ -extern NSString *const FUIPhoneAuthBundleName; - -#ifdef __cplusplus -extern "C" { -#endif - -/** @fn FUIPhoneAuthLocalizedString - @brief Gets a localized string from a name. - @param key The key value of the string. - @return The string by the key localized in the current locale. - */ -NSString *FUIPhoneAuthLocalizedString(NSString *key); - -#ifdef __cplusplus -} -#endif - -NS_ASSUME_NONNULL_END diff --git a/FirebasePhoneAuthUI/Sources/FUIPhoneAuthStrings.m b/FirebasePhoneAuthUI/Sources/FUIPhoneAuthStrings.m deleted file mode 100644 index d38bfbdd197..00000000000 --- a/FirebasePhoneAuthUI/Sources/FUIPhoneAuthStrings.m +++ /dev/null @@ -1,66 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebasePhoneAuthUI/Sources/Public/FirebasePhoneAuthUI/FUIPhoneAuth.h" -#import "FirebasePhoneAuthUI/Sources/FUIPhoneAuthStrings.h" -#import "FirebasePhoneAuthUI/Sources/FUIPhoneAuth_Internal.h" - -NS_ASSUME_NONNULL_BEGIN - -NSString *const kPAStr_EnterPhoneTitle = @"EnterPhoneTitle"; -NSString *const kPAStr_SignInWithPhone = @"SignInWithPhone"; -NSString *const kPAStr_Next = @"Next"; -NSString *const kPAStr_Verify = @"Verify"; -NSString *const kPAStr_EmptyVerificationCode = @"EmptyVerificationCode"; -NSString *const kPAStr_EmptyPhoneNumber = @"EmptyPhoneNumber"; -NSString *const kPAStr_PhoneNumber = @"PhoneNumber"; -NSString *const kPAStr_EnterYourPhoneNumber = @"EnterYourPhoneNumber"; -NSString *const kPAStr_Country = @"Country"; -NSString *const kPAStr_EnterCodeDescription = @"EnterCodeDescription"; -NSString *const kPAStr_ResendCode = @"ResendCode"; -NSString *const kPAStr_ResendCodeTimer = @"ResendCodeTimer"; -NSString *const kPAStr_VerifyPhoneTitle = @"VerifyPhoneTitle"; -NSString *const kPAStr_ResendCodeResult = @"ResendCodeResult"; -NSString *const kPAStr_IncorrectCodeTitle = @"IncorrectCodeTitle"; -NSString *const kPAStr_IncorrectCodeMessage = @"IncorrectCodeMessage"; -NSString *const kPAStr_Done = @"Done"; -NSString *const kPAStr_Back = @"Back"; -NSString *const kPAStr_IncorrectPhoneTitle = @"IncorrectPhoneTitle"; -NSString *const kPAStr_IncorrectPhoneMessage = @"IncorrectPhoneMessage"; -NSString *const kPAStr_InternalErrorMessage = @"InternalErrorMessage"; -NSString *const kPAStr_TooManyCodesSent = @"TooManyCodesSent"; -NSString *const kPAStr_MessageQuotaExceeded = @"MessageQuotaExceeded"; -NSString *const kPAStr_MessageExpired = @"MessageExpired"; -NSString *const kPAStr_TermsSMS = @"TermsSMS"; - -#if SWIFT_PACKAGE -NSString *const FUIPhoneAuthBundleName = @"FirebaseUI_FirebasePhoneAuthUI"; -#else -NSString *const FUIPhoneAuthBundleName = @"FirebasePhoneAuthUI"; -#endif // SWIFT_PACKAGE - -/** @var kPhoneAuthProviderTableName - @brief The name of the strings table to search for localized strings. - */ -NSString *const kPhoneAuthProviderTableName = @"FirebasePhoneAuthUI"; - -NSString *FUIPhoneAuthLocalizedString(NSString *key) { - return FUILocalizedStringFromTableInBundle(key, - kPhoneAuthProviderTableName, - [FUIPhoneAuth bundle]); -} - -NS_ASSUME_NONNULL_END diff --git a/FirebasePhoneAuthUI/Sources/FUIPhoneAuth_Internal.h b/FirebasePhoneAuthUI/Sources/FUIPhoneAuth_Internal.h deleted file mode 100644 index 0f6861a3da6..00000000000 --- a/FirebasePhoneAuthUI/Sources/FUIPhoneAuth_Internal.h +++ /dev/null @@ -1,46 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebasePhoneAuthUI/Sources/Public/FirebasePhoneAuthUI/FUIPhoneAuth.h" - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface FUIPhoneAuth (Internal) - -/** @fn callbackWithCredential:error: - @brief Ends the sign-in flow by cleaning up and calling back with given credential or error. - @param credential The credential to pass back, if any. - @param error The error to pass back, if any. - @param result The result of sign-in operation using provided @c FIRAuthCredential object. - @see @c FIRAuth.signInWithCredential:completion: -*/ -- (void)callbackWithCredential:(nullable FIRAuthCredential *)credential - error:(nullable NSError *)error - result:(nullable FIRAuthResultCallback)result; - -/** @fn alertControllerForError:actionHandler: - @brief Creates alert controller for specified phone auth error. - @param error The error which should be shown in alert. - @param actionHandler The handler of alert action button, if any. - */ -+ (UIAlertController *)alertControllerForError:(NSError *)error - actionHandler:(nullable FUIAuthAlertActionHandler)actionHandler; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebasePhoneAuthUI/Sources/FUIPhoneEntryViewController.h b/FirebasePhoneAuthUI/Sources/FUIPhoneEntryViewController.h deleted file mode 100644 index 4ecaee5bc63..00000000000 --- a/FirebasePhoneAuthUI/Sources/FUIPhoneEntryViewController.h +++ /dev/null @@ -1,72 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -@class FUICountryCodes; - -NS_ASSUME_NONNULL_BEGIN - -@interface FUIPhoneEntryViewController : FUIAuthBaseViewController - -/** @fn initWithNibName:bundle:authUI: - @brief Designated initializer. - @param nibNameOrNil The name of the nib file to associate with the view controller. - @param nibBundleOrNil The bundle in which to search for the nib file. - @param authUI The @c FUIAuth instance that manages this view controller. - */ -- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil - bundle:(nullable NSBundle *)nibBundleOrNil - authUI:(FUIAuth *)authUI -__attribute__((deprecated("This is deprecated API and will be removed in a future release." - "Please use initWithNibName:bundle:authUI:phoneNumber:"))); - -/** @fn initWithAuthUI: - @brief Convenience initializer. - @param authUI The @c FUIAuth instance that manages this view controller. - */ -- (instancetype)initWithAuthUI:(FUIAuth *)authUI -__attribute__((deprecated("This is deprecated API and will be removed in a future release." - "Please use initWithNibName:bundle:authUI:phoneNumber:"))); - -/** @fn initWithAuthUI:phoneNumber:countryCodes: - @brief Convenience initializer. - @param authUI The @c FUIAuth instance that manages this view controller. - @param phoneNumber The phone number which is being verifying. - @param countryCodes Available country codes For the view controller to use. If the argument is - nil, the default @c FUICountryCodes will be used. - */ -- (instancetype)initWithAuthUI:(FUIAuth *)authUI - phoneNumber:(nullable NSString *)phoneNumber - countryCodes:(nullable FUICountryCodes *)countryCodes; - -/** @fn initWithNibName:bundle:authUI:phoneNumber:countryCodes: - @brief Designated initializer. - @param nibNameOrNil The name of the nib file to associate with the view controller. - @param nibBundleOrNil The bundle in which to search for the nib file. - @param authUI The @c FUIAuth instance that manages this view controller. - @param phoneNumber The phone number which is being verifying. - @param countryCodes Available country codes For the view controller to use. If the argument is - nil, the default @c FUICountryCodes will be used. - */ -- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil - bundle:(nullable NSBundle *)nibBundleOrNil - authUI:(FUIAuth *)authUI - phoneNumber:(nullable NSString *)phoneNumber - countryCodes:(nullable FUICountryCodes *)countryCodes NS_DESIGNATED_INITIALIZER; -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebasePhoneAuthUI/Sources/FUIPhoneEntryViewController.m b/FirebasePhoneAuthUI/Sources/FUIPhoneEntryViewController.m deleted file mode 100755 index 5ef37115bb7..00000000000 --- a/FirebasePhoneAuthUI/Sources/FUIPhoneEntryViewController.m +++ /dev/null @@ -1,376 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebasePhoneAuthUI/Sources/FUIPhoneEntryViewController.h" - -@import FirebaseAuth; - -#import - -#import "FirebasePhoneAuthUI/Sources/Public/FirebasePhoneAuthUI/FUIPhoneAuth.h" -#import "FirebasePhoneAuthUI/Sources/FUICountryTableViewController.h" -#import "FirebasePhoneAuthUI/Sources/FUIFeatureSwitch.h" -#import "FirebasePhoneAuthUI/Sources/FUIPhoneAuthStrings.h" -#import "FirebasePhoneAuthUI/Sources/FUIPhoneAuth_Internal.h" -#import "FirebasePhoneAuthUI/Sources/FUIPhoneNumber.h" -#import "FirebasePhoneAuthUI/Sources/FUIPhoneVerificationViewController.h" -#import "FirebasePhoneAuthUI/Sources/FUIPrivacyAndTermsOfServiceView+PhoneAuth.h" - - -NS_ASSUME_NONNULL_BEGIN - -NS_ENUM(NSInteger, FUIPhoneEntryRow) { - FUIPhoneEntryRowCountrySelector = 0, - FUIPhoneEntryRowPhoneNumber -}; - -/** @var kCellReuseIdentifier - @brief The reuse identifier for table view cell. - */ -static NSString *const kCellReuseIdentifier = @"cellReuseIdentifier"; - -/** @var kPhoneNumberCellAccessibilityID - @brief The Accessibility Identifier for the phone number cell. - */ -static NSString *const kPhoneNumberCellAccessibilityID = @"PhoneNumberCellAccessibilityID"; - -/** @var kNextButtonAccessibilityID - @brief The Accessibility Identifier for the @c next button. - */ -static NSString *const kNextButtonAccessibilityID = @"NextButtonAccessibilityID"; - -@interface FUIPhoneEntryViewController () -@end - -@implementation FUIPhoneEntryViewController { - /** @var _phoneNumberField - @brief The @c UITextField that user enters phone number. - */ - UITextField *_phoneNumberField; - UITextField *_countryCodeField; - FUICountryCodeInfo *_selectedCountryCode; - __weak IBOutlet UITableView *_tableView; - __weak IBOutlet FUIPrivacyAndTermsOfServiceView *_tosView; - FUICountryCodes *_countryCodes; - FUIPhoneNumber *_phoneNumber; -} - -- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil - bundle:(nullable NSBundle *)nibBundleOrNil - authUI:(FUIAuth *)authUI { - return [self initWithNibName:nibNameOrNil - bundle:nibBundleOrNil - authUI:authUI - phoneNumber:nil - countryCodes:nil]; -} - -- (instancetype)initWithAuthUI:(FUIAuth *)authUI { - return [self initWithNibName:NSStringFromClass([self class]) - bundle:[FUIPhoneAuth bundle] - authUI:authUI - phoneNumber:nil - countryCodes:nil]; -} - -- (instancetype)initWithAuthUI:(FUIAuth *)authUI - phoneNumber:(nullable NSString *)phoneNumber - countryCodes:(nullable FUICountryCodes *)countryCodes { - return [self initWithNibName:NSStringFromClass([self class]) - bundle:[FUIPhoneAuth bundle] - authUI:authUI - phoneNumber:phoneNumber - countryCodes:countryCodes]; -} - -- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil - bundle:(nullable NSBundle *)nibBundleOrNil - authUI:(FUIAuth *)authUI - phoneNumber:(nullable NSString *)phoneNumber - countryCodes:(nullable FUICountryCodes *)countryCodes { - - self = [super initWithNibName:nibNameOrNil - bundle:nibBundleOrNil - authUI:authUI]; - if (self) { - self.title = FUIPhoneAuthLocalizedString(kPAStr_EnterPhoneTitle); - _countryCodes = countryCodes ?: [[FUICountryCodes alloc] init]; - FUIPhoneAuth *provider = [authUI providerWithID:@"phone"]; - NSString *defaultCountryCode = provider.defaultCountryCode; - _countryCodes.defaultCountryCodeInfo = - [_countryCodes countryCodeInfoForCode:defaultCountryCode]; - if (phoneNumber.length) { - _phoneNumber = [[FUIPhoneNumber alloc] initWithNormalizedPhoneNumber:phoneNumber - countryCodes:_countryCodes]; - } - _selectedCountryCode = _phoneNumber.countryCode ?: - [_countryCodes defaultCountryCodeInfo]; - } - return self; -} - -- (void)viewDidLoad { - [super viewDidLoad]; - UIBarButtonItem *nextButtonItem = - [FUIAuthBaseViewController barItemWithTitle:FUIPhoneAuthLocalizedString(kPAStr_Verify) - target:self - action:@selector(next)]; - nextButtonItem.accessibilityIdentifier = kNextButtonAccessibilityID; - self.navigationItem.rightBarButtonItem = nextButtonItem; - - NSString *backLabel = FUIPhoneAuthLocalizedString(kPAStr_Back); - UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithTitle:backLabel - style:UIBarButtonItemStylePlain - target:nil - action:nil]; - [self.navigationItem setBackBarButtonItem:backItem]; - _tosView.authUI = self.authUI; - [_tosView useFullMessageWithSMSRateTerm]; - - [self enableDynamicCellHeightForTableView:_tableView]; -} - -- (void)viewWillAppear:(BOOL)animated { - [super viewWillAppear:animated]; - - if (self.navigationController.viewControllers.firstObject == self) { - if (self.authUI.providers.count != 1){ - UIBarButtonItem *cancelBarButton = - [[UIBarButtonItem alloc] initWithTitle:FUILocalizedString(kStr_Back) - style:UIBarButtonItemStylePlain - target:self - action:@selector(cancelAuthorization)]; - self.navigationItem.leftBarButtonItem = cancelBarButton; - } else if (!self.authUI.shouldHideCancelButton) { - UIBarButtonItem *cancelBarButton = - [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel - target:self - action:@selector(cancelAuthorization)]; - self.navigationItem.leftBarButtonItem = cancelBarButton; - } - self.navigationItem.backBarButtonItem = - [[UIBarButtonItem alloc] initWithTitle:FUILocalizedString(kStr_Back) - style:UIBarButtonItemStylePlain - target:nil - action:nil]; - - if (@available(iOS 13, *)) { - if (!self.authUI.isInteractiveDismissEnabled) { - self.modalInPresentation = YES; - } - } - } -} - -#pragma mark - Actions - -- (void)next { - [self onNext:_phoneNumberField.text]; -} - -- (void)onNext:(NSString *)phoneNumber { - if (!phoneNumber.length) { - [self showAlertWithMessage:FUIPhoneAuthLocalizedString(kPAStr_EmptyPhoneNumber)]; - return; - } - - [_phoneNumberField resignFirstResponder]; - [self incrementActivity]; - self.navigationItem.rightBarButtonItem.enabled = NO; - FIRPhoneAuthProvider *provider = [FIRPhoneAuthProvider providerWithAuth:self.auth]; - NSString *selectedCountryCodeString = - [NSString stringWithFormat:@"+%@", _selectedCountryCode.dialCode]; - BOOL isPhoneNumberAlreadyPrefixed = [phoneNumber hasPrefix:selectedCountryCodeString]; - NSString *phoneNumberWithCountryCode; - if (isPhoneNumberAlreadyPrefixed) { - phoneNumberWithCountryCode = phoneNumber; - } else { - phoneNumberWithCountryCode = - [NSString stringWithFormat:@"%@%@", selectedCountryCodeString, phoneNumber]; - } - [provider verifyPhoneNumber:phoneNumberWithCountryCode - UIDelegate:self - completion:^(NSString *_Nullable verificationID, NSError *_Nullable error) { - // Temporary fix to guarantee execution of the completion block on the main thread. - // TODO: Remove temporary workaround when the issue is fixed in FirebaseAuth. - dispatch_block_t completionBlock = ^() { - [self decrementActivity]; - self.navigationItem.rightBarButtonItem.enabled = YES; - - if (error) { - [self->_phoneNumberField becomeFirstResponder]; - - UIAlertController *alertController = [FUIPhoneAuth alertControllerForError:error - actionHandler:nil]; - [self presentViewController:alertController animated:YES completion:nil]; - - FUIPhoneAuth *delegate = [self.authUI providerWithID:@"phone"]; - [delegate callbackWithCredential:nil error:error result:nil]; - return; - } - - UIViewController *controller = - [[FUIPhoneVerificationViewController alloc] initWithAuthUI:self.authUI - verificationID:verificationID - phoneNumber:phoneNumberWithCountryCode]; - - [self pushViewController:controller]; - }; - if ([NSThread isMainThread]) { - completionBlock(); - } else { - dispatch_async(dispatch_get_main_queue(), completionBlock); - } - }]; -} - -- (void)onBack { - [super onBack]; -} - -- (void)textFieldDidChange { - [self didChangePhoneNumber:_phoneNumberField.text]; -} - -- (void)didChangePhoneNumber:(NSString *)phoneNumber { - self.navigationItem.rightBarButtonItem.enabled = (phoneNumber.length > 0); -} - -#pragma mark - UITableViewDataSource - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - return 2; -} - -- (UITableViewCell *)tableView:(UITableView *)tableView - cellForRowAtIndexPath:(NSIndexPath *)indexPath { - FUIAuthTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellReuseIdentifier]; - if (!cell) { - UINib *cellNib = [UINib nibWithNibName:NSStringFromClass([FUIAuthTableViewCell class]) - bundle:[FUIAuthUtils authUIBundle]]; - [tableView registerNib:cellNib forCellReuseIdentifier:kCellReuseIdentifier]; - cell = [tableView dequeueReusableCellWithIdentifier:kCellReuseIdentifier]; - } - if (indexPath.row == FUIPhoneEntryRowCountrySelector) { - cell.label.text = FUIPhoneAuthLocalizedString(kPAStr_Country); - cell.textField.enabled = NO; - cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; - _countryCodeField = cell.textField; - [self setCountryCodeValue]; - } else if (indexPath.row == FUIPhoneEntryRowPhoneNumber) { - cell.accessoryType = UITableViewCellAccessoryNone; - cell.label.text = FUIPhoneAuthLocalizedString(kPAStr_PhoneNumber); - cell.textField.enabled = YES; - cell.textField.clearButtonMode = UITextFieldViewModeWhileEditing; - cell.textField.placeholder = FUIPhoneAuthLocalizedString(kPAStr_EnterYourPhoneNumber); - cell.textField.delegate = self; - cell.accessibilityIdentifier = kPhoneNumberCellAccessibilityID; - _phoneNumberField = cell.textField; - _phoneNumberField.secureTextEntry = NO; - _phoneNumberField.autocorrectionType = UITextAutocorrectionTypeNo; - _phoneNumberField.autocapitalizationType = UITextAutocapitalizationTypeNone; - _phoneNumberField.returnKeyType = UIReturnKeyNext; - _phoneNumberField.keyboardType = UIKeyboardTypeNumberPad; - if (@available(iOS 10.0, *)) { - _phoneNumberField.textContentType = UITextContentTypeTelephoneNumber; - } - [_phoneNumberField becomeFirstResponder]; - if (_phoneNumber) { - _phoneNumberField.text = _phoneNumber.rawPhoneNumber; - } else { - _phoneNumberField.text = nil; - } - [cell.textField addTarget:self - action:@selector(textFieldDidChange) - forControlEvents:UIControlEventEditingChanged]; - [self didChangePhoneNumber:_phoneNumberField.text]; - } - cell.selectionStyle = UITableViewCellSelectionStyleNone; - return cell; -} - -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { - if (indexPath.row == FUIPhoneEntryRowCountrySelector) { - FUICountryTableViewController* countryTableViewController = - [[FUICountryTableViewController alloc] initWithCountryCodes:_countryCodes]; - countryTableViewController.delegate = self; - [self.navigationController pushViewController:countryTableViewController animated:YES]; - } -} -- (nullable id)bestProviderFromProviderIDs:(NSArray *)providerIDs { - NSArray> *providers = self.authUI.providers; - for (NSString *providerID in providerIDs) { - for (id provider in providers) { - if ([providerID isEqual:provider.providerID]) { - return provider; - } - } - } - return nil; -} - -#pragma mark - UITextFieldDelegate - -- (BOOL)textFieldShouldReturn:(UITextField *)textField { - if (textField == _phoneNumberField) { - [self onNext:_phoneNumberField.text]; - } - return NO; -} - -#pragma mark - CountryCodeDelegate - -- (void)didSelectCountry:(FUICountryCodeInfo*)countryCodeInfo { - _selectedCountryCode = countryCodeInfo; - [self setCountryCodeValue]; - [_tableView reloadData]; -} - -- (void)setCountryCodeValue { - NSString *countruCode; - if ([FUIFeatureSwitch isCountryFlagEmojiEnabled]) { - NSString *countryFlag = [_selectedCountryCode countryFlagEmoji]; - countruCode = [NSString stringWithFormat:@"%@ +%@ (%@)", countryFlag, - _selectedCountryCode.dialCode, _selectedCountryCode.localizedCountryName]; - } else { - countruCode = [NSString stringWithFormat:@"+%@ (%@)", _selectedCountryCode.dialCode, - _selectedCountryCode.localizedCountryName]; - } - _countryCodeField.text = countruCode; -} - -#pragma mark - Private - -- (void)cancelAuthorization { - NSError *error = [FUIAuthErrorUtils userCancelledSignInError]; - FUIPhoneAuth *delegate = [self.authUI providerWithID:@"phone"]; - [delegate callbackWithCredential:nil error:error result:^(FIRUser *_Nullable user, - NSError *_Nullable error) { - if (!error || error.code == FUIAuthErrorCodeUserCancelledSignIn) { - [self.navigationController dismissViewControllerAnimated:YES completion:nil]; - } else { - [self showAlertWithMessage:error.localizedDescription]; - } - }]; -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebasePhoneAuthUI/Sources/FUIPhoneNumber.h b/FirebasePhoneAuthUI/Sources/FUIPhoneNumber.h deleted file mode 100644 index 3d108c96a4f..00000000000 --- a/FirebasePhoneAuthUI/Sources/FUIPhoneNumber.h +++ /dev/null @@ -1,81 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -@class FUICountryCodeInfo; -@class FUICountryCodes; - -NS_ASSUME_NONNULL_BEGIN - -FOUNDATION_EXPORT NSString * const FUIPhoneNumberValidationErrorDomain; - -typedef NS_ENUM(NSInteger, FUIPhoneNumberValidationError) { - FUIPhoneNumberValidationErrorMissingPlus = 0, - FUIPhoneNumberValidationErrorMissingDialCode = 1, - FUIPhoneNumberValidationErrorMissingNumber = 2, -}; - -/** Encapsulates a phone number with the raw and the normalized representations */ -@interface FUIPhoneNumber : NSObject - -@property(nonatomic, readonly) FUICountryCodeInfo *countryCode; -@property(nonatomic, copy, readonly) NSString *rawPhoneNumber; -@property(nonatomic, copy, readonly) NSString *normalizedPhoneNumber; - -/** @fn initWithNormalizedPhoneNumber: - @brief Attempts to parse the given phone number into a raw phone number and country code. - Parse behavior: - If given phone number starts with a '+' character, then look for the country code matching - the prefix of the number. - Otherwise use the normalized number as the raw number, and use the default country code. - @param normalizedPhoneNumber (required) A phone number string that will be parsed into - a raw phone number and country code. - @param countryCodes (required) The @c FUICountryCodes object that contains all the available - country codes. -*/ -- (instancetype)initWithNormalizedPhoneNumber:(NSString *)normalizedPhoneNumber - countryCodes:(FUICountryCodes *)countryCodes; - -/** @fn initWithRawPhoneNumber:countryCode: - @param rawPhoneNumber (required) The raw phone number without country code - @param countryCode (required) The country code information -*/ -- (instancetype)initWithRawPhoneNumber:(NSString *)rawPhoneNumber - countryCode:(FUICountryCodeInfo *)countryCode; - -/** @fn initWithNormalizedPhoneNumber:rawPhoneNumber:countryCode: - @param normalizedPhoneNumber (optional) The phone number returned from the endpoint; - if null or empty it will be computed ('+' + rawCountryCode + rawPhoneNumber) - @param rawPhoneNumber (required) The raw phone number without country code - @param countryCode (required) The country code information -*/ -- (instancetype)initWithNormalizedPhoneNumber:(NSString *)normalizedPhoneNumber - rawPhoneNumber:(NSString *)rawPhoneNumber - countryCode:(FUICountryCodeInfo *)countryCode; - -- (instancetype)init NS_UNAVAILABLE; - -/** @fn validate: - @brief Checks if current phone number has valid international format. - @param errorRef The error which occurred, if any. - @return True if phone number format is valid. -*/ -- (BOOL)validate:(NSError *__autoreleasing _Nullable *_Nullable)errorRef; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebasePhoneAuthUI/Sources/FUIPhoneNumber.m b/FirebasePhoneAuthUI/Sources/FUIPhoneNumber.m deleted file mode 100644 index 51c287e62c3..00000000000 --- a/FirebasePhoneAuthUI/Sources/FUIPhoneNumber.m +++ /dev/null @@ -1,123 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebasePhoneAuthUI/Sources/FUIPhoneNumber.h" - -#import "FirebasePhoneAuthUI/Sources/FUICountryCodes.h" - -NSString * const FUIPhoneNumberValidationErrorDomain = @"FUIPhoneNumberValidationErrorDomain"; - -NS_ASSUME_NONNULL_BEGIN - -@implementation FUIPhoneNumber - -- (instancetype)initWithNormalizedPhoneNumber:(NSString *)normalizedPhoneNumber - countryCodes:(FUICountryCodes *)countryCodes { - NSAssert(normalizedPhoneNumber, @"normalizedPhoneNumber can't be nil"); - NSString *rawPhoneNumber; - FUICountryCodeInfo *countryCode = - [countryCodes countryCodeInfoForPhoneNumber:normalizedPhoneNumber]; - - if (countryCode) { - // Add 1 for the '+' character - NSInteger countryCodeLength = countryCode.dialCode.length + 1; - if (normalizedPhoneNumber.length >= countryCodeLength) { - rawPhoneNumber = [normalizedPhoneNumber substringFromIndex:countryCodeLength]; - } - } - if (!rawPhoneNumber) { - rawPhoneNumber = normalizedPhoneNumber; - countryCode = countryCodes.defaultCountryCodeInfo; - } - return [self initWithRawPhoneNumber:rawPhoneNumber countryCode:countryCode]; -} - -- (instancetype)initWithNormalizedPhoneNumber:(NSString *)normalizedPhoneNumber - rawPhoneNumber:(NSString *)rawPhoneNumber - countryCode:(FUICountryCodeInfo *)countryCode { - NSAssert(normalizedPhoneNumber, @"normalizedPhoneNumber can't be nil"); - NSAssert(rawPhoneNumber, @"rawPhoneNumber can't be nil"); - NSAssert(countryCode, @"countryCode can't be nil"); - if (self = [super init]) { - _countryCode = countryCode; - _rawPhoneNumber = rawPhoneNumber; - _normalizedPhoneNumber = normalizedPhoneNumber; - } - return self; -} - -- (instancetype)initWithRawPhoneNumber:(NSString *)rawPhoneNumber - countryCode:(FUICountryCodeInfo *)countryCode { - NSAssert(rawPhoneNumber, @"rawPhoneNumber can't be nil"); - NSAssert(countryCode, @"countryCode can't be nil"); - NSString *dialCode = countryCode.dialCode; - NSAssert(dialCode.length, @"dialCode can't be empty"); - if ([dialCode characterAtIndex:0] != '+') { - dialCode = [@"+" stringByAppendingString:dialCode]; - } - NSString *normalizedPhoneNumber = [NSString stringWithFormat:@"%@%@", dialCode, rawPhoneNumber]; - - return [self initWithNormalizedPhoneNumber:normalizedPhoneNumber - rawPhoneNumber:rawPhoneNumber - countryCode:countryCode]; -} - -- (BOOL)validate:(NSError *__autoreleasing _Nullable *_Nullable)errorRef { - // The first character is always the '+' - BOOL firstCharacterIsPlus = [_normalizedPhoneNumber characterAtIndex:0] == '+'; - if (!firstCharacterIsPlus) { - if (errorRef) { - NSString *message = [NSString stringWithFormat:@"Phone number %@ should start with '+'", - _normalizedPhoneNumber]; - NSDictionary *userInfo = @{ NSLocalizedDescriptionKey : message }; - *errorRef = [NSError errorWithDomain:FUIPhoneNumberValidationErrorDomain - code:FUIPhoneNumberValidationErrorMissingPlus - userInfo:userInfo]; - } - return false; - } - BOOL containsMoreThanThePlus = self.normalizedPhoneNumber.length > 1; - if (!containsMoreThanThePlus) { - if (errorRef) { - NSString *message = [NSString stringWithFormat:@"Phone number %@ should have only one '+'", - _normalizedPhoneNumber]; - NSDictionary *userInfo = @{ NSLocalizedDescriptionKey : message }; - *errorRef = [NSError errorWithDomain:FUIPhoneNumberValidationErrorDomain - code:FUIPhoneNumberValidationErrorMissingDialCode - userInfo:userInfo]; - } - return false; - } - BOOL containsMoreThanTheCountryCode = - self.normalizedPhoneNumber.length > 1 + self.countryCode.dialCode.length; - if (!containsMoreThanTheCountryCode) { - if (errorRef) { - NSString *message = - [NSString stringWithFormat:@"Phone number %@ should have only one country code", - _normalizedPhoneNumber]; - NSDictionary *userInfo = @{ NSLocalizedDescriptionKey : message }; - *errorRef = [NSError errorWithDomain:FUIPhoneNumberValidationErrorDomain - code:FUIPhoneNumberValidationErrorMissingNumber - userInfo:userInfo]; - } - return false; - } - return true; -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebasePhoneAuthUI/Sources/FUIPhoneVerificationViewController.h b/FirebasePhoneAuthUI/Sources/FUIPhoneVerificationViewController.h deleted file mode 100644 index 0ffbfda1498..00000000000 --- a/FirebasePhoneAuthUI/Sources/FUIPhoneVerificationViewController.h +++ /dev/null @@ -1,65 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface FUIPhoneVerificationViewController : FUIAuthBaseViewController - -/** @fn initWithNibName:bundle:authUI: - @brief Designated initializer. - @param nibNameOrNil The name of the nib file to associate with the view controller. - @param nibBundleOrNil The bundle in which to search for the nib file. - @param authUI The @c FUIAuth instance that manages this view controller. - */ -- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil - bundle:(nullable NSBundle *)nibBundleOrNil - authUI:(FUIAuth *)authUI NS_UNAVAILABLE; - -/** @fn initWithAuthUI: - @brief Convenience initializer. - @param authUI The @c FUIAuth instance that manages this view controller. - */ -- (instancetype)initWithAuthUI:(FUIAuth *)authUI NS_UNAVAILABLE; - -/** @fn initWithAuthUI: - @brief Convenience initializer. - @param authUI The @c FUIAuth instance that manages this view controller. - @param verificationID The verification ID obtained while verifying phone number. - @param phoneNumber The phone number which is being verifying. - */ -- (instancetype)initWithAuthUI:(FUIAuth *)authUI - verificationID:(NSString *)verificationID - phoneNumber:(NSString *)phoneNumber; - -/** @fn initWithNibName:bundle:authUI: - @brief Designated initializer. - @param nibNameOrNil The name of the nib file to associate with the view controller. - @param nibBundleOrNil The bundle in which to search for the nib file. - @param authUI The @c FUIAuth instance that manages this view controller. - @param verificationID The verification ID obtained while verifying phone number. - @param phoneNumber The phone number which is being verifying. - */ -- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil - bundle:(nullable NSBundle *)nibBundleOrNil - authUI:(FUIAuth *)authUI - verificationID:(NSString *)verificationID - phoneNumber:(NSString *)phoneNumber NS_DESIGNATED_INITIALIZER; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebasePhoneAuthUI/Sources/FUIPhoneVerificationViewController.m b/FirebasePhoneAuthUI/Sources/FUIPhoneVerificationViewController.m deleted file mode 100644 index f40a7359adf..00000000000 --- a/FirebasePhoneAuthUI/Sources/FUIPhoneVerificationViewController.m +++ /dev/null @@ -1,341 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebasePhoneAuthUI/Sources/FUIPhoneVerificationViewController.h" - -@import FirebaseAuth; - -#import - -#import "FirebasePhoneAuthUI/Sources/Public/FirebasePhoneAuthUI/FUIPhoneAuth.h" -#import "FirebasePhoneAuthUI/Sources/FUICodeField.h" -#import "FirebasePhoneAuthUI/Sources/FUIPhoneAuthStrings.h" -#import "FirebasePhoneAuthUI/Sources/FUIPhoneAuth_Internal.h" -#import "FirebasePhoneAuthUI/Sources/FUIPrivacyAndTermsOfServiceView+PhoneAuth.h" - -NS_ASSUME_NONNULL_BEGIN - -/** @var kNextButtonAccessibilityID - @brief The Accessibility Identifier for the @c next button. - */ -static NSString *const kNextButtonAccessibilityID = @"NextButtonAccessibilityID"; - -static NSTimeInterval FUIDelayInSecondsBeforeShowingResendConfirmationCode = 60; - -/** Regex pattern that matches for a TOS style link. For example: [Terms]. */ -static NSString *const kLinkPlaceholderPattern = @"\\[([^\\]]+)\\]"; - -@interface FUIPhoneVerificationViewController () -@end - -@implementation FUIPhoneVerificationViewController { - __weak IBOutlet FUICodeField *_codeField; - __weak IBOutlet UILabel *_resendConfirmationCodeTimerLabel; - __weak IBOutlet UIButton *_resendCodeButton; - __weak IBOutlet UILabel *_actionDescriptionLabel; - __weak IBOutlet UIButton *_phoneNumberButton; - __weak IBOutlet FUIPrivacyAndTermsOfServiceView *_tosView; - __weak IBOutlet UIScrollView *_scrollView; - NSString *_verificationID; - NSTimer *_resendConfirmationCodeTimer; - NSTimeInterval _resendConfirmationCodeSeconds; - NSString *_phoneNumber; -} - -- (instancetype)initWithAuthUI:(FUIAuth *)authUI - verificationID:(NSString *)verificationID - phoneNumber:(NSString *)phoneNumber{ - return [self initWithNibName:NSStringFromClass([self class]) - bundle:[FUIPhoneAuth bundle] - authUI:authUI - verificationID:verificationID - phoneNumber:phoneNumber]; -} - -- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil - bundle:(nullable NSBundle *)nibBundleOrNil - authUI:(FUIAuth *)authUI - verificationID:(NSString *)verificationID - phoneNumber:(NSString *)phoneNumber { - - self = [super initWithNibName:nibNameOrNil - bundle:nibBundleOrNil - authUI:authUI]; - if (self) { - self.title = FUIPhoneAuthLocalizedString(kPAStr_VerifyPhoneTitle); - _verificationID = [verificationID copy]; - _phoneNumber = [phoneNumber copy]; - - [_resendCodeButton setTitle:FUIPhoneAuthLocalizedString(kPAStr_ResendCode) - forState:UIControlStateNormal]; - _actionDescriptionLabel.text = - [NSString stringWithFormat:FUIPhoneAuthLocalizedString(kPAStr_EnterCodeDescription), - @(_codeField.codeLength)]; - [_phoneNumberButton setTitle:_phoneNumber forState:UIControlStateNormal]; - - [_codeField becomeFirstResponder]; - [self startResendTimer]; - } - return self; -} - -- (void)viewDidLoad { - [super viewDidLoad]; - - UIBarButtonItem *nextButtonItem = - [FUIAuthBaseViewController barItemWithTitle:FUIPhoneAuthLocalizedString(kPAStr_Next) - target:self - action:@selector(next)]; - nextButtonItem.accessibilityIdentifier = kNextButtonAccessibilityID; - self.navigationItem.rightBarButtonItem = nextButtonItem; - self.navigationItem.rightBarButtonItem.enabled = NO; - _tosView.authUI = self.authUI; - [_tosView useFooterMessage]; -} - -- (void)viewWillAppear:(BOOL)animated { - [super viewWillAppear:animated]; - [self registerForKeyboardNotifications]; -} - -- (void)viewWillDisappear:(BOOL)animated { - [super viewWillDisappear:animated]; - [self unregisterFromNotifications]; -} - -- (void)entryIsIncomplete { - self.navigationItem.rightBarButtonItem.enabled = NO; -} - -- (void) entryIsCompletedWithCode:(NSString *)code { - self.navigationItem.rightBarButtonItem.enabled = YES; -} - -#pragma mark - Actions -- (IBAction)onResendCode:(id)sender { - [_codeField clearCodeInput]; - [self startResendTimer]; - [self incrementActivity]; - [_codeField resignFirstResponder]; - FIRPhoneAuthProvider *provider = [FIRPhoneAuthProvider providerWithAuth:self.auth]; - [provider verifyPhoneNumber:_phoneNumber - UIDelegate:self - completion:^(NSString *_Nullable verificationID, NSError *_Nullable error) { - // Temporary fix to guarantee execution of the completion block on the main thread. - // TODO: Remove temporary workaround when the issue is fixed in FirebaseAuth. - dispatch_block_t completionBlock = ^() { - [self decrementActivity]; - self->_verificationID = verificationID; - [self->_codeField becomeFirstResponder]; - - if (error) { - UIAlertController *alertController = [FUIPhoneAuth alertControllerForError:error - actionHandler:^{ - [self->_codeField clearCodeInput]; - [self->_codeField becomeFirstResponder]; - }]; - [self presentViewController:alertController animated:YES completion:nil]; - return; - } - - NSString *resultMessage = - [NSString stringWithFormat:FUIPhoneAuthLocalizedString(kPAStr_ResendCodeResult), - self->_phoneNumber]; - [self showAlertWithMessage:resultMessage]; - }; - if ([NSThread isMainThread]) { - completionBlock(); - } else { - dispatch_async(dispatch_get_main_queue(), completionBlock); - } - }]; -} -- (IBAction)onPhoneNumberSelected:(id)sender { - [self onBack]; -} - -- (void)next { - [self onNext:_codeField.codeEntry]; -} - -- (void)onNext:(NSString *)verificationCode { - if (!verificationCode.length) { - [self showAlertWithMessage:FUIPhoneAuthLocalizedString(kPAStr_EmptyVerificationCode)]; - return; - } - - FIRPhoneAuthProvider *provider = [FIRPhoneAuthProvider providerWithAuth:self.auth]; - - FIRAuthCredential *credential = - [provider credentialWithVerificationID:_verificationID verificationCode:verificationCode]; - - [self incrementActivity]; - [_codeField resignFirstResponder]; - self.navigationItem.rightBarButtonItem.enabled = NO; - FUIPhoneAuth *delegate = [self.authUI providerWithID:@"phone"]; - [delegate callbackWithCredential:credential - error:nil - result:^(FIRUser *_Nullable user, NSError *_Nullable error) { - [self decrementActivity]; - self.navigationItem.rightBarButtonItem.enabled = YES; - if (!error || - error.code == FUIAuthErrorCodeUserCancelledSignIn || - error.code == FUIAuthErrorCodeMergeConflict) { - [self.navigationController dismissViewControllerAnimated:YES completion:nil]; - } else { - UIAlertController *alertController = [FUIPhoneAuth alertControllerForError:error - actionHandler:^{ - [self->_codeField clearCodeInput]; - [self->_codeField becomeFirstResponder]; - }]; - [self presentViewController:alertController animated:YES completion:nil]; - } - }]; - -} - -- (void)observeValueForKeyPath:(nullable NSString *)keyPath - ofObject:(nullable id)object - change:(nullable NSDictionary *)change - context:(nullable void *)context { - if (object == _codeField) { - self.navigationItem.rightBarButtonItem.enabled = - _codeField.codeEntry.length == _codeField.codeLength; - } -} - -#pragma mark - Private - -- (void)cancelAuthorization { - NSError *error = [FUIAuthErrorUtils userCancelledSignInError]; - FUIPhoneAuth *delegate = [self.authUI providerWithID:@"phone"]; - [delegate callbackWithCredential:nil - error:error - result:^(FIRUser *_Nullable user, NSError *_Nullable error) { - if (!error || error.code == FUIAuthErrorCodeUserCancelledSignIn) { - [self.navigationController dismissViewControllerAnimated:YES completion:nil]; - } else { - [self showAlertWithMessage:error.localizedDescription]; - } - }]; -} - -- (void)startResendTimer { - _resendConfirmationCodeSeconds = FUIDelayInSecondsBeforeShowingResendConfirmationCode; - [self updateResendLabel]; - - _resendCodeButton.hidden = YES; - _resendConfirmationCodeTimerLabel.hidden = NO; - - _resendConfirmationCodeTimer = - [NSTimer scheduledTimerWithTimeInterval:1.0 - target:self - selector:@selector(resendConfirmationCodeTick:) - userInfo:nil - repeats:YES]; -} - -- (void)cleanUpTimer { - [_resendConfirmationCodeTimer invalidate]; - _resendConfirmationCodeTimer = nil; - _resendConfirmationCodeSeconds = 0; - _resendConfirmationCodeTimerLabel.hidden = YES; -} - -- (void)resendConfirmationCodeTick:(id)sender { - _resendConfirmationCodeSeconds -= 1.0; - if (_resendConfirmationCodeSeconds <= 0){ - _resendConfirmationCodeSeconds = 0; - [self resendConfirmationCodeTimerFinished]; - } - - [self updateResendLabel]; -} - -- (void)resendConfirmationCodeTimerFinished { - [self cleanUpTimer]; - - _resendCodeButton.hidden = NO; -} - -- (void)updateResendLabel { - NSInteger minutes = (NSInteger)_resendConfirmationCodeSeconds / 60; // Integer type for truncation - NSInteger seconds = (NSInteger)round(_resendConfirmationCodeSeconds) % 60; - NSString *formattedTime = [NSString stringWithFormat:@"%ld:%02ld", (long)minutes, (long)seconds]; - - _resendConfirmationCodeTimerLabel.text = - [NSString stringWithFormat:FUIPhoneAuthLocalizedString(kPAStr_ResendCodeTimer), - formattedTime]; -} - -#pragma mark - UIKeyboard observer methods - -- (void)registerForKeyboardNotifications { - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(keyboardWasShown:) - name:UIKeyboardDidShowNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(keyboardWillBeHidden:) - name:UIKeyboardWillHideNotification object:nil]; -} - -- (void)unregisterFromNotifications { - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -- (void)keyboardWasShown:(NSNotification*)aNotification { - NSDictionary* info = [aNotification userInfo]; - CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; - CGFloat topOffset = self.navigationController.navigationBar.frame.size.height + - [UIApplication sharedApplication].statusBarFrame.size.height; - - UIEdgeInsets contentInsets = UIEdgeInsetsMake(topOffset, 0.0, kbSize.height, 0.0); - - [UIView beginAnimations:nil context:NULL]; - - NSDictionary *userInfo = [aNotification userInfo]; - [UIView setAnimationDuration:[userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue]]; - [UIView setAnimationCurve:[userInfo[UIKeyboardAnimationCurveUserInfoKey] integerValue]]; - - _scrollView.contentInset = contentInsets; - _scrollView.scrollIndicatorInsets = contentInsets; - - [_scrollView scrollRectToVisible:_codeField.frame animated:NO]; - - [UIView commitAnimations]; -} - -- (void)keyboardWillBeHidden:(NSNotification*)aNotification { - UIEdgeInsets contentInsets = UIEdgeInsetsZero; - CGFloat topOffset = self.navigationController.navigationBar.frame.size.height + - [UIApplication sharedApplication].statusBarFrame.size.height; - contentInsets.top = topOffset; - - [UIView beginAnimations:nil context:NULL]; - - NSDictionary *userInfo = [aNotification userInfo]; - [UIView setAnimationDuration:[userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue]]; - [UIView setAnimationCurve:[userInfo[UIKeyboardAnimationCurveUserInfoKey] integerValue]]; - - _scrollView.contentInset = contentInsets; - _scrollView.scrollIndicatorInsets = contentInsets; - - [UIView commitAnimations]; -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebasePhoneAuthUI/Sources/FUIPrivacyAndTermsOfServiceView+PhoneAuth.h b/FirebasePhoneAuthUI/Sources/FUIPrivacyAndTermsOfServiceView+PhoneAuth.h deleted file mode 100644 index 019648e8baf..00000000000 --- a/FirebasePhoneAuthUI/Sources/FUIPrivacyAndTermsOfServiceView+PhoneAuth.h +++ /dev/null @@ -1,31 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface FUIPrivacyAndTermsOfServiceView (PhoneAuth) - -/** @fn useFullMessageWithSMSRateTerm - @brief Display Privacy and Terms of Service message, along with a note related to SMS rate for - phone authentication. - */ -- (void)useFullMessageWithSMSRateTerm; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebasePhoneAuthUI/Sources/FUIPrivacyAndTermsOfServiceView+PhoneAuth.m b/FirebasePhoneAuthUI/Sources/FUIPrivacyAndTermsOfServiceView+PhoneAuth.m deleted file mode 100644 index d527ec1bad7..00000000000 --- a/FirebasePhoneAuthUI/Sources/FUIPrivacyAndTermsOfServiceView+PhoneAuth.m +++ /dev/null @@ -1,43 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FirebasePhoneAuthUI/Sources/FUIPrivacyAndTermsOfServiceView+PhoneAuth.h" - -#import - -#import "FirebasePhoneAuthUI/Sources/FUIPhoneAuthStrings.h" - -@implementation FUIPrivacyAndTermsOfServiceView (PhoneAuth) - -- (void)useFullMessageWithSMSRateTerm { - self.textAlignment = NSTextAlignmentLeft; - NSMutableAttributedString *fullMessage = - [[self fullPrivacyPolicyAndTOSMessageWithSMSRateInfo] mutableCopy]; - self.attributedText = fullMessage; -} - -#pragma mark - Private - -- (NSAttributedString *)fullPrivacyPolicyAndTOSMessageWithSMSRateInfo { - NSString *messageFormat = - [NSString stringWithFormat:FUIPhoneAuthLocalizedString(kPAStr_TermsSMS), - FUIPhoneAuthLocalizedString(kPAStr_Verify), @"%@", @"%@"]; - return [self privacyPolicyAndTOSMessageFromFormat:messageFormat]; - - -} - -@end diff --git a/FirebasePhoneAuthUI/Sources/Info.plist b/FirebasePhoneAuthUI/Sources/Info.plist deleted file mode 100644 index fbe1e6b3141..00000000000 --- a/FirebasePhoneAuthUI/Sources/Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - NSPrincipalClass - - - diff --git a/FirebasePhoneAuthUI/Sources/Public/FirebasePhoneAuthUI/FUIPhoneAuth.h b/FirebasePhoneAuthUI/Sources/Public/FirebasePhoneAuthUI/FUIPhoneAuth.h deleted file mode 100644 index 91c8a4b2164..00000000000 --- a/FirebasePhoneAuthUI/Sources/Public/FirebasePhoneAuthUI/FUIPhoneAuth.h +++ /dev/null @@ -1,90 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** @class FUIPhoneAuth - @brief AuthUI components for Phone Sign In. - */ -@interface FUIPhoneAuth : NSObject - -/** @property buttonAlignment - @brief The alignment of the icon and text of the button. - */ -@property(nonatomic, readwrite) FUIButtonAlignment buttonAlignment; - -/** @property defaultCountryCode - Returns the default country code. If unspecified, this will default to the United States country code. - If overwriting the default country code, this value must be set before the phone auth flow is - presented. -*/ -@property (nonatomic, copy, readwrite) NSString *defaultCountryCode; - -/** @fn bundle - @brief Returns the resource bundle required by this class. - */ -+ (NSBundle *)bundle; - -/** @fn init - @brief Please use @c initWithAuthUI: . - */ -- (instancetype)init NS_UNAVAILABLE; - -/** @fn initWithAuthUI: - @param authUI The @c FUIAuth instance that manages controllers of this provider. - */ -- (instancetype)initWithAuthUI:(FUIAuth *)authUI NS_DESIGNATED_INITIALIZER; - -/** @fn initWithAuthUI:whitelistedCountries: - @param authUI The @c FUIAuth instance that manages controllers of this provider. - @param countries A set of whitelisted country codes. Country codes are in NSString format, and - are either ISO (alpha-2) or E164 formatted. - */ -- (instancetype)initWithAuthUI:(FUIAuth *)authUI - whitelistedCountries:(NSSet *)countries; - -/** @fn initWithAuthUI:blacklistedCountries: - @param authUI The @c FUIAuth instance that manages controllers of this provider. - @param countries A set of blacklisted country codes. Country codes are in NSString format, and - are either ISO (alpha-2) or E164 formatted. - */ -- (instancetype)initWithAuthUI:(FUIAuth *)authUI - blacklistedCountries:(NSSet *)countries; - -/** @fn signInWithPresentingViewController: - @brief Signs in with phone auth provider. - @see FUIAuthDelegate.authUI:didSignInWithAuthDataResult:URL:error: for method callback. - @param presentingViewController The view controller used to present the UI. - */ -- (void)signInWithPresentingViewController:(UIViewController *)presentingViewController -__attribute__((deprecated("This is deprecated API and will be removed in a future release." - "Please use signInWithPresentingViewController:phoneNumber:"))); - -/** @fn signInWithPresentingViewController:phoneNumber: - @brief Signs in with phone auth provider. - @see FUIAuthDelegate.authUI:didSignInWithAuthDataResult:URL:error: for method callback. - @param presentingViewController The view controller used to present the UI. - @param phoneNumber The default phone number specified in the international format - e.g. +14151112233 - */ -- (void)signInWithPresentingViewController:(UIViewController *)presentingViewController - phoneNumber:(nullable NSString *)phoneNumber; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FirebasePhoneAuthUI/Sources/Public/FirebasePhoneAuthUI/FirebasePhoneAuthUI.h b/FirebasePhoneAuthUI/Sources/Public/FirebasePhoneAuthUI/FirebasePhoneAuthUI.h deleted file mode 100644 index 8dc76c0b3c7..00000000000 --- a/FirebasePhoneAuthUI/Sources/Public/FirebasePhoneAuthUI/FirebasePhoneAuthUI.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -//! Project version number for FirebasePhoneAuthUI. -FOUNDATION_EXPORT double FirebasePhoneAuthUIVersionNumber; - -//! Project version string for FirebasePhoneAuthUI. -FOUNDATION_EXPORT const unsigned char FirebasePhoneAuthUIVersionString[]; - -#import "FUIPhoneAuth.h" diff --git a/FirebasePhoneAuthUI/Sources/Resources/FUICountryTableViewController.xib b/FirebasePhoneAuthUI/Sources/Resources/FUICountryTableViewController.xib deleted file mode 100644 index 898ee20d763..00000000000 --- a/FirebasePhoneAuthUI/Sources/Resources/FUICountryTableViewController.xib +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FirebasePhoneAuthUI/Sources/Resources/FUIPhoneEntryViewController.xib b/FirebasePhoneAuthUI/Sources/Resources/FUIPhoneEntryViewController.xib deleted file mode 100644 index 09e19db35ed..00000000000 --- a/FirebasePhoneAuthUI/Sources/Resources/FUIPhoneEntryViewController.xib +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FirebasePhoneAuthUI/Sources/Resources/FUIPhoneVerificationViewController.xib b/FirebasePhoneAuthUI/Sources/Resources/FUIPhoneVerificationViewController.xib deleted file mode 100644 index 710c3406560..00000000000 --- a/FirebasePhoneAuthUI/Sources/Resources/FUIPhoneVerificationViewController.xib +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FirebasePhoneAuthUI/Sources/Resources/country-codes.json b/FirebasePhoneAuthUI/Sources/Resources/country-codes.json deleted file mode 100644 index 54acf0761b6..00000000000 --- a/FirebasePhoneAuthUI/Sources/Resources/country-codes.json +++ /dev/null @@ -1,3226 +0,0 @@ -[ - { - "e164_cc": "93", - "iso2_cc": "AF", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Afghanistan", - "example": "701234567", - "display_name": "Afghanistan (AF) [+93]", - "full_example_with_plus_sign": "+93701234567", - "display_name_no_e164_cc": "Afghanistan (AF)", - "e164_key": "93-AF-0" - }, - { - "e164_cc": "358", - "iso2_cc": "AX", - "e164_sc": 0, - "geographic": true, - "level": 3, - "name": "Åland Islands", - "example": "412345678", - "display_name": "Åland Islands (AX) [+358]", - "full_example_with_plus_sign": "+358412345678", - "display_name_no_e164_cc": "Åland Islands (AX)", - "e164_key": "358-AX-0" - }, - { - "e164_cc": "355", - "iso2_cc": "AL", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Albania", - "example": "661234567", - "display_name": "Albania (AL) [+355]", - "full_example_with_plus_sign": "+355661234567", - "display_name_no_e164_cc": "Albania (AL)", - "e164_key": "355-AL-0" - }, - { - "e164_cc": "213", - "iso2_cc": "DZ", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Algeria", - "example": "551234567", - "display_name": "Algeria (DZ) [+213]", - "full_example_with_plus_sign": "+213551234567", - "display_name_no_e164_cc": "Algeria (DZ)", - "e164_key": "213-DZ-0" - }, - { - "e164_cc": "1", - "iso2_cc": "AS", - "e164_sc": 0, - "geographic": true, - "level": 2, - "name": "American Samoa", - "example": "6847331234", - "display_name": "American Samoa (AS) [+1]", - "full_example_with_plus_sign": "+16847331234", - "display_name_no_e164_cc": "American Samoa (AS)", - "e164_key": "1-AS-0" - }, - { - "e164_cc": "376", - "iso2_cc": "AD", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Andorra", - "example": "312345", - "display_name": "Andorra (AD) [+376]", - "full_example_with_plus_sign": "+376312345", - "display_name_no_e164_cc": "Andorra (AD)", - "e164_key": "376-AD-0" - }, - { - "e164_cc": "244", - "iso2_cc": "AO", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Angola", - "example": "923123456", - "display_name": "Angola (AO) [+244]", - "full_example_with_plus_sign": "+244923123456", - "display_name_no_e164_cc": "Angola (AO)", - "e164_key": "244-AO-0" - }, - { - "e164_cc": "1", - "iso2_cc": "AI", - "e164_sc": 0, - "geographic": true, - "level": 2, - "name": "Anguilla", - "example": "2642351234", - "display_name": "Anguilla (AI) [+1]", - "full_example_with_plus_sign": "+12642351234", - "display_name_no_e164_cc": "Anguilla (AI)", - "e164_key": "1-AI-0" - }, - { - "e164_cc": "1", - "iso2_cc": "AG", - "e164_sc": 0, - "geographic": true, - "level": 2, - "name": "Antigua and Barbuda", - "example": "2684641234", - "display_name": "Antigua and Barbuda (AG) [+1]", - "full_example_with_plus_sign": "+12684641234", - "display_name_no_e164_cc": "Antigua and Barbuda (AG)", - "e164_key": "1-AG-0" - }, - { - "e164_cc": "54", - "iso2_cc": "AR", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Argentina", - "example": "91123456789", - "display_name": "Argentina (AR) [+54]", - "full_example_with_plus_sign": "+5491123456789", - "display_name_no_e164_cc": "Argentina (AR)", - "e164_key": "54-AR-0" - }, - { - "e164_cc": "374", - "iso2_cc": "AM", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Armenia", - "example": "77123456", - "display_name": "Armenia (AM) [+374]", - "full_example_with_plus_sign": "+37477123456", - "display_name_no_e164_cc": "Armenia (AM)", - "e164_key": "374-AM-0" - }, - { - "e164_cc": "297", - "iso2_cc": "AW", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Aruba", - "example": "5601234", - "display_name": "Aruba (AW) [+297]", - "full_example_with_plus_sign": "+2975601234", - "display_name_no_e164_cc": "Aruba (AW)", - "e164_key": "297-AW-0" - }, - { - "e164_cc": "247", - "iso2_cc": "AC", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Ascension Island", - "example": "", - "display_name": "Ascension Island (AC) [+247]", - "full_example_with_plus_sign": null, - "display_name_no_e164_cc": "Ascension Island (AC)", - "e164_key": "247-AC-0" - }, - { - "e164_cc": "61", - "iso2_cc": "AU", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Australia", - "example": "412345678", - "display_name": "Australia (AU) [+61]", - "full_example_with_plus_sign": "+61412345678", - "display_name_no_e164_cc": "Australia (AU)", - "e164_key": "61-AU-0" - }, - { - "e164_cc": "43", - "iso2_cc": "AT", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Austria", - "example": "644123456", - "display_name": "Austria (AT) [+43]", - "full_example_with_plus_sign": "+43644123456", - "display_name_no_e164_cc": "Austria (AT)", - "e164_key": "43-AT-0" - }, - { - "e164_cc": "994", - "iso2_cc": "AZ", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Azerbaijan", - "example": "401234567", - "display_name": "Azerbaijan (AZ) [+994]", - "full_example_with_plus_sign": "+994401234567", - "display_name_no_e164_cc": "Azerbaijan (AZ)", - "e164_key": "994-AZ-0" - }, - { - "e164_cc": "1", - "iso2_cc": "BS", - "e164_sc": 0, - "geographic": true, - "level": 2, - "name": "Bahamas", - "example": "2423591234", - "display_name": "Bahamas (BS) [+1]", - "full_example_with_plus_sign": "+12423591234", - "display_name_no_e164_cc": "Bahamas (BS)", - "e164_key": "1-BS-0" - }, - { - "e164_cc": "973", - "iso2_cc": "BH", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Bahrain", - "example": "36001234", - "display_name": "Bahrain (BH) [+973]", - "full_example_with_plus_sign": "+97336001234", - "display_name_no_e164_cc": "Bahrain (BH)", - "e164_key": "973-BH-0" - }, - { - "e164_cc": "880", - "iso2_cc": "BD", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Bangladesh", - "example": "1812345678", - "display_name": "Bangladesh (BD) [+880]", - "full_example_with_plus_sign": "+8801812345678", - "display_name_no_e164_cc": "Bangladesh (BD)", - "e164_key": "880-BD-0" - }, - { - "e164_cc": "1", - "iso2_cc": "BB", - "e164_sc": 0, - "geographic": true, - "level": 2, - "name": "Barbados", - "example": "2462501234", - "display_name": "Barbados (BB) [+1]", - "full_example_with_plus_sign": "+12462501234", - "display_name_no_e164_cc": "Barbados (BB)", - "e164_key": "1-BB-0" - }, - { - "e164_cc": "375", - "iso2_cc": "BY", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Belarus", - "example": "294911911", - "display_name": "Belarus (BY) [+375]", - "full_example_with_plus_sign": "+375294911911", - "display_name_no_e164_cc": "Belarus (BY)", - "e164_key": "375-BY-0" - }, - { - "e164_cc": "32", - "iso2_cc": "BE", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Belgium", - "example": "470123456", - "display_name": "Belgium (BE) [+32]", - "full_example_with_plus_sign": "+32470123456", - "display_name_no_e164_cc": "Belgium (BE)", - "e164_key": "32-BE-0" - }, - { - "e164_cc": "501", - "iso2_cc": "BZ", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Belize", - "example": "6221234", - "display_name": "Belize (BZ) [+501]", - "full_example_with_plus_sign": "+5016221234", - "display_name_no_e164_cc": "Belize (BZ)", - "e164_key": "501-BZ-0" - }, - { - "e164_cc": "229", - "iso2_cc": "BJ", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Benin", - "example": "90011234", - "display_name": "Benin (BJ) [+229]", - "full_example_with_plus_sign": "+22990011234", - "display_name_no_e164_cc": "Benin (BJ)", - "e164_key": "229-BJ-0" - }, - { - "e164_cc": "1", - "iso2_cc": "BM", - "e164_sc": 0, - "geographic": true, - "level": 2, - "name": "Bermuda", - "example": "4413701234", - "display_name": "Bermuda (BM) [+1]", - "full_example_with_plus_sign": "+14413701234", - "display_name_no_e164_cc": "Bermuda (BM)", - "e164_key": "1-BM-0" - }, - { - "e164_cc": "975", - "iso2_cc": "BT", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Bhutan", - "example": "17123456", - "display_name": "Bhutan (BT) [+975]", - "full_example_with_plus_sign": "+97517123456", - "display_name_no_e164_cc": "Bhutan (BT)", - "e164_key": "975-BT-0" - }, - { - "e164_cc": "591", - "iso2_cc": "BO", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Bolivia", - "example": "71234567", - "display_name": "Bolivia (BO) [+591]", - "full_example_with_plus_sign": "+59171234567", - "display_name_no_e164_cc": "Bolivia (BO)", - "e164_key": "591-BO-0" - }, - { - "e164_cc": "387", - "iso2_cc": "BA", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Bosnia and Herzegovina", - "example": "61123456", - "display_name": "Bosnia and Herzegovina (BA) [+387]", - "full_example_with_plus_sign": "+38761123456", - "display_name_no_e164_cc": "Bosnia and Herzegovina (BA)", - "e164_key": "387-BA-0" - }, - { - "e164_cc": "267", - "iso2_cc": "BW", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Botswana", - "example": "71123456", - "display_name": "Botswana (BW) [+267]", - "full_example_with_plus_sign": "+26771123456", - "display_name_no_e164_cc": "Botswana (BW)", - "e164_key": "267-BW-0" - }, - { - "e164_cc": "55", - "iso2_cc": "BR", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Brazil", - "example": "1161234567", - "display_name": "Brazil (BR) [+55]", - "full_example_with_plus_sign": "+551161234567", - "display_name_no_e164_cc": "Brazil (BR)", - "e164_key": "55-BR-0" - }, - { - "e164_cc": "246", - "iso2_cc": "IO", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "British Indian Ocean Territory", - "example": "3801234", - "display_name": "British Indian Ocean Territory (IO) [+246]", - "full_example_with_plus_sign": "+2463801234", - "display_name_no_e164_cc": "British Indian Ocean Territory (IO)", - "e164_key": "246-IO-0" - }, - { - "e164_cc": "1", - "iso2_cc": "VG", - "e164_sc": 0, - "geographic": true, - "level": 2, - "name": "British Virgin Islands", - "example": "2843001234", - "display_name": "British Virgin Islands (VG) [+1]", - "full_example_with_plus_sign": "+12843001234", - "display_name_no_e164_cc": "British Virgin Islands (VG)", - "e164_key": "1-VG-0" - }, - { - "e164_cc": "673", - "iso2_cc": "BN", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Brunei", - "example": "7123456", - "display_name": "Brunei (BN) [+673]", - "full_example_with_plus_sign": "+6737123456", - "display_name_no_e164_cc": "Brunei (BN)", - "e164_key": "673-BN-0" - }, - { - "e164_cc": "359", - "iso2_cc": "BG", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Bulgaria", - "example": "48123456", - "display_name": "Bulgaria (BG) [+359]", - "full_example_with_plus_sign": "+35948123456", - "display_name_no_e164_cc": "Bulgaria (BG)", - "e164_key": "359-BG-0" - }, - { - "e164_cc": "226", - "iso2_cc": "BF", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Burkina Faso", - "example": "70123456", - "display_name": "Burkina Faso (BF) [+226]", - "full_example_with_plus_sign": "+22670123456", - "display_name_no_e164_cc": "Burkina Faso (BF)", - "e164_key": "226-BF-0" - }, - { - "e164_cc": "257", - "iso2_cc": "BI", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Burundi", - "example": "79561234", - "display_name": "Burundi (BI) [+257]", - "full_example_with_plus_sign": "+25779561234", - "display_name_no_e164_cc": "Burundi (BI)", - "e164_key": "257-BI-0" - }, - { - "e164_cc": "855", - "iso2_cc": "KH", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Cambodia", - "example": "91234567", - "display_name": "Cambodia (KH) [+855]", - "full_example_with_plus_sign": "+85591234567", - "display_name_no_e164_cc": "Cambodia (KH)", - "e164_key": "855-KH-0" - }, - { - "e164_cc": "237", - "iso2_cc": "CM", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Cameroon", - "example": "71234567", - "display_name": "Cameroon (CM) [+237]", - "full_example_with_plus_sign": "+23771234567", - "display_name_no_e164_cc": "Cameroon (CM)", - "e164_key": "237-CM-0" - }, - { - "e164_cc": "1", - "iso2_cc": "CA", - "e164_sc": 0, - "geographic": true, - "level": 2, - "name": "Canada", - "example": "2042345678", - "display_name": "Canada (CA) [+1]", - "full_example_with_plus_sign": "+12042345678", - "display_name_no_e164_cc": "Canada (CA)", - "e164_key": "1-CA-0" - }, - { - "e164_cc": "238", - "iso2_cc": "CV", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Cape Verde", - "example": "9911234", - "display_name": "Cape Verde (CV) [+238]", - "full_example_with_plus_sign": "+2389911234", - "display_name_no_e164_cc": "Cape Verde (CV)", - "e164_key": "238-CV-0" - }, - { - "e164_cc": "599", - "iso2_cc": "BQ", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Caribbean Netherlands", - "example": "3181234", - "display_name": "Caribbean Netherlands (BQ) [+599]", - "full_example_with_plus_sign": "+5993181234", - "display_name_no_e164_cc": "Caribbean Netherlands (BQ)", - "e164_key": "599-BQ-0" - }, - { - "e164_cc": "1", - "iso2_cc": "KY", - "e164_sc": 0, - "geographic": true, - "level": 2, - "name": "Cayman Islands", - "example": "3453231234", - "display_name": "Cayman Islands (KY) [+1]", - "full_example_with_plus_sign": "+13453231234", - "display_name_no_e164_cc": "Cayman Islands (KY)", - "e164_key": "1-KY-0" - }, - { - "e164_cc": "236", - "iso2_cc": "CF", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Central African Republic", - "example": "70012345", - "display_name": "Central African Republic (CF) [+236]", - "full_example_with_plus_sign": "+23670012345", - "display_name_no_e164_cc": "Central African Republic (CF)", - "e164_key": "236-CF-0" - }, - { - "e164_cc": "235", - "iso2_cc": "TD", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Chad", - "example": "63012345", - "display_name": "Chad (TD) [+235]", - "full_example_with_plus_sign": "+23563012345", - "display_name_no_e164_cc": "Chad (TD)", - "e164_key": "235-TD-0" - }, - { - "e164_cc": "56", - "iso2_cc": "CL", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Chile", - "example": "961234567", - "display_name": "Chile (CL) [+56]", - "full_example_with_plus_sign": "+56961234567", - "display_name_no_e164_cc": "Chile (CL)", - "e164_key": "56-CL-0" - }, - { - "e164_cc": "86", - "iso2_cc": "CN", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "China", - "example": "13123456789", - "display_name": "China (CN) [+86]", - "full_example_with_plus_sign": "+8613123456789", - "display_name_no_e164_cc": "China (CN)", - "e164_key": "86-CN-0" - }, - { - "e164_cc": "61", - "iso2_cc": "CX", - "e164_sc": 0, - "geographic": true, - "level": 3, - "name": "Christmas Island", - "example": "412345678", - "display_name": "Christmas Island (CX) [+61]", - "full_example_with_plus_sign": "+61412345678", - "display_name_no_e164_cc": "Christmas Island (CX)", - "e164_key": "61-CX-0" - }, - { - "e164_cc": "61", - "iso2_cc": "CC", - "e164_sc": 0, - "geographic": true, - "level": 3, - "name": "Cocos [Keeling] Islands", - "example": "412345678", - "display_name": "Cocos [Keeling] Islands (CC) [+61]", - "full_example_with_plus_sign": "+61412345678", - "display_name_no_e164_cc": "Cocos [Keeling] Islands (CC)", - "e164_key": "61-CC-0" - }, - { - "e164_cc": "57", - "iso2_cc": "CO", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Colombia", - "example": "3211234567", - "display_name": "Colombia (CO) [+57]", - "full_example_with_plus_sign": "+573211234567", - "display_name_no_e164_cc": "Colombia (CO)", - "e164_key": "57-CO-0" - }, - { - "e164_cc": "269", - "iso2_cc": "KM", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Comoros", - "example": "3212345", - "display_name": "Comoros (KM) [+269]", - "full_example_with_plus_sign": "+2693212345", - "display_name_no_e164_cc": "Comoros (KM)", - "e164_key": "269-KM-0" - }, - { - "e164_cc": "243", - "iso2_cc": "CD", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Democratic Republic Congo", - "example": "991234567", - "display_name": "Democratic Republic Congo (CD) [+243]", - "full_example_with_plus_sign": "+243991234567", - "display_name_no_e164_cc": "Democratic Republic Congo (CD)", - "e164_key": "243-CD-0" - }, - { - "e164_cc": "242", - "iso2_cc": "CG", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Republic of Congo", - "example": "061234567", - "display_name": "Republic of Congo (CG) [+242]", - "full_example_with_plus_sign": "+242061234567", - "display_name_no_e164_cc": "Republic of Congo (CG)", - "e164_key": "242-CG-0" - }, - { - "e164_cc": "682", - "iso2_cc": "CK", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Cook Islands", - "example": "71234", - "display_name": "Cook Islands (CK) [+682]", - "full_example_with_plus_sign": "+68271234", - "display_name_no_e164_cc": "Cook Islands (CK)", - "e164_key": "682-CK-0" - }, - { - "e164_cc": "506", - "iso2_cc": "CR", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Costa Rica", - "example": "83123456", - "display_name": "Costa Rica (CR) [+506]", - "full_example_with_plus_sign": "+50683123456", - "display_name_no_e164_cc": "Costa Rica (CR)", - "e164_key": "506-CR-0" - }, - { - "e164_cc": "225", - "iso2_cc": "CI", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Côte d'Ivoire", - "example": "01234567", - "display_name": "Côte d'Ivoire (CI) [+225]", - "full_example_with_plus_sign": "+22501234567", - "display_name_no_e164_cc": "Côte d'Ivoire (CI)", - "e164_key": "225-CI-0" - }, - { - "e164_cc": "385", - "iso2_cc": "HR", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Croatia", - "example": "912345678", - "display_name": "Croatia (HR) [+385]", - "full_example_with_plus_sign": "+385912345678", - "display_name_no_e164_cc": "Croatia (HR)", - "e164_key": "385-HR-0" - }, - { - "e164_cc": "53", - "iso2_cc": "CU", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Cuba", - "example": "51234567", - "display_name": "Cuba (CU) [+53]", - "full_example_with_plus_sign": "+5351234567", - "display_name_no_e164_cc": "Cuba (CU)", - "e164_key": "53-CU-0" - }, - { - "e164_cc": "599", - "iso2_cc": "CW", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Curaçao", - "example": "95181234", - "display_name": "Curaçao (CW) [+599]", - "full_example_with_plus_sign": "+59995181234", - "display_name_no_e164_cc": "Curaçao (CW)", - "e164_key": "599-CW-0" - }, - { - "e164_cc": "357", - "iso2_cc": "CY", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Cyprus", - "example": "96123456", - "display_name": "Cyprus (CY) [+357]", - "full_example_with_plus_sign": "+35796123456", - "display_name_no_e164_cc": "Cyprus (CY)", - "e164_key": "357-CY-0" - }, - { - "e164_cc": "420", - "iso2_cc": "CZ", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Czech Republic", - "example": "601123456", - "display_name": "Czech Republic (CZ) [+420]", - "full_example_with_plus_sign": "+420601123456", - "display_name_no_e164_cc": "Czech Republic (CZ)", - "e164_key": "420-CZ-0" - }, - { - "e164_cc": "45", - "iso2_cc": "DK", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Denmark", - "example": "20123456", - "display_name": "Denmark (DK) [+45]", - "full_example_with_plus_sign": "+4520123456", - "display_name_no_e164_cc": "Denmark (DK)", - "e164_key": "45-DK-0" - }, - { - "e164_cc": "253", - "iso2_cc": "DJ", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Djibouti", - "example": "77831001", - "display_name": "Djibouti (DJ) [+253]", - "full_example_with_plus_sign": "+25377831001", - "display_name_no_e164_cc": "Djibouti (DJ)", - "e164_key": "253-DJ-0" - }, - { - "e164_cc": "1", - "iso2_cc": "DM", - "e164_sc": 0, - "geographic": true, - "level": 2, - "name": "Dominica", - "example": "7672251234", - "display_name": "Dominica (DM) [+1]", - "full_example_with_plus_sign": "+17672251234", - "display_name_no_e164_cc": "Dominica (DM)", - "e164_key": "1-DM-0" - }, - { - "e164_cc": "1", - "iso2_cc": "DO", - "e164_sc": 0, - "geographic": true, - "level": 2, - "name": "Dominican Republic", - "example": "8092345678", - "display_name": "Dominican Republic (DO) [+1]", - "full_example_with_plus_sign": "+18092345678", - "display_name_no_e164_cc": "Dominican Republic (DO)", - "e164_key": "1-DO-0" - }, - { - "e164_cc": "670", - "iso2_cc": "TL", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "East Timor", - "example": "77212345", - "display_name": "East Timor (TL) [+670]", - "full_example_with_plus_sign": "+67077212345", - "display_name_no_e164_cc": "East Timor (TL)", - "e164_key": "670-TL-0" - }, - { - "e164_cc": "593", - "iso2_cc": "EC", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Ecuador", - "example": "99123456", - "display_name": "Ecuador (EC) [+593]", - "full_example_with_plus_sign": "+59399123456", - "display_name_no_e164_cc": "Ecuador (EC)", - "e164_key": "593-EC-0" - }, - { - "e164_cc": "20", - "iso2_cc": "EG", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Egypt", - "example": "1001234567", - "display_name": "Egypt (EG) [+20]", - "full_example_with_plus_sign": "+201001234567", - "display_name_no_e164_cc": "Egypt (EG)", - "e164_key": "20-EG-0" - }, - { - "e164_cc": "503", - "iso2_cc": "SV", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "El Salvador", - "example": "70123456", - "display_name": "El Salvador (SV) [+503]", - "full_example_with_plus_sign": "+50370123456", - "display_name_no_e164_cc": "El Salvador (SV)", - "e164_key": "503-SV-0" - }, - { - "e164_cc": "240", - "iso2_cc": "GQ", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Equatorial Guinea", - "example": "222123456", - "display_name": "Equatorial Guinea (GQ) [+240]", - "full_example_with_plus_sign": "+240222123456", - "display_name_no_e164_cc": "Equatorial Guinea (GQ)", - "e164_key": "240-GQ-0" - }, - { - "e164_cc": "291", - "iso2_cc": "ER", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Eritrea", - "example": "7123456", - "display_name": "Eritrea (ER) [+291]", - "full_example_with_plus_sign": "+2917123456", - "display_name_no_e164_cc": "Eritrea (ER)", - "e164_key": "291-ER-0" - }, - { - "e164_cc": "372", - "iso2_cc": "EE", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Estonia", - "example": "51234567", - "display_name": "Estonia (EE) [+372]", - "full_example_with_plus_sign": "+37251234567", - "display_name_no_e164_cc": "Estonia (EE)", - "e164_key": "372-EE-0" - }, - { - "e164_cc": "251", - "iso2_cc": "ET", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Ethiopia", - "example": "911234567", - "display_name": "Ethiopia (ET) [+251]", - "full_example_with_plus_sign": "+251911234567", - "display_name_no_e164_cc": "Ethiopia (ET)", - "e164_key": "251-ET-0" - }, - { - "e164_cc": "500", - "iso2_cc": "FK", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Falkland Islands [Islas Malvinas]", - "example": "51234", - "display_name": "Falkland Islands [Islas Malvinas] (FK) [+500]", - "full_example_with_plus_sign": "+50051234", - "display_name_no_e164_cc": "Falkland Islands [Islas Malvinas] (FK)", - "e164_key": "500-FK-0" - }, - { - "e164_cc": "298", - "iso2_cc": "FO", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Faroe Islands", - "example": "211234", - "display_name": "Faroe Islands (FO) [+298]", - "full_example_with_plus_sign": "+298211234", - "display_name_no_e164_cc": "Faroe Islands (FO)", - "e164_key": "298-FO-0" - }, - { - "e164_cc": "679", - "iso2_cc": "FJ", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Fiji", - "example": "7012345", - "display_name": "Fiji (FJ) [+679]", - "full_example_with_plus_sign": "+6797012345", - "display_name_no_e164_cc": "Fiji (FJ)", - "e164_key": "679-FJ-0" - }, - { - "e164_cc": "358", - "iso2_cc": "FI", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Finland", - "example": "412345678", - "display_name": "Finland (FI) [+358]", - "full_example_with_plus_sign": "+358412345678", - "display_name_no_e164_cc": "Finland (FI)", - "e164_key": "358-FI-0" - }, - { - "e164_cc": "33", - "iso2_cc": "FR", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "France", - "example": "612345678", - "display_name": "France (FR) [+33]", - "full_example_with_plus_sign": "+33612345678", - "display_name_no_e164_cc": "France (FR)", - "e164_key": "33-FR-0" - }, - { - "e164_cc": "594", - "iso2_cc": "GF", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "French Guiana", - "example": "694201234", - "display_name": "French Guiana (GF) [+594]", - "full_example_with_plus_sign": "+594694201234", - "display_name_no_e164_cc": "French Guiana (GF)", - "e164_key": "594-GF-0" - }, - { - "e164_cc": "689", - "iso2_cc": "PF", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "French Polynesia", - "example": "212345", - "display_name": "French Polynesia (PF) [+689]", - "full_example_with_plus_sign": "+689212345", - "display_name_no_e164_cc": "French Polynesia (PF)", - "e164_key": "689-PF-0" - }, - { - "e164_cc": "241", - "iso2_cc": "GA", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Gabon", - "example": "06031234", - "display_name": "Gabon (GA) [+241]", - "full_example_with_plus_sign": "+24106031234", - "display_name_no_e164_cc": "Gabon (GA)", - "e164_key": "241-GA-0" - }, - { - "e164_cc": "220", - "iso2_cc": "GM", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Gambia", - "example": "3012345", - "display_name": "Gambia (GM) [+220]", - "full_example_with_plus_sign": "+2203012345", - "display_name_no_e164_cc": "Gambia (GM)", - "e164_key": "220-GM-0" - }, - { - "e164_cc": "995", - "iso2_cc": "GE", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Georgia", - "example": "555123456", - "display_name": "Georgia (GE) [+995]", - "full_example_with_plus_sign": "+995555123456", - "display_name_no_e164_cc": "Georgia (GE)", - "e164_key": "995-GE-0" - }, - { - "e164_cc": "49", - "iso2_cc": "DE", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Germany", - "example": "15123456789", - "display_name": "Germany (DE) [+49]", - "full_example_with_plus_sign": "+4915123456789", - "display_name_no_e164_cc": "Germany (DE)", - "e164_key": "49-DE-0" - }, - { - "e164_cc": "233", - "iso2_cc": "GH", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Ghana", - "example": "231234567", - "display_name": "Ghana (GH) [+233]", - "full_example_with_plus_sign": "+233231234567", - "display_name_no_e164_cc": "Ghana (GH)", - "e164_key": "233-GH-0" - }, - { - "e164_cc": "350", - "iso2_cc": "GI", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Gibraltar", - "example": "57123456", - "display_name": "Gibraltar (GI) [+350]", - "full_example_with_plus_sign": "+35057123456", - "display_name_no_e164_cc": "Gibraltar (GI)", - "e164_key": "350-GI-0" - }, - { - "e164_cc": "30", - "iso2_cc": "GR", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Greece", - "example": "6912345678", - "display_name": "Greece (GR) [+30]", - "full_example_with_plus_sign": "+306912345678", - "display_name_no_e164_cc": "Greece (GR)", - "e164_key": "30-GR-0" - }, - { - "e164_cc": "299", - "iso2_cc": "GL", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Greenland", - "example": "221234", - "display_name": "Greenland (GL) [+299]", - "full_example_with_plus_sign": "+299221234", - "display_name_no_e164_cc": "Greenland (GL)", - "e164_key": "299-GL-0" - }, - { - "e164_cc": "1", - "iso2_cc": "GD", - "e164_sc": 0, - "geographic": true, - "level": 2, - "name": "Grenada", - "example": "4734031234", - "display_name": "Grenada (GD) [+1]", - "full_example_with_plus_sign": "+14734031234", - "display_name_no_e164_cc": "Grenada (GD)", - "e164_key": "1-GD-0" - }, - { - "e164_cc": "590", - "iso2_cc": "GP", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Guadeloupe", - "example": "690301234", - "display_name": "Guadeloupe (GP) [+590]", - "full_example_with_plus_sign": "+590690301234", - "display_name_no_e164_cc": "Guadeloupe (GP)", - "e164_key": "590-GP-0" - }, - { - "e164_cc": "1", - "iso2_cc": "GU", - "e164_sc": 0, - "geographic": true, - "level": 2, - "name": "Guam", - "example": "6713001234", - "display_name": "Guam (GU) [+1]", - "full_example_with_plus_sign": "+16713001234", - "display_name_no_e164_cc": "Guam (GU)", - "e164_key": "1-GU-0" - }, - { - "e164_cc": "502", - "iso2_cc": "GT", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Guatemala", - "example": "51234567", - "display_name": "Guatemala (GT) [+502]", - "full_example_with_plus_sign": "+50251234567", - "display_name_no_e164_cc": "Guatemala (GT)", - "e164_key": "502-GT-0" - }, - { - "e164_cc": "44", - "iso2_cc": "GG", - "e164_sc": 0, - "geographic": true, - "level": 2, - "name": "Guernsey", - "example": "7781123456", - "display_name": "Guernsey (GG) [+44]", - "full_example_with_plus_sign": "+447781123456", - "display_name_no_e164_cc": "Guernsey (GG)", - "e164_key": "44-GG-0" - }, - { - "e164_cc": "224", - "iso2_cc": "GN", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Guinea Conakry", - "example": "60201234", - "display_name": "Guinea Conakry (GN) [+224]", - "full_example_with_plus_sign": "+22460201234", - "display_name_no_e164_cc": "Guinea Conakry (GN)", - "e164_key": "224-GN-0" - }, - { - "e164_cc": "245", - "iso2_cc": "GW", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Guinea-Bissau", - "example": "5012345", - "display_name": "Guinea-Bissau (GW) [+245]", - "full_example_with_plus_sign": "+2455012345", - "display_name_no_e164_cc": "Guinea-Bissau (GW)", - "e164_key": "245-GW-0" - }, - { - "e164_cc": "592", - "iso2_cc": "GY", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Guyana", - "example": "6091234", - "display_name": "Guyana (GY) [+592]", - "full_example_with_plus_sign": "+5926091234", - "display_name_no_e164_cc": "Guyana (GY)", - "e164_key": "592-GY-0" - }, - { - "e164_cc": "509", - "iso2_cc": "HT", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Haiti", - "example": "34101234", - "display_name": "Haiti (HT) [+509]", - "full_example_with_plus_sign": "+50934101234", - "display_name_no_e164_cc": "Haiti (HT)", - "e164_key": "509-HT-0" - }, - { - "e164_cc": "672", - "iso2_cc": "HM", - "e164_sc": 0, - "geographic": true, - "level": 3, - "name": "Heard Island and McDonald Islands", - "example": "", - "display_name": "Heard Island and McDonald Islands (HM) [+672]", - "full_example_with_plus_sign": null, - "display_name_no_e164_cc": "Heard Island and McDonald Islands (HM)", - "e164_key": "672-HM-0" - }, - { - "e164_cc": "504", - "iso2_cc": "HN", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Honduras", - "example": "91234567", - "display_name": "Honduras (HN) [+504]", - "full_example_with_plus_sign": "+50491234567", - "display_name_no_e164_cc": "Honduras (HN)", - "e164_key": "504-HN-0" - }, - { - "e164_cc": "852", - "iso2_cc": "HK", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Hong Kong", - "example": "51234567", - "display_name": "Hong Kong (HK) [+852]", - "full_example_with_plus_sign": "+85251234567", - "display_name_no_e164_cc": "Hong Kong (HK)", - "e164_key": "852-HK-0" - }, - { - "e164_cc": "36", - "iso2_cc": "HU", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Hungary", - "example": "201234567", - "display_name": "Hungary (HU) [+36]", - "full_example_with_plus_sign": "+36201234567", - "display_name_no_e164_cc": "Hungary (HU)", - "e164_key": "36-HU-0" - }, - { - "e164_cc": "354", - "iso2_cc": "IS", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Iceland", - "example": "6101234", - "display_name": "Iceland (IS) [+354]", - "full_example_with_plus_sign": "+3546101234", - "display_name_no_e164_cc": "Iceland (IS)", - "e164_key": "354-IS-0" - }, - { - "e164_cc": "91", - "iso2_cc": "IN", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "India", - "example": "9123456789", - "display_name": "India (IN) [+91]", - "full_example_with_plus_sign": "+919123456789", - "display_name_no_e164_cc": "India (IN)", - "e164_key": "91-IN-0" - }, - { - "e164_cc": "62", - "iso2_cc": "ID", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Indonesia", - "example": "812345678", - "display_name": "Indonesia (ID) [+62]", - "full_example_with_plus_sign": "+62812345678", - "display_name_no_e164_cc": "Indonesia (ID)", - "e164_key": "62-ID-0" - }, - { - "e164_cc": "98", - "iso2_cc": "IR", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Iran", - "example": "9123456789", - "display_name": "Iran (IR) [+98]", - "full_example_with_plus_sign": "+989123456789", - "display_name_no_e164_cc": "Iran (IR)", - "e164_key": "98-IR-0" - }, - { - "e164_cc": "964", - "iso2_cc": "IQ", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Iraq", - "example": "7912345678", - "display_name": "Iraq (IQ) [+964]", - "full_example_with_plus_sign": "+9647912345678", - "display_name_no_e164_cc": "Iraq (IQ)", - "e164_key": "964-IQ-0" - }, - { - "e164_cc": "353", - "iso2_cc": "IE", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Ireland", - "example": "850123456", - "display_name": "Ireland (IE) [+353]", - "full_example_with_plus_sign": "+353850123456", - "display_name_no_e164_cc": "Ireland (IE)", - "e164_key": "353-IE-0" - }, - { - "e164_cc": "44", - "iso2_cc": "IM", - "e164_sc": 0, - "geographic": true, - "level": 2, - "name": "Isle of Man", - "example": "7924123456", - "display_name": "Isle of Man (IM) [+44]", - "full_example_with_plus_sign": "+447924123456", - "display_name_no_e164_cc": "Isle of Man (IM)", - "e164_key": "44-IM-0" - }, - { - "e164_cc": "972", - "iso2_cc": "IL", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Israel", - "example": "501234567", - "display_name": "Israel (IL) [+972]", - "full_example_with_plus_sign": "+972501234567", - "display_name_no_e164_cc": "Israel (IL)", - "e164_key": "972-IL-0" - }, - { - "e164_cc": "39", - "iso2_cc": "IT", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Italy", - "example": "3123456789", - "display_name": "Italy (IT) [+39]", - "full_example_with_plus_sign": "+393123456789", - "display_name_no_e164_cc": "Italy (IT)", - "e164_key": "39-IT-0" - }, - { - "e164_cc": "1", - "iso2_cc": "JM", - "e164_sc": 0, - "geographic": true, - "level": 2, - "name": "Jamaica", - "example": "8762101234", - "display_name": "Jamaica (JM) [+1]", - "full_example_with_plus_sign": "+18762101234", - "display_name_no_e164_cc": "Jamaica (JM)", - "e164_key": "1-JM-0" - }, - { - "e164_cc": "81", - "iso2_cc": "JP", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Japan", - "example": "7012345678", - "display_name": "Japan (JP) [+81]", - "full_example_with_plus_sign": "+817012345678", - "display_name_no_e164_cc": "Japan (JP)", - "e164_key": "81-JP-0" - }, - { - "e164_cc": "44", - "iso2_cc": "JE", - "e164_sc": 0, - "geographic": true, - "level": 2, - "name": "Jersey", - "example": "7797123456", - "display_name": "Jersey (JE) [+44]", - "full_example_with_plus_sign": "+447797123456", - "display_name_no_e164_cc": "Jersey (JE)", - "e164_key": "44-JE-0" - }, - { - "e164_cc": "962", - "iso2_cc": "JO", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Jordan", - "example": "790123456", - "display_name": "Jordan (JO) [+962]", - "full_example_with_plus_sign": "+962790123456", - "display_name_no_e164_cc": "Jordan (JO)", - "e164_key": "962-JO-0" - }, - { - "e164_cc": "7", - "iso2_cc": "KZ", - "e164_sc": 0, - "geographic": true, - "level": 2, - "name": "Kazakhstan", - "example": "7710009998", - "display_name": "Kazakhstan (KZ) [+7]", - "full_example_with_plus_sign": "+77710009998", - "display_name_no_e164_cc": "Kazakhstan (KZ)", - "e164_key": "7-KZ-0" - }, - { - "e164_cc": "254", - "iso2_cc": "KE", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Kenya", - "example": "712123456", - "display_name": "Kenya (KE) [+254]", - "full_example_with_plus_sign": "+254712123456", - "display_name_no_e164_cc": "Kenya (KE)", - "e164_key": "254-KE-0" - }, - { - "e164_cc": "686", - "iso2_cc": "KI", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Kiribati", - "example": "61234", - "display_name": "Kiribati (KI) [+686]", - "full_example_with_plus_sign": "+68661234", - "display_name_no_e164_cc": "Kiribati (KI)", - "e164_key": "686-KI-0" - }, - { - "e164_cc": "383", - "iso2_cc": "XK", - "e164_sc": 0, - "geographic": true, - "level": 2, - "name": "Kosovo", - "example": "", - "display_name": "Kosovo (XK) [+383]", - "full_example_with_plus_sign": null, - "display_name_no_e164_cc": "Kosovo (XK)", - "e164_key": "383-XK-0" - }, - { - "e164_cc": "381", - "iso2_cc": "XK", - "e164_sc": 0, - "geographic": true, - "level": 2, - "name": "Kosovo", - "example": "", - "display_name": "Kosovo (XK) [+381]", - "full_example_with_plus_sign": null, - "display_name_no_e164_cc": "Kosovo (XK)", - "e164_key": "381-XK-0" - }, - { - "e164_cc": "386", - "iso2_cc": "XK", - "e164_sc": 0, - "geographic": true, - "level": 2, - "name": "Kosovo", - "example": "", - "display_name": "Kosovo (XK) [+386]", - "full_example_with_plus_sign": null, - "display_name_no_e164_cc": "Kosovo (XK)", - "e164_key": "386-XK-0" - }, - { - "e164_cc": "965", - "iso2_cc": "KW", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Kuwait", - "example": "50012345", - "display_name": "Kuwait (KW) [+965]", - "full_example_with_plus_sign": "+96550012345", - "display_name_no_e164_cc": "Kuwait (KW)", - "e164_key": "965-KW-0" - }, - { - "e164_cc": "996", - "iso2_cc": "KG", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Kyrgyzstan", - "example": "700123456", - "display_name": "Kyrgyzstan (KG) [+996]", - "full_example_with_plus_sign": "+996700123456", - "display_name_no_e164_cc": "Kyrgyzstan (KG)", - "e164_key": "996-KG-0" - }, - { - "e164_cc": "856", - "iso2_cc": "LA", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Laos", - "example": "2023123456", - "display_name": "Laos (LA) [+856]", - "full_example_with_plus_sign": "+8562023123456", - "display_name_no_e164_cc": "Laos (LA)", - "e164_key": "856-LA-0" - }, - { - "e164_cc": "371", - "iso2_cc": "LV", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Latvia", - "example": "21234567", - "display_name": "Latvia (LV) [+371]", - "full_example_with_plus_sign": "+37121234567", - "display_name_no_e164_cc": "Latvia (LV)", - "e164_key": "371-LV-0" - }, - { - "e164_cc": "961", - "iso2_cc": "LB", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Lebanon", - "example": "71123456", - "display_name": "Lebanon (LB) [+961]", - "full_example_with_plus_sign": "+96171123456", - "display_name_no_e164_cc": "Lebanon (LB)", - "e164_key": "961-LB-0" - }, - { - "e164_cc": "266", - "iso2_cc": "LS", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Lesotho", - "example": "50123456", - "display_name": "Lesotho (LS) [+266]", - "full_example_with_plus_sign": "+26650123456", - "display_name_no_e164_cc": "Lesotho (LS)", - "e164_key": "266-LS-0" - }, - { - "e164_cc": "231", - "iso2_cc": "LR", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Liberia", - "example": "4612345", - "display_name": "Liberia (LR) [+231]", - "full_example_with_plus_sign": "+2314612345", - "display_name_no_e164_cc": "Liberia (LR)", - "e164_key": "231-LR-0" - }, - { - "e164_cc": "218", - "iso2_cc": "LY", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Libya", - "example": "912345678", - "display_name": "Libya (LY) [+218]", - "full_example_with_plus_sign": "+218912345678", - "display_name_no_e164_cc": "Libya (LY)", - "e164_key": "218-LY-0" - }, - { - "e164_cc": "423", - "iso2_cc": "LI", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Liechtenstein", - "example": "661234567", - "display_name": "Liechtenstein (LI) [+423]", - "full_example_with_plus_sign": "+423661234567", - "display_name_no_e164_cc": "Liechtenstein (LI)", - "e164_key": "423-LI-0" - }, - { - "e164_cc": "370", - "iso2_cc": "LT", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Lithuania", - "example": "61234567", - "display_name": "Lithuania (LT) [+370]", - "full_example_with_plus_sign": "+37061234567", - "display_name_no_e164_cc": "Lithuania (LT)", - "e164_key": "370-LT-0" - }, - { - "e164_cc": "352", - "iso2_cc": "LU", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Luxembourg", - "example": "628123456", - "display_name": "Luxembourg (LU) [+352]", - "full_example_with_plus_sign": "+352628123456", - "display_name_no_e164_cc": "Luxembourg (LU)", - "e164_key": "352-LU-0" - }, - { - "e164_cc": "853", - "iso2_cc": "MO", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Macau", - "example": "66123456", - "display_name": "Macau (MO) [+853]", - "full_example_with_plus_sign": "+85366123456", - "display_name_no_e164_cc": "Macau (MO)", - "e164_key": "853-MO-0" - }, - { - "e164_cc": "389", - "iso2_cc": "MK", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Macedonia", - "example": "72345678", - "display_name": "Macedonia (MK) [+389]", - "full_example_with_plus_sign": "+38972345678", - "display_name_no_e164_cc": "Macedonia (MK)", - "e164_key": "389-MK-0" - }, - { - "e164_cc": "261", - "iso2_cc": "MG", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Madagascar", - "example": "301234567", - "display_name": "Madagascar (MG) [+261]", - "full_example_with_plus_sign": "+261301234567", - "display_name_no_e164_cc": "Madagascar (MG)", - "e164_key": "261-MG-0" - }, - { - "e164_cc": "265", - "iso2_cc": "MW", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Malawi", - "example": "991234567", - "display_name": "Malawi (MW) [+265]", - "full_example_with_plus_sign": "+265991234567", - "display_name_no_e164_cc": "Malawi (MW)", - "e164_key": "265-MW-0" - }, - { - "e164_cc": "60", - "iso2_cc": "MY", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Malaysia", - "example": "123456789", - "display_name": "Malaysia (MY) [+60]", - "full_example_with_plus_sign": "+60123456789", - "display_name_no_e164_cc": "Malaysia (MY)", - "e164_key": "60-MY-0" - }, - { - "e164_cc": "960", - "iso2_cc": "MV", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Maldives", - "example": "7712345", - "display_name": "Maldives (MV) [+960]", - "full_example_with_plus_sign": "+9607712345", - "display_name_no_e164_cc": "Maldives (MV)", - "e164_key": "960-MV-0" - }, - { - "e164_cc": "223", - "iso2_cc": "ML", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Mali", - "example": "65012345", - "display_name": "Mali (ML) [+223]", - "full_example_with_plus_sign": "+22365012345", - "display_name_no_e164_cc": "Mali (ML)", - "e164_key": "223-ML-0" - }, - { - "e164_cc": "356", - "iso2_cc": "MT", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Malta", - "example": "96961234", - "display_name": "Malta (MT) [+356]", - "full_example_with_plus_sign": "+35696961234", - "display_name_no_e164_cc": "Malta (MT)", - "e164_key": "356-MT-0" - }, - { - "e164_cc": "692", - "iso2_cc": "MH", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Marshall Islands", - "example": "2351234", - "display_name": "Marshall Islands (MH) [+692]", - "full_example_with_plus_sign": "+6922351234", - "display_name_no_e164_cc": "Marshall Islands (MH)", - "e164_key": "692-MH-0" - }, - { - "e164_cc": "596", - "iso2_cc": "MQ", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Martinique", - "example": "696201234", - "display_name": "Martinique (MQ) [+596]", - "full_example_with_plus_sign": "+596696201234", - "display_name_no_e164_cc": "Martinique (MQ)", - "e164_key": "596-MQ-0" - }, - { - "e164_cc": "222", - "iso2_cc": "MR", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Mauritania", - "example": "22123456", - "display_name": "Mauritania (MR) [+222]", - "full_example_with_plus_sign": "+22222123456", - "display_name_no_e164_cc": "Mauritania (MR)", - "e164_key": "222-MR-0" - }, - { - "e164_cc": "230", - "iso2_cc": "MU", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Mauritius", - "example": "2512345", - "display_name": "Mauritius (MU) [+230]", - "full_example_with_plus_sign": "+2302512345", - "display_name_no_e164_cc": "Mauritius (MU)", - "e164_key": "230-MU-0" - }, - { - "e164_cc": "262", - "iso2_cc": "YT", - "e164_sc": 0, - "geographic": true, - "level": 2, - "name": "Mayotte", - "example": "639123456", - "display_name": "Mayotte (YT) [+262]", - "full_example_with_plus_sign": "+262639123456", - "display_name_no_e164_cc": "Mayotte (YT)", - "e164_key": "262-YT-0" - }, - { - "e164_cc": "52", - "iso2_cc": "MX", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Mexico", - "example": "12221234567", - "display_name": "Mexico (MX) [+52]", - "full_example_with_plus_sign": "+5212221234567", - "display_name_no_e164_cc": "Mexico (MX)", - "e164_key": "52-MX-0" - }, - { - "e164_cc": "691", - "iso2_cc": "FM", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Micronesia", - "example": "3501234", - "display_name": "Micronesia (FM) [+691]", - "full_example_with_plus_sign": "+6913501234", - "display_name_no_e164_cc": "Micronesia (FM)", - "e164_key": "691-FM-0" - }, - { - "e164_cc": "373", - "iso2_cc": "MD", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Moldova", - "example": "65012345", - "display_name": "Moldova (MD) [+373]", - "full_example_with_plus_sign": "+37365012345", - "display_name_no_e164_cc": "Moldova (MD)", - "e164_key": "373-MD-0" - }, - { - "e164_cc": "377", - "iso2_cc": "MC", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Monaco", - "example": "612345678", - "display_name": "Monaco (MC) [+377]", - "full_example_with_plus_sign": "+377612345678", - "display_name_no_e164_cc": "Monaco (MC)", - "e164_key": "377-MC-0" - }, - { - "e164_cc": "976", - "iso2_cc": "MN", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Mongolia", - "example": "88123456", - "display_name": "Mongolia (MN) [+976]", - "full_example_with_plus_sign": "+97688123456", - "display_name_no_e164_cc": "Mongolia (MN)", - "e164_key": "976-MN-0" - }, - { - "e164_cc": "382", - "iso2_cc": "ME", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Montenegro", - "example": "67622901", - "display_name": "Montenegro (ME) [+382]", - "full_example_with_plus_sign": "+38267622901", - "display_name_no_e164_cc": "Montenegro (ME)", - "e164_key": "382-ME-0" - }, - { - "e164_cc": "1", - "iso2_cc": "MS", - "e164_sc": 0, - "geographic": true, - "level": 2, - "name": "Montserrat", - "example": "6644923456", - "display_name": "Montserrat (MS) [+1]", - "full_example_with_plus_sign": "+16644923456", - "display_name_no_e164_cc": "Montserrat (MS)", - "e164_key": "1-MS-0" - }, - { - "e164_cc": "212", - "iso2_cc": "MA", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Morocco", - "example": "650123456", - "display_name": "Morocco (MA) [+212]", - "full_example_with_plus_sign": "+212650123456", - "display_name_no_e164_cc": "Morocco (MA)", - "e164_key": "212-MA-0" - }, - { - "e164_cc": "258", - "iso2_cc": "MZ", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Mozambique", - "example": "821234567", - "display_name": "Mozambique (MZ) [+258]", - "full_example_with_plus_sign": "+258821234567", - "display_name_no_e164_cc": "Mozambique (MZ)", - "e164_key": "258-MZ-0" - }, - { - "e164_cc": "95", - "iso2_cc": "MM", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Myanmar [Burma]", - "example": "92123456", - "display_name": "Myanmar [Burma] (MM) [+95]", - "full_example_with_plus_sign": "+9592123456", - "display_name_no_e164_cc": "Myanmar [Burma] (MM)", - "e164_key": "95-MM-0" - }, - { - "e164_cc": "264", - "iso2_cc": "NA", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Namibia", - "example": "811234567", - "display_name": "Namibia (NA) [+264]", - "full_example_with_plus_sign": "+264811234567", - "display_name_no_e164_cc": "Namibia (NA)", - "e164_key": "264-NA-0" - }, - { - "e164_cc": "674", - "iso2_cc": "NR", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Nauru", - "example": "5551234", - "display_name": "Nauru (NR) [+674]", - "full_example_with_plus_sign": "+6745551234", - "display_name_no_e164_cc": "Nauru (NR)", - "e164_key": "674-NR-0" - }, - { - "e164_cc": "977", - "iso2_cc": "NP", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Nepal", - "example": "9841234567", - "display_name": "Nepal (NP) [+977]", - "full_example_with_plus_sign": "+9779841234567", - "display_name_no_e164_cc": "Nepal (NP)", - "e164_key": "977-NP-0" - }, - { - "e164_cc": "31", - "iso2_cc": "NL", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Netherlands", - "example": "612345678", - "display_name": "Netherlands (NL) [+31]", - "full_example_with_plus_sign": "+31612345678", - "display_name_no_e164_cc": "Netherlands (NL)", - "e164_key": "31-NL-0" - }, - { - "e164_cc": "687", - "iso2_cc": "NC", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "New Caledonia", - "example": "751234", - "display_name": "New Caledonia (NC) [+687]", - "full_example_with_plus_sign": "+687751234", - "display_name_no_e164_cc": "New Caledonia (NC)", - "e164_key": "687-NC-0" - }, - { - "e164_cc": "64", - "iso2_cc": "NZ", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "New Zealand", - "example": "211234567", - "display_name": "New Zealand (NZ) [+64]", - "full_example_with_plus_sign": "+64211234567", - "display_name_no_e164_cc": "New Zealand (NZ)", - "e164_key": "64-NZ-0" - }, - { - "e164_cc": "505", - "iso2_cc": "NI", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Nicaragua", - "example": "81234567", - "display_name": "Nicaragua (NI) [+505]", - "full_example_with_plus_sign": "+50581234567", - "display_name_no_e164_cc": "Nicaragua (NI)", - "e164_key": "505-NI-0" - }, - { - "e164_cc": "227", - "iso2_cc": "NE", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Niger", - "example": "93123456", - "display_name": "Niger (NE) [+227]", - "full_example_with_plus_sign": "+22793123456", - "display_name_no_e164_cc": "Niger (NE)", - "e164_key": "227-NE-0" - }, - { - "e164_cc": "234", - "iso2_cc": "NG", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Nigeria", - "example": "8021234567", - "display_name": "Nigeria (NG) [+234]", - "full_example_with_plus_sign": "+2348021234567", - "display_name_no_e164_cc": "Nigeria (NG)", - "e164_key": "234-NG-0" - }, - { - "e164_cc": "683", - "iso2_cc": "NU", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Niue", - "example": "1234", - "display_name": "Niue (NU) [+683]", - "full_example_with_plus_sign": "+6831234", - "display_name_no_e164_cc": "Niue (NU)", - "e164_key": "683-NU-0" - }, - { - "e164_cc": "672", - "iso2_cc": "NF", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Norfolk Island", - "example": "381234", - "display_name": "Norfolk Island (NF) [+672]", - "full_example_with_plus_sign": "+672381234", - "display_name_no_e164_cc": "Norfolk Island (NF)", - "e164_key": "672-NF-0" - }, - { - "e164_cc": "850", - "iso2_cc": "KP", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "North Korea", - "example": "1921234567", - "display_name": "North Korea (KP) [+850]", - "full_example_with_plus_sign": "+8501921234567", - "display_name_no_e164_cc": "North Korea (KP)", - "e164_key": "850-KP-0" - }, - { - "e164_cc": "1", - "iso2_cc": "MP", - "e164_sc": 0, - "geographic": true, - "level": 2, - "name": "Northern Mariana Islands", - "example": "6702345678", - "display_name": "Northern Mariana Islands (MP) [+1]", - "full_example_with_plus_sign": "+16702345678", - "display_name_no_e164_cc": "Northern Mariana Islands (MP)", - "e164_key": "1-MP-0" - }, - { - "e164_cc": "47", - "iso2_cc": "NO", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Norway", - "example": "41234567", - "display_name": "Norway (NO) [+47]", - "full_example_with_plus_sign": "+4741234567", - "display_name_no_e164_cc": "Norway (NO)", - "e164_key": "47-NO-0" - }, - { - "e164_cc": "968", - "iso2_cc": "OM", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Oman", - "example": "92123456", - "display_name": "Oman (OM) [+968]", - "full_example_with_plus_sign": "+96892123456", - "display_name_no_e164_cc": "Oman (OM)", - "e164_key": "968-OM-0" - }, - { - "e164_cc": "92", - "iso2_cc": "PK", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Pakistan", - "example": "3012345678", - "display_name": "Pakistan (PK) [+92]", - "full_example_with_plus_sign": "+923012345678", - "display_name_no_e164_cc": "Pakistan (PK)", - "e164_key": "92-PK-0" - }, - { - "e164_cc": "680", - "iso2_cc": "PW", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Palau", - "example": "6201234", - "display_name": "Palau (PW) [+680]", - "full_example_with_plus_sign": "+6806201234", - "display_name_no_e164_cc": "Palau (PW)", - "e164_key": "680-PW-0" - }, - { - "e164_cc": "970", - "iso2_cc": "PS", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Palestinian Territories", - "example": "599123456", - "display_name": "Palestinian Territories (PS) [+970]", - "full_example_with_plus_sign": "+970599123456", - "display_name_no_e164_cc": "Palestinian Territories (PS)", - "e164_key": "970-PS-0" - }, - { - "e164_cc": "507", - "iso2_cc": "PA", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Panama", - "example": "60012345", - "display_name": "Panama (PA) [+507]", - "full_example_with_plus_sign": "+50760012345", - "display_name_no_e164_cc": "Panama (PA)", - "e164_key": "507-PA-0" - }, - { - "e164_cc": "675", - "iso2_cc": "PG", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Papua New Guinea", - "example": "6812345", - "display_name": "Papua New Guinea (PG) [+675]", - "full_example_with_plus_sign": "+6756812345", - "display_name_no_e164_cc": "Papua New Guinea (PG)", - "e164_key": "675-PG-0" - }, - { - "e164_cc": "595", - "iso2_cc": "PY", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Paraguay", - "example": "961456789", - "display_name": "Paraguay (PY) [+595]", - "full_example_with_plus_sign": "+595961456789", - "display_name_no_e164_cc": "Paraguay (PY)", - "e164_key": "595-PY-0" - }, - { - "e164_cc": "51", - "iso2_cc": "PE", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Peru", - "example": "912345678", - "display_name": "Peru (PE) [+51]", - "full_example_with_plus_sign": "+51912345678", - "display_name_no_e164_cc": "Peru (PE)", - "e164_key": "51-PE-0" - }, - { - "e164_cc": "63", - "iso2_cc": "PH", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Philippines", - "example": "9051234567", - "display_name": "Philippines (PH) [+63]", - "full_example_with_plus_sign": "+639051234567", - "display_name_no_e164_cc": "Philippines (PH)", - "e164_key": "63-PH-0" - }, - { - "e164_cc": "48", - "iso2_cc": "PL", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Poland", - "example": "512345678", - "display_name": "Poland (PL) [+48]", - "full_example_with_plus_sign": "+48512345678", - "display_name_no_e164_cc": "Poland (PL)", - "e164_key": "48-PL-0" - }, - { - "e164_cc": "351", - "iso2_cc": "PT", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Portugal", - "example": "912345678", - "display_name": "Portugal (PT) [+351]", - "full_example_with_plus_sign": "+351912345678", - "display_name_no_e164_cc": "Portugal (PT)", - "e164_key": "351-PT-0" - }, - { - "e164_cc": "1", - "iso2_cc": "PR", - "e164_sc": 0, - "geographic": true, - "level": 2, - "name": "Puerto Rico", - "example": "7872345678", - "display_name": "Puerto Rico (PR) [+1]", - "full_example_with_plus_sign": "+17872345678", - "display_name_no_e164_cc": "Puerto Rico (PR)", - "e164_key": "1-PR-0" - }, - { - "e164_cc": "974", - "iso2_cc": "QA", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Qatar", - "example": "33123456", - "display_name": "Qatar (QA) [+974]", - "full_example_with_plus_sign": "+97433123456", - "display_name_no_e164_cc": "Qatar (QA)", - "e164_key": "974-QA-0" - }, - { - "e164_cc": "262", - "iso2_cc": "RE", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Réunion", - "example": "692123456", - "display_name": "Réunion (RE) [+262]", - "full_example_with_plus_sign": "+262692123456", - "display_name_no_e164_cc": "Réunion (RE)", - "e164_key": "262-RE-0" - }, - { - "e164_cc": "40", - "iso2_cc": "RO", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Romania", - "example": "712345678", - "display_name": "Romania (RO) [+40]", - "full_example_with_plus_sign": "+40712345678", - "display_name_no_e164_cc": "Romania (RO)", - "e164_key": "40-RO-0" - }, - { - "e164_cc": "7", - "iso2_cc": "RU", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Russia", - "example": "9123456789", - "display_name": "Russia (RU) [+7]", - "full_example_with_plus_sign": "+79123456789", - "display_name_no_e164_cc": "Russia (RU)", - "e164_key": "7-RU-0" - }, - { - "e164_cc": "250", - "iso2_cc": "RW", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Rwanda", - "example": "720123456", - "display_name": "Rwanda (RW) [+250]", - "full_example_with_plus_sign": "+250720123456", - "display_name_no_e164_cc": "Rwanda (RW)", - "e164_key": "250-RW-0" - }, - { - "e164_cc": "590", - "iso2_cc": "BL", - "e164_sc": 0, - "geographic": true, - "level": 2, - "name": "Saint Barthélemy", - "example": "690221234", - "display_name": "Saint Barthélemy (BL) [+590]", - "full_example_with_plus_sign": "+590690221234", - "display_name_no_e164_cc": "Saint Barthélemy (BL)", - "e164_key": "590-BL-0" - }, - { - "e164_cc": "290", - "iso2_cc": "SH", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Saint Helena", - "example": "", - "display_name": "Saint Helena (SH) [+290]", - "full_example_with_plus_sign": null, - "display_name_no_e164_cc": "Saint Helena (SH)", - "e164_key": "290-SH-0" - }, - { - "e164_cc": "1", - "iso2_cc": "KN", - "e164_sc": 0, - "geographic": true, - "level": 2, - "name": "St. Kitts", - "example": "8695561234", - "display_name": "St. Kitts (KN) [+1]", - "full_example_with_plus_sign": "+18695561234", - "display_name_no_e164_cc": "St. Kitts (KN)", - "e164_key": "1-KN-0" - }, - { - "e164_cc": "1", - "iso2_cc": "LC", - "e164_sc": 0, - "geographic": true, - "level": 2, - "name": "St. Lucia", - "example": "7582845678", - "display_name": "St. Lucia (LC) [+1]", - "full_example_with_plus_sign": "+17582845678", - "display_name_no_e164_cc": "St. Lucia (LC)", - "e164_key": "1-LC-0" - }, - { - "e164_cc": "590", - "iso2_cc": "MF", - "e164_sc": 0, - "geographic": true, - "level": 2, - "name": "Saint Martin", - "example": "690221234", - "display_name": "Saint Martin (MF) [+590]", - "full_example_with_plus_sign": "+590690221234", - "display_name_no_e164_cc": "Saint Martin (MF)", - "e164_key": "590-MF-0" - }, - { - "e164_cc": "508", - "iso2_cc": "PM", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Saint Pierre and Miquelon", - "example": "551234", - "display_name": "Saint Pierre and Miquelon (PM) [+508]", - "full_example_with_plus_sign": "+508551234", - "display_name_no_e164_cc": "Saint Pierre and Miquelon (PM)", - "e164_key": "508-PM-0" - }, - { - "e164_cc": "1", - "iso2_cc": "VC", - "e164_sc": 0, - "geographic": true, - "level": 2, - "name": "St. Vincent", - "example": "7844301234", - "display_name": "St. Vincent (VC) [+1]", - "full_example_with_plus_sign": "+17844301234", - "display_name_no_e164_cc": "St. Vincent (VC)", - "e164_key": "1-VC-0" - }, - { - "e164_cc": "685", - "iso2_cc": "WS", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Samoa", - "example": "601234", - "display_name": "Samoa (WS) [+685]", - "full_example_with_plus_sign": "+685601234", - "display_name_no_e164_cc": "Samoa (WS)", - "e164_key": "685-WS-0" - }, - { - "e164_cc": "378", - "iso2_cc": "SM", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "San Marino", - "example": "66661212", - "display_name": "San Marino (SM) [+378]", - "full_example_with_plus_sign": "+37866661212", - "display_name_no_e164_cc": "San Marino (SM)", - "e164_key": "378-SM-0" - }, - { - "e164_cc": "239", - "iso2_cc": "ST", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "São Tomé and Príncipe", - "example": "9812345", - "display_name": "São Tomé and Príncipe (ST) [+239]", - "full_example_with_plus_sign": "+2399812345", - "display_name_no_e164_cc": "São Tomé and Príncipe (ST)", - "e164_key": "239-ST-0" - }, - { - "e164_cc": "966", - "iso2_cc": "SA", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Saudi Arabia", - "example": "512345678", - "display_name": "Saudi Arabia (SA) [+966]", - "full_example_with_plus_sign": "+966512345678", - "display_name_no_e164_cc": "Saudi Arabia (SA)", - "e164_key": "966-SA-0" - }, - { - "e164_cc": "221", - "iso2_cc": "SN", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Senegal", - "example": "701012345", - "display_name": "Senegal (SN) [+221]", - "full_example_with_plus_sign": "+221701012345", - "display_name_no_e164_cc": "Senegal (SN)", - "e164_key": "221-SN-0" - }, - { - "e164_cc": "381", - "iso2_cc": "RS", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Serbia", - "example": "601234567", - "display_name": "Serbia (RS) [+381]", - "full_example_with_plus_sign": "+381601234567", - "display_name_no_e164_cc": "Serbia (RS)", - "e164_key": "381-RS-0" - }, - { - "e164_cc": "248", - "iso2_cc": "SC", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Seychelles", - "example": "2510123", - "display_name": "Seychelles (SC) [+248]", - "full_example_with_plus_sign": "+2482510123", - "display_name_no_e164_cc": "Seychelles (SC)", - "e164_key": "248-SC-0" - }, - { - "e164_cc": "232", - "iso2_cc": "SL", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Sierra Leone", - "example": "25123456", - "display_name": "Sierra Leone (SL) [+232]", - "full_example_with_plus_sign": "+23225123456", - "display_name_no_e164_cc": "Sierra Leone (SL)", - "e164_key": "232-SL-0" - }, - { - "e164_cc": "65", - "iso2_cc": "SG", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Singapore", - "example": "81234567", - "display_name": "Singapore (SG) [+65]", - "full_example_with_plus_sign": "+6581234567", - "display_name_no_e164_cc": "Singapore (SG)", - "e164_key": "65-SG-0" - }, - { - "e164_cc": "1", - "iso2_cc": "SX", - "e164_sc": 0, - "geographic": true, - "level": 2, - "name": "Sint Maarten", - "example": "7215205678", - "display_name": "Sint Maarten (SX) [+1]", - "full_example_with_plus_sign": "+17215205678", - "display_name_no_e164_cc": "Sint Maarten (SX)", - "e164_key": "1-SX-0" - }, - { - "e164_cc": "421", - "iso2_cc": "SK", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Slovakia", - "example": "912123456", - "display_name": "Slovakia (SK) [+421]", - "full_example_with_plus_sign": "+421912123456", - "display_name_no_e164_cc": "Slovakia (SK)", - "e164_key": "421-SK-0" - }, - { - "e164_cc": "386", - "iso2_cc": "SI", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Slovenia", - "example": "31234567", - "display_name": "Slovenia (SI) [+386]", - "full_example_with_plus_sign": "+38631234567", - "display_name_no_e164_cc": "Slovenia (SI)", - "e164_key": "386-SI-0" - }, - { - "e164_cc": "677", - "iso2_cc": "SB", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Solomon Islands", - "example": "7421234", - "display_name": "Solomon Islands (SB) [+677]", - "full_example_with_plus_sign": "+6777421234", - "display_name_no_e164_cc": "Solomon Islands (SB)", - "e164_key": "677-SB-0" - }, - { - "e164_cc": "252", - "iso2_cc": "SO", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Somalia", - "example": "90792024", - "display_name": "Somalia (SO) [+252]", - "full_example_with_plus_sign": "+25290792024", - "display_name_no_e164_cc": "Somalia (SO)", - "e164_key": "252-SO-0" - }, - { - "e164_cc": "27", - "iso2_cc": "ZA", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "South Africa", - "example": "711234567", - "display_name": "South Africa (ZA) [+27]", - "full_example_with_plus_sign": "+27711234567", - "display_name_no_e164_cc": "South Africa (ZA)", - "e164_key": "27-ZA-0" - }, - { - "e164_cc": "500", - "iso2_cc": "GS", - "e164_sc": 0, - "geographic": true, - "level": 3, - "name": "South Georgia and the South Sandwich Islands", - "example": "", - "display_name": "South Georgia and the South Sandwich Islands (GS) [+500]", - "full_example_with_plus_sign": null, - "display_name_no_e164_cc": "South Georgia and the South Sandwich Islands (GS)", - "e164_key": "500-GS-0" - }, - { - "e164_cc": "82", - "iso2_cc": "KR", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "South Korea", - "example": "1023456789", - "display_name": "South Korea (KR) [+82]", - "full_example_with_plus_sign": "+821023456789", - "display_name_no_e164_cc": "South Korea (KR)", - "e164_key": "82-KR-0" - }, - { - "e164_cc": "211", - "iso2_cc": "SS", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "South Sudan", - "example": "977123456", - "display_name": "South Sudan (SS) [+211]", - "full_example_with_plus_sign": "+211977123456", - "display_name_no_e164_cc": "South Sudan (SS)", - "e164_key": "211-SS-0" - }, - { - "e164_cc": "34", - "iso2_cc": "ES", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Spain", - "example": "612345678", - "display_name": "Spain (ES) [+34]", - "full_example_with_plus_sign": "+34612345678", - "display_name_no_e164_cc": "Spain (ES)", - "e164_key": "34-ES-0" - }, - { - "e164_cc": "94", - "iso2_cc": "LK", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Sri Lanka", - "example": "712345678", - "display_name": "Sri Lanka (LK) [+94]", - "full_example_with_plus_sign": "+94712345678", - "display_name_no_e164_cc": "Sri Lanka (LK)", - "e164_key": "94-LK-0" - }, - { - "e164_cc": "249", - "iso2_cc": "SD", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Sudan", - "example": "911231234", - "display_name": "Sudan (SD) [+249]", - "full_example_with_plus_sign": "+249911231234", - "display_name_no_e164_cc": "Sudan (SD)", - "e164_key": "249-SD-0" - }, - { - "e164_cc": "597", - "iso2_cc": "SR", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Suriname", - "example": "7412345", - "display_name": "Suriname (SR) [+597]", - "full_example_with_plus_sign": "+5977412345", - "display_name_no_e164_cc": "Suriname (SR)", - "e164_key": "597-SR-0" - }, - { - "e164_cc": "47", - "iso2_cc": "SJ", - "e164_sc": 0, - "geographic": true, - "level": 3, - "name": "Svalbard and Jan Mayen", - "example": "41234567", - "display_name": "Svalbard and Jan Mayen (SJ) [+47]", - "full_example_with_plus_sign": "+4741234567", - "display_name_no_e164_cc": "Svalbard and Jan Mayen (SJ)", - "e164_key": "47-SJ-0" - }, - { - "e164_cc": "268", - "iso2_cc": "SZ", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Swaziland", - "example": "76123456", - "display_name": "Swaziland (SZ) [+268]", - "full_example_with_plus_sign": "+26876123456", - "display_name_no_e164_cc": "Swaziland (SZ)", - "e164_key": "268-SZ-0" - }, - { - "e164_cc": "46", - "iso2_cc": "SE", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Sweden", - "example": "701234567", - "display_name": "Sweden (SE) [+46]", - "full_example_with_plus_sign": "+46701234567", - "display_name_no_e164_cc": "Sweden (SE)", - "e164_key": "46-SE-0" - }, - { - "e164_cc": "41", - "iso2_cc": "CH", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Switzerland", - "example": "741234567", - "display_name": "Switzerland (CH) [+41]", - "full_example_with_plus_sign": "+41741234567", - "display_name_no_e164_cc": "Switzerland (CH)", - "e164_key": "41-CH-0" - }, - { - "e164_cc": "963", - "iso2_cc": "SY", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Syria", - "example": "944567890", - "display_name": "Syria (SY) [+963]", - "full_example_with_plus_sign": "+963944567890", - "display_name_no_e164_cc": "Syria (SY)", - "e164_key": "963-SY-0" - }, - { - "e164_cc": "886", - "iso2_cc": "TW", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Taiwan", - "example": "912345678", - "display_name": "Taiwan (TW) [+886]", - "full_example_with_plus_sign": "+886912345678", - "display_name_no_e164_cc": "Taiwan (TW)", - "e164_key": "886-TW-0" - }, - { - "e164_cc": "992", - "iso2_cc": "TJ", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Tajikistan", - "example": "917123456", - "display_name": "Tajikistan (TJ) [+992]", - "full_example_with_plus_sign": "+992917123456", - "display_name_no_e164_cc": "Tajikistan (TJ)", - "e164_key": "992-TJ-0" - }, - { - "e164_cc": "255", - "iso2_cc": "TZ", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Tanzania", - "example": "612345678", - "display_name": "Tanzania (TZ) [+255]", - "full_example_with_plus_sign": "+255612345678", - "display_name_no_e164_cc": "Tanzania (TZ)", - "e164_key": "255-TZ-0" - }, - { - "e164_cc": "66", - "iso2_cc": "TH", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Thailand", - "example": "812345678", - "display_name": "Thailand (TH) [+66]", - "full_example_with_plus_sign": "+66812345678", - "display_name_no_e164_cc": "Thailand (TH)", - "e164_key": "66-TH-0" - }, - { - "e164_cc": "228", - "iso2_cc": "TG", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Togo", - "example": "90112345", - "display_name": "Togo (TG) [+228]", - "full_example_with_plus_sign": "+22890112345", - "display_name_no_e164_cc": "Togo (TG)", - "e164_key": "228-TG-0" - }, - { - "e164_cc": "690", - "iso2_cc": "TK", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Tokelau", - "example": "5190", - "display_name": "Tokelau (TK) [+690]", - "full_example_with_plus_sign": "+6905190", - "display_name_no_e164_cc": "Tokelau (TK)", - "e164_key": "690-TK-0" - }, - { - "e164_cc": "676", - "iso2_cc": "TO", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Tonga", - "example": "7715123", - "display_name": "Tonga (TO) [+676]", - "full_example_with_plus_sign": "+6767715123", - "display_name_no_e164_cc": "Tonga (TO)", - "e164_key": "676-TO-0" - }, - { - "e164_cc": "1", - "iso2_cc": "TT", - "e164_sc": 0, - "geographic": true, - "level": 2, - "name": "Trinidad/Tobago", - "example": "8682911234", - "display_name": "Trinidad/Tobago (TT) [+1]", - "full_example_with_plus_sign": "+18682911234", - "display_name_no_e164_cc": "Trinidad/Tobago (TT)", - "e164_key": "1-TT-0" - }, - { - "e164_cc": "216", - "iso2_cc": "TN", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Tunisia", - "example": "20123456", - "display_name": "Tunisia (TN) [+216]", - "full_example_with_plus_sign": "+21620123456", - "display_name_no_e164_cc": "Tunisia (TN)", - "e164_key": "216-TN-0" - }, - { - "e164_cc": "90", - "iso2_cc": "TR", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Turkey", - "example": "5012345678", - "display_name": "Turkey (TR) [+90]", - "full_example_with_plus_sign": "+905012345678", - "display_name_no_e164_cc": "Turkey (TR)", - "e164_key": "90-TR-0" - }, - { - "e164_cc": "993", - "iso2_cc": "TM", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Turkmenistan", - "example": "66123456", - "display_name": "Turkmenistan (TM) [+993]", - "full_example_with_plus_sign": "+99366123456", - "display_name_no_e164_cc": "Turkmenistan (TM)", - "e164_key": "993-TM-0" - }, - { - "e164_cc": "1", - "iso2_cc": "TC", - "e164_sc": 0, - "geographic": true, - "level": 2, - "name": "Turks and Caicos Islands", - "example": "6492311234", - "display_name": "Turks and Caicos Islands (TC) [+1]", - "full_example_with_plus_sign": "+16492311234", - "display_name_no_e164_cc": "Turks and Caicos Islands (TC)", - "e164_key": "1-TC-0" - }, - { - "e164_cc": "688", - "iso2_cc": "TV", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Tuvalu", - "example": "901234", - "display_name": "Tuvalu (TV) [+688]", - "full_example_with_plus_sign": "+688901234", - "display_name_no_e164_cc": "Tuvalu (TV)", - "e164_key": "688-TV-0" - }, - { - "e164_cc": "1", - "iso2_cc": "VI", - "e164_sc": 0, - "geographic": true, - "level": 2, - "name": "U.S. Virgin Islands", - "example": "3406421234", - "display_name": "U.S. Virgin Islands (VI) [+1]", - "full_example_with_plus_sign": "+13406421234", - "display_name_no_e164_cc": "U.S. Virgin Islands (VI)", - "e164_key": "1-VI-0" - }, - { - "e164_cc": "256", - "iso2_cc": "UG", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Uganda", - "example": "712345678", - "display_name": "Uganda (UG) [+256]", - "full_example_with_plus_sign": "+256712345678", - "display_name_no_e164_cc": "Uganda (UG)", - "e164_key": "256-UG-0" - }, - { - "e164_cc": "380", - "iso2_cc": "UA", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Ukraine", - "example": "391234567", - "display_name": "Ukraine (UA) [+380]", - "full_example_with_plus_sign": "+380391234567", - "display_name_no_e164_cc": "Ukraine (UA)", - "e164_key": "380-UA-0" - }, - { - "e164_cc": "971", - "iso2_cc": "AE", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "United Arab Emirates", - "example": "501234567", - "display_name": "United Arab Emirates (AE) [+971]", - "full_example_with_plus_sign": "+971501234567", - "display_name_no_e164_cc": "United Arab Emirates (AE)", - "e164_key": "971-AE-0" - }, - { - "e164_cc": "44", - "iso2_cc": "GB", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "United Kingdom", - "example": "7400123456", - "display_name": "United Kingdom (GB) [+44]", - "full_example_with_plus_sign": "+447400123456", - "display_name_no_e164_cc": "United Kingdom (GB)", - "e164_key": "44-GB-0" - }, - { - "e164_cc": "1", - "iso2_cc": "US", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "United States", - "example": "2012345678", - "display_name": "United States (US) [+1]", - "full_example_with_plus_sign": "+12012345678", - "display_name_no_e164_cc": "United States (US)", - "e164_key": "1-US-0" - }, - { - "e164_cc": "598", - "iso2_cc": "UY", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Uruguay", - "example": "94231234", - "display_name": "Uruguay (UY) [+598]", - "full_example_with_plus_sign": "+59894231234", - "display_name_no_e164_cc": "Uruguay (UY)", - "e164_key": "598-UY-0" - }, - { - "e164_cc": "998", - "iso2_cc": "UZ", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Uzbekistan", - "example": "912345678", - "display_name": "Uzbekistan (UZ) [+998]", - "full_example_with_plus_sign": "+998912345678", - "display_name_no_e164_cc": "Uzbekistan (UZ)", - "e164_key": "998-UZ-0" - }, - { - "e164_cc": "678", - "iso2_cc": "VU", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Vanuatu", - "example": "5912345", - "display_name": "Vanuatu (VU) [+678]", - "full_example_with_plus_sign": "+6785912345", - "display_name_no_e164_cc": "Vanuatu (VU)", - "e164_key": "678-VU-0" - }, - { - "e164_cc": "379", - "iso2_cc": "VA", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Vatican City", - "example": "", - "display_name": "Vatican City (VA) [+379]", - "full_example_with_plus_sign": null, - "display_name_no_e164_cc": "Vatican City (VA)", - "e164_key": "379-VA-0" - }, - { - "e164_cc": "58", - "iso2_cc": "VE", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Venezuela", - "example": "4121234567", - "display_name": "Venezuela (VE) [+58]", - "full_example_with_plus_sign": "+584121234567", - "display_name_no_e164_cc": "Venezuela (VE)", - "e164_key": "58-VE-0" - }, - { - "e164_cc": "84", - "iso2_cc": "VN", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Vietnam", - "example": "912345678", - "display_name": "Vietnam (VN) [+84]", - "full_example_with_plus_sign": "+84912345678", - "display_name_no_e164_cc": "Vietnam (VN)", - "e164_key": "84-VN-0" - }, - { - "e164_cc": "681", - "iso2_cc": "WF", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Wallis and Futuna", - "example": "501234", - "display_name": "Wallis and Futuna (WF) [+681]", - "full_example_with_plus_sign": "+681501234", - "display_name_no_e164_cc": "Wallis and Futuna (WF)", - "e164_key": "681-WF-0" - }, - { - "e164_cc": "212", - "iso2_cc": "EH", - "e164_sc": 0, - "geographic": true, - "level": 3, - "name": "Western Sahara", - "example": "", - "display_name": "Western Sahara (EH) [+212]", - "full_example_with_plus_sign": null, - "display_name_no_e164_cc": "Western Sahara (EH)", - "e164_key": "212-EH-0" - }, - { - "e164_cc": "967", - "iso2_cc": "YE", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Yemen", - "example": "712345678", - "display_name": "Yemen (YE) [+967]", - "full_example_with_plus_sign": "+967712345678", - "display_name_no_e164_cc": "Yemen (YE)", - "e164_key": "967-YE-0" - }, - { - "e164_cc": "260", - "iso2_cc": "ZM", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Zambia", - "example": "955123456", - "display_name": "Zambia (ZM) [+260]", - "full_example_with_plus_sign": "+260955123456", - "display_name_no_e164_cc": "Zambia (ZM)", - "e164_key": "260-ZM-0" - }, - { - "e164_cc": "263", - "iso2_cc": "ZW", - "e164_sc": 0, - "geographic": true, - "level": 1, - "name": "Zimbabwe", - "example": "711234567", - "display_name": "Zimbabwe (ZW) [+263]", - "full_example_with_plus_sign": "+263711234567", - "display_name_no_e164_cc": "Zimbabwe (ZW)", - "e164_key": "263-ZW-0" - } -] diff --git a/FirebasePhoneAuthUI/Sources/Resources/ic_phone.png b/FirebasePhoneAuthUI/Sources/Resources/ic_phone.png deleted file mode 100755 index 77f9de5e3cc..00000000000 Binary files a/FirebasePhoneAuthUI/Sources/Resources/ic_phone.png and /dev/null differ diff --git a/FirebasePhoneAuthUI/Sources/Resources/ic_phone@2x.png b/FirebasePhoneAuthUI/Sources/Resources/ic_phone@2x.png deleted file mode 100755 index ef45e933a99..00000000000 Binary files a/FirebasePhoneAuthUI/Sources/Resources/ic_phone@2x.png and /dev/null differ diff --git a/FirebasePhoneAuthUI/Sources/Resources/ic_phone@3x.png b/FirebasePhoneAuthUI/Sources/Resources/ic_phone@3x.png deleted file mode 100755 index 90ead2e4551..00000000000 Binary files a/FirebasePhoneAuthUI/Sources/Resources/ic_phone@3x.png and /dev/null differ diff --git a/FirebasePhoneAuthUI/Sources/Strings/ar.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/ar.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index c271a07b0de..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/ar.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "تسجيل الدخول عبر رقم الهاتف"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "إدخال رقم الهاتف"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "رجوع"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "التالي"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "إثبات الملكية"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "لا يمكن إبقاء حقل رمز التحقق فارغًا"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "لا يمكن إبقاء حقل رقم الهاتف فارغًا"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "الرقم"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "رقم الهاتف"; - -/* Label next to the left of country selector control. */ -"Country" = "البلد"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "أدخل الرمز المكوّن من %@ رقم الذي أرسلناه إلى"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "إعادة إرسال الرمز"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "إعادة إرسال الرمز بعد %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "إثبات ملكية رقم الهاتف"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "تم"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "رقم الهاتف غير صالح"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "يُرجى إدخال رقم هاتف صالحًا"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "تم إرسال الرمز إلى %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "رمز التحقق غير صحيح"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "الرمز غير صحيح. يُرجى المحاولة مجددًا."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "حدث خطأ، يُرجى المحاولة مجددًا."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "تم استخدام رقم الهاتف هذا لعدد كبير جدًا من المرات"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "حدثت مشكلة أثناء إثبات ملكية رقم هاتفك"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "لم يعد هذا الرمز صالحًا"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "يشير النقر على %@ إلى موافقتك على %@ و%@. قد يتمّ إرسال رسالة قصيرة وقد تُفرَض رسوم الرسائل والبيانات."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/bg.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/bg.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index f6f1036fc8e..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/bg.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Вход с телефон"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Въвеждане на телефонен номер"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Назад"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Напред"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Потвърждаване"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "Трябва да посочите код за потвърждение"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "Трябва да посочите телефонен номер"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Номер"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Телефонен номер"; - -/* Label next to the left of country selector control. */ -"Country" = "Държава"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Въведете %@-цифрения код, който изпратихме до"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Повторно изпращане на кода"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Повторно изпращане на кода след %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Потвърждаване на телефонния номер"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Готово"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Невалиден телефонен номер"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Въведете валиден телефонен номер"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Кодът бе изпратен до %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Неправилен код за потвърждение"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Неправилен код. Опитайте отново."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Нещо се обърка. Моля, опитайте отново."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Този телефонен номер е използван твърде много пъти"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "При потвърждаването на телефонния ви номер възникна проблем"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Този код вече не е валиден"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Докосвайки „%@“, приемате нашите %@ и %@. Възможно е да получите SMS съобщение. То може да се таксува по тарифите за данни и SMS."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/bn.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/bn.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index 8d254d98449..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/bn.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "ফোন দিয়ে সাইন-ইন করুন"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "ফোন নম্বর লিখুন"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "ফিরে যান"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "পরবর্তী"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "যাচাই করুন"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "যাচাইকরণের কোডটি খালি রাখা যাবে না"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "ফোন নম্বর খালি রাখা যাবে না"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "নম্বর"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "ফোন নম্বর"; - -/* Label next to the left of country selector control. */ -"Country" = "দেশ"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "আমাদের পাঠানো %@-সংখ্যার কোডটি লিখুন"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "কোডটি আবার পাঠান"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "%@ এ কোডটি আবার পাঠান"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "ফোন নম্বর যাচাই করুন"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "সম্পন্ন হয়েছে"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "ফোন নম্বরটি সঠিক নয়"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "সঠিক ফোন নম্বরটি লিখুন"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "%@ তে কোডটি পাঠানো হয়েছে"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "যাচাইকরণের কোডটি ভুল"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "কোডটি ভুল। আবার চেষ্টা করুন।"; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "কিছু সমস্যা হয়েছে। অনুগ্রহ করে আবার চেষ্টা করুন।"; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "এই ফোন নম্বরটি অনেকবার ব্যবহার করা হয়েছে"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "আপনার ফোন নম্বরটি যাচাই করতে সমস্যা হয়েছে"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "এই কোডটি আর ব্যবহার করা যাবে না"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "%@ বোতামে ট্যাপ করার অর্থ, আপনি আমাদের %@ এবং %@-এর সাথে সম্মত। একটি এসএমএস পাঠানো হতে পারে। মেসেজ এবং ডেটার উপরে প্রযোজ্য চার্জ লাগতে পারে।"; diff --git a/FirebasePhoneAuthUI/Sources/Strings/ca.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/ca.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index aafa77809ea..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/ca.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Inicia la sessió amb el telèfon"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Introdueix el número de telèfon"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Enrere"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Següent"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Verifica"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "Cal introduir el codi de verificació"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "Cal introduir el número de telèfon"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Número"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Número de telèfon"; - -/* Label next to the left of country selector control. */ -"Country" = "País"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Introdueix el codi de %@ dígits que s'ha enviat al número"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Torna a enviar el codi"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Torna a enviar el codi d'aquí a %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Verifica el número de telèfon"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Fet"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "El número de telèfon no és vàlid"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Introdueix un número de telèfon vàlid"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "S'ha enviat el codi al número %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "El codi de verificació no és correcte"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "El codi no és correcte. Torna-ho a provar."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "S'ha produït un error. Torna-ho a provar."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Aquest número de telèfon s'ha fet servir massa vegades"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Hi ha hagut un problema en verificar el número de telèfon"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Aquest codi ja no és vàlid"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "En tocar %@, acceptes les nostres %@ i la nostra %@. És possible que s'enviï un SMS. Es poden aplicar tarifes de dades i missatges."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/cs.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/cs.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index 881e0da5bf9..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/cs.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Přihlásit se pomocí telefonu"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Zadejte telefonní číslo"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Zpět"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Další"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Ověřit"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "Pole ověřovacího kódu nesmí být prázdné"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "Pole telefonního čísla nesmí být prázdné"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Číslo"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Telefonní číslo"; - -/* Label next to the left of country selector control. */ -"Country" = "Země"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Zadejte %@místný kód, který jsme vám zaslali"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Znovu odeslat kód"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Znovu odeslat kód za %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Ověření telefonního čísla"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Hotovo"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Neplatné telefonní číslo"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Zadejte platné telefonní číslo"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Kód odeslán na číslo %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Nesprávný ověřovací kód"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Špatný kód. Zkuste to znovu."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Něco se nepovedlo. Zkuste to prosím znovu."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Toto telefonní číslo již bylo použito příliš mnohokrát"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Při ověřování telefonního čísla došlo k potížím"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Platnost kódu vypršela"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Klepnutím na tlačítko %@ vyjadřujete svůj souhlas s těmito dokumenty: %@ a %@. Může být odeslána SMS a mohou být účtovány poplatky za zprávy a data."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/da.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/da.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index 0fb7bc2ba5b..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/da.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Log ind med telefon"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Angiv telefonnummer"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Tilbage"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Næste"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Bekræft"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "Bekræftelseskode skal udfyldes"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "Telefonnummer skal angives"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Tal"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Telefonnummer"; - -/* Label next to the left of country selector control. */ -"Country" = "Land"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Angiv den %@-cifrede kode, vi sendte til"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Send koden igen"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Send koden igen om %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Bekræft telefonnummer"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Udført"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Ugyldigt telefonnummer"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Angiv et gyldigt telefonnummer"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Koden blev sendt til %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Forkert bekræftelseskode"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Koden er forkert. Prøv igen."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Noget gik galt. Prøv igen."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Dette telefonnummer er blevet brugt for mange gange"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Dit telefonnummer kunne ikke bekræftes"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Denne kode er ikke længere gyldig"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Når du trykker på %@, indikerer du, at du accepterer vores %@ og %@. Der sendes måske en sms. Der opkræves muligvis gebyrer for beskeder og data."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/de-AT.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/de-AT.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index 68e9524fa6f..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/de-AT.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Mit Telefonnummer anmelden"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Telefonnummer eingeben"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Zurück"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Weiter"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Bestätigen"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "\"Bestätigungscode\" darf nicht leer sein"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "\"Telefonnummer\" darf nicht leer sein"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Nummer"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Telefonnummer"; - -/* Label next to the left of country selector control. */ -"Country" = "Land"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "%@-stelligen Code eingeben, der an folgende Nummer gesendet wurde:"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Code erneut senden"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Code in %@ erneut senden"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Telefonnummer bestätigen"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Fertig"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Ungültige Telefonnummer"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Geben Sie eine gültige Telefonnummer ein"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Code wurde an %@ gesendet"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Falscher Bestätigungscode"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Falscher Code. Versuchen Sie es noch einmal."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Ein Problem ist aufgetreten. Bitte versuchen Sie es noch einmal."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Diese Telefonnummer wurde schon zu oft verwendet"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Bei der Bestätigung Ihrer Telefonnummer ist ein Problem aufgetreten"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Dieser Code ist nicht mehr gültig"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Wenn Sie auf \"%@\" tippen, stimmen Sie unseren %@ und unserer %@ zu. Sie erhalten möglicherweise eine SMS und es können Gebühren für die Nachricht und die Datenübertragung anfallen."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/de-CH.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/de-CH.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index 68e9524fa6f..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/de-CH.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Mit Telefonnummer anmelden"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Telefonnummer eingeben"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Zurück"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Weiter"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Bestätigen"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "\"Bestätigungscode\" darf nicht leer sein"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "\"Telefonnummer\" darf nicht leer sein"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Nummer"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Telefonnummer"; - -/* Label next to the left of country selector control. */ -"Country" = "Land"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "%@-stelligen Code eingeben, der an folgende Nummer gesendet wurde:"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Code erneut senden"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Code in %@ erneut senden"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Telefonnummer bestätigen"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Fertig"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Ungültige Telefonnummer"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Geben Sie eine gültige Telefonnummer ein"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Code wurde an %@ gesendet"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Falscher Bestätigungscode"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Falscher Code. Versuchen Sie es noch einmal."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Ein Problem ist aufgetreten. Bitte versuchen Sie es noch einmal."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Diese Telefonnummer wurde schon zu oft verwendet"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Bei der Bestätigung Ihrer Telefonnummer ist ein Problem aufgetreten"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Dieser Code ist nicht mehr gültig"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Wenn Sie auf \"%@\" tippen, stimmen Sie unseren %@ und unserer %@ zu. Sie erhalten möglicherweise eine SMS und es können Gebühren für die Nachricht und die Datenübertragung anfallen."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/de.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/de.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index 68e9524fa6f..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/de.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Mit Telefonnummer anmelden"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Telefonnummer eingeben"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Zurück"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Weiter"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Bestätigen"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "\"Bestätigungscode\" darf nicht leer sein"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "\"Telefonnummer\" darf nicht leer sein"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Nummer"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Telefonnummer"; - -/* Label next to the left of country selector control. */ -"Country" = "Land"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "%@-stelligen Code eingeben, der an folgende Nummer gesendet wurde:"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Code erneut senden"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Code in %@ erneut senden"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Telefonnummer bestätigen"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Fertig"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Ungültige Telefonnummer"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Geben Sie eine gültige Telefonnummer ein"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Code wurde an %@ gesendet"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Falscher Bestätigungscode"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Falscher Code. Versuchen Sie es noch einmal."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Ein Problem ist aufgetreten. Bitte versuchen Sie es noch einmal."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Diese Telefonnummer wurde schon zu oft verwendet"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Bei der Bestätigung Ihrer Telefonnummer ist ein Problem aufgetreten"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Dieser Code ist nicht mehr gültig"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Wenn Sie auf \"%@\" tippen, stimmen Sie unseren %@ und unserer %@ zu. Sie erhalten möglicherweise eine SMS und es können Gebühren für die Nachricht und die Datenübertragung anfallen."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/el.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/el.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index 9de01d621ce..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/el.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Σύνδεση μέσω τηλεφώνου"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Εισαγωγή αριθμού τηλεφώνου"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Πίσω"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Επόμενο"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Επαλήθευση"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "Ο κωδικός επαλήθευσης δεν μπορεί να είναι κενός"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "Ο αριθμός τηλεφώνου δεν μπορεί να είναι κενός"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Αριθμός"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Αριθμός τηλεφώνου"; - -/* Label next to the left of country selector control. */ -"Country" = "Χώρα"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Εισαγάγετε τον κωδικό %@ ψηφίων που στείλαμε στο"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Επανάληψη αποστολής κωδικού"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Επανάληψη αποστολής κωδικού στο %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Επαλήθευση αριθμού τηλεφώνου"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Τέλος"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Μη έγκυρος αριθμός τηλεφώνου"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Εισαγάγετε έναν έγκυρο αριθμό τηλεφώνου"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Ο κωδικός στάλθηκε στο %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Εσφαλμένος κωδικός επαλήθευσης"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Εσφαλμένος κωδικός. Δοκιμάστε ξανά."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Κάτι πήγε στραβά. Δοκιμάστε ξανά."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Αυτός ο αριθμός τηλεφώνου χρησιμοποιήθηκε πάρα πολλές φορές"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Παρουσιάστηκε πρόβλημα με την επαλήθευση του αριθμού τηλεφώνου"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Αυτός ο κωδικός δεν είναι πλέον έγκυρος"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Πατώντας %@, δηλώνετε ότι αποδέχεστε τους %@ και την %@ μας. Ενδέχεται να σταλεί ένα SMS. Ενδέχεται να ισχύουν χρεώσεις μηνυμάτων και δεδομένων."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/en-AU.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/en-AU.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index 262d1489fdd..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/en-AU.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Sign in with phone"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Enter phone number"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Back"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Next"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Verify"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "Verification code can't be empty"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "Phone number can't be empty"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Number"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Phone number"; - -/* Label next to the left of country selector control. */ -"Country" = "Country"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Enter the %@-digit code that we sent to"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Resend code"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Resend code in %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Verify phone number"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Done"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Invalid phone number"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Enter a valid phone number"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Code was sent to %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Incorrect verification code"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Wrong code. Try again."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Something went wrong. Please try again."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "This phone number has been used too many times"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "There was a problem verifying your phone number"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "This code is no longer valid"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "By tapping %@, you are indicating that you accept our %@ and %@. An SMS may be sent. Message & data rates may apply."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/en-CA.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/en-CA.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index 262d1489fdd..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/en-CA.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Sign in with phone"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Enter phone number"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Back"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Next"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Verify"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "Verification code can't be empty"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "Phone number can't be empty"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Number"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Phone number"; - -/* Label next to the left of country selector control. */ -"Country" = "Country"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Enter the %@-digit code that we sent to"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Resend code"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Resend code in %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Verify phone number"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Done"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Invalid phone number"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Enter a valid phone number"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Code was sent to %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Incorrect verification code"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Wrong code. Try again."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Something went wrong. Please try again."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "This phone number has been used too many times"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "There was a problem verifying your phone number"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "This code is no longer valid"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "By tapping %@, you are indicating that you accept our %@ and %@. An SMS may be sent. Message & data rates may apply."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/en-GB.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/en-GB.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index 262d1489fdd..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/en-GB.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Sign in with phone"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Enter phone number"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Back"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Next"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Verify"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "Verification code can't be empty"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "Phone number can't be empty"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Number"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Phone number"; - -/* Label next to the left of country selector control. */ -"Country" = "Country"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Enter the %@-digit code that we sent to"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Resend code"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Resend code in %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Verify phone number"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Done"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Invalid phone number"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Enter a valid phone number"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Code was sent to %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Incorrect verification code"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Wrong code. Try again."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Something went wrong. Please try again."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "This phone number has been used too many times"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "There was a problem verifying your phone number"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "This code is no longer valid"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "By tapping %@, you are indicating that you accept our %@ and %@. An SMS may be sent. Message & data rates may apply."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/en-IE.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/en-IE.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index 262d1489fdd..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/en-IE.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Sign in with phone"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Enter phone number"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Back"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Next"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Verify"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "Verification code can't be empty"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "Phone number can't be empty"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Number"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Phone number"; - -/* Label next to the left of country selector control. */ -"Country" = "Country"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Enter the %@-digit code that we sent to"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Resend code"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Resend code in %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Verify phone number"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Done"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Invalid phone number"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Enter a valid phone number"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Code was sent to %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Incorrect verification code"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Wrong code. Try again."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Something went wrong. Please try again."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "This phone number has been used too many times"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "There was a problem verifying your phone number"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "This code is no longer valid"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "By tapping %@, you are indicating that you accept our %@ and %@. An SMS may be sent. Message & data rates may apply."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/en-IN.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/en-IN.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index 262d1489fdd..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/en-IN.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Sign in with phone"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Enter phone number"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Back"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Next"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Verify"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "Verification code can't be empty"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "Phone number can't be empty"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Number"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Phone number"; - -/* Label next to the left of country selector control. */ -"Country" = "Country"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Enter the %@-digit code that we sent to"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Resend code"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Resend code in %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Verify phone number"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Done"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Invalid phone number"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Enter a valid phone number"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Code was sent to %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Incorrect verification code"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Wrong code. Try again."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Something went wrong. Please try again."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "This phone number has been used too many times"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "There was a problem verifying your phone number"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "This code is no longer valid"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "By tapping %@, you are indicating that you accept our %@ and %@. An SMS may be sent. Message & data rates may apply."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/en-SG.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/en-SG.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index 262d1489fdd..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/en-SG.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Sign in with phone"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Enter phone number"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Back"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Next"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Verify"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "Verification code can't be empty"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "Phone number can't be empty"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Number"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Phone number"; - -/* Label next to the left of country selector control. */ -"Country" = "Country"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Enter the %@-digit code that we sent to"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Resend code"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Resend code in %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Verify phone number"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Done"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Invalid phone number"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Enter a valid phone number"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Code was sent to %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Incorrect verification code"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Wrong code. Try again."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Something went wrong. Please try again."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "This phone number has been used too many times"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "There was a problem verifying your phone number"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "This code is no longer valid"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "By tapping %@, you are indicating that you accept our %@ and %@. An SMS may be sent. Message & data rates may apply."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/en-ZA.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/en-ZA.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index 262d1489fdd..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/en-ZA.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Sign in with phone"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Enter phone number"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Back"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Next"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Verify"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "Verification code can't be empty"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "Phone number can't be empty"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Number"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Phone number"; - -/* Label next to the left of country selector control. */ -"Country" = "Country"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Enter the %@-digit code that we sent to"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Resend code"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Resend code in %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Verify phone number"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Done"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Invalid phone number"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Enter a valid phone number"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Code was sent to %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Incorrect verification code"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Wrong code. Try again."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Something went wrong. Please try again."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "This phone number has been used too many times"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "There was a problem verifying your phone number"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "This code is no longer valid"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "By tapping %@, you are indicating that you accept our %@ and %@. An SMS may be sent. Message & data rates may apply."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/en.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/en.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index e5fa4c72402..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/en.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Sign in with phone"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Enter phone number"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Back"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Next"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Verify"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "Verification code can't be empty"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "Phone number can't be empty"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Number"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Phone number"; - -/* Label next to the left of country selector control. */ -"Country" = "Country"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Enter the %@-digit code we sent to"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Resend code"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Resend code in %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Verify phone number"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Done"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Invalid phone number"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Enter a valid phone number"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Code was sent to %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Incorrect verification code"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Wrong code. Try again."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Something went wrong. Please try again."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "This phone number has been used too many times"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "There was a problem verifying your phone number"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "This code is no longer valid"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "By tapping %@, you are indicating that you accept our %@ and %@. An SMS may be sent. Message & data rates may apply."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/es-419.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/es-419.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index ca3b56b5bba..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/es-419.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Acceder con el teléfono"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Ingresar número de teléfono"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Atrás"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Siguiente"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Verificar"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "El campo de código de verificación no puede estar vacío"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "El campo de número de teléfono no puede estar vacío"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Número"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Número de teléfono"; - -/* Label next to the left of country selector control. */ -"Country" = "País"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Ingresa el código de %@ dígitos que enviamos a"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Volver a enviar el código"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Volver a enviar el código en %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Verificar tu número de teléfono"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Listo"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Número de teléfono no válido"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Ingresa un número de teléfono válido"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Se envió el código a %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Código de verificación incorrecto"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Código incorrecto. Vuelve a intentarlo."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Se produjo un error. Vuelve a intentarlo."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Este número de teléfono se usó demasiadas veces"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Ocurrió un problema durante la verificación de tu número de teléfono"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Este código ya no es válido"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Si presionas %@, indicas que aceptas nuestras %@ y %@. Es posible que te enviemos un SMS, por lo que podrían aplicarse las tarifas de mensajes y uso de datos."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/es-AR.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/es-AR.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index ca3b56b5bba..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/es-AR.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Acceder con el teléfono"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Ingresar número de teléfono"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Atrás"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Siguiente"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Verificar"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "El campo de código de verificación no puede estar vacío"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "El campo de número de teléfono no puede estar vacío"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Número"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Número de teléfono"; - -/* Label next to the left of country selector control. */ -"Country" = "País"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Ingresa el código de %@ dígitos que enviamos a"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Volver a enviar el código"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Volver a enviar el código en %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Verificar tu número de teléfono"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Listo"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Número de teléfono no válido"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Ingresa un número de teléfono válido"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Se envió el código a %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Código de verificación incorrecto"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Código incorrecto. Vuelve a intentarlo."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Se produjo un error. Vuelve a intentarlo."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Este número de teléfono se usó demasiadas veces"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Ocurrió un problema durante la verificación de tu número de teléfono"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Este código ya no es válido"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Si presionas %@, indicas que aceptas nuestras %@ y %@. Es posible que te enviemos un SMS, por lo que podrían aplicarse las tarifas de mensajes y uso de datos."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/es-BO.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/es-BO.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index ca3b56b5bba..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/es-BO.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Acceder con el teléfono"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Ingresar número de teléfono"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Atrás"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Siguiente"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Verificar"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "El campo de código de verificación no puede estar vacío"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "El campo de número de teléfono no puede estar vacío"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Número"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Número de teléfono"; - -/* Label next to the left of country selector control. */ -"Country" = "País"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Ingresa el código de %@ dígitos que enviamos a"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Volver a enviar el código"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Volver a enviar el código en %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Verificar tu número de teléfono"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Listo"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Número de teléfono no válido"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Ingresa un número de teléfono válido"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Se envió el código a %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Código de verificación incorrecto"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Código incorrecto. Vuelve a intentarlo."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Se produjo un error. Vuelve a intentarlo."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Este número de teléfono se usó demasiadas veces"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Ocurrió un problema durante la verificación de tu número de teléfono"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Este código ya no es válido"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Si presionas %@, indicas que aceptas nuestras %@ y %@. Es posible que te enviemos un SMS, por lo que podrían aplicarse las tarifas de mensajes y uso de datos."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/es-CL.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/es-CL.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index ca3b56b5bba..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/es-CL.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Acceder con el teléfono"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Ingresar número de teléfono"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Atrás"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Siguiente"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Verificar"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "El campo de código de verificación no puede estar vacío"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "El campo de número de teléfono no puede estar vacío"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Número"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Número de teléfono"; - -/* Label next to the left of country selector control. */ -"Country" = "País"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Ingresa el código de %@ dígitos que enviamos a"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Volver a enviar el código"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Volver a enviar el código en %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Verificar tu número de teléfono"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Listo"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Número de teléfono no válido"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Ingresa un número de teléfono válido"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Se envió el código a %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Código de verificación incorrecto"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Código incorrecto. Vuelve a intentarlo."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Se produjo un error. Vuelve a intentarlo."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Este número de teléfono se usó demasiadas veces"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Ocurrió un problema durante la verificación de tu número de teléfono"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Este código ya no es válido"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Si presionas %@, indicas que aceptas nuestras %@ y %@. Es posible que te enviemos un SMS, por lo que podrían aplicarse las tarifas de mensajes y uso de datos."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/es-CO.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/es-CO.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index ca3b56b5bba..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/es-CO.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Acceder con el teléfono"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Ingresar número de teléfono"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Atrás"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Siguiente"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Verificar"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "El campo de código de verificación no puede estar vacío"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "El campo de número de teléfono no puede estar vacío"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Número"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Número de teléfono"; - -/* Label next to the left of country selector control. */ -"Country" = "País"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Ingresa el código de %@ dígitos que enviamos a"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Volver a enviar el código"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Volver a enviar el código en %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Verificar tu número de teléfono"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Listo"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Número de teléfono no válido"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Ingresa un número de teléfono válido"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Se envió el código a %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Código de verificación incorrecto"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Código incorrecto. Vuelve a intentarlo."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Se produjo un error. Vuelve a intentarlo."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Este número de teléfono se usó demasiadas veces"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Ocurrió un problema durante la verificación de tu número de teléfono"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Este código ya no es válido"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Si presionas %@, indicas que aceptas nuestras %@ y %@. Es posible que te enviemos un SMS, por lo que podrían aplicarse las tarifas de mensajes y uso de datos."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/es-CR.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/es-CR.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index ca3b56b5bba..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/es-CR.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Acceder con el teléfono"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Ingresar número de teléfono"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Atrás"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Siguiente"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Verificar"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "El campo de código de verificación no puede estar vacío"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "El campo de número de teléfono no puede estar vacío"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Número"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Número de teléfono"; - -/* Label next to the left of country selector control. */ -"Country" = "País"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Ingresa el código de %@ dígitos que enviamos a"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Volver a enviar el código"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Volver a enviar el código en %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Verificar tu número de teléfono"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Listo"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Número de teléfono no válido"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Ingresa un número de teléfono válido"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Se envió el código a %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Código de verificación incorrecto"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Código incorrecto. Vuelve a intentarlo."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Se produjo un error. Vuelve a intentarlo."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Este número de teléfono se usó demasiadas veces"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Ocurrió un problema durante la verificación de tu número de teléfono"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Este código ya no es válido"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Si presionas %@, indicas que aceptas nuestras %@ y %@. Es posible que te enviemos un SMS, por lo que podrían aplicarse las tarifas de mensajes y uso de datos."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/es-DO.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/es-DO.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index ca3b56b5bba..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/es-DO.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Acceder con el teléfono"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Ingresar número de teléfono"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Atrás"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Siguiente"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Verificar"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "El campo de código de verificación no puede estar vacío"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "El campo de número de teléfono no puede estar vacío"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Número"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Número de teléfono"; - -/* Label next to the left of country selector control. */ -"Country" = "País"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Ingresa el código de %@ dígitos que enviamos a"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Volver a enviar el código"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Volver a enviar el código en %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Verificar tu número de teléfono"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Listo"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Número de teléfono no válido"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Ingresa un número de teléfono válido"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Se envió el código a %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Código de verificación incorrecto"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Código incorrecto. Vuelve a intentarlo."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Se produjo un error. Vuelve a intentarlo."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Este número de teléfono se usó demasiadas veces"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Ocurrió un problema durante la verificación de tu número de teléfono"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Este código ya no es válido"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Si presionas %@, indicas que aceptas nuestras %@ y %@. Es posible que te enviemos un SMS, por lo que podrían aplicarse las tarifas de mensajes y uso de datos."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/es-EC.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/es-EC.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index ca3b56b5bba..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/es-EC.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Acceder con el teléfono"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Ingresar número de teléfono"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Atrás"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Siguiente"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Verificar"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "El campo de código de verificación no puede estar vacío"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "El campo de número de teléfono no puede estar vacío"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Número"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Número de teléfono"; - -/* Label next to the left of country selector control. */ -"Country" = "País"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Ingresa el código de %@ dígitos que enviamos a"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Volver a enviar el código"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Volver a enviar el código en %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Verificar tu número de teléfono"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Listo"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Número de teléfono no válido"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Ingresa un número de teléfono válido"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Se envió el código a %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Código de verificación incorrecto"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Código incorrecto. Vuelve a intentarlo."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Se produjo un error. Vuelve a intentarlo."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Este número de teléfono se usó demasiadas veces"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Ocurrió un problema durante la verificación de tu número de teléfono"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Este código ya no es válido"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Si presionas %@, indicas que aceptas nuestras %@ y %@. Es posible que te enviemos un SMS, por lo que podrían aplicarse las tarifas de mensajes y uso de datos."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/es-GT.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/es-GT.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index ca3b56b5bba..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/es-GT.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Acceder con el teléfono"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Ingresar número de teléfono"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Atrás"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Siguiente"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Verificar"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "El campo de código de verificación no puede estar vacío"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "El campo de número de teléfono no puede estar vacío"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Número"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Número de teléfono"; - -/* Label next to the left of country selector control. */ -"Country" = "País"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Ingresa el código de %@ dígitos que enviamos a"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Volver a enviar el código"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Volver a enviar el código en %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Verificar tu número de teléfono"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Listo"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Número de teléfono no válido"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Ingresa un número de teléfono válido"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Se envió el código a %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Código de verificación incorrecto"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Código incorrecto. Vuelve a intentarlo."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Se produjo un error. Vuelve a intentarlo."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Este número de teléfono se usó demasiadas veces"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Ocurrió un problema durante la verificación de tu número de teléfono"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Este código ya no es válido"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Si presionas %@, indicas que aceptas nuestras %@ y %@. Es posible que te enviemos un SMS, por lo que podrían aplicarse las tarifas de mensajes y uso de datos."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/es-HN.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/es-HN.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index ca3b56b5bba..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/es-HN.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Acceder con el teléfono"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Ingresar número de teléfono"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Atrás"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Siguiente"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Verificar"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "El campo de código de verificación no puede estar vacío"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "El campo de número de teléfono no puede estar vacío"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Número"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Número de teléfono"; - -/* Label next to the left of country selector control. */ -"Country" = "País"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Ingresa el código de %@ dígitos que enviamos a"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Volver a enviar el código"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Volver a enviar el código en %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Verificar tu número de teléfono"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Listo"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Número de teléfono no válido"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Ingresa un número de teléfono válido"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Se envió el código a %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Código de verificación incorrecto"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Código incorrecto. Vuelve a intentarlo."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Se produjo un error. Vuelve a intentarlo."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Este número de teléfono se usó demasiadas veces"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Ocurrió un problema durante la verificación de tu número de teléfono"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Este código ya no es válido"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Si presionas %@, indicas que aceptas nuestras %@ y %@. Es posible que te enviemos un SMS, por lo que podrían aplicarse las tarifas de mensajes y uso de datos."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/es-MX.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/es-MX.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index ca3b56b5bba..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/es-MX.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Acceder con el teléfono"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Ingresar número de teléfono"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Atrás"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Siguiente"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Verificar"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "El campo de código de verificación no puede estar vacío"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "El campo de número de teléfono no puede estar vacío"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Número"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Número de teléfono"; - -/* Label next to the left of country selector control. */ -"Country" = "País"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Ingresa el código de %@ dígitos que enviamos a"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Volver a enviar el código"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Volver a enviar el código en %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Verificar tu número de teléfono"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Listo"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Número de teléfono no válido"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Ingresa un número de teléfono válido"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Se envió el código a %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Código de verificación incorrecto"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Código incorrecto. Vuelve a intentarlo."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Se produjo un error. Vuelve a intentarlo."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Este número de teléfono se usó demasiadas veces"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Ocurrió un problema durante la verificación de tu número de teléfono"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Este código ya no es válido"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Si presionas %@, indicas que aceptas nuestras %@ y %@. Es posible que te enviemos un SMS, por lo que podrían aplicarse las tarifas de mensajes y uso de datos."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/es-NI.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/es-NI.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index ca3b56b5bba..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/es-NI.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Acceder con el teléfono"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Ingresar número de teléfono"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Atrás"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Siguiente"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Verificar"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "El campo de código de verificación no puede estar vacío"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "El campo de número de teléfono no puede estar vacío"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Número"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Número de teléfono"; - -/* Label next to the left of country selector control. */ -"Country" = "País"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Ingresa el código de %@ dígitos que enviamos a"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Volver a enviar el código"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Volver a enviar el código en %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Verificar tu número de teléfono"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Listo"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Número de teléfono no válido"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Ingresa un número de teléfono válido"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Se envió el código a %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Código de verificación incorrecto"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Código incorrecto. Vuelve a intentarlo."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Se produjo un error. Vuelve a intentarlo."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Este número de teléfono se usó demasiadas veces"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Ocurrió un problema durante la verificación de tu número de teléfono"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Este código ya no es válido"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Si presionas %@, indicas que aceptas nuestras %@ y %@. Es posible que te enviemos un SMS, por lo que podrían aplicarse las tarifas de mensajes y uso de datos."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/es-PA.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/es-PA.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index ca3b56b5bba..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/es-PA.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Acceder con el teléfono"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Ingresar número de teléfono"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Atrás"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Siguiente"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Verificar"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "El campo de código de verificación no puede estar vacío"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "El campo de número de teléfono no puede estar vacío"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Número"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Número de teléfono"; - -/* Label next to the left of country selector control. */ -"Country" = "País"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Ingresa el código de %@ dígitos que enviamos a"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Volver a enviar el código"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Volver a enviar el código en %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Verificar tu número de teléfono"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Listo"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Número de teléfono no válido"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Ingresa un número de teléfono válido"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Se envió el código a %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Código de verificación incorrecto"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Código incorrecto. Vuelve a intentarlo."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Se produjo un error. Vuelve a intentarlo."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Este número de teléfono se usó demasiadas veces"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Ocurrió un problema durante la verificación de tu número de teléfono"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Este código ya no es válido"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Si presionas %@, indicas que aceptas nuestras %@ y %@. Es posible que te enviemos un SMS, por lo que podrían aplicarse las tarifas de mensajes y uso de datos."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/es-PE.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/es-PE.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index ca3b56b5bba..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/es-PE.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Acceder con el teléfono"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Ingresar número de teléfono"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Atrás"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Siguiente"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Verificar"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "El campo de código de verificación no puede estar vacío"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "El campo de número de teléfono no puede estar vacío"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Número"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Número de teléfono"; - -/* Label next to the left of country selector control. */ -"Country" = "País"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Ingresa el código de %@ dígitos que enviamos a"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Volver a enviar el código"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Volver a enviar el código en %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Verificar tu número de teléfono"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Listo"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Número de teléfono no válido"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Ingresa un número de teléfono válido"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Se envió el código a %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Código de verificación incorrecto"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Código incorrecto. Vuelve a intentarlo."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Se produjo un error. Vuelve a intentarlo."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Este número de teléfono se usó demasiadas veces"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Ocurrió un problema durante la verificación de tu número de teléfono"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Este código ya no es válido"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Si presionas %@, indicas que aceptas nuestras %@ y %@. Es posible que te enviemos un SMS, por lo que podrían aplicarse las tarifas de mensajes y uso de datos."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/es-PR.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/es-PR.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index ca3b56b5bba..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/es-PR.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Acceder con el teléfono"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Ingresar número de teléfono"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Atrás"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Siguiente"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Verificar"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "El campo de código de verificación no puede estar vacío"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "El campo de número de teléfono no puede estar vacío"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Número"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Número de teléfono"; - -/* Label next to the left of country selector control. */ -"Country" = "País"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Ingresa el código de %@ dígitos que enviamos a"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Volver a enviar el código"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Volver a enviar el código en %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Verificar tu número de teléfono"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Listo"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Número de teléfono no válido"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Ingresa un número de teléfono válido"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Se envió el código a %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Código de verificación incorrecto"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Código incorrecto. Vuelve a intentarlo."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Se produjo un error. Vuelve a intentarlo."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Este número de teléfono se usó demasiadas veces"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Ocurrió un problema durante la verificación de tu número de teléfono"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Este código ya no es válido"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Si presionas %@, indicas que aceptas nuestras %@ y %@. Es posible que te enviemos un SMS, por lo que podrían aplicarse las tarifas de mensajes y uso de datos."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/es-PY.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/es-PY.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index ca3b56b5bba..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/es-PY.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Acceder con el teléfono"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Ingresar número de teléfono"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Atrás"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Siguiente"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Verificar"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "El campo de código de verificación no puede estar vacío"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "El campo de número de teléfono no puede estar vacío"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Número"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Número de teléfono"; - -/* Label next to the left of country selector control. */ -"Country" = "País"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Ingresa el código de %@ dígitos que enviamos a"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Volver a enviar el código"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Volver a enviar el código en %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Verificar tu número de teléfono"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Listo"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Número de teléfono no válido"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Ingresa un número de teléfono válido"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Se envió el código a %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Código de verificación incorrecto"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Código incorrecto. Vuelve a intentarlo."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Se produjo un error. Vuelve a intentarlo."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Este número de teléfono se usó demasiadas veces"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Ocurrió un problema durante la verificación de tu número de teléfono"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Este código ya no es válido"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Si presionas %@, indicas que aceptas nuestras %@ y %@. Es posible que te enviemos un SMS, por lo que podrían aplicarse las tarifas de mensajes y uso de datos."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/es-SV.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/es-SV.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index ca3b56b5bba..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/es-SV.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Acceder con el teléfono"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Ingresar número de teléfono"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Atrás"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Siguiente"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Verificar"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "El campo de código de verificación no puede estar vacío"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "El campo de número de teléfono no puede estar vacío"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Número"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Número de teléfono"; - -/* Label next to the left of country selector control. */ -"Country" = "País"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Ingresa el código de %@ dígitos que enviamos a"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Volver a enviar el código"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Volver a enviar el código en %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Verificar tu número de teléfono"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Listo"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Número de teléfono no válido"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Ingresa un número de teléfono válido"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Se envió el código a %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Código de verificación incorrecto"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Código incorrecto. Vuelve a intentarlo."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Se produjo un error. Vuelve a intentarlo."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Este número de teléfono se usó demasiadas veces"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Ocurrió un problema durante la verificación de tu número de teléfono"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Este código ya no es válido"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Si presionas %@, indicas que aceptas nuestras %@ y %@. Es posible que te enviemos un SMS, por lo que podrían aplicarse las tarifas de mensajes y uso de datos."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/es-US.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/es-US.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index ca3b56b5bba..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/es-US.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Acceder con el teléfono"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Ingresar número de teléfono"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Atrás"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Siguiente"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Verificar"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "El campo de código de verificación no puede estar vacío"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "El campo de número de teléfono no puede estar vacío"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Número"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Número de teléfono"; - -/* Label next to the left of country selector control. */ -"Country" = "País"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Ingresa el código de %@ dígitos que enviamos a"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Volver a enviar el código"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Volver a enviar el código en %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Verificar tu número de teléfono"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Listo"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Número de teléfono no válido"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Ingresa un número de teléfono válido"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Se envió el código a %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Código de verificación incorrecto"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Código incorrecto. Vuelve a intentarlo."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Se produjo un error. Vuelve a intentarlo."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Este número de teléfono se usó demasiadas veces"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Ocurrió un problema durante la verificación de tu número de teléfono"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Este código ya no es válido"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Si presionas %@, indicas que aceptas nuestras %@ y %@. Es posible que te enviemos un SMS, por lo que podrían aplicarse las tarifas de mensajes y uso de datos."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/es-UY.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/es-UY.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index ca3b56b5bba..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/es-UY.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Acceder con el teléfono"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Ingresar número de teléfono"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Atrás"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Siguiente"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Verificar"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "El campo de código de verificación no puede estar vacío"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "El campo de número de teléfono no puede estar vacío"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Número"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Número de teléfono"; - -/* Label next to the left of country selector control. */ -"Country" = "País"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Ingresa el código de %@ dígitos que enviamos a"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Volver a enviar el código"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Volver a enviar el código en %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Verificar tu número de teléfono"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Listo"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Número de teléfono no válido"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Ingresa un número de teléfono válido"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Se envió el código a %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Código de verificación incorrecto"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Código incorrecto. Vuelve a intentarlo."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Se produjo un error. Vuelve a intentarlo."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Este número de teléfono se usó demasiadas veces"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Ocurrió un problema durante la verificación de tu número de teléfono"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Este código ya no es válido"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Si presionas %@, indicas que aceptas nuestras %@ y %@. Es posible que te enviemos un SMS, por lo que podrían aplicarse las tarifas de mensajes y uso de datos."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/es-VE.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/es-VE.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index ca3b56b5bba..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/es-VE.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Acceder con el teléfono"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Ingresar número de teléfono"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Atrás"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Siguiente"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Verificar"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "El campo de código de verificación no puede estar vacío"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "El campo de número de teléfono no puede estar vacío"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Número"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Número de teléfono"; - -/* Label next to the left of country selector control. */ -"Country" = "País"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Ingresa el código de %@ dígitos que enviamos a"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Volver a enviar el código"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Volver a enviar el código en %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Verificar tu número de teléfono"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Listo"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Número de teléfono no válido"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Ingresa un número de teléfono válido"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Se envió el código a %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Código de verificación incorrecto"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Código incorrecto. Vuelve a intentarlo."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Se produjo un error. Vuelve a intentarlo."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Este número de teléfono se usó demasiadas veces"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Ocurrió un problema durante la verificación de tu número de teléfono"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Este código ya no es válido"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Si presionas %@, indicas que aceptas nuestras %@ y %@. Es posible que te enviemos un SMS, por lo que podrían aplicarse las tarifas de mensajes y uso de datos."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/es.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/es.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index ae8130d53f7..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/es.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Iniciar sesión con el teléfono"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Introduce el número de teléfono"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Atrás"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Siguiente"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Verificar"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "El código de verificación no puede estar vacío"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "El número de teléfono no puede estar vacío"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Número"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Número de teléfono"; - -/* Label next to the left of country selector control. */ -"Country" = "País"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Introduce el código de %@ dígitos que te hemos enviado a"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Reenviar código"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Reenviar código en %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Verificar número de teléfono"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Listo"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "El número de teléfono no es válido"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Introduce un número de teléfono válido"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Se ha enviado el código a %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Código de verificación incorrecto"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "El código es incorrecto. Vuelve a intentarlo."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Se ha producido un error. Inténtalo de nuevo."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Este número de teléfono se ha usado demasiadas veces"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Se ha producido un problema al verificar el número de teléfono"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Este código ya no es válido"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Si tocas %@, confirmas que aceptas nuestras %@ y nuestra %@. Puede que te enviemos un SMS, por lo que es posible que se apliquen cargos de mensajería y de uso de datos."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/fa.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/fa.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index 3369a24eccd..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/fa.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "ورود به سیستم با تلفن"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "شماره تلفن را وارد کنید"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "قبلی"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "بعدی"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "تأیید"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "فیلد کد تأیید نباید خالی باشد"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "فیلد شماره تلفن نباید خالی باشد"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "عدد"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "شماره تلفن"; - -/* Label next to the left of country selector control. */ -"Country" = "کشور"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "کد %@ رقمی‌ای را که به این شماره ارسال کردیم وارد کنید"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "ارسال مجدد کد"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "کد پس از %@ مجدداً ارسال می‌شود"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "تأیید شماره تلفن"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "انجام شد"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "شماره تلفن نامعتبر"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "شماره تلفن معتبری وارد کنید"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "کد به %@ ارسال شد"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "کد تأیید نادرست"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "کد اشتباه است. دوباره امتحان کنید."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "مشکلی پیش آمد. لطفاً دوباره امتحان کنید."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "از این شماره تلفن به دفعات زیاد استفاده شده است"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "مشکلی در تأیید شماره تلفنتان پیش آمد"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "این کد دیگر معتبر نیست"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "با ضربه‌زدن روی %@، موافقتتان را با %@ و %@ ما اعلام می‌کنید. ممکن است پیامکی ارسال شود. ممکن است هزینه داده و پیام اعمال شود."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/fi.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/fi.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index 80f36350c49..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/fi.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Kirjaudu puhelimella"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Anna puhelinnumero"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Takaisin"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Seuraava"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Vahvista"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "Vahvistuskoodi ei voi olla tyhjä."; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "Puhelinnumero ei voi olla tyhjä."; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Numero"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Puhelinnumero"; - -/* Label next to the left of country selector control. */ -"Country" = "Maa"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Anna %@ merkin pituinen koodi, jonka lähetimme numeroon"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Lähetä koodi uudelleen"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Lähetä koodi uudelleen seuraavan ajan kuluttua: %@."; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Vahvista puhelinnumero"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Valmis"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Virheellinen puhelinnumero"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Anna voimassa oleva puhelinnumero."; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Koodi lähetettiin numeroon %@."; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Virheellinen vahvistuskoodi"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Väärä koodi. Yritä uudelleen."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Tapahtui virhe. Yritä uudelleen."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Tätä puhelinnumeroa on käytetty liian monta kertaa."; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Puhelinnumerosi vahvistamisessa tapahtui virhe."; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Tämä koodi ei ole enää voimassa."; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Napauttamalla %@ vahvistat hyväksyväsi seuraavat: %@ ja %@. Tekstiviesti voidaan lähettää, ja datan ja viestien käyttö voi olla maksullista."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/fil.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/fil.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index ba03397e4ec..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/fil.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Mag-sign in gamit ang telepono"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Ilagay ang numero ng telepono"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Bumalik"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Susunod"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "I-verify"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "Hindi maaaring walang laman ang code sa pag-verify"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "Hindi maaaring walang laman ang numero ng telepono"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Numero"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Numero ng telepono"; - -/* Label next to the left of country selector control. */ -"Country" = "Bansa"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Ilagay ang %@-digit na code na ipinadala namin sa"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Ipadala muli ang code"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Ipadala muli ang code sa %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "I-verify ang numero ng telepono"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Tapos Na"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Di-wastong numero ng telepono"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Maglagay ng wastong numero ng telepono"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Ipinadala ang code sa %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Maling verification code"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Maling code. Subukang muli."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Nagkaroon ng problema. Pakisubukang muli."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Masyadong maraming beses nang nagamit ang numero ng teleponong ito"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Nagkaproblema sa pag-verify ng numero ng iyong telepono"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Wala nang bisa ang code na ito"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Sa pag-tap sa %@, ipinababatid mo na tinatanggap mo ang aming %@ at %@. Maaaring magpadala ng SMS. Maaaring ipatupad ang mga rate ng pagmemensahe at data."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/fr-CH.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/fr-CH.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index 98711798da2..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/fr-CH.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Se connecter avec un téléphone"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Saisissez un numéro de téléphone"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Retour"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Suivant"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Valider"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "Code de validation obligatoire"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "Numéro de téléphone obligatoire"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Numéro"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Numéro de téléphone"; - -/* Label next to the left of country selector control. */ -"Country" = "Pays"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Saisissez le code à %@ chiffres envoyé au"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Renvoyer le code"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Renvoyer le code dans %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Validez le numéro de téléphone"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "OK"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Numéro de téléphone incorrect"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Saisissez un numéro de téléphone valide"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Le code a été envoyé au %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Code de validation incorrect"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Code erroné. Veuillez réessayer."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Une erreur s'est produite. Veuillez réessayer."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Ce numéro de téléphone a été utilisé un trop grand nombre de fois"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Un problème est survenu lors de la validation de votre numéro de téléphone"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Ce code n'est plus valide"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "En appuyant sur %@, vous acceptez les %@ et les %@. Vous déclencherez peut-être l'envoi d'un SMS. Des frais de messages et de données peuvent être facturés."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/fr.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/fr.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index 98711798da2..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/fr.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Se connecter avec un téléphone"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Saisissez un numéro de téléphone"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Retour"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Suivant"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Valider"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "Code de validation obligatoire"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "Numéro de téléphone obligatoire"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Numéro"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Numéro de téléphone"; - -/* Label next to the left of country selector control. */ -"Country" = "Pays"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Saisissez le code à %@ chiffres envoyé au"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Renvoyer le code"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Renvoyer le code dans %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Validez le numéro de téléphone"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "OK"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Numéro de téléphone incorrect"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Saisissez un numéro de téléphone valide"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Le code a été envoyé au %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Code de validation incorrect"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Code erroné. Veuillez réessayer."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Une erreur s'est produite. Veuillez réessayer."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Ce numéro de téléphone a été utilisé un trop grand nombre de fois"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Un problème est survenu lors de la validation de votre numéro de téléphone"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Ce code n'est plus valide"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "En appuyant sur %@, vous acceptez les %@ et les %@. Vous déclencherez peut-être l'envoi d'un SMS. Des frais de messages et de données peuvent être facturés."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/gsw.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/gsw.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index 68e9524fa6f..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/gsw.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Mit Telefonnummer anmelden"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Telefonnummer eingeben"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Zurück"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Weiter"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Bestätigen"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "\"Bestätigungscode\" darf nicht leer sein"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "\"Telefonnummer\" darf nicht leer sein"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Nummer"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Telefonnummer"; - -/* Label next to the left of country selector control. */ -"Country" = "Land"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "%@-stelligen Code eingeben, der an folgende Nummer gesendet wurde:"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Code erneut senden"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Code in %@ erneut senden"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Telefonnummer bestätigen"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Fertig"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Ungültige Telefonnummer"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Geben Sie eine gültige Telefonnummer ein"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Code wurde an %@ gesendet"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Falscher Bestätigungscode"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Falscher Code. Versuchen Sie es noch einmal."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Ein Problem ist aufgetreten. Bitte versuchen Sie es noch einmal."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Diese Telefonnummer wurde schon zu oft verwendet"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Bei der Bestätigung Ihrer Telefonnummer ist ein Problem aufgetreten"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Dieser Code ist nicht mehr gültig"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Wenn Sie auf \"%@\" tippen, stimmen Sie unseren %@ und unserer %@ zu. Sie erhalten möglicherweise eine SMS und es können Gebühren für die Nachricht und die Datenübertragung anfallen."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/gu.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/gu.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index e931b23dcd0..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/gu.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "ફોન વડે સાઇન ઇન કરો"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "ફોન નંબર દાખલ કરો"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "પાછળ"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "આગળ"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "ચકાસો"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "ચકાસણી કોડ દાખલ કરવો આવશ્યક છે"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "ફોન નંબર દાખલ કરવો આવશ્યક છે"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "નંબર"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "ફોન નંબર"; - -/* Label next to the left of country selector control. */ -"Country" = "દેશ"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "અમે આ ફોન નંબર પર મોકલેલ %@-અંકનો કોડ દાખલ કરો"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "કોડ ફરીથી મોકલો"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "%@માં કોડ ફરીથી મોકલો"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "ફોન નંબર ચકાસો"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "થઈ ગયું"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "અમાન્ય ફોન નંબર"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "એક માન્ય ફોન નંબર દાખલ કરો"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "કોડ %@ પર મોકલવામાં આવ્યો હતો"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "ખોટો ચકાસણી કોડ"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "કોડ ખોટો છે. ફરી પ્રયાસ કરો."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "કંઈક ખોટું થયું. કૃપા કરીને ફરી પ્રયાસ કરો."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "આ ફોન નંબરનો ઉપયોગ ઘણી બધી વખત થઈ ગયો છે"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "તમારો ફોન નંબર ચકાસવામાં સમસ્યા આવી હતી"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "આ કોડ હવે માન્ય નથી"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "%@ને ટૅપ કરીને, તમે સૂચવી રહ્યાં છો કે તમે અમારી %@ અને %@ને સ્વીકારો છો. SMS મોકલવામાં આવી શકે છે. સંદેશ અને ડેટા શુલ્ક લાગુ થઈ શકે છે."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/he.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/he.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index 901e2a2126b..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/he.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "כניסה באמצעות הטלפון"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "מה מספר הטלפון שלך?"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "הקודם"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "הבא‏"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "אמת"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "לא הזנת קוד אימות"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "לא הזנת מספר טלפון"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "מספר"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "מספר טלפון"; - -/* Label next to the left of country selector control. */ -"Country" = "מדינה"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "הזן את הקוד בן %@ הספרות ששלחנו למספר"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "שלח קוד חדש"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "שולח קוד חדש בעוד %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "אימות מספר הטלפון"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "סיום"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "מספר הטלפון לא תקין"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "מספר הטלפון שהזנת לא תקין"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "שלחנו קוד למספר %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "קוד האימות שגוי"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "הקוד שגוי. נסה שוב."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "משהו השתבש. נסה שוב."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "למספר הטלפון הזה כבר נשלחו יותר מדי קודים"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "אירעה בעיה באימות של מספר הטלפון"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "הקוד הזה כבר לא בתוקף"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "הקשה על %@ תפורש כהסכמתך ל%@ ול%@. ייתכן שתישלח הודעת SMS. ייתכנו חיובים בגין שליחת הודעות ושימוש בנתונים."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/hi.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/hi.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index b522c09c12a..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/hi.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "फ़ोन से प्रवेश करें"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "फ़ोन नंबर डालें"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "वापस जाएं"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "अगला"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "पुष्टि करें"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "पुष्टि कोड खाली नहीं हो सकता"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "फ़ोन नंबर खाली नहीं हो सकता"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "नंबर"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "फ़ोन नंबर"; - -/* Label next to the left of country selector control. */ -"Country" = "देश"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "हमारी ओर से भेजा गया %@-अंकों वाला कोड डालें"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "कोड फिर से भेजें"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "%@ में कोड फिर से भेजें"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "फ़ोन नंबर की पुष्टि करें"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "हो गया"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "अमान्य फ़ोन नंबर"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "कोई मान्य फ़ोन नंबर डालें"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "%@ को कोड भेजा गया"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "गलत पुष्टि कोड"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "गलत कोड. फिर से कोशिश करें."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "कुछ गलत हो गया. कृपया फिर से कोशिश करें."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "इस फ़ोन नंबर का उपयोग कई बार किया गया है"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "आपके फ़ोन नंबर की पुष्टि करने में एक समस्या हुई"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "यह कोड अब मान्य नहीं है"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "%@ पर टैप करके, आप यह बताते हैं कि आप हमारे %@ और %@ को स्वीकार करते हैं. एक मैसेज (एसएमएस) भेजा जा सकता है. मैसेज और डेटा दरें लागू हो सकती हैं."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/hr.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/hr.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index bc7598f6bc6..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/hr.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Prijava putem telefona"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Unesite telefonski broj"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Natrag"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Dalje"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Potvrdi"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "Polje za kontrolni kôd ne može biti prazno"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "Polje za telefonski broj ne može biti prazno"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Broj"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Telefonski broj"; - -/* Label next to the left of country selector control. */ -"Country" = "Zemlja"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Unesite %@-znamenkasti kôd koji smo poslali na broj"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Ponovo pošalji kôd"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Ponovno slanje koda za %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Potvrda telefonskog broja"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Gotovo"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Nevažeći telefonski broj"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Unesite važeći telefonski broj"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Kôd smo poslali na broj %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Nevažeći kontrolni kôd"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Pogrešan kôd. Pokušajte ponovo."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Nešto nije u redu. Pokušajte ponovo."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Taj telefonski broj upotrijebljen je previše puta"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Došlo je do problema s potvrdom vašeg telefonskog broja."; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Kôd više nije važeći"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Dodirom na %@ potvrđujete da prihvaćate odredbe koje sadrže naši %@ i %@. Možda ćemo vam poslati SMS. Moguća je naplata poruke i podatkovnog prometa."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/hu.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/hu.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index d665154cbb9..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/hu.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Bejelentkezés telefonnal"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Telefonszám megadása"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Vissza"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Következő"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Ellenőrzés"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "Az ellenőrző kód mező nem lehet üres."; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "A telefonszám mező nem lehet üres."; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Szám"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Telefonszám"; - -/* Label next to the left of country selector control. */ -"Country" = "Ország"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Adja meg a(z) %@ számjegyű kódot, melyet ide küldtünk:"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Kód újraküldése"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Kód újraküldése ennyi idő elteltével: %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Telefonszám igazolása"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Kész"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Érvénytelen telefonszám"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Érvényes telefonszámot adjon meg."; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "A kódot elküldtük ide: %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Hibás ellenőrző kód"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Hibás kód. Próbálja újra."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Hiba történt. Próbálja újra."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Ezt a telefonszámot már túl sokszor használták."; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Hiba történt a telefonszám ellenőrzésekor."; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Ez a kód már nem érvényes."; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Az %@ gombra koppintva kinyilvánítja, hogy elfogadja %@ és %@ dokumentumainkat. Erről SMS-t küldhetünk Önnek. A szolgáltató ezért üzenet- és adatforgalmi díjat számíthat fel."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/id.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/id.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index 606f0450840..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/id.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Login dengan ponsel"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Masukkan nomor telepon"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Kembali"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Berikutnya"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Verifikasi"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "Kode verifikasi tidak boleh kosong"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "Nomor telepon tidak boleh kosong"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Nomor"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Nomor telepon"; - -/* Label next to the left of country selector control. */ -"Country" = "Negara"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Masukkan kode %@ digit yang kami kirimkan"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Kirim ulang kode"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Kirirmkan kembali kode dalam %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Verifikasi nomor telepon"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Selesai"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Nomor telepon tidak valid"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Masukan nomor telepon yang valid"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Kode telah dikirimkan ke %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Kode verifikasi salah"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Kode salah. Coba lagi."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Terjadi kesalahan. Coba lagi."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Nomor telepon ini sudah terlalu sering digunakan"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Ada masalah saat memverifikasi nomor telepon Anda"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Kode ini sudah tidak valid"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Dengan menge-tap %@, Anda menyatakan persetujuan atas %@ dan %@ kami. SMS mungkin akan dikirim. Mungkin akan ada biaya pesan & data."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/it.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/it.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index 3ad0e7c84c4..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/it.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Accedi con il telefono"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Inserisci il numero di telefono"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Indietro"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Avanti"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Verifica"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "Il codice di verifica non può essere vuoto"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "Il numero di telefono non può essere vuoto"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Numero"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Numero di telefono"; - -/* Label next to the left of country selector control. */ -"Country" = "Paese"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Inserisci il codice a %@ cifre che abbiamo inviato al numero"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Invia di nuovo il codice"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Invia di nuovo il codice tra %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Verifica numero di telefono"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Fine"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Numero di telefono non valido"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Inserisci un numero di telefono valido"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Il codice è stato inviato a %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Codice di verifica non corretto"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Codice errato. Riprova."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Si è verificato un errore. Riprova."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Questo numero di telefono è stato usato troppe volte"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Si è verificato un problema durante la verifica del tuo numero di telefono"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Questo codice non è più valido"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Se tocchi %@, accetti i nostri %@ e le nostre %@. È possibile che venga inviato un SMS. Potrebbero essere applicate le tariffe per l'invio dei messaggi e per il traffico dati."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/ja.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/ja.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index d6c64fa9d2a..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/ja.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "携帯電話を使用してログイン"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "電話番号の入力"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "戻る"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "次へ"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "確認"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "確認コードは空白にできません"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "電話番号は空白にできません"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "数字"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "電話番号"; - -/* Label next to the left of country selector control. */ -"Country" = "国"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "送信された %@ 桁のコードを入力してください"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "コードを再送信"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "%@後にコードを再送信"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "電話番号の確認"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "完了"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "電話番号が無効です"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "有効な電話番号を入力してください"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "コードを %@ に送信しました"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "確認コードが正しくありません"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "コードが間違っています。もう一度お試しください。"; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "エラーが発生しました。もう一度お試しください。"; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "この電話番号は何度も使用されています"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "電話番号の確認中に問題が発生しました"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "このコードは無効になりました"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "[%@] をタップすると、%@と%@に同意したことになり、SMS が送信されます。データ通信料がかかることがあります。"; diff --git a/FirebasePhoneAuthUI/Sources/Strings/kn.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/kn.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index 476aa8a8ff0..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/kn.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "ಫೋನ್‌ ಮೂಲಕ ಸೈನ್‌ ಇನ್‌ ಮಾಡಿ"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "ಫೋನ್ ಸಂಖ್ಯೆಯನ್ನು ನಮೂದಿಸಿ"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "ಹಿಂದೆ"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "ಮುಂದೆ"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "ಪರಿಶೀಲಿಸು"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "ಪರಿಶೀಲನೆಯ ಕೋಡ್‌ ಖಾಲಿ ಇರುವಂತಿಲ್ಲ"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "ಫೋನ್ ಸಂಖ್ಯೆಯು ಖಾಲಿ ಇರುವಂತಿಲ್ಲ"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "ಸಂಖ್ಯೆ"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "ಫೋನ್ ಸಂಖ್ಯೆ"; - -/* Label next to the left of country selector control. */ -"Country" = "ದೇಶ"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "ನಾವು ಕಳುಹಿಸಿರುವ %@-ಅಂಕಿಯ ಕೋಡ್‌ ನಮೂದಿಸಿ"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "ಕೋಡ್ ಅನ್ನು ಮತ್ತೆ ಕಳುಹಿಸಿ"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "%@ ಗಳಲ್ಲಿ ಕೋಡ್ ಅನ್ನು ಮತ್ತೆ ಕಳುಹಿಸಿ"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "ಫೋನ್ ಸಂಖ್ಯೆಯನ್ನು ಪರಿಶೀಲಿಸಿ"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "ಮುಗಿದಿದೆ"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "ಅಮಾನ್ಯವಾದ ಫೋನ್ ಸಂಖ್ಯೆ"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "ಮಾನ್ಯವಾದ ಫೋನ್ ಸಂಖ್ಯೆಯನ್ನು ನಮೂದಿಸಿ"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "%@ ಗೆ ಕೋಡ್‌ ಅನ್ನು ಕಳುಹಿಸಲಾಗಿದೆ"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "ಪರಿಶೀಲನೆಯ ಕೋಡ್‌ ತಪ್ಪಾಗಿದೆ"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "ಕೋಡ್ ತಪ್ಪಾಗಿದೆ. ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "ಯಾವುದೋ ತಪ್ಪು ಸಂಭವಿಸಿದೆ. ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "ಈ ಫೋನ್ ಸಂಖ್ಯೆಯನ್ನು ಹಲವಾರು ಬಾರಿ ಬಳಸಲಾಗಿದೆ"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "ನಿಮ್ಮ ಫೋನ್ ಸಂಖ್ಯೆಯನ್ನು ಪರಿಶೀಲಿಸುವಾಗ ಸಮಸ್ಯೆ ಎದುರಾಗಿದೆ"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "ಈ ಕೋಡ್ ಇನ್ನು ಮುಂದೆ ಮಾನ್ಯವಾಗಿರುವುದಿಲ್ಲ"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "“%@” ಅನ್ನು ಟ್ಯಾಪ್ ಮಾಡುವ ಮೂಲಕ, ನೀವು ನಮ್ಮ %@ ಮತ್ತು %@ ಸ್ವೀಕರಿಸುತ್ತೀರಿ ಎಂದು ನೀವು ಸೂಚಿಸುತ್ತಿರುವಿರಿ. ಎಸ್‌ಎಂಎಸ್‌ ಅನ್ನು ಕಳುಹಿಸಬಹುದಾಗಿದೆ. ಸಂದೇಶ ಮತ್ತು ಡೇಟಾ ದರಗಳು ಅನ್ವಯಿಸಬಹುದು."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/ko.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/ko.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index 9d024cf08fd..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/ko.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "휴대전화로 로그인"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "전화번호 입력"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "뒤로"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "다음"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "인증"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "인증 코드는 비워둘 수 없습니다."; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "전화번호는 비워둘 수 없습니다."; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "번호"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "전화번호"; - -/* Label next to the left of country selector control. */ -"Country" = "국가"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "전송된 %@자리 코드를 입력하세요."; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "코드 재전송"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "%@ 후에 코드 재전송"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "전화번호 확인"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "완료"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "전화번호가 잘못되었습니다."; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "올바른 전화번호를 입력하세요."; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "%@으(로) 코드가 전송되었습니다."; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "잘못된 인증 코드"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "코드가 잘못되었습니다. 다시 시도하세요."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "문제가 발생했습니다. 다시 시도해 주세요."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "이 전화번호로 전송 시도를 너무 많이 했습니다."; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "전화번호를 인증하는 중에 문제가 발생했습니다."; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "더 이상 유효하지 않은 코드입니다."; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "%@ 버튼을 탭하면 %@ 및 %@에 동의하는 것으로 간주됩니다. SMS가 발송될 수 있으며, 메시지 및 데이터 요금이 부과될 수 있습니다."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/ln.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/ln.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index 98711798da2..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/ln.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Se connecter avec un téléphone"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Saisissez un numéro de téléphone"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Retour"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Suivant"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Valider"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "Code de validation obligatoire"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "Numéro de téléphone obligatoire"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Numéro"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Numéro de téléphone"; - -/* Label next to the left of country selector control. */ -"Country" = "Pays"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Saisissez le code à %@ chiffres envoyé au"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Renvoyer le code"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Renvoyer le code dans %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Validez le numéro de téléphone"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "OK"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Numéro de téléphone incorrect"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Saisissez un numéro de téléphone valide"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Le code a été envoyé au %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Code de validation incorrect"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Code erroné. Veuillez réessayer."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Une erreur s'est produite. Veuillez réessayer."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Ce numéro de téléphone a été utilisé un trop grand nombre de fois"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Un problème est survenu lors de la validation de votre numéro de téléphone"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Ce code n'est plus valide"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "En appuyant sur %@, vous acceptez les %@ et les %@. Vous déclencherez peut-être l'envoi d'un SMS. Des frais de messages et de données peuvent être facturés."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/lt.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/lt.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index 78c14c9ea1e..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/lt.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Prisijungti nurodant telefono numerį"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Įveskite telefono numerį"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Atgal"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Kitas"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Patvirtinti"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "Patvirtinimo kodo laukas negali būti tuščias"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "Telefono numerio laukas negali būti tuščias"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Numeris"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Telefono numeris"; - -/* Label next to the left of country selector control. */ -"Country" = "Šalis"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Įveskite %@ skaitmenų kodą, kurį išsiuntėme jums"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Siųsti kodą dar kartą"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Siųsti kodą dar kartą po %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Patvirtinti telefono numerį"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Atlikta"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Netinkamas telefono numeris"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Įveskite tinkamą telefono numerį"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Kodas išsiųstas telefono numeriu %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Netinkamas patvirtinimo kodas"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Klaidingas kodas. Bandykite dar kartą."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Kažkas nepavyko. Bandykite dar kartą."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Šis telefono numeris panaudotas per daug kartų"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Patvirtinant telefono numerį kilo problema"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Šis kodas nebegalioja"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Paliesdami „%@“ nurodote, kad sutinkate su %@ ir %@. Gali būti išsiųstas SMS pranešimas, taip pat – taikomi pranešimų ir duomenų įkainiai."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/lv.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/lv.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index 17fb6e0f466..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/lv.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Pierakstīties ar tālruni"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Ievadīt tālruņa numuru"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Atpakaļ"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Tālāk"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Verificēt"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "Verifikācijas koda lauks nedrīkst būt tukšs"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "Tālruņa numura lauks nedrīkst būt tukšs"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Numurs"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Tālruņa numurs"; - -/* Label next to the left of country selector control. */ -"Country" = "Valsts"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Ievadiet %@ ciparu kodu, ko nosūtījām uz šādu tālruņa numuru:"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Vēlreiz nosūtīt kodu"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Vēlreiz nosūtīt kodu pēc %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Verificēt tālruņa numuru"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Gatavs"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Nederīgs tālruņa numurs"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Ievadiet derīgu tālruņa numuru"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Kods tika nosūtīts uz: %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Nepareizs verifikācijas kods"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Nepareizs kods. Mēģiniet vēlreiz."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Radās problēma. Lūdzu, mēģiniet vēlreiz."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Šis tālruņa numurs ir izmantots pārāk daudz reižu"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Verificējot jūsu tālruņa numuru, radās problēma"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Šis kods vairs nav derīgs"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Pieskaroties vienumam %@, jūs norādāt, ka piekrītat šādiem dokumentiem: %@ un %@. Var tikt nosūtīta īsziņa. Var tikt piemērota maksa par ziņojumiem un datu pārsūtīšanu."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/mr.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/mr.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index c7a636be262..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/mr.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "फोनने साइन इन करा"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "फोन नंबर टाका"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "मागील"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "पुढील"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "पडताळणी करा"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "पडताळणी कोड रिक्त ठेवता येणार नाही"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "फोन नंबर रिक्त ठेवता येणार नाही"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "नंबर"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "फोन नंबर"; - -/* Label next to the left of country selector control. */ -"Country" = "देश"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "वर आम्ही पाठवलेला %@ अंकी कोड टाका"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "कोड पुन्हा पाठवा"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "कोड %@मध्ये पुन्हा पाठवा"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "फोन नंबरची पडताळणी करा"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "पूर्ण झाले"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "अवैध फोन नंबर"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "एखादा वैध फोन नंबर टाका"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "कोड %@वर पाठवण्यात आला"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "चुकीचा पडताळणी कोड"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "कोड चुकीचा आहे. पुन्हा प्रयत्न करा."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "काहीतरी चूक झाली. कृपया पुन्हा प्रयत्न करा."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "हा फोन नंबर अनेकदा वापरण्यात आला आहे"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "तुमच्या फोन नंबरची पडताळणी करताना समस्या आली"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "हा कोड यापुढे वैध नाही"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "%@ वर टॅप करून, तुम्ही सूचित करता की, तुम्ही आमचे %@ आणि %@ स्वीकारता. एसएमएस पाठवला जाऊ शकतो. मेसेज आणि डेटा दर लागू केले जाऊ शकतात."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/ms.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/ms.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index ca3b63051e3..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/ms.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Log masuk dengan telefon"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Masukkan nombor telefon"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Kembali"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Seterusnya"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Sahkan"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "Kod pengesahan tidak boleh kosong"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "Nombor telefon tidak boleh kosong"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Nombor"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Nombor telefon"; - -/* Label next to the left of country selector control. */ -"Country" = "Negara"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Masukkan kod %@ digit yang kami hantar ke"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Hantar semula kod"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Hantar semula kod dalam masa %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Sahkan nombor telefon"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Selesai"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Nombor telefon tidak sah"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Masukkan nombor telefon yang sah"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Kod dihantar ke %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Kod pengesahan tidak sah"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Kod salah. Cuba lagi."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Kesilapan telah berlaku. Sila cuba lagi."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Nombor telefon ini terlalu kerap digunakan"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Terdapat masalah sewaktu mengesahkan nombor telefon anda"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Kod ini tidak sah lagi"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Dengan mengetik %@, anda menyatakan bahawa anda menerima %@ dan %@ kami. SMS akan dihantar. Tertakluk pada kadar mesej & data."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/nb.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/nb.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index afb2f0d3c3f..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/nb.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Logg på med telefonnummeret ditt"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Angi telefonnummeret"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Tilbake"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Neste"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Bekreft"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "Du må oppgi en bekreftelseskode"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "Du må oppgi et telefonnummer"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Telefonnummer"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Telefonnummer"; - -/* Label next to the left of country selector control. */ -"Country" = "Land"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Angi den %@-sifrede koden vi sendte til"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Send koden på nytt"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Send koden på nytt om %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Bekreft telefonnummeret"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Ferdig"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Ugyldig telefonnummer"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Oppgi et gyldig telefonnummer"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Koden ble sendt til %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Feil bekreftelseskode"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Feil kode. Prøv på nytt."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Noe gikk galt. Prøv på nytt."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Dette telefonnummeret er brukt for mange ganger"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Kunne ikke bekrefte telefonnummeret ditt"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Denne koden er ikke lenger gyldig"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Ved å trykke på %@ godtar du %@ og %@. Du kan bli tilsendt en SMS. Kostnader for meldinger og datatrafikk kan påløpe."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/nl.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/nl.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index a9d3e312cdc..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/nl.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Inloggen met telefoon"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Telefoonnummer invoeren"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Terug"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Volgende"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Verifiëren"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "Verificatiecode mag niet leeg zijn"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "Telefoonnummer mag niet leeg zijn"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Nummer"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Telefoonnummer"; - -/* Label next to the left of country selector control. */ -"Country" = "Land"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Voer de %@-cijferige code in die we hebben verzonden naar"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Code opnieuw verzenden"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Code opnieuw verzenden over %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Telefoonnummer verifiëren"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Gereed"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Ongeldig telefoonnummer"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Voer een geldig telefoonnummer in"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Code is verzonden naar %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Onjuiste verificatiecode"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Onjuiste code. Probeer het opnieuw."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Er is iets verkeerd gegaan. Probeer het opnieuw."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Dit telefoonnummer is te vaak gebruikt"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Er is een probleem met de verificatie van uw telefoonnummer"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Deze code is niet meer geldig"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Door op %@ te tikken, geeft u aan dat u onze %@ en ons %@ accepteert. Mogelijk ontvangt u een sms. Er kunnen sms- en datakosten in rekening worden gebracht."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/nn-NO.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/nn-NO.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index afb2f0d3c3f..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/nn-NO.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Logg på med telefonnummeret ditt"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Angi telefonnummeret"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Tilbake"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Neste"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Bekreft"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "Du må oppgi en bekreftelseskode"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "Du må oppgi et telefonnummer"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Telefonnummer"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Telefonnummer"; - -/* Label next to the left of country selector control. */ -"Country" = "Land"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Angi den %@-sifrede koden vi sendte til"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Send koden på nytt"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Send koden på nytt om %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Bekreft telefonnummeret"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Ferdig"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Ugyldig telefonnummer"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Oppgi et gyldig telefonnummer"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Koden ble sendt til %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Feil bekreftelseskode"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Feil kode. Prøv på nytt."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Noe gikk galt. Prøv på nytt."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Dette telefonnummeret er brukt for mange ganger"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Kunne ikke bekrefte telefonnummeret ditt"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Denne koden er ikke lenger gyldig"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Ved å trykke på %@ godtar du %@ og %@. Du kan bli tilsendt en SMS. Kostnader for meldinger og datatrafikk kan påløpe."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/pl.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/pl.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index dd97eaf526a..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/pl.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Zaloguj się z użyciem numeru telefonu"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Wpisywanie numeru telefonu"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Wstecz"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Dalej"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Zweryfikuj"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "Pole z kodem weryfikacyjnym nie może być puste"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "Pole z numerem telefonu nie może być puste"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Numer"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Numer telefonu"; - -/* Label next to the left of country selector control. */ -"Country" = "Kraj"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Wpisz %@-cyfrowy kod, który wysłaliśmy na numer"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Wyślij kod ponownie"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Wyślij kod ponownie za %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Weryfikowanie numeru telefonu"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Gotowe"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Nieprawidłowy numer telefonu"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Wpisz prawidłowy numer telefonu"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Kod został wysłany na numer %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Niepoprawny kod weryfikacyjny"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Nieprawidłowy kod. Spróbuj jeszcze raz."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Coś się nie udało. Spróbuj jeszcze raz."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Ten numer telefonu został użyty zbyt wiele razy."; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Podczas weryfikacji Twojego numeru telefonu wystąpił problem."; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Ten kod stracił ważność."; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Klikając „%@”, potwierdzasz, że akceptujesz te dokumenty: %@ i %@. Może zostać wysłany SMS. Może to skutkować pobraniem opłat za przesłanie wiadomości i danych."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/pt-BR.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/pt-BR.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index 2de85389ae9..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/pt-BR.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Fazer login com o telefone"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Inserir número de telefone"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Voltar"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Próxima"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Verificar"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "O código de verificação não pode estar em branco."; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "O número do telefone não pode estar em branco."; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Número"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Número de telefone"; - -/* Label next to the left of country selector control. */ -"Country" = "País"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Insira o código de %@ dígitos que enviamos"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Reenviar código"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Reenviar o código em %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Confirmar número de telefone"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Concluir"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Número de telefone inválido"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Insira um número de telefone válido."; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "O código foi enviado para %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Código de verificação inválido"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Código incorreto. Tente novamente."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Ocorreu um erro. Tente novamente."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Este número de telefone já foi usado muitas vezes."; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Ocorreu um problema na verificação do seu número de telefone."; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Este código não é mais válido."; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Ao tocar em %@, você concorda com nossos %@ e a %@. Um SMS poderá ser enviado e tarifas de mensagens e de dados poderão ser cobradas."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/pt-PT.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/pt-PT.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index cc21cae473a..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/pt-PT.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Iniciar sessão com o telemóvel"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Introduzir número de telemóvel"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Anterior"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Seguinte"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Validar"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "O código de validação não pode ficar vazio."; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "O número de telefone não pode ficar vazio."; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Número"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Número de telefone"; - -/* Label next to the left of country selector control. */ -"Country" = "País"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Introduza o código de %@ dígitos que enviámos para"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Reenviar código"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Reenviar código em %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Validar número de telefone"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Concluído"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Número de telefone inválido"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Introduza um número de telefone válido"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "O código foi enviado para %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Código de validação incorreto"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Código errado. Tente novamente."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Ocorreu um erro. Tente novamente."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Este número de telefone foi utilizado demasiadas vezes"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Ocorreu um problema ao validar o número de telefone"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Este código já não é válido"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Ao tocar em %@, indica que aceita os %@ e a %@. Pode gerar o envio de uma SMS. Podem aplicar-se tarifas de dados e de mensagens."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/pt.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/pt.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index 2de85389ae9..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/pt.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Fazer login com o telefone"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Inserir número de telefone"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Voltar"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Próxima"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Verificar"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "O código de verificação não pode estar em branco."; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "O número do telefone não pode estar em branco."; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Número"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Número de telefone"; - -/* Label next to the left of country selector control. */ -"Country" = "País"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Insira o código de %@ dígitos que enviamos"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Reenviar código"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Reenviar o código em %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Confirmar número de telefone"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Concluir"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Número de telefone inválido"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Insira um número de telefone válido."; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "O código foi enviado para %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Código de verificação inválido"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Código incorreto. Tente novamente."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Ocorreu um erro. Tente novamente."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Este número de telefone já foi usado muitas vezes."; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Ocorreu um problema na verificação do seu número de telefone."; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Este código não é mais válido."; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Ao tocar em %@, você concorda com nossos %@ e a %@. Um SMS poderá ser enviado e tarifas de mensagens e de dados poderão ser cobradas."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/ro.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/ro.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index db7aff3d3ea..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/ro.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Conectați-vă cu numărul de telefon"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Introduceți numărul de telefon"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Înapoi"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Înainte"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Confirmați"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "Codul de confirmare trebuie completat"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "Numărul de telefon trebuie completat"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Număr de telefon"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Număr de telefon"; - -/* Label next to the left of country selector control. */ -"Country" = "Țară"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Introduceți codul din %@ cifre pe care l-am trimis la"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Retrimiteți codul"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Retrimiteți codul în %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Confirmați numărul de telefon"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Gata"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Număr de telefon nevalid"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Introduceți un număr de telefon valid."; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Codul a fost trimis la %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Codul de confirmare este greșit"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Cod greșit. Încercați din nou."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "A apărut o eroare. Încercați din nou."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Acest număr de telefon a fost folosit de prea multe ori"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "A apărut o problemă la confirmarea numărului de telefon"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Codul nu mai este valid"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Dacă atingeți %@, sunteți de acord cu %@ și cu %@. Poate fi trimis un SMS. Se pot aplica tarife pentru mesaje și date."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/ru.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/ru.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index 3627134730e..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/ru.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Войти по номеру телефона"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Введите номер телефона"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Назад"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Далее"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Подтвердить"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "Укажите код подтверждения."; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "Укажите номер телефона."; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Номер телефона"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Номер телефона"; - -/* Label next to the left of country selector control. */ -"Country" = "Страна"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Укажите код из %@ цифр, который мы отправили на номер"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Отправить код ещё раз"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Код можно будет запросить ещё раз через %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Подтвердите номер телефона"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Готово"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Неверный номер телефона"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Введите действительный номер телефона."; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Код был отправлен на номер %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Неверный код подтверждения"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Неверный код. Повторите попытку."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Произошла ошибка. Повторите попытку."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Этот номер телефона использовался слишком много раз."; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Не удалось подтвердить номер телефона."; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Этот код уже неактивен."; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Нажимая кнопку \"%@\", вы принимаете два документа. Вот они: %@ и %@. Также вы соглашаетесь получить SMS. За сообщение и обмен данными может взиматься плата."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/sk.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/sk.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index a4592f32276..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/sk.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Prihlásiť sa telefónom"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Zadajte telefónne číslo"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Späť"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Ďalej"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Overiť"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "Overovací kód nesmie byť prázdny"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "Telefónne číslo nesmie byť prázdne"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Číslo"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Telefónne číslo"; - -/* Label next to the left of country selector control. */ -"Country" = "Krajina"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Zadajte %@-ciferný kód, ktorý sme odoslali na číslo"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Znova odoslať kód"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Znova odoslať kód o %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Overenie telefónneho čísla"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Hotovo"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Neplatné telefónne číslo"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Zadajte platné telefónne číslo"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Kód bol odoslaný na číslo %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Nesprávny overovací kód"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Nesprávny kód. Skúste to znova."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Vyskytol sa problém. Skúste to znova."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Toto telefónne číslo bolo použité príliš veľakrát"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Vyskytol sa problém s overením vášho telefónneho čísla"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Tento kód už nie je platný"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Klepnutím na tlačidlo %@ vyjadrujete súhlas s dokumentmi %@ a %@. Môže byť odoslaná SMS a môžu sa účtovať poplatky za správy a dáta."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/sl.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/sl.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index 6c9493cf196..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/sl.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Prijava s telefonom"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Vnesite telefonsko številko"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Nazaj"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Naprej"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Preveri"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "Koda za preverjanje ne sme biti prazna"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "Telefonska številka ne sme biti prazna"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Številka"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Telefonska številka"; - -/* Label next to the left of country selector control. */ -"Country" = "Država"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Vnesite %@-mestno kodo, ki smo jo poslali na številko"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Ponovno pošlji kodo"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Ponovno pošlji kodo čez %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Preverjanje telefonske številke"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Končano"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Neveljavna telefonska številka"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Vnesite veljavno telefonsko številko"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Koda je bila poslana na številko %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Nepravilna koda za preverjanje"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Napačna koda. Poskusite znova."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Prišlo je do napake. Poskusite znova."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Ta telefonska številka je bila uporabljena prevečkrat"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Pri preverjanju telefonske številke je prišlo do težave"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Ta koda ni več veljavna"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Če se dotaknete možnosti »%@«, potrjujete, da se strinjate z dokumentoma %@ in %@. Morda bo poslano sporočilo SMS. Pošiljanje sporočila in prenos podatkov boste morda morali plačati."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/sr-Latn.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/sr-Latn.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index 8ac74161747..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/sr-Latn.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Prijavi me pomoću telefona"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Unesite broj telefona"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Nazad"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Sledeće"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Potvrdi"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "Verifikacioni kôd mora da se unese"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "Broj telefona mora da se unese"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Broj"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Broj telefona"; - -/* Label next to the left of country selector control. */ -"Country" = "Zemlja"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Unesite %@-cifreni kôd koji smo poslali na"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Ponovo pošalji kôd"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Ponovo pošalji kôd za %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Verifikujte broj telefona"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Gotovo"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Nevažeći broj telefona"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Unesite važeći broj telefona"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Kôd je poslat na broj %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Verifikacioni kôd je netačan"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Pogrešan kôd. Probajte ponovo."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Nešto nije u redu. Probajte ponovo."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Ovaj broj telefona je upotrebljen previše puta"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Došlo je do problema pri verifikaciji broja telefona"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Taj kôd više ne važi"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Ako dodirnete %@, potvrđujete da prihvatate dokumente %@ i %@. Možda ćete poslati SMS. Mogu da vam budu naplaćeni troškovi slanja poruke i prenosa podataka."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/sr.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/sr.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index 5a04452e9e2..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/sr.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Пријави ме помоћу телефона"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Унесите број телефона"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Назад"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Следеће"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Потврди"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "Верификациони кôд мора да се унесе"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "Број телефона мора да се унесе"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Број"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Број телефона"; - -/* Label next to the left of country selector control. */ -"Country" = "Земља"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Унесите %@-цифрени кôд који смо послали на"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Поново пошаљи кôд"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Поново пошаљи кôд за %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Верификујте број телефона"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Готово"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Неважећи број телефона"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Унесите важећи број телефона"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Кôд је послат на број %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Верификациони кôд је нетачан"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Погрешан кôд. Пробајте поново."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Нешто није у реду. Пробајте поново."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Овај број телефона је употребљен превише пута"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Дошло је до проблема при верификацији броја телефона"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Тај кôд више не важи"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Ако додирнете %@, потврђујете да прихватате документе %@ и %@. Можда ћете послати SMS. Могу да вам буду наплаћени трошкови слања поруке и преноса података."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/sv.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/sv.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index 2c11ef30f36..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/sv.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Logga in med telefon"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Ange telefonnummer"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Föregående"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Nästa"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Verifiera"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "Du måste ange en verifieringskod"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "Du måste ange telefonnummer"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Nummer"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Telefonnummer"; - -/* Label next to the left of country selector control. */ -"Country" = "Land"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Ange den %@-siffriga koden vi skickade till"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Skicka om kod"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Skicka kod igen om %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Verifiera telefonnummer"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Klart"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Ogiltigt telefonnummer"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Ange ett giltigt telefonnummer"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Koden har skickats till %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Ogiltig verifieringskod"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Fel kod. Försök igen."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Ett fel uppstod. Försök igen."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Det här telefonnumret har använts för många gånger"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Det gick inte att verifiera telefonnumret"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Koden är inte längre giltig"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Genom att trycka på %@ godkänner du våra %@ och vår %@. Ett sms kan skickas. Meddelande- och dataavgifter kan tillkomma."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/ta.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/ta.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index b91027b6a10..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/ta.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "ஃபோன் எண் மூலம் உள்நுழைக"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "ஃபோன் எண்ணை உள்ளிடவும்"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "முந்தையது"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "அடுத்து"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "சரிபார்"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "சரிபார்ப்புக் குறியீடு வெறுமையாக இருக்கக்கூடாது"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "ஃபோன் எண் வெறுமையாக இருக்கக்கூடாது"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "ஃபோன் எண்"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "ஃபோன் எண்"; - -/* Label next to the left of country selector control. */ -"Country" = "நாடு"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "இந்த எண்ணுக்கு நாங்கள் அனுப்பிய %@ இலக்கக் குறியீட்டை உள்ளிடவும்:"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "குறியீட்டை மீண்டும் அனுப்பு"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "%@ இல் குறியீட்டை மீண்டும் அனுப்பவும்"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "ஃபோன் எண்ணைச் சரிபார்க்கவும்"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "முடிந்தது"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "தவறான ஃபோன் எண்"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "சரியான ஃபோன் எண்ணை உள்ளிடவும்"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "குறியீடு %@க்கு அனுப்பப்பட்டது"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "தவறான சரிபார்ப்புக் குறியீடு"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "தவறான குறியீடு. மீண்டும் முயலவும்."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "ஏதோ தவறாகிவிட்டது. மீண்டும் முயலவும்."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "இந்த ஃபோன் எண் பலமுறைப் பயன்படுத்தப்பட்டுள்ளது"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "ஃபோன் எண்ணைச் சரிபார்ப்பதில் ஏதோ சிக்கல் ஏற்பட்டது"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "இந்தக் குறியீடு இனி செல்லுபடியாகாது"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "%@ என்பதைத் தட்டுவதன் மூலம், எங்கள் %@ மற்றும் %@ ஆகியவற்றை ஏற்பதாகக் குறிப்பிடுகிறீர்கள். SMS அனுப்பப்படலாம். SMS மற்றும் தரவுக் கட்டணங்கள் விதிக்கப்படலாம்."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/th.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/th.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index 8137df070a2..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/th.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "ลงชื่อเข้าใช้ด้วยโทรศัพท์"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "ป้อนหมายเลขโทรศัพท์"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "ย้อนกลับ"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "ถัดไป"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "ยืนยัน"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "ต้องระบุรหัสยืนยัน"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "ต้องระบุหมายเลขโทรศัพท์"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "หมายเลข"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "หมายเลขโทรศัพท์"; - -/* Label next to the left of country selector control. */ -"Country" = "ประเทศ"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "ป้อนรหัส %@ หลักที่เราส่งให้คุณ"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "ส่งรหัสอีกครั้ง"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "ส่งรหัสอีกครั้งใน %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "ยืนยันหมายเลขโทรศัพท์"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "เสร็จสิ้น"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "หมายเลขโทรศัพท์ไม่ถูกต้อง"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "ป้อนหมายเลขโทรศัพท์ที่ถูกต้อง"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "ส่งรหัสไปยัง %@ แล้ว"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "รหัสยืนยันไม่ถูกต้อง"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "รหัสไม่ถูกต้อง โปรดลองอีกครั้ง"; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "เกิดข้อผิดพลาดบางอย่าง โปรดลองอีกครั้ง"; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "มีการใช้หมายเลขโทรศัพท์นี้หลายครั้งเกินไป"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "เกิดปัญหาในการยืนยันหมายเลขโทรศัพท์ของคุณ"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "ไม่สามารถใช้รหัสนี้ได้อีกต่อไป"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "การแตะที่ %@ แสดงว่าคุณยอมรับ%@และ%@ โดยระบบอาจส่ง SMS ให้คุณ และอาจมีค่าบริการรับส่งข้อความและค่าบริการอินเทอร์เน็ต"; diff --git a/FirebasePhoneAuthUI/Sources/Strings/tr.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/tr.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index 19ba941fe82..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/tr.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Telefonla oturum aç"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Telefonu girin"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Geri"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "İleri"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Doğrula"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "Doğrulama kodu boş bırakılamaz"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "Telefon numarası boş bırakılamaz"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Sayı"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Telefon numarası"; - -/* Label next to the left of country selector control. */ -"Country" = "Ülke"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Şu telefon numarasına yolladığımız %@ haneli kodu girin:"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Kodu yeniden gönder"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "%@ içinde kodu yeniden gönder"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Telefon numarasını doğrulayın"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Bitti"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Geçersiz telefon numarası"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Geçerli bir telefon numarası girin"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Kod, %@ numaralı telefona gönderildi"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Yanlış doğrulama kodu"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Yanlış kod. Tekrar deneyin."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Bir hata oluştu. Lütfen tekrar deneyin."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Bu telefon numarası çok fazla kez kullanıldı"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Telefon numaranız doğrulanırken bir sorun oluştu"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Bu kod artık geçerli değil"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "%@ öğesine dokunarak %@ ve %@ hükümlerimizi kabul ettiğinizi bildirirsiniz. SMS gönderilebilir. Mesaj ve veri ücretleri geçerli uygulanabilir."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/uk.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/uk.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index 20804aaff4f..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/uk.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Увійти, використовуючи телефон"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Введіть номер телефону"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Назад"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Далі"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Підтвердити"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "Укажіть код підтвердження"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "Укажіть номер телефону"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Номер"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Номер телефону"; - -/* Label next to the left of country selector control. */ -"Country" = "Країна"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Введіть %@-значний код, який ми надіслали на номер"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Повторно надіслати код"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Повторно надіслати код через %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Підтвердити номер телефону"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Готово"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Недійсний номер телефону"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Введіть дійсний номер телефону"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Код надіслано на номер %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Неправильний код підтвердження"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Неправильний код. Повторіть спробу."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Сталася помилка. Повторіть спробу."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Цей номер телефону використовувався забагато разів"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Не вдалося підтвердити ваш номер телефону"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Цей код уже не дійсний"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Торкаючись кнопки \"%@\", ви приймаєте такі документи: %@ і %@. Вам може надійти SMS-повідомлення. За SMS і використання трафіку може стягуватися плата."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/ur.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/ur.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index 23cad2dcd4a..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/ur.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "فون کے ساتھ سائں ان کریں"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "فون نمبر درج کریں"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "پیچھے جائیں"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "آگے جائیں"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "توثیق کریں"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "توثیقی کوڈ خالی نہیں رہ سکتا"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "فون نمبر خالی نہیں رہ سکتا"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "نمبر"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "فون نمبر"; - -/* Label next to the left of country selector control. */ -"Country" = "ملک"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "ہماری جانب سے بھیجا گیا %@ عدد کا کوڈ درج کریں"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "کوڈ دوبارہ بھیجیں"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "%@ میں کوڈ دوبارہ بھیجیں"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "فون نمبر کی توثیق کریں"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "ہو گیا"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "غلط فون نمبر"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "براہ کرم ایک درست فون نمبر درج کریں"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "کوڈ %@ کو بھیجا گیا تھا"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "غلط توثیقی کوڈ"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "غلط کوڈ۔ دوبارہ کوشش کریں۔"; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "کچھ غلط ہو گیا۔ براہ کرم دوبارہ کوشش کریں۔"; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "یہ فون نمبر کافی مرتبہ استعمال ہو چکا ہے"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "آپ کے فون نمبر کی توثیق کرنے میں ایک مسئلہ تھا"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "یہ کوڈ اب درست نہیں رہا"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "%@ کو تھپتھپا کر، آپ نشاندہی کر رہے ہیں کہ آپ ہماری %@ اور %@ کو قبول کرتے ہیں۔ ایک SMS بھیجا جا سکتا ہے۔ پیغام اور ڈیٹا کی شرحیں لاگو ہو سکتی ہیں۔"; diff --git a/FirebasePhoneAuthUI/Sources/Strings/vi.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/vi.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index 68fa7e2b24e..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/vi.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "Đăng nhập bằng điện thoại"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "Nhập số điện thoại"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "Quay lại"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "Tiếp"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "Xác minh"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "Không được để trống mã xác minh"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "Không được để trống số điện thoại"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "Số"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "Số điện thoại"; - -/* Label next to the left of country selector control. */ -"Country" = "Quốc gia"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "Nhập mã %@ chữ số mà chúng tôi gửi cho bạn"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "Gửi lại mã"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "Gửi lại mã bằng %@"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "Xác minh số điện thoại"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "Xong"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "Số điện thoại không hợp lệ"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "Nhập số điện thoại hợp lệ"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "Mã được gửi tới %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "Mã xác minh không chính xác"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "Mã không chính xác. Hãy thử lại."; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "Đã xảy ra sự cố. Vui lòng thử lại."; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "Số điện thoại này đã được sử dụng quá nhiều lần"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "Đã xảy ra sự cố khi xác minh số điện thoại của bạn"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "Mã này không còn hợp lệ"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "Bằng cách nhấn vào %@, bạn cho biết rằng bạn chấp nhận %@ và %@ của chúng tôi. Bạn có thể nhận được một tin nhắn SMS. Cước tin nhắn và dữ liệu có thể áp dụng."; diff --git a/FirebasePhoneAuthUI/Sources/Strings/zh-Hans.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/zh-Hans.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index 18bc04593fc..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/zh-Hans.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "使用电话号码登录"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "输入电话号码"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "返回"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "继续"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "验证"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "验证码不能为空"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "电话号码不能为空"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "号码"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "电话号码"; - -/* Label next to the left of country selector control. */ -"Country" = "国家/地区"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "输入我们发送至以下电话号码的 %@ 位数验证码:"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "重新发送验证码"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "%@ 后可重新发送验证码"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "验证电话号码"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "完成"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "电话号码无效"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "请输入有效的电话号码"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "验证码已发送至 %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "验证码不正确"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "验证码有误,请重试。"; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "出了点问题,请重试。"; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "此电话号码的使用次数过多"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "验证您的电话号码时出现问题"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "此验证码已失效"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "点按“%@”即表示您接受我们的%@和%@。系统会向您发送一条短信。这可能会产生短信费用和上网流量费。"; diff --git a/FirebasePhoneAuthUI/Sources/Strings/zh-Hant-TW.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/zh-Hant-TW.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index 9db15498d36..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/zh-Hant-TW.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "使用電話登入"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "輸入電話號碼"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "上一步"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "下一步"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "驗證"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "驗證碼不能空白"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "電話號碼不能空白"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "號碼"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "電話號碼"; - -/* Label next to the left of country selector control. */ -"Country" = "國家/地區"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "請輸入系統傳送到下列電話號碼的 %@ 位數驗證碼:"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "重新傳送驗證碼"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "於 %@ 後重新傳送驗證碼"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "驗證電話號碼"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "完成"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "電話號碼錯誤"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "請輸入有效的電話號碼"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "驗證碼已傳送至 %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "驗證碼不正確"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "驗證碼錯誤,請再試一次。"; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "發生錯誤,請再試一次。"; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "使用這個電話號碼的次數過多"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "驗證電話號碼時發生問題"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "這個代碼已經失效"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "選擇輕觸 [%@] 即表示您接受我們的《%@》和《%@》。系統將會傳送簡訊給您,不過您可能需要支付簡訊和數據傳輸費用。"; diff --git a/FirebasePhoneAuthUI/Sources/Strings/zh-Hant.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/zh-Hant.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index 9db15498d36..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/zh-Hant.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "使用電話登入"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "輸入電話號碼"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "上一步"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "下一步"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "驗證"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "驗證碼不能空白"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "電話號碼不能空白"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "號碼"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "電話號碼"; - -/* Label next to the left of country selector control. */ -"Country" = "國家/地區"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "請輸入系統傳送到下列電話號碼的 %@ 位數驗證碼:"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "重新傳送驗證碼"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "於 %@ 後重新傳送驗證碼"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "驗證電話號碼"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "完成"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "電話號碼錯誤"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "請輸入有效的電話號碼"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "驗證碼已傳送至 %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "驗證碼不正確"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "驗證碼錯誤,請再試一次。"; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "發生錯誤,請再試一次。"; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "使用這個電話號碼的次數過多"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "驗證電話號碼時發生問題"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "這個代碼已經失效"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "選擇輕觸 [%@] 即表示您接受我們的《%@》和《%@》。系統將會傳送簡訊給您,不過您可能需要支付簡訊和數據傳輸費用。"; diff --git a/FirebasePhoneAuthUI/Sources/Strings/zh.lproj/FirebasePhoneAuthUI.strings b/FirebasePhoneAuthUI/Sources/Strings/zh.lproj/FirebasePhoneAuthUI.strings deleted file mode 100644 index 18bc04593fc..00000000000 --- a/FirebasePhoneAuthUI/Sources/Strings/zh.lproj/FirebasePhoneAuthUI.strings +++ /dev/null @@ -1,74 +0,0 @@ -/* The text of the button used to sign-in with Phone. */ -"SignInWithPhone" = "使用电话号码登录"; - -/* The title of view controller where user enters phone number. */ -"EnterPhoneTitle" = "输入电话号码"; - -/* The title of button on navigation controller which navigates to previous screen. */ -"Back" = "返回"; - -/* The title of button on navigation controller which navigates to the next screen. */ -"Next" = "继续"; - -/* The title of button which user taps on phone verification screen. */ -"Verify" = "验证"; - -/* Alert message displayed when user submits empty verification code. */ -"EmptyVerificationCode" = "验证码不能为空"; - -/* Alert message displayed when user submits empty phone number. */ -"EmptyPhoneNumber" = "电话号码不能为空"; - -/* Label next to the left of phone number entry field. User shorter version of 'phone number' translation.*/ -"PhoneNumber" = "号码"; - -/* Placeholder shown for phone number input field. */ -"EnterYourPhoneNumber" = "电话号码"; - -/* Label next to the left of country selector control. */ -"Country" = "国家/地区"; - -/* Text of the label shown on the verification screen describing that verification code was sent to phone number. */ -"EnterCodeDescription" = "输入我们发送至以下电话号码的 %@ 位数验证码:"; - -/* The title of button with resend verification code functionality. */ -"ResendCode" = "重新发送验证码"; - -/* Text of the resend timer label shown on verification phone number screen. */ -"ResendCodeTimer" = "%@ 后可重新发送验证码"; - -/* The title of view controller where user verifies phone number. . */ -"VerifyPhoneTitle" = "验证电话号码"; - -/* The title of button displayed when user closes alert message. */ -"Done" = "完成"; - -/* The title of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneTitle" = "电话号码无效"; - -/* The body message of alert shown when user entered invalid phone number format. */ -"IncorrectPhoneMessage" = "请输入有效的电话号码"; - -/* The body message of alert shown when user tapped resend verification code button. */ -"ResendCodeResult" = "验证码已发送至 %@"; - -/* The title of alert shown when user entered invalid verification code. */ -"IncorrectCodeTitle" = "验证码不正确"; - -/* The body message of alert shown when user entered invalid verification code. */ -"IncorrectCodeMessage" = "验证码有误,请重试。"; - -/* The body message of alert shown when internal server error appeared. */ -"InternalErrorMessage" = "出了点问题,请重试。"; - -/* The body message of alert shown when the user has tried to send too many SMS messages. */ -"TooManyCodesSent" = "此电话号码的使用次数过多"; - -/* The body message of alert shown when Firebase project has tried to send too many SMS messages for its price tier. */ -"MessageQuotaExceeded" = "验证您的电话号码时出现问题"; - -/* The body message of alert shown when the SMS confirmation code has expired, so the user should send a new one. */ -"MessageExpired" = "此验证码已失效"; - -/* Message shown at the footer of the screen before sending SMS confirmation code. The first placeholder is the value of the key "Verify". The second placeholder is the terms of service agreement link, the third placeholder is the privacy policy agreement link. */ -"TermsSMS" = "点按“%@”即表示您接受我们的%@和%@。系统会向您发送一条短信。这可能会产生短信费用和上网流量费。"; diff --git a/FirebaseSwiftUI/FirebaseAppleSwiftUI/Sources/Services/AppleProviderAuthUI.swift b/FirebaseSwiftUI/FirebaseAppleSwiftUI/Sources/Services/AppleProviderAuthUI.swift new file mode 100644 index 00000000000..610c08624c3 --- /dev/null +++ b/FirebaseSwiftUI/FirebaseAppleSwiftUI/Sources/Services/AppleProviderAuthUI.swift @@ -0,0 +1,154 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import AuthenticationServices +import CryptoKit +import FirebaseAuth +import FirebaseAuthSwiftUI +import FirebaseCore +import SwiftUI + +// MARK: - Data Extensions + +extension Data { + var utf8String: String? { + return String(data: self, encoding: .utf8) + } +} + +extension ASAuthorizationAppleIDCredential { + var authorizationCodeString: String? { + return authorizationCode?.utf8String + } + + var idTokenString: String? { + return identityToken?.utf8String + } +} + +// MARK: - Authenticate With Apple Dialog + +private func authenticateWithApple(scopes: [ASAuthorization.Scope]) async throws -> ( + ASAuthorizationAppleIDCredential, + String +) { + return try await AuthenticateWithAppleDialog(scopes: scopes).authenticate() +} + +private class AuthenticateWithAppleDialog: NSObject { + private var continuation: CheckedContinuation<(ASAuthorizationAppleIDCredential, String), Error>? + private var currentNonce: String? + private let scopes: [ASAuthorization.Scope] + + init(scopes: [ASAuthorization.Scope]) { + self.scopes = scopes + super.init() + } + + func authenticate() async throws -> (ASAuthorizationAppleIDCredential, String) { + return try await withCheckedThrowingContinuation { continuation in + self.continuation = continuation + + let appleIDProvider = ASAuthorizationAppleIDProvider() + let request = appleIDProvider.createRequest() + request.requestedScopes = scopes + + do { + let nonce = try CryptoUtils.randomNonceString() + currentNonce = nonce + request.nonce = CryptoUtils.sha256(nonce) + } catch { + continuation.resume(throwing: AuthServiceError.signInFailed(underlying: error)) + return + } + + let authorizationController = ASAuthorizationController(authorizationRequests: [request]) + authorizationController.delegate = self + authorizationController.performRequests() + } + } +} + +extension AuthenticateWithAppleDialog: ASAuthorizationControllerDelegate { + func authorizationController(controller _: ASAuthorizationController, + didCompleteWithAuthorization authorization: ASAuthorization) { + if let appleIDCredential = authorization.credential as? ASAuthorizationAppleIDCredential { + if let nonce = currentNonce { + continuation?.resume(returning: (appleIDCredential, nonce)) + } else { + continuation?.resume( + throwing: AuthServiceError.signInFailed( + underlying: NSError( + domain: "AppleSignIn", + code: -1, + userInfo: [NSLocalizedDescriptionKey: "Missing nonce"] + ) + ) + ) + } + } else { + continuation?.resume( + throwing: AuthServiceError.invalidCredentials("Missing Apple ID credential") + ) + } + continuation = nil + } + + func authorizationController(controller _: ASAuthorizationController, + didCompleteWithError error: Error) { + continuation?.resume(throwing: AuthServiceError.signInFailed(underlying: error)) + continuation = nil + } +} + +// MARK: - Apple Provider Swift + +public class AppleProviderSwift: CredentialAuthProviderSwift { + public let scopes: [ASAuthorization.Scope] + let providerId = "apple.com" + + public init(scopes: [ASAuthorization.Scope] = [.fullName, .email]) { + self.scopes = scopes + } + + @MainActor public func createAuthCredential() async throws -> AuthCredential { + let (appleIDCredential, nonce) = try await authenticateWithApple(scopes: scopes) + + guard let idTokenString = appleIDCredential.idTokenString else { + throw AuthServiceError.invalidCredentials("Unable to fetch identity token from Apple") + } + + let credential = OAuthProvider.appleCredential( + withIDToken: idTokenString, + rawNonce: nonce, + fullName: appleIDCredential.fullName + ) + + return credential + } +} + +public class AppleProviderAuthUI: AuthProviderUI { + private let typedProvider: AppleProviderSwift + public var provider: AuthProviderSwift { typedProvider } + public let id: String = "apple.com" + + public init(provider: AppleProviderSwift) { + typedProvider = provider + } + + @MainActor public func authButton() -> AnyView { + AnyView(SignInWithAppleButton(provider: typedProvider)) + } +} diff --git a/FirebaseSwiftUI/FirebaseAppleSwiftUI/Sources/Services/AuthService+Apple.swift b/FirebaseSwiftUI/FirebaseAppleSwiftUI/Sources/Services/AuthService+Apple.swift new file mode 100644 index 00000000000..43ee3773a05 --- /dev/null +++ b/FirebaseSwiftUI/FirebaseAppleSwiftUI/Sources/Services/AuthService+Apple.swift @@ -0,0 +1,31 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// +// AuthService+Apple.swift +// FirebaseUI +// +// Created by Russell Wheatley on 21/10/2025. +// + +import FirebaseAuthSwiftUI + +public extension AuthService { + @discardableResult + func withAppleSignIn(_ provider: AppleProviderSwift? = nil) -> AuthService { + registerProvider(providerWithButton: AppleProviderAuthUI(provider: provider ?? + AppleProviderSwift())) + return self + } +} diff --git a/FirebaseSwiftUI/FirebaseAppleSwiftUI/Sources/Services/CryptoUtils.swift b/FirebaseSwiftUI/FirebaseAppleSwiftUI/Sources/Services/CryptoUtils.swift new file mode 100644 index 00000000000..b96bac78871 --- /dev/null +++ b/FirebaseSwiftUI/FirebaseAppleSwiftUI/Sources/Services/CryptoUtils.swift @@ -0,0 +1,52 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import CryptoKit +import Foundation + +/// Set of utility APIs for generating cryptographical artifacts. +enum CryptoUtils { + enum NonceGenerationError: Error { + case generationFailure(status: OSStatus) + } + + static func randomNonceString(length: Int = 32) throws -> String { + precondition(length > 0) + var randomBytes = [UInt8](repeating: 0, count: length) + let errorCode = SecRandomCopyBytes(kSecRandomDefault, randomBytes.count, &randomBytes) + if errorCode != errSecSuccess { + throw NonceGenerationError.generationFailure(status: errorCode) + } + + let charset: [Character] = + Array("0123456789ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvwxyz-._") + + let nonce = randomBytes.map { byte in + // Pick a random character from the set, wrapping around if needed. + charset[Int(byte) % charset.count] + } + + return String(nonce) + } + + static func sha256(_ input: String) -> String { + let inputData = Data(input.utf8) + let hashedData = SHA256.hash(data: inputData) + let hashString = hashedData.compactMap { + String(format: "%02x", $0) + }.joined() + + return hashString + } +} diff --git a/FirebaseSwiftUI/FirebaseAppleSwiftUI/Sources/Views/SignInWithAppleButton.swift b/FirebaseSwiftUI/FirebaseAppleSwiftUI/Sources/Views/SignInWithAppleButton.swift new file mode 100644 index 00000000000..67a9d33d5ac --- /dev/null +++ b/FirebaseSwiftUI/FirebaseAppleSwiftUI/Sources/Views/SignInWithAppleButton.swift @@ -0,0 +1,63 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import FirebaseAuthSwiftUI +import FirebaseAuthUIComponents +import SwiftUI + +/// A button for signing in with Apple +@MainActor +public struct SignInWithAppleButton { + @Environment(AuthService.self) private var authService + @Environment(\.accountConflictHandler) private var accountConflictHandler + @Environment(\.mfaHandler) private var mfaHandler + @Environment(\.reportError) private var reportError + let provider: AppleProviderSwift + public init(provider: AppleProviderSwift) { + self.provider = provider + } +} + +extension SignInWithAppleButton: View { + public var body: some View { + AuthProviderButton( + label: authService.string.appleLoginButtonLabel, + style: .apple, + accessibilityId: "sign-in-with-apple-button" + ) { + Task { + do { + let outcome = try await authService.signIn(provider) + + // Handle MFA at view level + if case let .mfaRequired(mfaInfo) = outcome, + let onMFA = mfaHandler { + onMFA(mfaInfo) + return + } + } catch { + reportError?(error) + + if case let AuthServiceError.accountConflict(ctx) = error, + let onConflict = accountConflictHandler { + onConflict(ctx) + return + } + + throw error + } + } + } + } +} diff --git a/FirebaseSwiftUI/FirebaseAppleSwiftUI/Tests/FirebaseAppleSwiftUITests/FirebaseAppleSwiftUITests.swift b/FirebaseSwiftUI/FirebaseAppleSwiftUI/Tests/FirebaseAppleSwiftUITests/FirebaseAppleSwiftUITests.swift new file mode 100644 index 00000000000..abbc709cd6f --- /dev/null +++ b/FirebaseSwiftUI/FirebaseAppleSwiftUI/Tests/FirebaseAppleSwiftUITests/FirebaseAppleSwiftUITests.swift @@ -0,0 +1,20 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +@testable import FirebaseAppleSwiftUI +import Testing + +@Test func example() async throws { + // Write your test here and use APIs like `#expect(...)` to check expected conditions. +} diff --git a/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Auth/MultiFactor.swift b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Auth/MultiFactor.swift new file mode 100644 index 00000000000..0e07bebacd4 --- /dev/null +++ b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Auth/MultiFactor.swift @@ -0,0 +1,114 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +@preconcurrency import FirebaseAuth +import SwiftUI + +public enum SecondFactorType { + case sms + case totp +} + +public struct TOTPEnrollmentInfo { + public let sharedSecretKey: String + public let qrCodeURL: URL? + public let accountName: String? + public let issuer: String? + public let verificationStatus: VerificationStatus + + public enum VerificationStatus { + case pending + case verified + case failed + } + + public init(sharedSecretKey: String, + qrCodeURL: URL? = nil, + accountName: String? = nil, + issuer: String? = nil, + verificationStatus: VerificationStatus = .pending) { + self.sharedSecretKey = sharedSecretKey + self.qrCodeURL = qrCodeURL + self.accountName = accountName + self.issuer = issuer + self.verificationStatus = verificationStatus + } +} + +public struct EnrollmentSession { + public let id: String + public let type: SecondFactorType + public let session: MultiFactorSession + public let totpInfo: TOTPEnrollmentInfo? + public let phoneNumber: String? + public let verificationId: String? + public let status: EnrollmentStatus + public let createdAt: Date + public let expiresAt: Date + + // Internal handle to finish TOTP + let _totpSecret: AnyObject? + + public enum EnrollmentStatus { + case initiated + case verificationSent + case verificationPending + case completed + case failed + case expired + } + + public init(id: String = UUID().uuidString, + type: SecondFactorType, + session: MultiFactorSession, + totpInfo: TOTPEnrollmentInfo? = nil, + phoneNumber: String? = nil, + verificationId: String? = nil, + status: EnrollmentStatus = .initiated, + createdAt: Date = Date(), + expiresAt: Date = Date().addingTimeInterval(600), // 10 minutes default + _totpSecret: AnyObject? = nil) { + self.id = id + self.type = type + self.session = session + self.totpInfo = totpInfo + self.phoneNumber = phoneNumber + self.verificationId = verificationId + self.status = status + self.createdAt = createdAt + self.expiresAt = expiresAt + self._totpSecret = _totpSecret + } + + public var isExpired: Bool { + return Date() > expiresAt + } + + public var canProceed: Bool { + return !isExpired && + (status == .initiated || status == .verificationSent || status == .verificationPending) + } +} + +public enum MFAHint: Hashable { + case phone(displayName: String?, uid: String, phoneNumber: String?) + case totp(displayName: String?, uid: String) +} + +public struct MFARequired: Hashable { + public let hints: [MFAHint] + + public init(hints: [MFAHint]) { + self.hints = hints + } +} diff --git a/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/AuthServiceError.swift b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/AuthServiceError.swift index badbc985191..74575684cdd 100644 --- a/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/AuthServiceError.swift +++ b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/AuthServiceError.swift @@ -15,16 +15,56 @@ import FirebaseAuth import SwiftUI -public struct AccountMergeConflictContext: LocalizedError { +/// Describes the specific type of account conflict that occurred +public enum AccountConflictType: Equatable { + /// Account exists with a different provider (e.g., user signed up with Google, trying to use + /// email) + /// Solution: Sign in with existing provider, then link the new credential + case accountExistsWithDifferentCredential + + /// The credential is already linked to another account + /// Solution: User must sign in with that account or unlink the credential + case credentialAlreadyInUse + + /// Email is already registered with another method + /// Solution: Sign in with existing method, then link if desired + case emailAlreadyInUse + + /// Trying to link anonymous account to an existing account + /// Solution: Sign out of anonymous, then sign in with the credential + case anonymousUpgradeConflict +} + +public struct AccountConflictContext: LocalizedError, Identifiable, Equatable { + public let id = UUID() + public let conflictType: AccountConflictType public let credential: AuthCredential public let underlyingError: Error public let message: String - // TODO: - should make this User type once fixed upstream in firebase-ios-sdk. See: https://github.com/firebase/FirebaseUI-iOS/pull/1247#discussion_r2085455355 - public let uid: String? + public let email: String? + + /// Human-readable description of the conflict type + public var conflictDescription: String { + switch conflictType { + case .accountExistsWithDifferentCredential: + return "This account is already registered with a different sign-in method." + case .credentialAlreadyInUse: + return "This credential is already linked to another account." + case .emailAlreadyInUse: + return "This email address is already in use." + case .anonymousUpgradeConflict: + return "Cannot link anonymous account to an existing account." + } + } public var errorDescription: String? { return message } + + public static func == (lhs: AccountConflictContext, rhs: AccountConflictContext) -> Bool { + // Compare by id since each AccountConflictContext instance is unique + lhs.id == rhs.id + } } public enum AuthServiceError: LocalizedError { @@ -35,7 +75,12 @@ public enum AuthServiceError: LocalizedError { case reauthenticationRequired(String) case invalidCredentials(String) case signInFailed(underlying: Error) - case accountMergeConflict(context: AccountMergeConflictContext) + case accountConflict(AccountConflictContext) + case providerNotFound(String) + case multiFactorAuth(String) + case rootViewControllerNotFound(String) + case providerAuthenticationFailed(String) + case signInCancelled(String) public var errorDescription: String? { switch self { @@ -51,10 +96,22 @@ public enum AuthServiceError: LocalizedError { return description case let .invalidCredentials(description): return description + // Use when failed to sign-in with Firebase case let .signInFailed(underlying: error): return "Failed to sign in: \(error.localizedDescription)" - case let .accountMergeConflict(context): + // Use when failed to sign-in with provider (e.g. Google, Facebook, etc.) + case let .providerAuthenticationFailed(description): + return description + case let .signInCancelled(description): + return description + case let .accountConflict(context): return context.errorDescription + case let .providerNotFound(description): + return description + case let .multiFactorAuth(description): + return description + case let .rootViewControllerNotFound(description): + return description } } } diff --git a/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Services/AccountService+Email.swift b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Services/AccountService+Email.swift index 59bcb0d5942..2bb0b053ebd 100644 --- a/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Services/AccountService+Email.swift +++ b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Services/AccountService+Email.swift @@ -12,91 +12,33 @@ // See the License for the specific language governing permissions and // limitations under the License. -@preconcurrency import FirebaseAuth import Observation -protocol EmailPasswordOperationReauthentication { - var passwordPrompt: PasswordPromptCoordinator { get } -} - -extension EmailPasswordOperationReauthentication { - // TODO: - @MainActor because User is non-sendable. Might change this once User is sendable in firebase-ios-sdk - @MainActor func reauthenticate() async throws -> AuthenticationToken { - guard let user = Auth.auth().currentUser else { - throw AuthServiceError.reauthenticationRequired("No user currently signed-in") - } - - guard let email = user.email else { - throw AuthServiceError.invalidCredentials("User does not have an email address") - } - - do { - let password = try await passwordPrompt.confirmPassword() - - let credential = EmailAuthProvider.credential(withEmail: email, password: password) - try await Auth.auth().currentUser?.reauthenticate(with: credential) - - return .firebase("") - } catch { - throw AuthServiceError.signInFailed(underlying: error) - } - } -} - -@MainActor -class EmailPasswordDeleteUserOperation: AuthenticatedOperation, - EmailPasswordOperationReauthentication { - let passwordPrompt: PasswordPromptCoordinator - - init(passwordPrompt: PasswordPromptCoordinator) { - self.passwordPrompt = passwordPrompt - } - - func callAsFunction(on user: User) async throws { - try await callAsFunction(on: user) { - try await user.delete() - } - } -} - -class EmailPasswordUpdatePasswordOperation: AuthenticatedOperation, - EmailPasswordOperationReauthentication { - let passwordPrompt: PasswordPromptCoordinator - let newPassword: String - - init(passwordPrompt: PasswordPromptCoordinator, newPassword: String) { - self.passwordPrompt = passwordPrompt - self.newPassword = newPassword - } - - func callAsFunction(on user: User) async throws { - try await callAsFunction(on: user) { - try await user.updatePassword(to: newPassword) - } - } -} - +/// Coordinator for prompting users to enter their password during reauthentication flows @MainActor @Observable public final class PasswordPromptCoordinator { - var isPromptingPassword = false + public var isPromptingPassword = false private var continuation: CheckedContinuation? - func confirmPassword() async throws -> String { + public init() {} + + public func confirmPassword() async throws -> String { return try await withCheckedThrowingContinuation { continuation in self.continuation = continuation self.isPromptingPassword = true } } - func submit(password: String) { + public func submit(password: String) { continuation?.resume(returning: password) cleanup() } - func cancel() { + public func cancel() { continuation? - .resume(throwing: AuthServiceError.reauthenticationRequired("Password entry cancelled")) + .resume(throwing: AuthServiceError + .signInCancelled("Password entry cancelled for Email provider")) cleanup() } diff --git a/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Services/AccountService.swift b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Services/AccountService.swift deleted file mode 100644 index 327b66c77a3..00000000000 --- a/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Services/AccountService.swift +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2025 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -import AuthenticationServices -import FirebaseAuth - -extension NSError { - var requiresReauthentication: Bool { - domain == AuthErrorDomain && code == AuthErrorCode.requiresRecentLogin.rawValue - } - - var credentialAlreadyInUse: Bool { - domain == AuthErrorDomain && code == AuthErrorCode.credentialAlreadyInUse.rawValue - } -} - -public enum AuthenticationToken { - case apple(ASAuthorizationAppleIDCredential, String) - case firebase(String) -} - -@MainActor -public protocol AuthenticatedOperation { - func callAsFunction(on user: User) async throws - func reauthenticate() async throws -> AuthenticationToken -} - -public extension AuthenticatedOperation { - func callAsFunction(on _: User, - _ performOperation: () async throws -> Void) async throws { - do { - try await performOperation() - } catch let error as NSError where error.requiresReauthentication { - let token = try await reauthenticate() - try await performOperation() - } catch AuthServiceError.reauthenticationRequired { - let token = try await reauthenticate() - try await performOperation() - } - } -} diff --git a/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Services/AuthConfiguration.swift b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Services/AuthConfiguration.swift index c1d4b24e01e..7865931f7ce 100644 --- a/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Services/AuthConfiguration.swift +++ b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Services/AuthConfiguration.swift @@ -14,8 +14,11 @@ import FirebaseAuth import Foundation +import SwiftUI public struct AuthConfiguration { + public let logo: ImageResource? + public let languageCode: String? public let shouldHideCancelButton: Bool public let interactiveDismissEnabled: Bool public let shouldAutoUpgradeAnonymousUsers: Bool @@ -25,21 +28,37 @@ public struct AuthConfiguration { public let emailLinkSignInActionCodeSettings: ActionCodeSettings? public let verifyEmailActionCodeSettings: ActionCodeSettings? - public init(shouldHideCancelButton: Bool = false, + // MARK: - MFA Configuration + + public let mfaEnabled: Bool + public let allowedSecondFactors: Set + public let mfaIssuer: String + + public init(logo: ImageResource? = nil, + languageCode: String? = nil, + shouldHideCancelButton: Bool = false, interactiveDismissEnabled: Bool = true, shouldAutoUpgradeAnonymousUsers: Bool = false, customStringsBundle: Bundle? = nil, tosUrl: URL? = nil, privacyPolicyUrl: URL? = nil, emailLinkSignInActionCodeSettings: ActionCodeSettings? = nil, - verifyEmailActionCodeSettings: ActionCodeSettings? = nil) { + verifyEmailActionCodeSettings: ActionCodeSettings? = nil, + mfaEnabled: Bool = false, + allowedSecondFactors: Set = [.sms, .totp], + mfaIssuer: String = "Firebase Auth") { + self.logo = logo self.shouldHideCancelButton = shouldHideCancelButton self.interactiveDismissEnabled = interactiveDismissEnabled self.shouldAutoUpgradeAnonymousUsers = shouldAutoUpgradeAnonymousUsers self.customStringsBundle = customStringsBundle + self.languageCode = languageCode self.tosUrl = tosUrl self.privacyPolicyUrl = privacyPolicyUrl self.emailLinkSignInActionCodeSettings = emailLinkSignInActionCodeSettings self.verifyEmailActionCodeSettings = verifyEmailActionCodeSettings + self.mfaEnabled = mfaEnabled + self.allowedSecondFactors = allowedSecondFactors + self.mfaIssuer = mfaIssuer } } diff --git a/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Services/AuthService.swift b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Services/AuthService.swift index b124e69b295..42cccfb5eae 100644 --- a/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Services/AuthService.swift +++ b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Services/AuthService.swift @@ -13,25 +13,23 @@ // limitations under the License. @preconcurrency import FirebaseAuth +import FirebaseAuthUIComponents +import FirebaseCore import SwiftUI -public protocol ExternalAuthProvider { - var id: String { get } - @MainActor func authButton() -> AnyView -} +/// Base protocol for all authentication providers +public protocol AuthProviderSwift {} -public protocol GoogleProviderAuthUIProtocol: ExternalAuthProvider { - @MainActor func signInWithGoogle(clientID: String) async throws -> AuthCredential - @MainActor func deleteUser(user: User) async throws +/// Protocol for providers that can directly create an AuthCredential +/// Used by Google, Apple, Twitter, Facebook, and OAuth providers +public protocol CredentialAuthProviderSwift: AuthProviderSwift { + @MainActor func createAuthCredential() async throws -> AuthCredential } -public protocol FacebookProviderAuthUIProtocol: ExternalAuthProvider { - @MainActor func signInWithFacebook(isLimitedLogin: Bool) async throws -> AuthCredential - @MainActor func deleteUser(user: User) async throws -} - -public protocol PhoneAuthProviderAuthUIProtocol: ExternalAuthProvider { - @MainActor func verifyPhoneNumber(phoneNumber: String) async throws -> String +public protocol AuthProviderUI { + var id: String { get } + @MainActor func authButton() -> AnyView + var provider: AuthProviderSwift { get } } public enum AuthenticationState { @@ -41,15 +39,24 @@ public enum AuthenticationState { } public enum AuthenticationFlow { - case login + case signIn case signUp } -public enum AuthView { - case authPicker +public enum AuthView: Hashable { case passwordRecovery case emailLink case updatePassword + case mfaEnrollment + case mfaManagement + case mfaResolution(MFARequired) + case enterPhoneNumber + case enterVerificationCode(verificationID: String, fullPhoneNumber: String) +} + +public enum SignInOutcome: @unchecked Sendable { + case mfaRequired(MFARequired) + case signedIn(AuthDataResult?) } @MainActor @@ -78,94 +85,90 @@ private final class AuthListenerManager { } } +@Observable +public class Navigator { + var routes: [AuthView] = [] + + public func push(_ route: AuthView) { + routes.append(route) + } + + @discardableResult + public func pop() -> AuthView? { + routes.popLast() + } + + public func clear() { + routes.removeAll() + } +} + @MainActor @Observable public final class AuthService { public init(configuration: AuthConfiguration = AuthConfiguration(), auth: Auth = Auth.auth()) { self.auth = auth self.configuration = configuration - string = StringUtils(bundle: configuration.customStringsBundle ?? Bundle.module) + string = StringUtils( + bundle: configuration.customStringsBundle ?? Bundle.module, + languageCode: configuration.languageCode + ) listenerManager = AuthListenerManager(auth: auth, authEnvironment: self) + FirebaseApp.registerLibrary("firebase-ui-ios", withVersion: FirebaseAuthSwiftUIVersion.version) } @ObservationIgnored @AppStorage("email-link") public var emailLink: String? public let configuration: AuthConfiguration public let auth: Auth - public var authView: AuthView = .authPicker - public let string: StringUtils - public var currentUser: User? - public var authenticationState: AuthenticationState = .unauthenticated - public var authenticationFlow: AuthenticationFlow = .login - public var errorMessage = "" - public let passwordPrompt: PasswordPromptCoordinator = .init() - - // MARK: - AuthPickerView Modal APIs - - public var isShowingAuthModal = false + public var isPresented: Bool = false + public private(set) var navigator = Navigator() - public enum AuthModalContentType { - case phoneAuth + public var authView: AuthView? { + navigator.routes.last } - public var currentModal: AuthModalContentType? + public let string: StringUtils + public var currentUser: User? + public var authenticationState: AuthenticationState = .unauthenticated + public var authenticationFlow: AuthenticationFlow = .signIn - public var authModalViewBuilderRegistry: [AuthModalContentType: () -> AnyView] = [:] + private var currentMFAResolver: MultiFactorResolver? - public func registerModalView(for type: AuthModalContentType, - @ViewBuilder builder: @escaping () -> AnyView) { - authModalViewBuilderRegistry[type] = builder - } + // MARK: - Provider APIs - public func viewForCurrentModal() -> AnyView? { - guard let type = currentModal, - let builder = authModalViewBuilderRegistry[type] else { - return nil - } - return builder() - } + private var listenerManager: AuthListenerManager? - public func presentModal(for type: AuthModalContentType) { - currentModal = type - isShowingAuthModal = true - } + private var emailProvider: EmailProviderSwift? - public func dismissModal() { - isShowingAuthModal = false + public var passwordPrompt: PasswordPromptCoordinator { + emailProvider?.passwordPrompt ?? PasswordPromptCoordinator() } - // MARK: - End AuthPickerView Modal APIs - - // MARK: - Provider APIs - - private var unsafeGoogleProvider: (any GoogleProviderAuthUIProtocol)? - private var unsafeFacebookProvider: (any FacebookProviderAuthUIProtocol)? - private var unsafePhoneAuthProvider: (any PhoneAuthProviderAuthUIProtocol)? - - private var listenerManager: AuthListenerManager? - public var signedInCredential: AuthCredential? - var emailSignInEnabled = false + private var emailSignInCallback: (() -> Void)? - private var providers: [ExternalAuthProvider] = [] - public func register(provider: ExternalAuthProvider) { - switch provider { - case let google as GoogleProviderAuthUIProtocol: - unsafeGoogleProvider = google - providers.append(provider) - case let facebook as FacebookProviderAuthUIProtocol: - unsafeFacebookProvider = facebook - providers.append(provider) - case let phone as PhoneAuthProviderAuthUIProtocol: - unsafePhoneAuthProvider = phone - providers.append(provider) - default: - break - } + private var providers: [AuthProviderUI] = [] + + public func registerProvider(providerWithButton: AuthProviderUI) { + providers.append(providerWithButton) } public func renderButtons(spacing: CGFloat = 16) -> AnyView { AnyView( VStack(spacing: spacing) { + if emailSignInEnabled { + AuthProviderButton( + label: string.signInWithEmailLinkViewTitle, + style: .email, + accessibilityId: "sign-in-with-email-link-button" + ) { + if let callback = self.emailSignInCallback { + callback() + } else { + self.navigator.push(.emailLink) + } + } + } ForEach(providers, id: \.id) { provider in provider.authButton() } @@ -173,31 +176,10 @@ public final class AuthService { ) } - private var googleProvider: any GoogleProviderAuthUIProtocol { - get throws { - guard let provider = unsafeGoogleProvider else { - fatalError("`GoogleProviderAuthUI` has not been configured") - } - return provider - } - } - - private var facebookProvider: any FacebookProviderAuthUIProtocol { - get throws { - guard let provider = unsafeFacebookProvider else { - fatalError("`FacebookProviderAuthUI` has not been configured") - } - return provider - } - } - - private var phoneAuthProvider: any PhoneAuthProviderAuthUIProtocol { - get throws { - guard let provider = unsafePhoneAuthProvider else { - fatalError("`PhoneAuthProviderAuthUI` has not been configured") - } - return provider - } + public func signIn(_ provider: CredentialAuthProviderSwift) async throws -> SignInOutcome { + let credential = try await provider.createAuthCredential() + let result = try await signIn(credentials: credential) + return result } // MARK: - End Provider APIs @@ -215,105 +197,98 @@ public final class AuthService { } public func updateAuthenticationState() { - reset() authenticationState = (currentUser == nil || currentUser?.isAnonymous == true) ? .unauthenticated : .authenticated } - func reset() { - errorMessage = "" - } - - public var shouldHandleAnonymousUpgrade: Bool { + private var shouldHandleAnonymousUpgrade: Bool { currentUser?.isAnonymous == true && configuration.shouldAutoUpgradeAnonymousUsers } public func signOut() async throws { - do { - try await auth.signOut() - updateAuthenticationState() - } catch { - errorMessage = string.localizedErrorMessage( - for: error - ) - throw error - } + try await auth.signOut() + // Cannot wait for auth listener to change, feedback needs to be immediate + currentUser = nil + updateAuthenticationState() } public func linkAccounts(credentials credentials: AuthCredential) async throws { authenticationState = .authenticating do { - try await currentUser?.link(with: credentials) + guard let user = currentUser else { + throw AuthServiceError.noCurrentUser + } + + try await withReauthenticationIfNeeded(on: user) { + try await user.link(with: credentials) + } updateAuthenticationState() } catch { + // Possible conflicts from user.link(): + // - credentialAlreadyInUse: credential is already linked to another account + // - emailAlreadyInUse: email from credential is already used by another account + // - accountExistsWithDifferentCredential: account exists with different sign-in method authenticationState = .unauthenticated - errorMessage = string.localizedErrorMessage( - for: error - ) - throw error + try handleErrorWithConflictCheck(error: error, credential: credentials) } } - public func handleAutoUpgradeAnonymousUser(credentials: AuthCredential) async throws { + private func handleAutoUpgradeAnonymousUser(credentials: AuthCredential) async throws + -> SignInOutcome { if currentUser == nil { throw AuthServiceError.noCurrentUser } do { - try await currentUser?.link(with: credentials) - } catch let error as NSError { - if error.code == AuthErrorCode.emailAlreadyInUse.rawValue { - let context = AccountMergeConflictContext( - credential: credentials, - underlyingError: error, - message: "Unable to merge accounts. Use the credential in the context to resolve the conflict.", - uid: currentUser?.uid - ) - throw AuthServiceError.accountMergeConflict(context: context) - } + let result = try await currentUser?.link(with: credentials) + updateAuthenticationState() + return .signedIn(result) + } catch { throw error } } - public func signIn(credentials: AuthCredential) async throws { + public func signIn(credentials: AuthCredential) async throws -> SignInOutcome { authenticationState = .authenticating do { if shouldHandleAnonymousUpgrade { - try await handleAutoUpgradeAnonymousUser(credentials: credentials) + return try await handleAutoUpgradeAnonymousUser(credentials: credentials) } else { let result = try await auth.signIn(with: credentials) - signedInCredential = result.credential ?? credentials + updateAuthenticationState() + return .signedIn(result) } - updateAuthenticationState() - } catch { + } catch let error as NSError { authenticationState = .unauthenticated - errorMessage = string.localizedErrorMessage( - for: error - ) - throw error + + // Check if this is an MFA required error + if error.code == AuthErrorCode.secondFactorRequired.rawValue { + if let resolver = error + .userInfo[AuthErrorUserInfoMultiFactorResolverKey] as? MultiFactorResolver { + return handleMFARequiredError(resolver: resolver) + } + } + + // Possible conflicts from auth.signIn(with:): + // - accountExistsWithDifferentCredential: account exists with different provider + // - credentialAlreadyInUse: credential is already linked to another account + try handleErrorWithConflictCheck(error: error, credential: credentials) } } - func sendEmailVerification() async throws { - do { - if let user = currentUser { - // Requires running on MainActor as passing to sendEmailVerification() which is non-isolated - let settings: ActionCodeSettings? = await MainActor.run { - configuration.verifyEmailActionCodeSettings - } + public func sendEmailVerification() async throws { + if let user = currentUser { + // Requires running on MainActor as passing to sendEmailVerification() which is non-isolated + let settings: ActionCodeSettings? = await MainActor.run { + configuration.verifyEmailActionCodeSettings + } - if let settings = settings { - try await user.sendEmailVerification(with: settings) - } else { - try await user.sendEmailVerification() - } + if let settings = settings { + try await user.sendEmailVerification(with: settings) + } else { + try await user.sendEmailVerification() } - } catch { - errorMessage = string.localizedErrorMessage( - for: error - ) - throw error } } } @@ -322,41 +297,22 @@ public final class AuthService { public extension AuthService { func deleteUser() async throws { - do { - if let user = auth.currentUser, let providerId = signedInCredential?.provider { - if providerId == EmailAuthProviderID { - let operation = EmailPasswordDeleteUserOperation(passwordPrompt: passwordPrompt) - try await operation(on: user) - } else if providerId == FacebookAuthProviderID { - try await facebookProvider.deleteUser(user: user) - } else if providerId == GoogleAuthProviderID { - try await googleProvider.deleteUser(user: user) - } - } + guard let user = auth.currentUser else { + throw AuthServiceError.noCurrentUser + } - } catch { - errorMessage = string.localizedErrorMessage( - for: error - ) - throw error + try await withReauthenticationIfNeeded(on: user) { + try await user.delete() } } func updatePassword(to password: String) async throws { - do { - if let user = auth.currentUser { - let operation = EmailPasswordUpdatePasswordOperation( - passwordPrompt: passwordPrompt, - newPassword: password - ) - try await operation(on: user) - } + guard let user = auth.currentUser else { + throw AuthServiceError.noCurrentUser + } - } catch { - errorMessage = string.localizedErrorMessage( - for: error - ) - throw error + try await withReauthenticationIfNeeded(on: user) { + try await user.updatePassword(to: password) } } } @@ -364,65 +320,61 @@ public extension AuthService { // MARK: - Email/Password Sign In public extension AuthService { - func withEmailSignIn() -> AuthService { + /// Enable email sign-in with default behavior (navigates to email link view) + func withEmailSignIn(_ provider: EmailProviderSwift? = nil) -> AuthService { + return withEmailSignIn(provider) { [weak self] in + self?.navigator.push(.emailLink) + } + } + + /// Enable email sign-in with custom callback + func withEmailSignIn(_ provider: EmailProviderSwift? = nil, + onTap: @escaping () -> Void) -> AuthService { + emailProvider = provider ?? EmailProviderSwift() emailSignInEnabled = true + emailSignInCallback = onTap return self } - func signIn(withEmail email: String, password: String) async throws { + func signIn(email: String, password: String) async throws -> SignInOutcome { let credential = EmailAuthProvider.credential(withEmail: email, password: password) - try await signIn(credentials: credential) + return try await signIn(credentials: credential) } - func createUser(withEmail email: String, password: String) async throws { + func createUser(email email: String, password: String) async throws -> SignInOutcome { authenticationState = .authenticating + let credential = EmailAuthProvider.credential(withEmail: email, password: password) do { if shouldHandleAnonymousUpgrade { - let credential = EmailAuthProvider.credential(withEmail: email, password: password) - try await handleAutoUpgradeAnonymousUser(credentials: credential) + return try await handleAutoUpgradeAnonymousUser(credentials: credential) } else { let result = try await auth.createUser(withEmail: email, password: password) - signedInCredential = result.credential + updateAuthenticationState() + return .signedIn(result) } - updateAuthenticationState() } catch { + // Possible conflicts from auth.createUser(): + // - emailAlreadyInUse: email is already registered with another account authenticationState = .unauthenticated - errorMessage = string.localizedErrorMessage( - for: error - ) - throw error + try handleErrorWithConflictCheck(error: error, credential: credential) } } - func sendPasswordRecoveryEmail(to email: String) async throws { - do { - try await auth.sendPasswordReset(withEmail: email) - } catch { - errorMessage = string.localizedErrorMessage( - for: error - ) - throw error - } + func sendPasswordRecoveryEmail(email: String) async throws { + try await auth.sendPasswordReset(withEmail: email) } } // MARK: - Email Link Sign In public extension AuthService { - func sendEmailSignInLink(to email: String) async throws { - do { - let actionCodeSettings = try updateActionCodeSettings() - try await auth.sendSignInLink( - toEmail: email, - actionCodeSettings: actionCodeSettings - ) - } catch { - errorMessage = string.localizedErrorMessage( - for: error - ) - throw error - } + func sendEmailSignInLink(email: String) async throws { + let actionCodeSettings = try updateActionCodeSettings() + try await auth.sendSignInLink( + toEmail: email, + actionCodeSettings: actionCodeSettings + ) } func handleSignInLink(url url: URL) async throws { @@ -431,7 +383,19 @@ public extension AuthService { throw AuthServiceError .invalidEmailLink("email address is missing from app storage. Is this the same device?") } - let link = url.absoluteString + let urlString = url.absoluteString + + guard let originalLink = CommonUtils.getQueryParamValue(from: urlString, paramName: "link") + else { + throw AuthServiceError + .invalidEmailLink("'link' parameter is missing from the email link URL") + } + + guard let link = originalLink.removingPercentEncoding else { + throw AuthServiceError + .invalidEmailLink("Failed to decode Link URL") + } + guard let continueUrl = CommonUtils.getQueryParamValue(from: link, paramName: "continueUrl") else { throw AuthServiceError @@ -453,10 +417,18 @@ public extension AuthService { emailLink = nil } } catch { - errorMessage = string.localizedErrorMessage( - for: error - ) - throw error + // Reconstruct credential for conflict handling + let link = url.absoluteString + guard let email = emailLink else { + throw AuthServiceError + .invalidEmailLink("email address is missing from app storage. Is this the same device?") + } + let credential = EmailAuthProvider.credential(withEmail: email, link: link) + + // Possible conflicts from auth.signIn(withEmail:link:): + // - accountExistsWithDifferentCredential: account exists with different provider + // - credentialAlreadyInUse: credential is already linked to another account + try handleErrorWithConflictCheck(error: error, credential: credential) } } @@ -488,49 +460,519 @@ public extension AuthService { } } -// MARK: - Google Sign In +// MARK: - Phone Auth Sign In public extension AuthService { - func signInWithGoogle() async throws { - guard let clientID = auth.app?.options.clientID else { - throw AuthServiceError - .clientIdNotFound( - "OAuth client ID not found. Please make sure Google Sign-In is enabled in the Firebase console. You may have to download a new GoogleService-Info.plist file after enabling Google Sign-In." - ) + func verifyPhoneNumber(phoneNumber: String) async throws -> String { + return try await withCheckedThrowingContinuation { continuation in + PhoneAuthProvider.provider() + .verifyPhoneNumber(phoneNumber, uiDelegate: nil) { verificationID, error in + if let error = error { + continuation.resume(throwing: error) + return + } + continuation.resume(returning: verificationID!) + } } - let credential = try await googleProvider.signInWithGoogle(clientID: clientID) + } + func signInWithPhoneNumber(verificationID: String, verificationCode: String) async throws { + let credential = PhoneAuthProvider.provider() + .credential(withVerificationID: verificationID, verificationCode: verificationCode) try await signIn(credentials: credential) } } -// MARK: - Facebook Sign In +// MARK: - User Profile Management public extension AuthService { - func signInWithFacebook(limitedLogin: Bool = true) async throws { - let credential = try await facebookProvider - .signInWithFacebook(isLimitedLogin: limitedLogin) - try await signIn(credentials: credential) + func updateUserPhotoURL(url: URL) async throws { + guard let user = currentUser else { + throw AuthServiceError.noCurrentUser + } + + let changeRequest = user.createProfileChangeRequest() + changeRequest.photoURL = url + try await changeRequest.commitChanges() + } + + func updateUserDisplayName(name: String) async throws { + guard let user = currentUser else { + throw AuthServiceError.noCurrentUser + } + + let changeRequest = user.createProfileChangeRequest() + changeRequest.displayName = name + try await changeRequest.commitChanges() } } -// MARK: - Phone Auth Sign In +// MARK: - MFA Methods public extension AuthService { - func verifyPhoneNumber(phoneNumber: String) async throws -> String { + func startMfaEnrollment(type: SecondFactorType, accountName: String? = nil, + issuer: String? = nil) async throws -> EnrollmentSession { + guard let user = auth.currentUser else { + throw AuthServiceError.noCurrentUser + } + + // Check if MFA is enabled in configuration + guard configuration.mfaEnabled else { + throw AuthServiceError + .multiFactorAuth( + "MFA is not enabled in configuration, please enable `AuthConfiguration.mfaEnabled`" + ) + } + + // Check if the requested factor type is allowed + guard configuration.allowedSecondFactors.contains(type) else { + throw AuthServiceError + .multiFactorAuth( + "The requested MFA factor type '\(type)' is not allowed in AuthConfiguration.allowedSecondFactors" + ) + } + + let multiFactorUser = user.multiFactor + + // Get the multi-factor session + let session = try await withCheckedThrowingContinuation { (continuation: CheckedContinuation< + MultiFactorSession, + Error + >) in + multiFactorUser.getSessionWithCompletion { session, error in + if let error = error { + continuation.resume(throwing: error) + } else if let session = session { + continuation.resume(returning: session) + } else { + continuation + .resume(throwing: AuthServiceError + .multiFactorAuth("Failed to get MFA session for '\(type)'")) + } + } + } + + switch type { + case .sms: + // For SMS, we just return the session - phone number will be provided in + // sendSmsVerificationForEnrollment + return EnrollmentSession( + type: .sms, + session: session, + status: .initiated + ) + + case .totp: + // For TOTP, generate the secret and QR code + let totpSecret = try await TOTPMultiFactorGenerator.generateSecret(with: session) + + // Generate QR code URL + let resolvedAccountName = accountName ?? user.email ?? "User" + let resolvedIssuer = issuer ?? configuration.mfaIssuer + + let qrCodeURL = totpSecret.generateQRCodeURL( + withAccountName: resolvedAccountName, + issuer: resolvedIssuer + ) + + let totpInfo = TOTPEnrollmentInfo( + sharedSecretKey: totpSecret.sharedSecretKey(), + qrCodeURL: URL(string: qrCodeURL), + accountName: resolvedAccountName, + issuer: resolvedIssuer, + verificationStatus: .pending + ) + + return EnrollmentSession( + type: .totp, + session: session, + totpInfo: totpInfo, + status: .initiated, + _totpSecret: totpSecret + ) + } + } + + func sendSmsVerificationForEnrollment(session: EnrollmentSession, + phoneNumber: String) async throws -> String { + // Validate session + guard session.type == .sms else { + throw AuthServiceError.multiFactorAuth("Session is not configured for SMS enrollment") + } + + guard session.canProceed else { + if session.isExpired { + throw AuthServiceError.multiFactorAuth("Enrollment session has expired") + } else { + throw AuthServiceError + .multiFactorAuth("Session is not in a valid state for SMS verification") + } + } + + // Validate phone number format + guard !phoneNumber.isEmpty else { + throw AuthServiceError.multiFactorAuth("Phone number cannot be empty for SMS enrollment") + } + + // Send SMS verification using Firebase Auth PhoneAuthProvider + let verificationID = + try await withCheckedThrowingContinuation { (continuation: CheckedContinuation< + String, + Error + >) in + PhoneAuthProvider.provider().verifyPhoneNumber( + phoneNumber, + uiDelegate: nil, + multiFactorSession: session.session + ) { verificationID, error in + if let error = error { + continuation.resume(throwing: error) + } else if let verificationID = verificationID { + continuation.resume(returning: verificationID) + } else { + continuation + .resume(throwing: AuthServiceError + .multiFactorAuth("Failed to send SMS verification code to verify phone number")) + } + } + } + + return verificationID + } + + func completeEnrollment(session: EnrollmentSession, verificationId: String?, + verificationCode: String, displayName: String) async throws { + // Validate session state + guard session.canProceed else { + if session.isExpired { + throw AuthServiceError + .multiFactorAuth("Enrollment session has expired, cannot complete enrollment") + } else { + throw AuthServiceError + .multiFactorAuth("Enrollment session is not in a valid state for completion") + } + } + + // Validate verification code + guard !verificationCode.isEmpty else { + throw AuthServiceError.multiFactorAuth("Verification code cannot be empty") + } + + guard let user = auth.currentUser else { + throw AuthServiceError.noCurrentUser + } + + let multiFactorUser = user.multiFactor + + // Create the appropriate assertion based on factor type + let assertion: MultiFactorAssertion + + switch session.type { + case .sms: + // For SMS, we need the verification ID + guard let verificationId = verificationId else { + throw AuthServiceError + .multiFactorAuth("Verification ID is required for SMS enrollment") + } + + // Create phone credential and assertion + let credential = PhoneAuthProvider.provider().credential( + withVerificationID: verificationId, + verificationCode: verificationCode + ) + assertion = PhoneMultiFactorGenerator.assertion(with: credential) + + case .totp: + // For TOTP, we need the secret from the session + guard let totpInfo = session.totpInfo else { + throw AuthServiceError + .multiFactorAuth("TOTP info is missing from enrollment session") + } + + // Use the stored TOTP secret from the enrollment session + guard let secret = session._totpSecret else { + throw AuthServiceError + .multiFactorAuth("TOTP secret is missing from enrollment session") + } + + // The concrete type is FirebaseAuth.TOTPSecret (kept as AnyObject to avoid exposing it) + guard let totpSecret = secret as? TOTPSecret else { + throw AuthServiceError + .multiFactorAuth("Invalid TOTP secret type in enrollment session") + } + + assertion = TOTPMultiFactorGenerator.assertionForEnrollment( + with: totpSecret, + oneTimePassword: verificationCode + ) + } + + // Complete the enrollment + try await withReauthenticationIfNeeded(on: user) { + try await user.multiFactor.enroll(with: assertion, displayName: displayName) + } + currentUser = auth.currentUser + } + + /// Gets the provider ID that was used for the current sign-in session + private func getCurrentSignInProvider() async throws -> String { + guard let user = currentUser else { + throw AuthServiceError.noCurrentUser + } + + // Get the ID token result which contains the signInProvider claim + let tokenResult = try await user.getIDTokenResult(forcingRefresh: false) + + // The signInProvider property tells us which provider was used for this session + let signInProvider = tokenResult.signInProvider + + // If signInProvider is not empty, use it + if !signInProvider.isEmpty { + return signInProvider + } + + // Fallback: if signInProvider is empty, try to infer from providerData + // Prefer non-password providers as they're more specific + let providerId = user.providerData.first(where: { $0.providerID != "password" })?.providerID + ?? user.providerData.first?.providerID + + guard let providerId = providerId else { + throw AuthServiceError.reauthenticationRequired( + "Unable to determine sign-in provider for reauthentication" + ) + } + + return providerId + } + + func reauthenticateCurrentUser(on user: User) async throws { + // Get the provider from the token instead of stored credential + let providerId = try await getCurrentSignInProvider() + + if providerId == EmailAuthProviderID { + guard let email = user.email else { + throw AuthServiceError.invalidCredentials("User does not have an email address") + } + + guard let emailProvider = emailProvider else { + throw AuthServiceError.providerNotFound( + "Email provider not configured. Call withEmailSignIn() first." + ) + } + + let credential = try await emailProvider.createReauthCredential(email: email) + _ = try await user.reauthenticate(with: credential) + } else if providerId == PhoneAuthProviderID { + // Phone auth requires manual reauthentication via sign out and sign in otherwise it will take + // the user out of the existing flow + throw AuthServiceError.reauthenticationRequired( + "Phone authentication requires you to sign out and sign in again to continue" + ) + } else if let matchingProvider = providers.first(where: { $0.id == providerId }), + let credentialProvider = matchingProvider.provider as? CredentialAuthProviderSwift { + let credential = try await credentialProvider.createAuthCredential() + _ = try await user.reauthenticate(with: credential) + } else { + throw AuthServiceError.providerNotFound("No provider found for \(providerId)") + } + } + + private func withReauthenticationIfNeeded(on user: User, + operation: () async throws -> Void) async throws { do { - return try await phoneAuthProvider.verifyPhoneNumber(phoneNumber: phoneNumber) - } catch { - errorMessage = string.localizedErrorMessage( - for: error + try await operation() + } catch let error as NSError { + if error.domain == AuthErrorDomain, + error.code == AuthErrorCode.requiresRecentLogin.rawValue || error.code == AuthErrorCode + .userTokenExpired.rawValue { + try await reauthenticateCurrentUser(on: user) + try await operation() + } else { + throw error + } + } + } + + func unenrollMFA(_ factorUid: String) async throws -> [MultiFactorInfo] { + guard let user = auth.currentUser else { + throw AuthServiceError.noCurrentUser + } + + let multiFactorUser = user.multiFactor + + try await withReauthenticationIfNeeded(on: user) { + try await multiFactorUser.unenroll(withFactorUID: factorUid) + } + + // This is the only we to get the actual latest enrolledFactors + currentUser = Auth.auth().currentUser + let freshFactors = currentUser?.multiFactor.enrolledFactors ?? [] + + return freshFactors + } + + // MARK: - Account Conflict Helper Methods + + private func determineConflictType(from error: NSError) -> AccountConflictType? { + switch error.code { + case AuthErrorCode.accountExistsWithDifferentCredential.rawValue: + return shouldHandleAnonymousUpgrade ? .anonymousUpgradeConflict : + .accountExistsWithDifferentCredential + case AuthErrorCode.credentialAlreadyInUse.rawValue: + return shouldHandleAnonymousUpgrade ? .anonymousUpgradeConflict : .credentialAlreadyInUse + case AuthErrorCode.emailAlreadyInUse.rawValue: + return shouldHandleAnonymousUpgrade ? .anonymousUpgradeConflict : .emailAlreadyInUse + default: + return nil + } + } + + private func createConflictContext(from error: NSError, + conflictType: AccountConflictType, + credential: AuthCredential) -> AccountConflictContext { + let updatedCredential = error + .userInfo[AuthErrorUserInfoUpdatedCredentialKey] as? AuthCredential ?? credential + let email = error.userInfo[AuthErrorUserInfoEmailKey] as? String + + return AccountConflictContext( + conflictType: conflictType, + credential: updatedCredential, + underlyingError: error, + message: string.localizedErrorMessage(for: error), + email: email + ) + } + + /// Handles account conflict errors by creating context and throwing structured error + /// - Parameters: + /// - error: The error to check and handle + /// - credential: The credential that caused the conflict + /// - Throws: AuthServiceError.accountConflict if it's a conflict error, otherwise rethrows the + /// original error + private func handleErrorWithConflictCheck(error: Error, + credential: AuthCredential) throws -> Never { + // Check for account conflict errors + if let error = error as NSError?, + let conflictType = determineConflictType(from: error) { + let context = createConflictContext( + from: error, + conflictType: conflictType, + credential: credential ) + + throw AuthServiceError.accountConflict(context) + } else { throw error } } - func signInWithPhoneNumber(verificationID: String, verificationCode: String) async throws { - let credential = PhoneAuthProvider.provider() - .credential(withVerificationID: verificationID, verificationCode: verificationCode) - try await signIn(credentials: credential) + // MARK: - MFA Helper Methods + + private func extractMFAHints(from resolver: MultiFactorResolver) -> [MFAHint] { + return resolver.hints.map { hint -> MFAHint in + if hint.factorID == PhoneMultiFactorID { + let phoneHint = hint as! PhoneMultiFactorInfo + return .phone( + displayName: phoneHint.displayName, + uid: phoneHint.uid, + phoneNumber: phoneHint.phoneNumber + ) + } else if hint.factorID == TOTPMultiFactorID { + return .totp( + displayName: hint.displayName, + uid: hint.uid + ) + } else { + // Fallback for unknown hint types + return .totp(displayName: hint.displayName, uid: hint.uid) + } + } + } + + private func handleMFARequiredError(resolver: MultiFactorResolver) -> SignInOutcome { + let hints = extractMFAHints(from: resolver) + currentMFAResolver = resolver + return .mfaRequired(MFARequired(hints: hints)) + } + + func resolveSmsChallenge(hintIndex: Int) async throws -> String { + guard let resolver = currentMFAResolver else { + throw AuthServiceError.multiFactorAuth("No MFA resolver available") + } + + guard hintIndex < resolver.hints.count else { + throw AuthServiceError.multiFactorAuth("Invalid hint index") + } + + let hint = resolver.hints[hintIndex] + guard hint.factorID == PhoneMultiFactorID else { + throw AuthServiceError.multiFactorAuth("Selected hint is not a phone hint") + } + let phoneHint = hint as! PhoneMultiFactorInfo + + return try await withCheckedThrowingContinuation { continuation in + PhoneAuthProvider.provider().verifyPhoneNumber( + with: phoneHint, + uiDelegate: nil, + multiFactorSession: resolver.session + ) { verificationId, error in + if let error = error { + continuation + .resume(throwing: AuthServiceError.multiFactorAuth(error.localizedDescription)) + } else if let verificationId = verificationId { + continuation.resume(returning: verificationId) + } else { + continuation + .resume(throwing: AuthServiceError.multiFactorAuth("Unknown error occurred")) + } + } + } + } + + func resolveSignIn(code: String, hintIndex: Int, verificationId: String? = nil) async throws { + guard let resolver = currentMFAResolver else { + throw AuthServiceError.multiFactorAuth("No MFA resolver available") + } + + guard hintIndex < resolver.hints.count else { + throw AuthServiceError.multiFactorAuth("Invalid hint index") + } + + let hint = resolver.hints[hintIndex] + let assertion: MultiFactorAssertion + + // Create the appropriate assertion based on the hint type + if hint.factorID == PhoneMultiFactorID { + guard let verificationId = verificationId else { + throw AuthServiceError.multiFactorAuth("Verification ID is required for SMS MFA") + } + + let credential = PhoneAuthProvider.provider().credential( + withVerificationID: verificationId, + verificationCode: code + ) + assertion = PhoneMultiFactorGenerator.assertion(with: credential) + + } else if hint.factorID == TOTPMultiFactorID { + assertion = TOTPMultiFactorGenerator.assertionForSignIn( + withEnrollmentID: hint.uid, + oneTimePassword: code + ) + + } else { + throw AuthServiceError.multiFactorAuth("Unsupported MFA hint type") + } + + do { + let result = try await resolver.resolveSignIn(with: assertion) + updateAuthenticationState() + + // Clear MFA resolution state + currentMFAResolver = nil + + } catch { + throw AuthServiceError + .multiFactorAuth("Failed to resolve MFA challenge: \(error.localizedDescription)") + } } } diff --git a/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Services/EmailProviderAuthUI.swift b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Services/EmailProviderAuthUI.swift new file mode 100644 index 00000000000..6149b3fdeb4 --- /dev/null +++ b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Services/EmailProviderAuthUI.swift @@ -0,0 +1,33 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import FirebaseAuth + +/// Email/Password authentication provider +/// This provider is special and doesn't render in the button list +@MainActor +public class EmailProviderSwift: AuthProviderSwift { + public let passwordPrompt: PasswordPromptCoordinator + public let providerId = EmailAuthProviderID + + public init(passwordPrompt: PasswordPromptCoordinator = .init()) { + self.passwordPrompt = passwordPrompt + } + + /// Create credential for reauthentication + func createReauthCredential(email: String) async throws -> AuthCredential { + let password = try await passwordPrompt.confirmPassword() + return EmailAuthProvider.credential(withEmail: email, password: password) + } +} diff --git a/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Strings/Localizable.xcstrings b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Strings/Localizable.xcstrings index a9b077b8839..b32e7658f13 100644 --- a/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Strings/Localizable.xcstrings +++ b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Strings/Localizable.xcstrings @@ -1,1152 +1,60206 @@ { "sourceLanguage" : "en", "strings" : { - "%@" : { - - }, - "AccountDisabledError" : { - "comment" : "Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars.", - "extractionState" : "migrated", + "- Check if the email was marked as spam or filtered." : { + "extractionState" : "stale", "localizations" : { - "en" : { + "bg" : { "stringUnit" : { "state" : "translated", - "value" : "That email address is for an account that has been disabled." + "value" : "- Проверете дали имейлът не е маркиран като спам или филтриран." } - } - } - }, - "ActionCantBeUndone" : { - "comment" : "Alert message shown before account deletion.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "bn" : { "stringUnit" : { "state" : "translated", - "value" : "This action can't be undone" + "value" : "- ইমেইল স্প্যাম বা ফিল্টার হয়েছে কিনা পরীক্ষা করুন।" } - } - } - }, - "AddPasswordAlertMessage" : { - "comment" : "Alert message shown when adding account password.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "ca" : { "stringUnit" : { "state" : "translated", - "value" : "To add password to your account, you will need to sign in again." + "value" : "- Comprova si el correu s'ha marcat com a correu brossa o s'ha filtrat." } - } - } - }, - "AddPasswordTitle" : { - "comment" : "Controller title shown when adding password to account.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Add password" + "value" : "- Zkontrolujte, zda email nebyl označen jako spam nebo odfiltrován." } - } - } - }, - "Already have an account?" : { - - }, - "AS_AddPassword" : { - "comment" : "Account Settings cell title Add Password.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "da" : { "stringUnit" : { "state" : "translated", - "value" : "Add password" + "value" : "- Tjek om emailen er markeret som spam eller filtreret." } - } - } - }, - "AS_ChangePassword" : { - "comment" : "Account Settings cell title Change Password.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "de-AT" : { "stringUnit" : { "state" : "translated", - "value" : "Change password" + "value" : "- Überprüfen Sie, ob die E-Mail als Spam markiert oder gefiltert wurde." } - } - } - }, - "AS_DeleteAccount" : { - "comment" : "Account Settings cell title Delete Account.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "de-CH" : { "stringUnit" : { "state" : "translated", - "value" : "Delete Account" + "value" : "- Überprüfen Sie, ob die E-Mail als Spam markiert oder gefiltert wurde." } - } - } - }, - "AS_Email" : { - "comment" : "Account Settings cell title Email. Use short/abbreviated translation for 'email' which is less than 15 chars.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "el" : { "stringUnit" : { "state" : "translated", - "value" : "Email" + "value" : "- Ελέγξτε αν το email έχει επισημανθεί ως ανεπιθύμητο ή φιλτραριστεί." } - } - } - }, - "AS_Name" : { - "comment" : "Account Settings cell title Name.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "en-AU" : { "stringUnit" : { "state" : "translated", - "value" : "Name" + "value" : "- Check if the email was marked as spam or filtered." } - } - } - }, - "AS_SectionLinkedAccounts" : { - "comment" : "Account Settings section title Linked Accounts.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "en-CA" : { "stringUnit" : { "state" : "translated", - "value" : "Linked Accounts" + "value" : "- Check if the email was marked as spam or filtered." } - } - } - }, - "AS_SectionProfile" : { - "comment" : "Account Settings section title Profile.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "en-GB" : { "stringUnit" : { "state" : "translated", - "value" : "Profile" + "value" : "- Check if the email was marked as spam or filtered." } - } - } - }, - "AS_SectionSecurity" : { - "comment" : "Account Settings section title Security.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "en-IE" : { "stringUnit" : { "state" : "translated", - "value" : "Security" + "value" : "- Check if the email was marked as spam or filtered." } - } - } - }, - "AS_SignOut" : { - "comment" : "Account Settings cell title Sign Out.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "en-IN" : { "stringUnit" : { "state" : "translated", - "value" : "Sign Out" + "value" : "- Check if the email was marked as spam or filtered." } - } - } - }, - "AuthPickerTitle" : { - "comment" : "Title for auth picker screen.", - "extractionState" : "stale", - "localizations" : { - "en" : { + }, + "en-ZA" : { "stringUnit" : { "state" : "translated", - "value" : "Welcome" + "value" : "- Check if the email was marked as spam or filtered." } - } - } - }, - "Back" : { - "comment" : "Back button title." - }, - "Cancel" : { - "comment" : "Cancel button title.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "fa" : { "stringUnit" : { "state" : "translated", - "value" : "Cancel" + "value" : "- بررسی کنید که آیا ایمیل به عنوان هرزنامه علامت‌گذاری شده یا فیلتر شده است." } - } - } - }, - "CannotAuthenticateError" : { - "comment" : "Error message displayed when the app cannot authenticate user's account.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "fi" : { "stringUnit" : { "state" : "translated", - "value" : "This type of account isn't supported by this app" + "value" : "- Tarkista, onko sähköposti merkitty roskapostiksi tai suodatettu." } - } - } - }, - "CantFindProvider" : { - "comment" : "Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc)", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "fil" : { "stringUnit" : { "state" : "translated", - "value" : "Can't find provider for %@." + "value" : "- Tingnan kung ang email ay minarkahan bilang spam o na-filter." } - } - } - }, - "ChoosePassword" : { - "comment" : "Placeholder for the password text field in a sign up form.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "fr-CH" : { "stringUnit" : { "state" : "translated", - "value" : "Choose password" + "value" : "- Vérifiez si l'e-mail a été marqué comme spam ou filtré." } - } - } - }, - "Close" : { - "comment" : "Alert button title Close.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "gsw" : { "stringUnit" : { "state" : "translated", - "value" : "Close" + "value" : "- Prüef ob d'E-Mail als Spam markiert oder filteret worde isch." } - } - } - }, - "ConfirmEmail" : { - "comment" : "Title of confirm email label.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "gu" : { "stringUnit" : { "state" : "translated", - "value" : "Confirm Email" + "value" : "- તપાસો કે શું ઇમેઇલને સ્પામ તરીકે ચિહ્નિત કરવામાં આવ્યું હતું અથવા ફિલ્ટર કરવામાં આવ્યું હતું." } - } - } - }, - "ConfirmPasswordInputLabel" : { - "comment" : "Input label for confirming password when signing up", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "he" : { "stringUnit" : { "state" : "translated", - "value" : "Confirm Password" + "value" : "- בדוק אם הדוא״ל סומן כספאם או סונן." } - } - } - }, - "Delete" : { - "comment" : "Text of Delete action button.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "hi" : { "stringUnit" : { "state" : "translated", - "value" : "Delete" + "value" : "- जांचें कि क्या ईमेल को स्पैम के रूप में चिह्नित किया गया था या फ़िल्टर किया गया था।" } - } - } - }, - "DeleteAccountBody" : { - "comment" : "Alert message body shown to confirm account deletion action.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "hr" : { "stringUnit" : { "state" : "translated", - "value" : "This will erase all data associated with your account, and can't be undone You will need to sign in again to complete this action" + "value" : "- Provjerite je li email označen kao neželjeni ili filtriran." } - } - } - }, - "DeleteAccountConfirmationMessage" : { - "comment" : "Explanation message shown before deleting account.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "hu" : { "stringUnit" : { "state" : "translated", - "value" : "This will erase all data associated with your account, and can't be undone. Are you sure you want to delete your account?" + "value" : "- Ellenőrizze, hogy az e-mailt spam-ként jelölték-e meg vagy szűrték-e." } - } - } - }, - "DeleteAccountConfirmationTitle" : { - "comment" : "Alert message title shown to confirm account deletion action.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "id" : { "stringUnit" : { "state" : "translated", - "value" : "Delete Account?" + "value" : "- Periksa apakah email ditandai sebagai spam atau difilter." } - } - } - }, - "DeleteAccountControllerTitle" : { - "comment" : "Title of Controller shown before deleting account", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "it" : { "stringUnit" : { "state" : "translated", - "value" : "Delete account" + "value" : "- Controlla se l'email è stata contrassegnata come spam o filtrata." } - } - } - }, - "Don't have an account yet?" : { - "localizations" : { - "en" : { + }, + "ja" : { "stringUnit" : { "state" : "translated", - "value" : "Don't have an account yet?" + "value" : "- メールがスパムとしてマークされているか、フィルタリングされているか確認してください。" } - } - } - }, - "EditEmailTitle" : { - "comment" : "Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "kn" : { "stringUnit" : { "state" : "translated", - "value" : "Edit email" + "value" : "- ಇಮೇಲ್ ಅನ್ನು ಸ್ಪ್ಯಾಮ್ ಎಂದು ಗುರುತಿಸಲಾಗಿದೆಯೇ ಅಥವಾ ಫಿಲ್ಟರ್ ಮಾಡಲಾಗಿದೆಯೇ ಎಂಬುದನ್ನು ಪರಿಶೀಲಿಸಿ." } - } - } - }, - "EditNameTitle" : { - "comment" : "Controller title shown when editing account name.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "ko" : { "stringUnit" : { "state" : "translated", - "value" : "Edit name" + "value" : "- 이메일이 스팸으로 표시되거나 필터링되었는지 확인하세요." } - } - } - }, - "EditPasswordAlertMessage" : { - "comment" : "Alert message shown when editing account password.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "ln" : { "stringUnit" : { "state" : "translated", - "value" : "To change password to your account, you will need to sign in again." + "value" : "- Talá soki email etalamaki lokola spam to epasolami." } - } - } - }, - "EditPasswordTitle" : { - "comment" : "Controller title shown when editing password to account.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "lv" : { "stringUnit" : { "state" : "translated", - "value" : "Change password" + "value" : "- Pārbaudiet, vai e-pasts nav atzīmēts kā surogātpasts vai filtrēts." } - } - } - }, - "EmailAlreadyInUseError" : { - "comment" : "Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars.", - "extractionState" : "migrated", - "localizations" : { - "en" : { + }, + "mr" : { "stringUnit" : { "state" : "translated", - "value" : "The email address is already in use by another account." + "value" : "- तपासा की ईमेल स्पॅम म्हणून चिन्हांकित किंवा फिल्टर केला गेला आहे का." } - } - } - }, - "EmailLinkSignInLabel" : { - "comment" : "Button label to push user to email link sign-in", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "ms" : { "stringUnit" : { "state" : "translated", - "value" : "Prefer Email link sign-in?" + "value" : "- Semak sama ada e-mel ditandakan sebagai spam atau ditapis." } - } - } - }, - "EmailLinkSignInTitle" : { - "comment" : "Sign in with email link View title", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Sign in with email link" + "value" : "- Sjekk om e-posten ble merket som spam eller filtrert." } - } - } - }, - "EmailsDontMatch" : { - "comment" : "Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Emails don't match" + "value" : "- Controleer of de e-mail als spam is gemarkeerd of gefilterd." } - } - } - }, - "EmailSentConfirmationMessage" : { - "comment" : "Message displayed after email is sent. The placeholder is the email address that the email is sent to.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "nn-NO" : { "stringUnit" : { "state" : "translated", - "value" : "A sign-in email with additional instructions was sent to %@. Check your email to complete sign-in." + "value" : "- Sjekk om e-posten vart merka som spam eller filtrert." } - } - } - }, - "EnterYourEmail" : { - "comment" : "Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Enter your email" + "value" : "- Sprawdź, czy e-mail został oznaczony jako spam lub przefiltrowany." } - } - } - }, - "EnterYourPassword" : { - "comment" : "Password text field placeholder.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "pt" : { "stringUnit" : { "state" : "translated", - "value" : "Enter your password" + "value" : "- Verifique se o e-mail foi marcado como spam ou filtrado." } - } - } - }, - "Error" : { - "comment" : "Alert title Error.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Error" + "value" : "- Verifique se o e-mail foi marcado como spam ou filtrado." } - } - } - }, - "ExistingAccountTitle" : { - "comment" : "Title of an alert shown to an existing user coming back to the app.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "You already have an account" + "value" : "- Verifique se o e-mail foi marcado como spam ou filtrado." } - } - } - }, - "FirstAndLastName" : { - "comment" : "Name text field placeholder.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "ro" : { "stringUnit" : { "state" : "translated", - "value" : "First & last name" + "value" : "- Verificați dacă e-mailul a fost marcat ca spam sau filtrat." } - } - } - }, - "ForgotPassword" : { - "comment" : "Button text for 'Forgot Password' action.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Forgot password?" + "value" : "- Проверьте, не был ли email помечен как спам или отфильтрован." } - } - } - }, - "ForgotPasswordTitle" : { - "comment" : "Title of forgot password button.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Trouble signing in?" + "value" : "- Skontrolujte, či nebol e-mail označený ako spam alebo filtrovaný." } - } - } - }, - "InvalidEmailError" : { - "comment" : "Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars.", - "extractionState" : "migrated", - "localizations" : { - "en" : { + }, + "sl" : { "stringUnit" : { "state" : "translated", - "value" : "That email address isn't correct." + "value" : "- Preverite, ali je bila e-pošta označena kot neželena ali filtrirana." } - } - } - }, - "InvalidPasswordError" : { - "comment" : "Error message displayed when user enters an empty password.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "sr" : { "stringUnit" : { "state" : "translated", - "value" : "Password cannot be empty." + "value" : "- Проверите да ли је имејл означен као спам или филтриран." } - } - } - }, - "Login" : { - "localizations" : { - "en" : { + }, + "sr-Latn" : { "stringUnit" : { "state" : "translated", - "value" : "Login" + "value" : "- Proverite da li je imejl označen kao spam ili filtriran." } - } - } - }, - "Name" : { - "comment" : "Label next to a name text field.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "sv" : { "stringUnit" : { "state" : "translated", - "value" : "Name" + "value" : "- Kontrollera om e-posten har markerats som skräppost eller filtrerats." } - } - } - }, - "Next" : { - "comment" : "Next button title.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "ta" : { "stringUnit" : { "state" : "translated", - "value" : "Next" + "value" : "- மின்னஞ்சல் ஸ்பேம் எனக் குறிக்கப்பட்டுள்ளதா அல்லது வடிகட்டப்பட்டுள்ளதா என சரிபார்க்கவும்." } - } - } - }, - "OK" : { - "comment" : "OK button title.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "th" : { "stringUnit" : { "state" : "translated", - "value" : "OK" + "value" : "- ตรวจสอบว่าอีเมลถูกทำเครื่องหมายเป็นสแปมหรือถูกกรองหรือไม่" } - } - } - }, - "PasswordRecoveryEmailSentMessage" : { - "comment" : "Message displayed when the email for password recovery has been sent.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Follow the instructions sent to %@ to recover your password." + "value" : "- E-postanın spam olarak işaretlenip işaretlenmediğini veya filtrelenip filtrelenmediğini kontrol edin." } - } - } - }, - "PasswordRecoveryEmailSentTitle" : { - "comment" : "Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Check your email" + "value" : "- Перевірте, чи не було лист позначено як спам або відфільтровано." } - } - } - }, - "PasswordRecoveryMessage" : { - "comment" : "Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "ur" : { "stringUnit" : { "state" : "translated", - "value" : "Get instructions sent to this email that explain how to reset your password." + "value" : "- چیک کریں کہ آیا ای میل کو اسپام کے طور پر نشان زد کیا گیا تھا یا فلٹر کیا گیا تھا۔" } - } - } - }, - "PasswordRecoveryTitle" : { - "comment" : "Title for password recovery screen.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Recover password" + "value" : "- Kiểm tra xem email có bị đánh dấu là spam hoặc bị lọc không." } - } - } - }, - "PasswordVerificationMessage" : { - "comment" : "Message to explain to the user that password is needed for an account with this email address.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "zh" : { "stringUnit" : { "state" : "translated", - "value" : "You’ve already used %@ to sign in. Enter your password for that account." + "value" : "- 检查邮件是否被标记为垃圾邮件或被过滤。" } - } - } - }, - "PlaceholderChosePassword" : { - "comment" : "Placeholder of secret input cell when user changes password.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "Choose password" + "value" : "- 檢查電子郵件是否被標示為垃圾郵件或被過濾。" } - } - } - }, - "PlaceholderEnterEmail" : { - "comment" : "Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "zh-Hant-TW" : { "stringUnit" : { "state" : "translated", - "value" : "Enter your email" + "value" : "- 檢查電子郵件是否被標示為垃圾郵件或被過濾。" } } } }, - "PlaceholderEnterName" : { - "comment" : "Placeholder of input cell when user changes name.", - "extractionState" : "manual", + "- Check that you did not misspell your email." : { + "extractionState" : "stale", "localizations" : { - "en" : { + "bg" : { "stringUnit" : { "state" : "translated", - "value" : "Enter your name" + "value" : "- Проверете дали не сте изписали грешно имейла си." } - } - } - }, - "PlaceholderEnterPassword" : { - "comment" : "Placeholder of secret input cell when user changes password.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "bn" : { "stringUnit" : { "state" : "translated", - "value" : "Enter your password" + "value" : "- আপনি ইমেইল ঠিকানাটি ভুল লেখেননি তা নিশ্চিত করুন।" } - } - } - }, - "PlaceholderNewPassword" : { - "comment" : "Placeholder of secret input cell when user confirms password.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "ca" : { "stringUnit" : { "state" : "translated", - "value" : "New password" + "value" : "- Comprova que no hagis escrit malament el correu electrònic." } - } - } - }, - "PrivacyPolicy" : { - "comment" : "Text linked to a web page with the Privacy Policy content.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Privacy Policy" + "value" : "- Zkontrolujte, zda jste email nenapsali s chybou." } - } - } - }, - "ProviderTitleFacebook" : { - "comment" : "Title of Facebook provider", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "da" : { "stringUnit" : { "state" : "translated", - "value" : "Facebook" + "value" : "- Tjek at du ikke har stavet emailen forkert." } - } - } - }, - "ProviderTitleGoogle" : { - "comment" : "Title of Google provider", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "de-AT" : { "stringUnit" : { "state" : "translated", - "value" : "Google" + "value" : "- Überprüfen Sie, ob Sie Ihre E-Mail-Adresse nicht falsch geschrieben haben." } - } - } - }, - "ProviderTitlePassword" : { - "comment" : "Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "de-CH" : { "stringUnit" : { "state" : "translated", - "value" : "Email" + "value" : "- Überprüfen Sie, ob Sie Ihre E-Mail-Adresse nicht falsch geschrieben haben." } - } - } - }, - "ProviderTitleTwitter" : { - "comment" : "Title of Twitter provider", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "el" : { "stringUnit" : { "state" : "translated", - "value" : "Twitter" + "value" : "- Ελέγξτε ότι δεν έχετε γράψει λάθος το email σας." } - } - } - }, - "ProviderUsedPreviouslyMessage" : { - "comment" : "Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder).", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "en-AU" : { "stringUnit" : { "state" : "translated", - "value" : "You’ve already used %@. Sign in with %@ to continue." + "value" : "- Check that you did not misspell your email." } - } - } - }, - "ReauthenticateEditPasswordAlertMessage" : { - "comment" : "Alert message shown when re-authenticating before editing account password.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "en-CA" : { "stringUnit" : { "state" : "translated", - "value" : "In order to change your password, you first need to enter your current password." + "value" : "- Check that you did not misspell your email." } - } - } - }, - "Resend" : { - "comment" : "Resend button title.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "en-GB" : { "stringUnit" : { "state" : "translated", - "value" : "Resend" + "value" : "- Check that you did not misspell your email." } - } - } - }, - "Save" : { - "comment" : "Save button title.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "en-IE" : { "stringUnit" : { "state" : "translated", - "value" : "Save" + "value" : "- Check that you did not misspell your email." } - } - } - }, - "Send" : { - "comment" : "Send button title.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "en-IN" : { "stringUnit" : { "state" : "translated", - "value" : "Send" + "value" : "- Check that you did not misspell your email." } - } - } - }, - "SendEmailSignInLinkButtonLabel" : { - "comment" : "Button label for sending email sign-in link", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "en-ZA" : { "stringUnit" : { "state" : "translated", - "value" : "Send email sign-in link" + "value" : "- Check that you did not misspell your email." } - } - } - }, - "Sign up" : { - - }, - "SignedIn" : { - "comment" : "Title of successfully signed in label.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "fa" : { "stringUnit" : { "state" : "translated", - "value" : "Signed in!" + "value" : "- بررسی کنید که ایمیل خود را اشتباه تایپ نکرده‌اید." } - } - } - }, - "SignInEmailSent" : { - "comment" : "Message displayed after the email of sign-in link is sent.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "fi" : { "stringUnit" : { "state" : "translated", - "value" : "Sign-in email Sent" + "value" : "- Tarkista, ettet kirjoittanut sähköpostiosoitetta väärin." } - } - } - }, - "SignInTitle" : { - "comment" : "Title for sign in screen and sign in button.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "fil" : { "stringUnit" : { "state" : "translated", - "value" : "Sign in" + "value" : "- Tingnan na hindi mo na-misspell ang iyong email." } - } - } - }, - "SignInTooManyTimesError" : { - "comment" : "Error message displayed after user trying to sign in too many times.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "fr-CH" : { "stringUnit" : { "state" : "translated", - "value" : "You’ve entered an incorrect password too many times. Try again in a few minutes." + "value" : "- Vérifiez que vous n'avez pas mal orthographié votre e-mail." } - } - } - }, - "SignInWithEmail" : { - "comment" : "Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "gsw" : { "stringUnit" : { "state" : "translated", - "value" : "Sign in with email" + "value" : "- Prüef ob du dini E-Mail-Adresse nöd falsch gschrebe häsch." } - } - } - }, - "SignInWithProvider" : { - "comment" : "Sign in with provider button label.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "gu" : { "stringUnit" : { "state" : "translated", - "value" : "Sign in with %@" + "value" : "- તપાસો કે તમે તમારા ઇમેઇલમાં ખોટી જોડણી તો નથી કરી." } - } - } - }, - "SignUpTitle" : { - "comment" : "Title for sign up screen.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "he" : { "stringUnit" : { "state" : "translated", - "value" : "Create account" + "value" : "- בדוק שלא עשית שגיאת כתיב בכתובת הדוא״ל שלך." } - } - } - }, - "SignUpTooManyTimesError" : { - "comment" : "Error message displayed when many accounts have been created from same IP address.", - "extractionState" : "migrated", - "localizations" : { - "en" : { + }, + "hi" : { "stringUnit" : { "state" : "translated", - "value" : "Too many account requests are coming from your IP address. Try again in a few minutes." + "value" : "- जांचें कि आपने अपने ईमेल में गलत वर्तनी तो नहीं की।" } - } - } - }, - "TermsOfService" : { - "comment" : "Text linked to a web page with the Terms of Service content.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "hr" : { "stringUnit" : { "state" : "translated", - "value" : "Terms of Service" + "value" : "- Provjerite jeste li točno upisali email adresu." } - } - } - }, - "TermsOfServiceMessage" : { - "comment" : "A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "hu" : { "stringUnit" : { "state" : "translated", - "value" : "By continuing, you are indicating that you accept our %@ and %@." + "value" : "- Ellenőrizze, hogy nem írta-e el az e-mail címét." } - } - } - }, - "TroubleGettingEmailMessage" : { - "comment" : "Alert message displayed when user having trouble getting email.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "id" : { "stringUnit" : { "state" : "translated", - "value" : "Try these common fixes: \n - Check if the email was marked as spam or filtered.\n - Check your internet connection.\n - Check that you did not misspell your email.\n - Check that your inbox space is not running out or other inbox settings related issues.\n If the steps above didn't work, you can resend the email. Note that this will deactivate the link in the older email." + "value" : "- Periksa bahwa Anda tidak salah mengeja email Anda." } - } - } - }, - "TroubleGettingEmailTitle" : { - "comment" : "Title used in trouble getting email alert view.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "it" : { "stringUnit" : { "state" : "translated", - "value" : "Trouble getting emails?" + "value" : "- Controlla di non aver scritto male la tua email." } - } - } - }, - "UnlinkAction" : { - "comment" : "Button title for unlinking account action.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "ja" : { "stringUnit" : { "state" : "translated", - "value" : "Unlink" + "value" : "- メールアドレスのスペルミスがないか確認してください。" } - } - } - }, - "UnlinkConfirmationActionTitle" : { - "comment" : "Alert action title shown before unlinking action.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "kn" : { "stringUnit" : { "state" : "translated", - "value" : "Unlink account" + "value" : "- ನೀವು ನಿಮ್ಮ ಇಮೇಲ್ ಅನ್ನು ತಪ್ಪಾಗಿ ಬರೆಯಲಿಲ್ಲ ಎಂಬುದನ್ನು ಪರಿಶೀಲಿಸಿ." } - } - } - }, - "UnlinkConfirmationMessage" : { - "comment" : "Alert message shown before unlinking action.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "ko" : { "stringUnit" : { "state" : "translated", - "value" : "You will no longer be able to sign in using your account" + "value" : "- 이메일을 잘못 입력하지 않았는지 확인하세요." } - } - } - }, - "UnlinkConfirmationTitle" : { - "comment" : "Alert title shown before unlinking action.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "ln" : { "stringUnit" : { "state" : "translated", - "value" : "Unlink account?" + "value" : "- Talá ete okómaki malamu te email na yo." } - } - } - }, - "UnlinkTitle" : { - "comment" : "Controller title shown for unlinking account action.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "lv" : { "stringUnit" : { "state" : "translated", - "value" : "Linked account" + "value" : "- Pārbaudiet, vai neesat nepareizi uzrakstījis e-pastu." } - } - } - }, - "Update password" : { - "comment" : "Update password button label", - "localizations" : { - "en" : { + }, + "mr" : { "stringUnit" : { "state" : "translated", - "value" : "Update password" + "value" : "- तपासा की तुम्ही तुमचा ईमेल चुकीच्या पद्धतीने लिहिला नाही." + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Semak bahawa anda tidak salah eja e-mel anda." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Sjekk at du ikke stavet e-posten din feil." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Controleer of je je e-mailadres correct hebt gespeld." + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Sjekk at du ikkje stava e-posten din feil." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Sprawdź, czy nie popełniłeś błędu ortograficznego w adresie e-mail." + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Verifique se você não digitou seu e-mail incorretamente." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Verifique se você não digitou seu e-mail incorretamente." + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Verifique se não escreveu mal o seu e-mail." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Verificați că nu ați greșit ortografia e-mailului dvs." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Проверьте, что вы не ошиблись в написании вашего адреса электронной почты." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Skontrolujte, že ste správne napísali váš e-mail." + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Preverite, da niste napačno napisali svojega e-poštnega naslova." + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Проверите да нисте погрешно унели ваш имејл." + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Proverite da niste pogrešno uneli vaš imejl." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Kontrollera att du inte stavade din e-post fel." + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "- உங்கள் மின்னஞ்சலை தவறாக எழுதவில்லை என்பதை உறுதிப்படுத்தவும்." + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "- ตรวจสอบว่าคุณสะกดอีเมลถูกต้องหรือไม่" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "- E-postanızı yanlış yazmadığınızı kontrol edin." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Перевірте, що ви не помилилися в написанні своєї адреси електронної пошти." + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "- چیک کریں کہ آپ نے اپنی ای میل میں غلط املا نہیں لکھا۔" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Kiểm tra xem bạn có viết sai chính tả email của mình không." + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "- 请确认您没有拼错邮箱地址。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "- 請確認電子郵件地址是否拼錯。" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "- 請確認電子郵件地址是否拼寫正確。" + } + } + } + }, + "- Check that your inbox space is not running out or other inbox settings related issues." : { + "extractionState" : "stale", + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Проверете дали пощенската ви кутия не е пълна или има други проблеми." + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "- ইনবক্স পূর্ণ হয়ে গেছে কিনা বা অন্যান্য ইনবক্স সমস্যা আছে কিনা দেখুন।" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Comprova que la teva bústia no estigui plena ni tingui altres problemes de configuració." + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Zkontrolujte, zda nemáte plnou schránku nebo jiné nastavení, které by bránilo doručení." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Tjek at din indbakke ikke er fuld eller har andre problemer." + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Überprüfen Sie, ob Ihr Posteingang nicht voll ist oder andere Probleme mit den Posteingangseinstellungen vorliegen." + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Überprüfen Sie, ob Ihr Posteingang nicht voll ist oder andere Probleme mit den Posteingangseinstellungen vorliegen." + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Ελέγξτε ότι ο χώρος του γραμματοκιβωτίου σας δεν έχει εξαντληθεί ή άλλα ζητήματα που σχετίζονται με τις ρυθμίσεις του γραμματοκιβωτίου." + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Check that your inbox space is not running out or other inbox settings related issues." + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Check that your inbox space is not running out or other inbox settings–related issues." + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Check that your inbox space is not running out or other inbox settings related issues." + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Check that your inbox space is not running out or other inbox settings related issues." + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Check that your inbox space is not running out or other inbox settings related issues." + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Check that your inbox space is not running out or other inbox settings related issues." + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "- بررسی کنید که فضای صندوق ورودی شما تمام نشده یا مشکلات دیگر مرتبط با تنظیمات صندوق ورودی وجود ندارد." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Tarkista, ettei postilaatikkosi ole täynnä tai että asetuksissa ei ole ongelmia." + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Tingnan na ang iyong inbox space ay hindi nauubusan o may ibang problema sa inbox settings." + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Vérifiez que votre boîte de réception n'est pas pleine ou qu'il n'y a pas d'autres problèmes liés aux paramètres de la boîte de réception." + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Prüef ob dis Postfach nöd voll isch oder anderi Problem mit de Postfach-Iistellige vorhande sind." + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "- તપાસો કે તમારી ઇનબૉક્સ જગ્યા સમાપ્ત થઈ રહી નથી અથવા ઇનબૉક્સ સેટિંગ્સ સંબંધિત અન્ય સમસ્યાઓ નથી." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "- בדוק שהמקום בתיבת הדואר הנכנס שלך לא אוזל או בעיות אחרות הקשורות להגדרות תיבת הדואר הנכנס." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "- जांचें कि आपका इनबॉक्स स्थान समाप्त नहीं हो रहा है या इनबॉक्स सेटिंग्स से संबंधित अन्य समस्याएं नहीं हैं।" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Provjerite imate li dovoljno prostora u inboxu ili drugih problema s postavkama." + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Ellenőrizze, hogy nem fogy-e el a postafiókja helye, vagy más, a postafiók beállításaival kapcsolatos problémák vannak-e." + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Periksa bahwa ruang kotak masuk Anda tidak habis atau masalah lain terkait pengaturan kotak masuk." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Controlla che lo spazio della tua casella di posta non si stia esaurendo o altri problemi relativi alle impostazioni della casella di posta." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "- 受信トレイの容量が不足していないか、その他の受信トレイ設定に関する問題がないか確認してください。" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "- ನಿಮ್ಮ ಇನ್‌ಬಾಕ್ಸ್ ಜಾಗ ಖಾಲಿಯಾಗುತ್ತಿಲ್ಲ ಅಥವಾ ಇತರ ಇನ್‌ಬಾಕ್ಸ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳಿಗೆ ಸಂಬಂಧಿಸಿದ ಸಮಸ್ಯೆಗಳಿಲ್ಲ ಎಂಬುದನ್ನು ಪರಿಶೀಲಿಸಿ." + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "- 받은편지함 공간이 부족하지 않은지 또는 기타 받은편지함 설정 관련 문제가 없는지 확인하세요." + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Talá ete esika ya inbox na yo ezali te kosilá to makambu mosusu ya paramɛtrɛ ya inbox." + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Pārbaudiet, vai iesūtnes vieta nav izsmeldzīga vai nav citu ar iesūtnes iestatījumiem saistītu problēmu." + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "- तपासा की तुमची इनबॉक्स जागा संपत नाही किंवा इनबॉक्स सेटिंग्जशी संबंधित इतर समस्या नाहीत." + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Semak bahawa ruang peti masuk anda tidak kehabisan atau isu lain berkaitan tetapan peti masuk." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Sjekk at innboksplassen din ikke er i ferd med å gå tom eller andre innboksinnstillingsrelaterte problemer." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Controleer of je inbox niet vol is of of er andere instellingen het ontvangen verhinderen." + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Sjekk at innboksplassen din ikkje er i ferd med å gå tom eller andre innboksinnstillingsrelaterte problem." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Sprawdź, czy przestrzeń skrzynki odbiorczej się nie kończy lub inne problemy związane z ustawieniami skrzynki odbiorczej." + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Verifique se o espaço da sua caixa de entrada não está acabando ou outros problemas relacionados às configurações da caixa de entrada." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Verifique se o espaço da sua caixa de entrada não está acabando ou outros problemas relacionados às configurações da caixa de entrada." + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Verifique se o espaço da sua caixa de entrada não está a esgotar-se ou outros problemas relacionados com as definições da caixa de entrada." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Verificați că spațiul din inbox nu se termină sau alte probleme legate de setările inbox-ului." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Проверьте, что место в почтовом ящике не заканчивается или другие проблемы, связанные с настройками почтового ящика." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Skontrolujte, že vám nedochádza miesto v schránke alebo iné problémy súvisiace s nastaveniami schránky." + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Preverite, da se vam ne prazni prostor v nabiralniku ali druge težave, povezane z nastavitvami nabiralnika." + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Проверите да ли вам не понестаје простора у сандучету или других проблема везаних за подешавања сандучета." + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Proverite da li vam ne ponestaje prostora u sandučetu ili drugih problema vezanih za podešavanja sandučeta." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Kontrollera att ditt inkorgutrymme inte håller på att ta slut eller andra problem relaterade till inkorgsinställningar." + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "- உங்கள் இன்பாக்ஸ் இடம் தீர்ந்து போகவில்லை அல்லது பிற இன்பாக்ஸ் அமைப்புகள் தொடர்பான சிக்கல்கள் இல்லை என்பதை சரிபார்க்கவும்." + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "- ตรวจสอบว่าพื้นที่กล่องจดหมายเข้าของคุณไม่เต็มหรือมีปัญหาอื่นๆ ที่เกี่ยวข้องกับการตั้งค่ากล่องจดหมายเข้า" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Gelen kutusu alanınızın dolmadığını veya gelen kutusu ayarlarıyla ilgili başka sorunlar olmadığını kontrol edin." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Перевірте, що місце у вхідних не закінчується або немає інших проблем, пов'язаних з налаштуваннями вхідних." + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "- چیک کریں کہ آپ کی ان باکس کی جگہ ختم نہیں ہو رہی یا ان باکس کی ترتیبات سے متعلق دیگر مسائل نہیں ہیں۔" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Kiểm tra xem không gian hộp thư đến của bạn có đang cạn kiệt hoặc các vấn đề liên quan đến cài đặt hộp thư đến khác không." + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "- 检查您的邮箱空间是否已满或存在其他设置问题。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "- 檢查信箱是否已滿或存在其他設定問題。" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "- 檢查信箱容量是否已滿或存在其他信箱設定問題。" + } + } + } + }, + "- Check your internet connection." : { + "extractionState" : "stale", + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Проверете интернет връзката си." + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "- আপনার ইন্টারনেট সংযোগ পরীক্ষা করুন।" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Comprova la teva connexió a Internet." + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Zkontrolujte své připojení k internetu." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Tjek din internetforbindelse." + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Überprüfen Sie Ihre Internetverbindung." + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Überprüfen Sie Ihre Internetverbindung." + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Ελέγξτε τη σύνδεσή σας στο διαδίκτυο." + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Check your internet connection." + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Check your internet connection." + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Check your internet connection." + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Check your internet connection." + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Check your internet connection." + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Check your internet connection." + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "- اتصال اینترنت خود را بررسی کنید." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Tarkista internet-yhteytesi." + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Tingnan ang iyong internet connection." + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Vérifiez votre connexion Internet." + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Prüef dini Internetverbindig." + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "- તમારા ઇન્ટરનેટ કનેક્શનને તપાસો." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "- בדוק את חיבור האינטרנט שלך." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "- अपना इंटरनेट कनेक्शन जांचें।" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Provjerite internetsku vezu." + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Ellenőrizze az internetkapcsolatot." + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Periksa koneksi internet Anda." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Controlla la tua connessione Internet." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "- インターネット接続を確認してください。" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "- ನಿಮ್ಮ ಇಂಟರ್ನೆಟ್ ಸಂಪರ್ಕವನ್ನು ಪರಿಶೀಲಿಸಿ." + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "- 인터넷 연결을 확인하세요." + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Talá connexion na yo ya internet." + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Pārbaudiet interneta savienojumu." + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "- तुमचे इंटरनेट कनेक्शन तपासा." + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Semak sambungan internet anda." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Sjekk internettforbindelsen din." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Controleer je internetverbinding." + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Sjekk internettforbindinga di." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Sprawdź swoje połączenie internetowe." + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Verifique sua conexão com a internet." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Verifique sua conexão com a internet." + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Verifique a sua ligação à Internet." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Verificați conexiunea la internet." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Проверьте ваше интернет-соединение." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Skontrolujte svoje internetové pripojenie." + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Preverite svojo internetno povezavo." + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Проверите вашу интернет везу." + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Proverite vašu internet vezu." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Kontrollera din internetanslutning." + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "- உங்கள் இணைய இணைப்பைச் சரிபார்க்கவும்." + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "- ตรวจสอบการเชื่อมต่ออินเทอร์เน็ตของคุณ" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "- İnternet bağlantınızı kontrol edin." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Перевірте своє інтернет-з'єднання." + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "- اپنے انٹرنیٹ کنکشن کو چیک کریں۔" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "- Kiểm tra kết nối internet của bạn." + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "- 检查您的网络连接。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "- 請檢查您的網路連線。" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "- 檢查您的網路連線。" + } + } + } + }, + "%@" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + } + } + }, + "••••••%@" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@" + } + } + } + }, + "A sign-in email with additional instructions was sent to %@. Check your email to complete sign-in." : { + "extractionState" : "stale", + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Имейл с инструкции за вход беше изпратен до %@. Проверете пощата си, за да завършите влизането." + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ এ অতিরিক্ত নির্দেশনাসহ একটি সাইন-ইন ইমেইল পাঠানো হয়েছে। সাইন-ইন সম্পূর্ণ করতে আপনার ইমেইল দেখুন।" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "S'ha enviat un correu d'inici de sessió amb instruccions addicionals a %@. Comprova el teu correu per completar l'inici de sessió." + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Přihlašovací email s dalšími instrukcemi byl odeslán na %@. Zkontrolujte email pro dokončení přihlášení." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "En loginmail med yderligere instruktioner blev sendt til %@. Tjek din email for at fuldføre login." + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eine Anmelde-E-Mail mit zusätzlichen Anweisungen wurde an %@ gesendet. Überprüfen Sie Ihre E-Mail, um die Anmeldung abzuschließen." + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eine Anmelde-E-Mail mit zusätzlichen Anweisungen wurde an %@ gesendet. Überprüfen Sie Ihre E-Mail, um die Anmeldung abzuschliessen." + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ένα email σύνδεσης με πρόσθετες οδηγίες στάλθηκε στο %@. Ελέγξτε το email σας για να ολοκληρώσετε τη σύνδεση." + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "A sign-in email with additional instructions was sent to %@. Check your email to complete sign-in." + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "A sign-in email with additional instructions was sent to %@. Check your email to complete sign-in." + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "A sign-in email with additional instructions was sent to %@. Check your email to complete sign-in." + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "A sign-in email with additional instructions was sent to %@. Check your email to complete sign-in." + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "A sign-in email with additional instructions was sent to %@. Check your email to complete sign-in." + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "A sign-in email with additional instructions was sent to %@. Check your email to complete sign-in." + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "یک ایمیل ورود با دستورالعمل‌های اضافی به %@ ارسال شد. ایمیل خود را برای تکمیل ورود بررسی کنید." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kirjautumissähköposti lisäohjeilla on lähetetty osoitteeseen %@. Tarkista sähköpostisi viimeistelläksesi kirjautumisen." + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Isang sign-in email na may karagdagang mga tagubilin ay naipadala sa %@. Tingnan ang iyong email upang makumpleto ang pag-sign in." + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Un e-mail de connexion avec des instructions supplémentaires a été envoyé à %@. Consultez votre e-mail pour terminer la connexion." + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Es Aamälde-E-Mail mit zuesätzliche Awisige isch a %@ gschickt worde. Prüef dini E-Mail zum d'Aamäldig abzschliesse." + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "વધારાની સૂચનાઓ સાથેનો સાઇન-ઇન ઇમેઇલ %@ પર મોકલવામાં આવ્યો હતો. સાઇન-ઇન પૂર્ણ કરવા માટે તમારો ઇમેઇલ તપાસો." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "דוא״ל התחברות עם הוראות נוספות נשלח אל %@. בדוק את הדוא״ל שלך כדי להשלים את ההתחברות." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "अतिरिक्त निर्देशों के साथ एक साइन-इन ईमेल %@ पर भेजा गया था। साइन-इन पूरा करने के लिए अपना ईमेल जांचें।" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Email za prijavu s dodatnim uputama poslan je na %@. Provjerite svoj inbox kako biste dovršili prijavu." + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "További utasításokat tartalmazó bejelentkezési e-mailt küldtünk a következő címre: %@. Ellenőrizze az e-mailjét a bejelentkezés befejezéséhez." + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Email masuk dengan instruksi tambahan telah dikirim ke %@. Periksa email Anda untuk menyelesaikan masuk." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "È stata inviata un'email di accesso con istruzioni aggiuntive a %@. Controlla la tua email per completare l'accesso." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "追加の手順を含むサインインメールが%@に送信されました。メールを確認してサインインを完了してください。" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಹೆಚ್ಚುವರಿ ಸೂಚನೆಗಳೊಂದಿಗೆ ಸೈನ್-ಇನ್ ಇಮೇಲ್ ಅನ್ನು %@ ಗೆ ಕಳುಹಿಸಲಾಗಿದೆ. ಸೈನ್-ಇನ್ ಪೂರ್ಣಗೊಳಿಸಲು ನಿಮ್ಮ ಇಮೇಲ್ ಪರಿಶೀಲಿಸಿ." + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "추가 지침이 포함된 로그인 이메일이 %@(으)로 전송되었습니다. 로그인을 완료하려면 이메일을 확인하세요." + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Email ya kokota na malako ya kobakisa etindamaki na %@. Talá email na yo mpo na kosilisa kokota." + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pierakstīšanās e-pasts ar papildu norādījumiem tika nosūtīts uz %@. Pārbaudiet e-pastu, lai pabeigtu pierakstīšanos." + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "अतिरिक्त सूचनांसह एक साइन-इन ईमेल %@ वर पाठवला गेला. साइन-इन पूर्ण करण्यासाठी तुमचा ईमेल तपासा." + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-mel log masuk dengan arahan tambahan telah dihantar ke %@. Semak e-mel anda untuk melengkapkan log masuk." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "En påloggings-e-post med tilleggsinstruksjoner ble sendt til %@. Sjekk e-posten din for å fullføre påloggingen." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Een inlogmail met extra instructies is verzonden naar %@. Controleer je e-mail om de login te voltooien." + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ein påloggings-e-post med tilleggsinstruksjonar vart sendt til %@. Sjekk e-posten din for å fullføre pålogginga." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-mail logowania z dodatkowymi instrukcjami został wysłany na adres %@. Sprawdź swoją pocztę, aby ukończyć logowanie." + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Um e-mail de login com instruções adicionais foi enviado para %@. Verifique seu e-mail para concluir o login." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Um e-mail de login com instruções adicionais foi enviado para %@. Verifique seu e-mail para concluir o login." + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Foi enviado um e-mail de início de sessão com instruções adicionais para %@. Verifique o seu e-mail para concluir o início de sessão." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Un e-mail de conectare cu instrucțiuni suplimentare a fost trimis la %@. Verificați e-mailul pentru a finaliza conectarea." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Письмо для входа с дополнительными инструкциями было отправлено на %@. Проверьте свою электронную почту, чтобы завершить вход." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-mail na prihlásenie s ďalšími pokynmi bol odoslaný na %@. Skontrolujte svoj e-mail a dokončite prihlásenie." + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-pošta za prijavo z dodatnimi navodili je bila poslana na %@. Preverite svojo e-pošto za dokončanje prijave." + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Имејл за пријављивање са додатним инструкцијама је послат на %@. Проверите ваш имејл да завршите пријављивање." + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Imejl za prijavljivanje sa dodatnim instrukcijama je poslat na %@. Proverite vaš imejl da završite prijavljivanje." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ett inloggnings-e-postmeddelande med ytterligare instruktioner skickades till %@. Kontrollera din e-post för att slutföra inloggningen." + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "கூடுதல் வழிமுறைகளுடன் உள்நுழைவு மின்னஞ்சல் %@ க்கு அனுப்பப்பட்டது. உள்நுழைவை நிறைவு செய்ய உங்கள் மின்னஞ்சலைச் சரிபார்க்கவும்." + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ส่งอีเมลลงชื่อเข้าใช้พร้อมคำแนะนำเพิ่มเติมไปที่ %@ แล้ว ตรวจสอบอีเมลของคุณเพื่อลงชื่อเข้าใช้ให้เสร็จสมบูรณ์" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ek talimatlar içeren bir oturum açma e-postası %@ adresine gönderildi. Oturum açmayı tamamlamak için e-postanızı kontrol edin." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Лист для входу з додатковими інструкціями надіслано на %@. Перевірте свою електронну пошту, щоб завершити вхід." + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "اضافی ہدایات کے ساتھ سائن ان ای میل %@ پر بھیج دی گئی۔ سائن ان مکمل کرنے کے لیے اپنی ای میل چیک کریں۔" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Email đăng nhập kèm theo hướng dẫn bổ sung đã được gửi đến %@. Kiểm tra email của bạn để hoàn tất đăng nhập." + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "已向 %@ 发送带有更多说明的登录邮件。请检查邮箱以完成登录。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "已傳送登入說明至 %@。請查看電子郵件以完成登入。" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "已寄出登入說明至 %@,請查看電子郵件以完成登入。" + } + } + } + }, + "Account: %@" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "الحساب: %@" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Акаунт: %@" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "অ্যাকাউন্ট: %@" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Compte: %@" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Účet: %@" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konto: %@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konto: %@" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konto: %@" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konto: %@" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Λογαριασμός: %@" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Account: %@" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Account: %@" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Account: %@" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Account: %@" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Account: %@" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Account: %@" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Account: %@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cuenta: %@" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "حساب: %@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tili: %@" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Account: %@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Compte : %@" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Compte : %@" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konto: %@" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "એકાઉન્ટ: %@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "חשבון: %@" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "खाता: %@" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Račun: %@" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fiók: %@" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Akun: %@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Account: %@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "アカウント: %@" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಖಾತೆ: %@" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "계정: %@" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kɔnti: %@" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konts: %@" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "खाते: %@" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Akaun: %@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konto: %@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Account: %@" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konto: %@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konto: %@" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Conta: %@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Conta: %@" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Conta: %@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cont: %@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Аккаунт: %@" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Účet: %@" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Račun: %@" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Налог: %@" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nalog: %@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konto: %@" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "கணக்கு: %@" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "บัญชี: %@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hesap: %@" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Обліковий запис: %@" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "اکاؤنٹ: %@" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tài khoản: %@" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "账户:%@" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "帳號:%@" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "帳號:%@" + } + } + } + }, + "AccountDisabledError" : { + "comment" : "Error message displayed when the account is disabled. Use short/abbreviated translation for 'email' which is less than 15 chars.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "عنوان البريد الإلكتروني هذا لحساب تم تعطيله." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Diese E-Mail-Adresse gehört zu einem deaktivierten Konto." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "That email address is for an account that has been disabled." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Esa dirección de correo es de una cuenta que ha sido deshabilitada." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cette adresse e-mail correspond à un compte qui a été désactivé." + } + } + } + }, + "ActionCantBeUndone" : { + "comment" : "Alert message shown before account deletion.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "لا يمكن التراجع عن هذا الإجراء" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Diese Aktion kann nicht rückgängig gemacht werden" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "This action can't be undone" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Esta acción no se puede deshacer" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cette action ne peut pas être annulée" + } + } + } + }, + "Add an extra layer of security to your account" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "أضف طبقة أمان إضافية إلى حسابك" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Добавете допълнителен слой сигурност към акаунта си" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "আপনার অ্যাকাউন্টে অতিরিক্ত নিরাপত্তা স্তর যোগ করুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Afegeix una capa addicional de seguretat al teu compte" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Přidejte do svého účtu další úroveň zabezpečení" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tilføj et ekstra sikkerhedslag til din konto" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Füge deinem Konto eine zusätzliche Sicherheitsebene hinzu" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fügen Sie Ihrem Konto eine zusätzliche Sicherheitsebene hinzu" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fügen Sie Ihrem Konto eine zusätzliche Sicherheitsebene hinzu" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Προσθέστε ένα επιπλέον επίπεδο ασφάλειας στον λογαριασμό σας" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Add an extra layer of security to your account" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Add an extra layer of security to your account" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Add an extra layer of security to your account" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Add an extra layer of security to your account" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Add an extra layer of security to your account" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Add an extra layer of security to your account" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Add an extra layer of security to your account" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Agrega una capa adicional de seguridad a tu cuenta" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "یک لایه امنیتی اضافی به حساب خود اضافه کنید" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lisää tilillesi ylimääräinen turvakerros" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Magdagdag ng karagdagang layer ng seguridad sa iyong account" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajoute une couche de sécurité supplémentaire à ton compte" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajoutez une couche de sécurité supplémentaire à votre compte" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Füeg dim Konto e zuesätzlichi Sicherheitsschicht hinzue" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "તમારા એકાઉન્ટમાં સુરક્ષાનું એક વધારાનું સ્તર ઉમેરો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הוסף שכבת אבטחה נוספת לחשבון שלך" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "अपने खाते में सुरक्षा की एक अतिरिक्त परत जोड़ें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dodajte dodatni sloj sigurnosti svom računu" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adjon hozzá egy további biztonsági réteget a fiókjához" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tambahkan lapisan keamanan ekstra ke akun Anda" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aggiungi un ulteriore livello di sicurezza al tuo account" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "アカウントにセキュリティレイヤーを追加する" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ನಿಮ್ಮ ಖಾತೆಗೆ ಹೆಚ್ಚುವರಿ ಭದ್ರತಾ ಪದರವನ್ನು ಸೇರಿಸಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "계정에 추가 보안 계층 추가" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bakisa mokano mosusu ya libateli na kɔnti na yo" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pievienojiet papildu drošības līmeni savam kontam" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "तुमच्या खात्यात सुरक्षिततेचा अतिरिक्त स्तर जोडा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tambahkan lapisan keselamatan tambahan pada akaun anda" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Legg til et ekstra sikkerhetslag til kontoen din" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voeg een extra beveiligingslaag toe aan je account" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Legg til eit ekstra tryggingsslag til kontoen din" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dodaj dodatkową warstwę zabezpieczeń do swojego konta" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adicione uma camada extra de segurança à sua conta" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adicione uma camada extra de segurança à sua conta" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adicione uma camada extra de segurança à sua conta" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adăugați un nivel suplimentar de securitate la contul dvs." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Добавьте дополнительный уровень безопасности к вашему аккаунту" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pridajte do svojho účtu ďalšiu vrstvu zabezpečenia" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dodajte dodatno raven varnosti svojemu računu" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Додајте додатни ниво безбедности вашем налогу" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dodajte dodatni nivo bezbednosti vašem nalogu" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lägg till ett extra lager av säkerhet till ditt konto" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "உங்கள் கணக்கிற்கு கூடுதல் பாதுகாப்பு அடுக்கை சேர்க்கவும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เพิ่มระดับความปลอดภัยเพิ่มเติมให้กับบัญชีของคุณ" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hesabınıza ekstra bir güvenlik katmanı ekleyin" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Додайте додатковий рівень безпеки до свого облікового запису" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "اپنے اکاؤنٹ میں سیکیورٹی کی ایک اضافی تہہ شامل کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thêm một lớp bảo mật bổ sung cho tài khoản của bạn" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "为您的账户添加额外的安全层" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "為您的帳號新增一層額外的安全防護" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "為您的帳號增加額外的安全防護" + } + } + } + }, + "Add Another Method" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "إضافة طريقة أخرى" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Добавяне на друг метод" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "অন্য একটি পদ্ধতি যোগ করুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Afegeix un altre mètode" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Přidat další metodu" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tilføj en anden metode" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Weitere Methode hinzufügen" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Weitere Methode hinzufügen" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Weitere Methode hinzufügen" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Προσθήκη άλλης μεθόδου" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Add Another Method" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Add Another Method" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Add Another Method" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Add Another Method" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Add Another Method" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Add Another Method" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Add Another Method" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Agregar otro método" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "افزودن روش دیگر" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lisää toinen menetelmä" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Magdagdag ng Ibang Paraan" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajouter une autre méthode" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajouter une autre méthode" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wiiteri Methode hinzuefüege" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "બીજી પદ્ધતિ ઉમેરો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הוספת שיטה נוספת" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "एक और तरीका जोड़ें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dodaj još jednu metodu" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Másik módszer hozzáadása" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tambahkan Metode Lain" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aggiungi un altro metodo" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "別の方法を追加" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಮತ್ತೊಂದು ವಿಧಾನವನ್ನು ಸೇರಿಸಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "다른 방법 추가" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bakisa Lolenge Mosusu" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pievienot citu metodi" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "दुसरी पद्धत जोडा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tambah Kaedah Lain" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Legg til en annen metode" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Extra methode toevoegen" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Legg til ein annan metode" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dodaj inną metodę" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adicionar outro método" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adicionar outro método" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adicionar outro método" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adăugați o altă metodă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Добавить другой метод" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pridať ďalšiu metódu" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dodaj drugo metodo" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Додај још један метод" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dodaj još jedan metod" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lägg till en annan metod" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "மற்றொரு முறையைச் சேர்க்கவும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เพิ่มวิธีอื่น" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Başka bir yöntem ekle" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Додати інший метод" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "ایک اور طریقہ شامل کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thêm phương thức khác" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "添加其他方式" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "新增其他方式" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "新增其他方式" + } + } + } + }, + "Add password" : { + "comment" : "Account Settings cell title Add Password.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "إضافة كلمة مرور" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Добавяне на парола" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "পাসওয়ার্ড যোগ করুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Afegeix una contrasenya" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Přidat heslo" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tilføj adgangskode" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort hinzufügen" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort hinzufügen" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort hinzufügen" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Προσθήκη κωδικού πρόσβασης" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Add password" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Add password" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Add password" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Add password" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Add password" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Add password" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Add password" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Agregar contraseña" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "افزودن رمز عبور" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lisää salasana" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Magdagdag ng password" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajouter un mot de passe" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajouter un mot de passe" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort hinzuefüege" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "પાસવર્ડ ઉમેરો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הוספת סיסמה" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "पासवर्ड जोड़ें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dodaj lozinku" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jelszó hozzáadása" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tambahkan kata sandi" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aggiungi password" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "パスワードを追加" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಪಾಸ್‌ವರ್ಡ್ ಸೇರಿಸಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "비밀번호 추가" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bakisa liloba ya kobombama" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pievienot paroli" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "पासवर्ड जोडा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tambah kata laluan" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Legg til passord" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wachtwoord toevoegen" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Legg til passord" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dodaj hasło" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adicionar senha" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adicionar senha" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adicionar palavra-passe" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adăugați parolă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Добавить пароль" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pridať heslo" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dodaj geslo" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Додај лозинку" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dodaj lozinku" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lägg till lösenord" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "கடவுச்சொல்லைச் சேர்க்கவும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เพิ่มรหัสผ่าน" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Şifre ekle" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Додати пароль" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "پاس ورڈ شامل کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thêm mật khẩu" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "添加密码" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "新增密碼" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "新增密碼" + } + } + } + }, + "AddPasswordAlertMessage" : { + "comment" : "Alert message shown when adding account password.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "لإضافة كلمة مرور إلى حسابك، ستحتاج إلى تسجيل الدخول مرة أخرى." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Um ein Passwort zu deinem Konto hinzuzufügen, musst du dich erneut anmelden." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "To add password to your account, you will need to sign in again." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Para agregar una contraseña a tu cuenta, deberás iniciar sesión nuevamente." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pour ajouter un mot de passe à ton compte, tu devras te reconnecter." + } + } + } + }, + "Already have an account?" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "هل لديك حساب بالفعل؟" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вече имате акаунт?" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ইতিমধ্যেই একটি অ্যাকাউন্ট আছে?" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ja tens un compte?" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Už máte účet?" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Har du allerede en konto?" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hast du bereits ein Konto?" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sie haben bereits ein Konto?" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sie haben bereits ein Konto?" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Έχετε ήδη λογαριασμό;" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Already have an account?" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Already have an account?" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Already have an account?" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Already have an account?" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Already have an account?" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Already have an account?" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Already have an account?" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "¿Ya tienes una cuenta?" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "قبلاً حساب دارید؟" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Onko sinulla jo tili?" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mayroon nang account?" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tu as déjà un compte ?" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vous avez déjà un compte ?" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Häsch scho es Konto?" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "પહેલેથી જ એકાઉન્ટ છે?" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "כבר יש לך חשבון?" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "पहले से खाता है?" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Već imate račun?" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Már van fiókja?" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sudah punya akun?" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hai già un account?" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "すでにアカウントをお持ちですか?" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಈಗಾಗಲೇ ಖಾತೆ ಹೊಂದಿದ್ದೀರಾ?" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이미 계정이 있으신가요?" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ozali na kɔnti na yo?" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jau ir konts?" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "आधीच खाते आहे?" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sudah mempunyai akaun?" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Har du allerede en konto?" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Heb je al een account?" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Har du allereie ein konto?" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Masz już konto?" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Já tem uma conta?" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Já tem uma conta?" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Já tem uma conta?" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aveți deja un cont?" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Уже есть аккаунт?" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Už máte účet?" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Že imate račun?" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Већ имате налог?" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Već imate nalog?" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Har du redan ett konto?" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "ஏற்கனவே கணக்கு உள்ளதா?" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "มีบัญชีอยู่แล้ว?" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zaten bir hesabınız var mı?" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вже є обліковий запис?" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "پہلے سے اکاؤنٹ ہے؟" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Đã có tài khoản?" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "已经有账户?" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "已經有帳號了?" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "已經有帳號了?" + } + } + } + }, + "AS_SectionLinkedAccounts" : { + "comment" : "Account Settings section title Linked Accounts.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "الحسابات المرتبطة" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verknüpfte Konten" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Linked Accounts" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cuentas vinculadas" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Comptes liés" + } + } + } + }, + "AS_SectionProfile" : { + "comment" : "Account Settings section title Profile.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "الملف الشخصي" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profil" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profile" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Perfil" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profil" + } + } + } + }, + "AS_SectionSecurity" : { + "comment" : "Account Settings section title Security.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "الأمان" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sicherheit" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Security" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Seguridad" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sécurité" + } + } + } + }, + "Authenticating..." : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "جارٍ المصادقة..." + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Удостоверяване..." + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "প্রমাণীকরণ করা হচ্ছে..." + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "S'està autenticant..." + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Probíhá ověřování…" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Godkender..." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authentifizierung läuft..." + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authentifizierung läuft..." + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authentifizierung läuft..." + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Έλεγχος ταυτότητας..." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authenticating..." + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authenticating..." + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authenticating..." + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authenticating..." + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authenticating..." + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authenticating..." + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authenticating..." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autenticando..." + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "در حال احراز هویت..." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tunnistautuminen..." + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nag-authenticate..." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authentification..." + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authentification en cours..." + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authentifizierig lauft..." + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "પ્રમાણીકરણ થઈ રહ્યું છે..." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "מאמת..." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "प्रमाणित किया जा रहा है..." + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autentifikacija..." + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hitelesítés..." + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mengautentikasi..." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autenticazione in corso..." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "認証中..." + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ದೃಢೀಕರಿಸಲಾಗುತ್ತಿದೆ..." + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "인증 중..." + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kozala ko ndimisa..." + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Notiek autentifikācija..." + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "प्रमाणीकरण करत आहे..." + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mengesahkan..." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autentiserer..." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bezig met verifiëren..." + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autentiserer..." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uwierzytelnianie..." + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autenticando..." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autenticando..." + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "A autenticar..." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se autentifică..." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Аутентификация..." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Overovanie..." + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preverjanje pristnosti..." + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Аутентификација..." + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autentifikacija..." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autentiserar..." + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "அங்கீகரிக்கப்படுகிறது..." + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "กำลังตรวจสอบสิทธิ์..." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kimlik doğrulanıyor..." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Автентифікація..." + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "تصدیق ہو رہی ہے..." + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Đang xác thực..." + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "正在验证…" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "正在驗證…" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "正在驗證中…" + } + } + } + }, + "Authentication Method" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "طريقة المصادقة" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Метод на удостоверяване" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "প্রমাণীকরণ পদ্ধতি" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mètode d'autenticació" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Metoda ověření" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bekræftelsesmetode" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authentifizierungsmethode" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authentifizierungsmethode" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authentifizierungsmethode" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Μέθοδος ελέγχου ταυτότητας" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authentication Method" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authentication Method" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authentication Method" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authentication Method" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authentication Method" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authentication Method" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authentication Method" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Método de autenticación" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "روش احراز هویت" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tunnistusmenetelmä" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Paraan ng Authentication" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Méthode d'authentification" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Méthode d'authentification" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authentifizierigsmethode" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "પ્રમાણીકરણ પદ્ધતિ" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "שיטת אימות" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "प्रमाणीकरण विधि" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Metoda autentifikacije" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hitelesítési módszer" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Metode Autentikasi" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Metodo di autenticazione" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "認証方法" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ದೃಢೀಕರಣ ವಿಧಾನ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "인증 방법" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lolenge ya Kondimisa" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autentifikācijas metode" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "प्रमाणीकरण पद्धत" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kaedah Pengesahan" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autentiseringsmetode" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authenticatiemethode" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autentiseringsmetode" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Metoda uwierzytelniania" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Método de autenticação" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Método de autenticação" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Método de autenticação" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Metodă de autentificare" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Метод аутентификации" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Metóda overovania" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Metoda preverjanja pristnosti" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Метод аутентификације" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Metod autentifikacije" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autentiseringsmetod" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "அங்கீகார முறை" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "วิธีการตรวจสอบสิทธิ์" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kimlik doğrulama yöntemi" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Метод автентифікації" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "تصدیقی طریقہ" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Phương thức xác thực" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "验证方式" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "驗證方式" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "驗證方式" + } + } + } + }, + "Authenticator App" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تطبيق المصادقة" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Приложение за удостоверяване" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "অথেন্টিকেটর অ্যাপ" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aplicació d'autenticació" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aplikační autentikátor" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autentifikationsapp" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authentifizierungs-App" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authentifizierungs-App" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authentifizierungs-App" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Εφαρμογή ελέγχου ταυτότητας" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authenticator App" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authenticator App" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authenticator App" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authenticator App" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authenticator App" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authenticator App" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authenticator App" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aplicación de autenticación" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "برنامه احراز هویت" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autentikaatiosovellus" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authenticator App" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Application d'authentification" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Application d'authentification" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authentifizierigs-App" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "પ્રમાણીકરણ એપ" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "אפליקציית אימות" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "प्रमाणक ऐप" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aplikacija za autentifikaciju" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hitelesítő alkalmazás" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aplikasi Autentikator" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "App di autenticazione" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "認証アプリ" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ದೃಢೀಕರಣ ಆ್ಯಪ್" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "인증 앱" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aplikasyo ya Kondimisa" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autentifikācijas lietotne" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "प्रमाणीकरण अॅप" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aplikasi Pengesah" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autentiseringsapp" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authenticator-app" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autentiseringsapp" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aplikacja uwierzytelniająca" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aplicativo autenticador" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aplicativo autenticador" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aplicação de autenticação" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aplicație de autentificare" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Приложение для аутентификации" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aplikácia na overovanie" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aplikacija za preverjanje pristnosti" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Апликација за аутентификацију" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aplikacija za autentifikaciju" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autentiseringsapp" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "அங்கீகரிப்பு செயலி" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "แอปตรวจสอบสิทธิ์" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kimlik doğrulayıcı uygulama" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Програма автентифікації" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "تصدیقی ایپ" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ứng dụng xác thực" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "身份验证器应用" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "驗證器應用程式" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "驗證器 App" + } + } + } + }, + "AuthPickerTitle" : { + "comment" : "Title for auth picker screen.", + "extractionState" : "stale", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تسجيل الدخول باستخدام Firebase" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mit Firebase anmelden" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with Firebase" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Iniciar sesión con Firebase" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se connecter avec Firebase" + } + } + } + }, + "Back" : { + "comment" : "Back button title.", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "رجوع" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Назад" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ফিরে যান" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enrere" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zpět" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tilbage" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zurück" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zurück" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zurück" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Πίσω" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Back" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Back" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Back" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Back" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Back" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Back" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Back" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Atrás" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "بازگشت" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Takaisin" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bumalik" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Retour" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Retour" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zrugg" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "પાછળ" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "חזור" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "वापस" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Natrag" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vissza" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kembali" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Indietro" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "戻る" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಹಿಂದೆ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "뒤로" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zonga" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Atpakaļ" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "मागे" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kembali" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tilbake" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terug" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tilbake" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wstecz" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voltar" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voltar" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voltar" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Înapoi" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Назад" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Späť" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nazaj" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Назад" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nazad" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tillbaka" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "பின்னால்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ย้อนกลับ" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geri" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Назад" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "واپس" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quay lại" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "返回" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "返回" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "返回" + } + } + } + }, + "By continuing, you are indicating that you accept our %@ and %@." : { + "extractionState" : "stale", + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Продължавайки, вие приемате нашите %@ и %@." + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "চালিয়ে গেলে আপনি আমাদের %@ এবং %@ গ্রহণ করছেন তা নির্দেশ করে।" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "En continuar, acceptes les nostres %@ i %@." + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pokračováním vyjadřujete souhlas s našimi %@ a %@." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ved at fortsætte accepterer du vores %@ og %@." + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Indem Sie fortfahren, erklären Sie, dass Sie unsere %@ und %@ akzeptieren." + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Indem Sie fortfahren, erklären Sie, dass Sie unsere %@ und %@ akzeptieren." + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Συνεχίζοντας, δηλώνετε ότι αποδέχεστε τους %@ και την %@ μας." + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "By continuing, you indicate that you accept our %@ and %@." + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "By continuing, you indicate that you accept our %@ and %@." + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "By continuing, you are indicating that you accept our %@ and %@." + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "By continuing, you are indicating that you accept our %@ and %@." + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "By continuing, you are indicating that you accept our %@ and %@." + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "By continuing, you are indicating that you accept our %@ and %@." + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "با ادامه دادن، نشان می‌دهید که %@ و %@ ما را می‌پذیرید." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jatkamalla hyväksyt %@ ja %@." + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sa pagpapatuloy, ipinapahiwatig mo na tinatanggap mo ang aming %@ at %@." + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "En continuant, vous indiquez que vous acceptez nos %@ et %@." + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Indem du wiiterfährsch, erklärsch du dass du üsi %@ und %@ akzeptiersch." + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "ચાલુ રાખીને, તમે સૂચવી રહ્યા છો કે તમે અમારી %@ અને %@ સ્વીકારો છો." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "בהמשך, אתה מצהיר שאתה מקבל את %@ וה־%@ שלנו." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "जारी रखकर, आप संकेत दे रहे हैं कि आप हमारी %@ और %@ स्वीकार करते हैं।" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nastavljajući, prihvaćate naše %@ i %@." + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "A folytatással jelzi, hogy elfogadja a következőket: %@ és %@." + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dengan melanjutkan, Anda menunjukkan bahwa Anda menerima %@ dan %@ kami." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Continuando, indichi di accettare i nostri %@ e %@." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "続行することで、当社の%@および%@に同意したことになります。" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಮುಂದುವರೆಯುವ ಮೂಲಕ, ನೀವು ನಮ್ಮ %@ ಮತ್ತು %@ ಅನ್ನು ಸ್ವೀಕರಿಸುತ್ತೀರಿ ಎಂದು ಸೂಚಿಸುತ್ತಿದ್ದೀರಿ." + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "계속하면 당사의 %@ 및 %@에 동의하는 것으로 간주됩니다." + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Na kokoba, ozali kolakisa ete ondimi %@ na biso ná %@." + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Turpinot, jūs norādāt, ka piekrītat mūsu %@ un %@." + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "सुरू ठेवून, तुम्ही सूचित करत आहात की तुम्ही आमच्या %@ आणि %@ स्वीकारता." + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dengan meneruskan, anda menunjukkan bahawa anda menerima %@ dan %@ kami." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ved å fortsette indikerer du at du godtar våre %@ og %@." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Door verder te gaan, accepteer je onze %@ en %@." + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ved å halde fram indikerer du at du godtek våre %@ og %@." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kontynuując, wskazujesz, że akceptujesz nasze %@ i %@." + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ao continuar, você está indicando que aceita nossos %@ e %@." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ao continuar, você está indicando que aceita nossos %@ e %@." + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ao continuar, está a indicar que aceita os nossos %@ e %@." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Continuând, indicați că acceptați %@ și %@ noastre." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Продолжая, вы указываете, что принимаете наши %@ и %@." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pokračovaním vyjadrujete, že akceptujete naše %@ a %@." + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "S nadaljevanjem potrjujete, da sprejemate naše %@ in %@." + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Настављањем, показујете да прихватате наше %@ и %@." + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nastavljanjem, pokazujete da prihvatate naše %@ i %@." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Genom att fortsätta indikerar du att du accepterar våra %@ och %@." + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "தொடர்வதன் மூலம், நீங்கள் எங்கள் %@ மற்றும் %@ ஐ ஏற்றுக்கொள்கிறீர்கள் என்பதை குறிக்கிறீர்கள்." + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "การดำเนินการต่อแสดงว่าคุณยอมรับ%@และ%@ของเรา" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Devam ederek, %@ ve %@ kabul ettiğinizi belirtiyorsunuz." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Продовжуючи, ви вказуєте, що приймаєте наші %@ та %@." + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "جاری رکھ کر، آپ اشارہ کر رہے ہیں کہ آپ ہماری %@ اور %@ کو قبول کرتے ہیں۔" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bằng cách tiếp tục, bạn cho biết rằng bạn chấp nhận %@ và %@ của chúng tôi." + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "继续即表示您接受我们的%@ 和 %@。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "繼續即表示您同意我們的 %@ 與 %@。" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "繼續即表示您同意我們的 %@ 與 %@。" + } + } + } + }, + "Can't find provider for %@." : { + "extractionState" : "stale", + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Не може да се намери доставчик за %@." + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ এর জন্য প্রোভাইডার খুঁজে পাওয়া যাচ্ছেনা।" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "No s'ha pogut trobar un proveïdor per a %@." + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nelze najít poskytovatele pro %@." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kan ikke finde udbyder for %@." + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anbieter für %@ kann nicht gefunden werden." + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anbieter für %@ kann nicht gefunden werden." + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Δεν είναι δυνατή η εύρεση παρόχου για %@." + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Can't find provider for %@." + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Can't find provider for %@." + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Can't find provider for %@." + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Can't find provider for %@." + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Can't find provider for %@." + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Can't find provider for %@." + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ارائه‌دهنده برای %@ یافت نشد." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Palveluntarjoajaa %@ varten ei löytynyt." + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hindi mahanap ang provider para sa %@." + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Impossible de trouver le fournisseur pour %@." + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anbieter für %@ cha nöd gfunde werde." + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ માટે પ્રદાતા મળ્યો નથી." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "לא ניתן למצוא ספק עבור %@." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ के लिए प्रदाता नहीं मिल सका।" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nije moguće pronaći pružatelja za %@." + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nem található szolgáltató a következőhöz: %@." + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tidak dapat menemukan penyedia untuk %@." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Impossibile trovare il provider per %@." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@のプロバイダが見つかりません。" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ ಗಾಗಿ ಪೂರೈಕೆದಾರ ಸಿಗಲಿಲ್ಲ." + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@에 대한 제공업체를 찾을 수 없습니다." + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tokoki te komona mopesi mpo na %@." + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nevar atrast pakalpojumu sniedzēju priekš %@." + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ साठी प्रदाता सापडला नाही." + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tidak dapat mencari pembekal untuk %@." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Finner ikke leverandør for %@." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kan provider voor %@ niet vinden." + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Finn ikkje leverandør for %@." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nie można znaleźć dostawcy dla %@." + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Não foi possível encontrar o provedor para %@." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Não foi possível encontrar o provedor para %@." + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Não foi possível encontrar o fornecedor para %@." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nu se poate găsi furnizorul pentru %@." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Не удается найти провайдера для %@." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nepodarilo sa nájsť poskytovateľa pre %@." + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ni mogoče najti ponudnika za %@." + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Не могу да пронађем провајдера за %@." + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ne mogu da pronađem provajdera za %@." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kan inte hitta leverantör för %@." + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ க்கான வழங்குநரைக் கண்டறிய முடியவில்லை." + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ไม่พบผู้ให้บริการสำหรับ %@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ için sağlayıcı bulunamıyor." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Не вдалося знайти постачальника для %@." + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ کے لیے فراہم کنندہ نہیں مل سکا۔" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Không thể tìm thấy nhà cung cấp cho %@." + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "找不到 %@ 的提供商。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "找不到 %@ 的提供者。" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "找不到 %@ 的服務提供者。" + } + } + } + }, + "Cancel" : { + "comment" : "Cancel button title.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "إلغاء" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Отказ" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "বাতিল করুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cancel·la" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zrušit" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Annuller" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abbrechen" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abbrechen" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abbrechen" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ακύρωση" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cancel" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cancel" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cancel" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cancel" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cancel" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cancel" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cancel" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cancelar" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "لغو" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Peruuta" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kanselahin" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Annuler" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Annuler" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abbreche" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "રદ કરો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "ביטול" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "रद्द करें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odustani" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mégse" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Batal" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Annulla" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "キャンセル" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ರದ್ದುಗೊಳಿಸಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "취소" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tika" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Atcelt" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "रद्द करा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Batal" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Avbryt" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Annuleren" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Avbryt" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anuluj" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cancelar" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cancelar" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cancelar" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anulare" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Отмена" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zrušiť" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prekliči" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Откажи" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Otkaži" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Avbryt" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "ரத்து செய்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ยกเลิก" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "İptal" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Скасувати" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "منسوخ کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hủy" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "取消" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "取消" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "取消" + } + } + } + }, + "CannotAuthenticateError" : { + "comment" : "Error message displayed when the app cannot authenticate user's account.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "هذا النوع من الحسابات غير مدعوم من قبل هذا التطبيق" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dieser Kontotyp wird von dieser App nicht unterstützt" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "This type of account isn't supported by this app" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Este tipo de cuenta no es compatible con esta aplicación" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ce type de compte n'est pas pris en charge par cette application" + } + } + } + }, + "CantFindProvider" : { + "comment" : "Error message displayed when FUIAuth is not configured with third party provider. Parameter is value of provider (e g Google, Facebook etc)", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "لا يمكن العثور على موفر لـ %@." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anbieter für %@ kann nicht gefunden werden." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Can't find provider for %@." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "No se puede encontrar el proveedor para %@." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Impossible de trouver le fournisseur pour %@." + } + } + } + }, + "Change number" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تغيير الرقم" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Промяна на номер" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "নম্বর পরিবর্তন করুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Canvia el número" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Změnit číslo" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skift nummer" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nummer ändern" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nummer ändern" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nummer ändern" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Αλλαγή αριθμού" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Change number" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Change number" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Change number" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Change number" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Change number" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Change number" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Change number" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cambiar número" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "تغییر شماره" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vaihda numero" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Baguhin ang numero" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Changer le numéro" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Modifier le numéro" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nummere ändere" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "નંબર બદલો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "שינוי מספר" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "नंबर बदलें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Promijeni broj" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Szám módosítása" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ubah nomor" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cambia numero" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "番号を変更" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಸಂಖ್ಯೆ ಬದಲಾಯಿಸಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "번호 변경" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bobongola nimero" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mainīt numuru" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "नंबर बदला" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tukar nombor" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Endre nummer" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nummer wijzigen" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Endre nummer" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zmień numer" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alterar número" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alterar número" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alterar número" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Schimbați numărul" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Изменить номер" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zmeniť číslo" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spremeni številko" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Промени број" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Promeni broj" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ändra nummer" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "எண்ணை மாற்றவும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เปลี่ยนหมายเลข" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Numarayı değiştir" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Змінити номер" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "نمبر تبدیل کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Đổi số" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "更改号码" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "變更電話號碼" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "變更電話號碼" + } + } + } + }, + "Change password" : { + "comment" : "Account Settings cell title Change Password.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تغيير كلمة المرور" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Промяна на парола" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "পাসওয়ার্ড পরিবর্তন করুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Canvia la contrasenya" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Změnit heslo" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skift adgangskode" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort ändern" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort ändern" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort ändern" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Αλλαγή κωδικού πρόσβασης" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Change password" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Change password" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Change password" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Change password" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Change password" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Change password" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Change password" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cambiar contraseña" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "تغییر رمز عبور" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vaihda salasana" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Baguhin ang password" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Changer le mot de passe" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Modifier le mot de passe" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort ändere" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "પાસવર્ડ બદલો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "שינוי סיסמה" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "पासवर्ड बदलें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Promijeni lozinku" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jelszó módosítása" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ubah kata sandi" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cambia password" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "パスワードを変更" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಪಾಸ್‌ವರ್ಡ್ ಬದಲಾಯಿಸಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "비밀번호 변경" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bobongola liloba ya kobombama" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mainīt paroli" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "पासवर्ड बदला" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tukar kata laluan" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Endre passord" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wachtwoord wijzigen" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Endre passord" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zmień hasło" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alterar senha" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alterar senha" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alterar palavra-passe" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Schimbați parola" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Изменить пароль" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zmeniť heslo" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spremeni geslo" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Промени лозинку" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Promeni lozinku" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ändra lösenord" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "கடவுச்சொல்லை மாற்றவும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เปลี่ยนรหัสผ่าน" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Şifreyi değiştir" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Змінити пароль" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "پاس ورڈ تبدیل کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Đổi mật khẩu" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "修改密码" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "變更密碼" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "變更密碼" + } + } + } + }, + "Check your email" : { + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Проверете имейла си" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "আপনার ইমেইল পরীক্ষা করুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Comprova el teu correu electrònic" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zkontrolujte email" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tjek din email" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Überprüfen Sie Ihre E-Mail" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Überprüfen Sie Ihre E-Mail" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ελέγξτε το email σας" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Check your email" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Check your email" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Check your email" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Check your email" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Check your email" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Check your email" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ایمیل خود را بررسی کنید" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tarkista sähköpostisi" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tingnan ang iyong email" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Consultez votre e-mail" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prüef dini E-Mail" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "તમારો ઇમેઇલ તપાસો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "בדוק את הדוא״ל שלך" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "अपना ईमेल जांचें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Provjerite svoj email" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ellenőrizze az e-mailjét" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Periksa email Anda" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Controlla la tua email" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "メールを確認してください" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ನಿಮ್ಮ ಇಮೇಲ್ ಪರಿಶೀಲಿಸಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이메일을 확인하세요" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Talá email na yo" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pārbaudiet savu e-pastu" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "तुमचा ईमेल तपासा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Semak e-mel anda" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sjekk e-posten din" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Controleer je e-mail" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sjekk e-posten din" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sprawdź swoją pocztę e-mail" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verifique seu e-mail" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verifique seu e-mail" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verifique o seu e-mail" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verificați e-mailul" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Проверьте свою электронную почту" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skontrolujte svoj e-mail" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preverite svojo e-pošto" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Проверите ваш имејл" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Proverite vaš imejl" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kontrollera din e-post" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "உங்கள் மின்னஞ்சலைச் சரிபார்க்கவும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ตรวจสอบอีเมลของคุณ" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-postanızı kontrol edin" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Перевірте свою електронну пошту" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "اپنی ای میل چیک کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kiểm tra email của bạn" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "检查您的邮箱" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "查看您的電子郵件" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "查看您的電子郵件" + } + } + } + }, + "Choose Authentication Method" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "اختر طريقة المصادقة" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Изберете метод за удостоверяване" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "প্রমাণীকরণ পদ্ধতি নির্বাচন করুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tria un mètode d'autenticació" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vyberte metodu ověření" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vælg bekræftelsesmetode" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authentifizierungsmethode wählen" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authentifizierungsmethode wählen" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authentifizierungsmethode wählen" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Επιλογή μεθόδου ελέγχου ταυτότητας" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Choose Authentication Method" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Choose Authentication Method" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Choose Authentication Method" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Choose Authentication Method" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Choose Authentication Method" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Choose Authentication Method" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Choose Authentication Method" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Elige el método de autenticación" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "روش احراز هویت را انتخاب کنید" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Valitse tunnistusmenetelmä" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumili ng Paraan ng Authentication" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Choisir la méthode d'authentification" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Choisir la méthode d'authentification" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authentifizierigsmethode uswähle" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "પ્રમાણીકરણ પદ્ધતિ પસંદ કરો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "בחר שיטת אימות" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "प्रमाणीकरण विधि चुनें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odaberite metodu autentifikacije" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Válasszon hitelesítési módszert" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pilih Metode Autentikasi" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Scegli il metodo di autenticazione" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "認証方法を選択" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ದೃಢೀಕರಣ ವಿಧಾನವನ್ನು ಆಯ್ಕೆಮಾಡಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "인증 방법 선택" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pona Lolenge ya Kondimisa" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Izvēlieties autentifikācijas metodi" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "प्रमाणीकरण पद्धत निवडा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pilih Kaedah Pengesahan" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Velg autentiseringsmetode" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kies een authenticatiemethode" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vel autentiseringsmetode" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wybierz metodę uwierzytelniania" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Escolher método de autenticação" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Escolher método de autenticação" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Escolher método de autenticação" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alegeți metoda de autentificare" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Выберите метод аутентификации" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vyberte metódu overovania" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Izberite metodo preverjanja pristnosti" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Изабери метод аутентификације" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Izaberi metod autentifikacije" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Välj autentiseringsmetod" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "அங்கீகார முறையைத் தேர்ந்தெடுக்கவும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เลือกวิธีการตรวจสอบสิทธิ์" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kimlik doğrulama yöntemini seçin" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Виберіть метод автентифікації" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "تصدیقی طریقہ منتخب کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Chọn phương thức xác thực" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "选择验证方式" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "選擇驗證方式" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "選擇驗證方式" + } + } + } + }, + "Choose password" : { + "extractionState" : "stale", + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Изберете парола" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "পাসওয়ার্ড নির্বাচন করুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tria una contrasenya" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zvolte heslo" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vælg adgangskode" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort wählen" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort wählen" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Επιλογή κωδικού πρόσβασης" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Choose password" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Choose password" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Choose password" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Choose password" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Choose password" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Choose password" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "رمز عبور را انتخاب کنید" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Valitse salasana" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumili ng password" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Choisir un mot de passe" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort uswähle" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "પાસવર્ડ પસંદ કરો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "בחר סיסמה" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "पासवर्ड चुनें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odaberite lozinku" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Válasszon jelszót" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pilih kata sandi" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Scegli la password" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "パスワードを選択" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಪಾಸ್‌ವರ್ಡ್ ಆಯ್ಕೆಮಾಡಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "비밀번호 선택" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pona liloba ya kobombama" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Izvēlieties paroli" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "पासवर्ड निवडा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pilih kata laluan" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Velg passord" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kies een wachtwoord" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vel passord" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wybierz hasło" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Escolher senha" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Escolher senha" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Escolher palavra-passe" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alegeți parola" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Выберите пароль" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vyberte heslo" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Izberite geslo" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Изабери лозинку" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Izaberi lozinku" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Välj lösenord" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "கடவுச்சொல்லைத் தேர்ந்தெடுக்கவும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เลือกรหัสผ่าน" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Şifre seçin" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Виберіть пароль" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "پاس ورڈ منتخب کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Chọn mật khẩu" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "选择密码" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "選擇密碼" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "選擇密碼" + } + } + } + }, + "Choose verification method:" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "اختر طريقة التحقق:" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Изберете метод за проверка:" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "যাচাইকরণ পদ্ধতি নির্বাচন করুন:" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tria un mètode de verificació:" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vyberte způsob ověření:" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vælg bekræftelsesmetode:" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verifizierungsmethode wählen:" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verifizierungsmethode wählen:" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verifizierungsmethode wählen:" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Επιλέξτε μέθοδο επαλήθευσης:" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Choose verification method:" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Choose verification method:" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Choose verification method:" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Choose verification method:" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Choose verification method:" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Choose verification method:" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Choose verification method:" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Elige el método de verificación:" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "روش تأیید را انتخاب کنید:" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Valitse vahvistusmenetelmä:" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumili ng paraan ng pag-verify:" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Choisis la méthode de vérification :" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Choisir la méthode de vérification :" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verifizierigsmethode uswähle:" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "ચકાસણી પદ્ધતિ પસંદ કરો:" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "בחר שיטת אימות:" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "सत्यापन विधि चुनें:" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odaberite metodu provjere:" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Válasszon ellenőrzési módszert:" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pilih metode verifikasi:" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Scegli il metodo di verifica:" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "確認方法を選択:" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಪರಿಶೀಲನಾ ವಿಧಾನವನ್ನು ಆಯ್ಕೆಮಾಡಿ:" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "확인 방법 선택:" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pona lolenge ya kondimisa:" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Izvēlieties verifikācijas metodi:" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "पडताळणी पद्धत निवडा:" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pilih kaedah pengesahan:" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Velg bekreftelsesmetode:" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kies een verificatiemethode:" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vel stadfestingsmetode:" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wybierz metodę weryfikacji:" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Escolher método de verificação:" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Escolher método de verificação:" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Escolher método de verificação:" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alegeți metoda de verificare:" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Выберите метод проверки:" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vyberte metódu overenia:" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Izberite metodo preverjanja:" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Изабери метод верификације:" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Izaberi metod verifikacije:" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Välj verifieringsmetod:" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "சரிபார்ப்பு முறையைத் தேர்ந்தெடுக்கவும்:" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เลือกวิธีการยืนยัน:" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Doğrulama yöntemini seçin:" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Виберіть метод перевірки:" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "تصدیقی طریقہ منتخب کریں:" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Chọn phương thức xác minh:" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "选择验证方式:" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "選擇驗證方法:" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "選擇驗證方式:" + } + } + } + }, + "ChoosePassword" : { + "comment" : "Placeholder for the password text field in a sign up form.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "اختر كلمة المرور" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort wählen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Choose password" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Elegir contraseña" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Choisis un mot de passe" + } + } + } + }, + "Close" : { + "comment" : "Alert button title Close.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "إغلاق" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Затвори" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "বন্ধ করুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tanca" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zavřít" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Luk" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Schließen" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Schließen" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Schliessen" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Κλείσιμο" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Close" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Close" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Close" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Close" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Close" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Close" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Close" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cerrar" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "بستن" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sulje" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Isara" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fermer" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fermer" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Schliesse" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "બંધ કરો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "סגירה" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "बंद करें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zatvori" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bezárás" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tutup" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Chiudi" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "閉じる" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಮುಚ್ಚಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "닫기" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kanga" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aizvērt" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "बंद करा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tutup" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lukk" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sluiten" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lukk" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zamknij" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fechar" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fechar" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fechar" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Închideți" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Закрыть" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zavrieť" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zapri" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Затвори" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zatvori" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stäng" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "மூடு" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ปิด" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kapat" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Закрити" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "بند کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Đóng" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "关闭" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "關閉" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "關閉" + } + } + } + }, + "Complete Setup" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "إكمال الإعداد" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Завършване на настройката" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "সেটআপ সম্পূর্ণ করুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Completa la configuració" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dokončit nastavení" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fuldfør opsætning" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Einrichtung abschließen" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Einrichtung abschließen" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Einrichtung abschliessen" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ολοκλήρωση ρύθμισης" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Complete Setup" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Complete Setup" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Complete Setup" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Complete Setup" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Complete Setup" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Complete Setup" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Complete Setup" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Completar configuración" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "تکمیل راه‌اندازی" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Viimeistele asetukset" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kumpletuhin ang Setup" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminer la configuration" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminer la configuration" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Iirichtig abschliesse" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "સેટઅપ પૂર્ણ કરો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "השלמת התקנה" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "सेटअप पूरा करें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dovršite postavljanje" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beállítás befejezése" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Selesaikan Penyiapan" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Completa la configurazione" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "セットアップを完了" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಸೆಟಪ್ ಪೂರ್ಣಗೊಳಿಸಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "설정 완료" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Silisa Bobongisi" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pabeigt iestatīšanu" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "सेटअप पूर्ण करा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lengkapkan Persediaan" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fullfør oppsett" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Instelling voltooien" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fullfør oppsett" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zakończ konfigurację" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Concluir configuração" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Concluir configuração" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Concluir configuração" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Finalizați configurarea" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Завершить настройку" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dokončiť nastavenie" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dokončaj nastavitev" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Заврши подешавање" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Završi podešavanje" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slutför konfiguration" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "அமைப்பை முடிக்கவும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ตั้งค่าให้เสร็จสมบูรณ์" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kurulumu tamamla" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Завершити налаштування" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "سیٹ اپ مکمل کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hoàn tất thiết lập" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "完成设置" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "完成設定" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "完成設定" + } + } + } + }, + "Complete Sign-In" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "إكمال تسجيل الدخول" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Завършване на влизането" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "সাইন-ইন সম্পূর্ণ করুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Completa l'inici de sessió" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dokončit přihlášení" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fuldfør login" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anmeldung abschließen" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anmeldung abschließen" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anmeldung abschliessen" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ολοκλήρωση σύνδεσης" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Complete Sign-In" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Complete Sign-In" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Complete Sign-In" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Complete Sign-In" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Complete Sign-In" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Complete Sign-In" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Complete Sign-In" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Completar inicio de sesión" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "تکمیل ورود" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Viimeistele kirjautuminen" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kumpletuhin ang Pag-sign In" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminer la connexion" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminer la connexion" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aamäldig abschliesse" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "સાઇન-ઇન પૂર્ણ કરો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "השלמת התחברות" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "साइन-इन पूरा करें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dovršite prijavu" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bejelentkezés befejezése" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Selesaikan Masuk" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Completa l'accesso" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "サインインを完了" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಸೈನ್-ಇನ್ ಪೂರ್ಣಗೊಳಿಸಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "로그인 완료" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Silisa Kokota" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pabeigt pierakstīšanos" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "साइन-इन पूर्ण करा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lengkapkan Log Masuk" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fullfør pålogging" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inloggen voltooien" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fullfør pålogging" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zakończ logowanie" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Concluir login" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Concluir login" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Concluir início de sessão" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Finalizați conectarea" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Завершить вход" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dokončiť prihlásenie" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dokončaj prijavo" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Заврши пријављивање" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Završi prijavljivanje" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slutför inloggning" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "உள்நுழைவை முடிக்கவும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ลงชื่อเข้าใช้ให้เสร็จสมบูรณ์" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Oturum açmayı tamamla" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Завершити вхід" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "سائن ان مکمل کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hoàn tất đăng nhập" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "完成登录" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "完成登入" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "完成登入" + } + } + } + }, + "Complete sign-in with your second factor" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "أكمل تسجيل الدخول باستخدام العامل الثاني" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Завършете влизането с втория си фактор" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "আপনার দ্বিতীয় ধাপ দিয়ে সাইন-ইন সম্পূর্ণ করুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Completa l'inici de sessió amb el teu segon factor" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dokončete přihlášení pomocí druhého faktoru" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fuldfør login med din anden faktor" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Schließe die Anmeldung mit deinem zweiten Faktor ab" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Schließen Sie die Anmeldung mit Ihrem zweiten Faktor ab" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Schliessen Sie die Anmeldung mit Ihrem zweiten Faktor ab" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ολοκληρώστε τη σύνδεση με τον δεύτερο παράγοντα" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Complete sign-in with your second factor" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Complete sign-in with your second factor" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Complete sign-in with your second factor" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Complete sign-in with your second factor" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Complete sign-in with your second factor" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Complete sign-in with your second factor" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Complete sign-in with your second factor" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Completa el inicio de sesión con tu segundo factor" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ورود را با عامل دوم خود تکمیل کنید" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Viimeistele kirjautuminen toisella varmennusvaiheella" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kumpletuhin ang pag-sign in gamit ang iyong pangalawang factor" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Termine la connexion avec ton deuxième facteur" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminer la connexion avec votre deuxième facteur" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Schliess d'Aamäldig mit dim zweite Faktor ab" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "તમારા બીજા પરિબળ સાથે સાઇન-ઇન પૂર્ણ કરો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "השלם את ההתחברות עם הגורם השני שלך" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "अपने दूसरे कारक के साथ साइन-इन पूरा करें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dovršite prijavu drugim faktorom" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fejezze be a bejelentkezést a második tényezővel" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Selesaikan masuk dengan faktor kedua Anda" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Completa l'accesso con il tuo secondo fattore" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "2つ目の要素でサインインを完了する" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ನಿಮ್ಮ ಎರಡನೇ ಅಂಶದೊಂದಿಗೆ ಸೈನ್-ಇನ್ ಪೂರ್ಣಗೊಳಿಸಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "두 번째 요소로 로그인 완료" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Silisa kokota na faktɛrɛ na yo ya mibale" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pabeidziet pierakstīšanos ar otro faktoru" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "तुमच्या दुसऱ्या घटकासह साइन-इन पूर्ण करा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lengkapkan log masuk dengan faktor kedua anda" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fullfør pålogging med din andre faktor" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voltooi het inloggen met je tweede factor" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fullfør pålogging med din andre faktor" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zakończ logowanie swoim drugim czynnikiem" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Conclua o login com seu segundo fator" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Conclua o login com seu segundo fator" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Conclua o início de sessão com o seu segundo fator" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Finalizați conectarea cu cel de-al doilea factor" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Завершите вход с помощью второго фактора" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dokončite prihlásenie pomocou druhého faktora" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dokončajte prijavo z drugim dejavnikom" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Завршите пријављивање са другим фактором" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Završite prijavljivanje sa drugim faktorom" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slutför inloggningen med din andra faktor" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "உங்கள் இரண்டாவது காரணி மூலம் உள்நுழைவை முடிக்கவும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ลงชื่อเข้าใช้ให้เสร็จสมบูรณ์ด้วยปัจจัยที่สอง" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "İkinci faktörünüzle oturum açmayı tamamlayın" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Завершіть вхід за допомогою другого фактора" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "اپنے دوسرے عنصر کے ساتھ سائن ان مکمل کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hoàn tất đăng nhập bằng yếu tố thứ hai của bạn" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "使用第二步验证完成登录" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "使用您的第二步驟驗證完成登入" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "使用第二步驟驗證完成登入" + } + } + } + }, + "Confirm Email" : { + "extractionState" : "stale", + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Потвърдете имейл" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ইমেইল নিশ্চিত করুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Confirma el correu electrònic" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Potvrzení emailu" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bekræft email" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-Mail bestätigen" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-Mail bestätigen" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Επιβεβαίωση email" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Confirm Email" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Confirm Email" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Confirm Email" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Confirm Email" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Confirm Email" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Confirm Email" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "تأیید ایمیل" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vahvista sähköposti" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kumpirmahin ang Email" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Confirmer l'e-mail" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-Mail bestätige" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "ઇમેઇલની પુષ્ટિ કરો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "אישור דוא״ל" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "ईमेल की पुष्टि करें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Potvrdite email" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-mail megerősítése" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konfirmasi Email" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Conferma email" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "メールアドレスを確認" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಇಮೇಲ್ ದೃಢೀಕರಿಸಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이메일 확인" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ndimisa Email" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apstiprināt e-pastu" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "ईमेलची पुष्टी करा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sahkan E-mel" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bekreft e-post" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bevestig e-mailadres" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stadfest e-post" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Potwierdź adres e-mail" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Confirmar e-mail" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Confirmar e-mail" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Confirmar e-mail" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Confirmați e-mailul" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Подтвердите адрес электронной почты" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Potvrďte e-mail" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Potrdite e-pošto" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Потврди имејл" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Potvrdi imejl" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bekräfta e-post" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "மின்னஞ்சலை உறுதிப்படுத்தவும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ยืนยันอีเมล" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-postayı onayla" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Підтвердьте електронну пошту" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "ای میل کی تصدیق کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xác nhận email" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "确认邮箱" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "確認電子郵件" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "確認電子郵件" + } + } + } + }, + "Confirm Password" : { + "comment" : "Field label for confirming password", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تأكيد كلمة المرور" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Потвърдете парола" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "পাসওয়ার্ড নিশ্চিত করুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Confirma la contrasenya" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Potvrzení hesla" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bekræft adgangskode" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort bestätigen" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort bestätigen" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort bestätigen" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Επιβεβαίωση κωδικού πρόσβασης" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Confirm Password" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Confirm Password" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Confirm Password" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Confirm Password" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Confirm Password" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Confirm Password" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Confirm Password" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Confirmar contraseña" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "تأیید رمز عبور" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vahvista salasana" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kumpirmahin ang Password" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Confirmer le mot de passe" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Confirmer le mot de passe" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort bestätige" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "પાસવર્ડની પુષ્ટિ કરો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "אישור סיסמה" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "पासवर्ड की पुष्टि करें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Potvrdite lozinku" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jelszó megerősítése" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konfirmasi Kata Sandi" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Conferma password" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "パスワードを確認" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಪಾಸ್‌ವರ್ಡ್ ದೃಢೀಕರಿಸಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "비밀번호 확인" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ndimisa Liloba ya Kobombama" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apstiprināt paroli" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "पासवर्डची पुष्टी करा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sahkan Kata Laluan" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bekreft passord" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bevestig wachtwoord" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stadfest passord" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Potwierdź hasło" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Confirmar senha" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Confirmar senha" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Confirmar palavra-passe" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Confirmați parola" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Подтвердите пароль" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Potvrďte heslo" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Potrdite geslo" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Потврди лозинку" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Potvrdi lozinku" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bekräfta lösenord" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "கடவுச்சொல்லை உறுதிப்படுத்தவும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ยืนยันรหัสผ่าน" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Şifreyi onayla" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Підтвердьте пароль" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "پاس ورڈ کی تصدیق کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xác nhận mật khẩu" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "确认密码" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "確認密碼" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "確認密碼" + } + } + } + }, + "ConfirmEmail" : { + "comment" : "Title of confirm email label.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تأكيد البريد الإلكتروني" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-Mail bestätigen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Confirm Email" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Confirmar correo" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Confirmer l'e-mail" + } + } + } + }, + "ConfirmPasswordInputLabel" : { + "comment" : "Input label for confirming password when signing up", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تأكيد كلمة المرور" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort bestätigen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Confirm Password" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Confirmar contraseña" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Confirmer le mot de passe" + } + } + } + }, + "Copied to clipboard!" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تم النسخ إلى الحافظة!" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Копирано в клипборда!" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ক্লিপবোর্ডে কপি হয়েছে!" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copiat al porta-retalls!" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zkopírováno do schránky!" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kopieret til udklipsholder!" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "In die Zwischenablage kopiert!" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "In die Zwischenablage kopiert!" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "In die Zwischenablage kopiert!" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Αντιγράφηκε στο πρόχειρο!" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copied to clipboard!" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copied to clipboard!" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copied to clipboard!" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copied to clipboard!" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copied to clipboard!" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copied to clipboard!" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copied to clipboard!" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "¡Copiado al portapapeles!" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "در کلیپ‌بورد کپی شد!" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kopioitu leikepöydälle!" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kinopya sa clipboard!" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copié dans le presse-papiers !" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copié dans le presse-papiers !" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "I d'Zwüscheoablag kopiert!" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "ક્લિપબોર્ડ પર કૉપિ થયું!" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הועתק ללוח!" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "क्लिपबोर्ड पर कॉपी किया गया!" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kopirano u međuspremnik!" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vágólapra másolva!" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Disalin ke papan klip!" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copiato negli appunti!" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "クリップボードにコピーしました!" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಕ್ಲಿಪ್‌ಬೋರ್ಡ್‌ಗೆ ನಕಲಿಸಲಾಗಿದೆ!" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "클립보드에 복사되었습니다!" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ekopamaki na clipboard!" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nokopēts starpliktuvē!" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "क्लिपबोर्डवर कॉपी केले!" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Disalin ke papan keratan!" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kopiert til utklippstavlen!" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gekopieerd naar klembord!" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kopiert til utklippstavla!" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skopiowano do schowka!" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copiado para a área de transferência!" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copiado para a área de transferência!" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copiado para a área de transferência!" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copiat în clipboard!" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Скопировано в буфер обмена!" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skopírované do schránky!" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kopirano v odložišče!" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Копирано у клипборд!" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kopirano u klipbord!" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kopierat till urklipp!" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "கிளிப்போர்டுக்கு நகலெடுக்கப்பட்டது!" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "คัดลอกไปยังคลิปบอร์ดแล้ว!" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Panoya kopyalandı!" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Скопійовано в буфер обміну!" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "کلپ بورڈ میں کاپی ہو گیا!" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Đã sao chép vào clipboard!" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "已复制到剪贴板!" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "已複製到剪貼簿!" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "已複製到剪貼簿!" + } + } + } + }, + "Create account" : { + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Създаване на акаунт" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "অ্যাকাউন্ট তৈরি করুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Crea un compte" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vytvořit účet" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Opret konto" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konto erstellen" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konto erstellen" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Δημιουργία λογαριασμού" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Create account" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Create account" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Create account" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Create account" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Create account" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Create account" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ایجاد حساب" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Luo tili" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gumawa ng account" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Créer un compte" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konto erstelle" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "એકાઉન્ટ બનાવો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "צור חשבון" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "खाता बनाएं" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kreirajte račun" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fiók létrehozása" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Buat akun" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Crea account" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "アカウントを作成" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಖಾತೆ ರಚಿಸಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "계정 만들기" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kosala kɔnti" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Izveidot kontu" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "खाते तयार करा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cipta akaun" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Opprett konto" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Account aanmaken" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Opprett konto" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Utwórz konto" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Criar conta" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Criar conta" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Criar conta" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Creați cont" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Создать аккаунт" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vytvoriť účet" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ustvari račun" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Направи налог" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Napravi nalog" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skapa konto" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "கணக்கை உருவாக்கவும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "สร้างบัญชี" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hesap oluştur" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Створити обліковий запис" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "اکاؤنٹ بنائیں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tạo tài khoản" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "创建账户" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "建立帳號" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "建立帳號" + } + } + } + }, + "Delete" : { + "comment" : "Text of Delete action button.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "حذف" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Изтриване" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "মুছুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Suprimeix" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Smazat" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slet" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Löschen" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Löschen" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Löschen" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Διαγραφή" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Delete" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Delete" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Delete" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Delete" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Delete" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Delete" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Delete" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eliminar" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "حذف" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poista" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tanggalin" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Supprimer" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Supprimer" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lösche" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "કાઢી નાખો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "מחיקה" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "हटाएं" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Izbriši" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Törlés" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hapus" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Elimina" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "削除" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಅಳಿಸಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "삭제" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Longola" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dzēst" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "हटवा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Padam" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slett" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verwijderen" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slett" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Usuń" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Excluir" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Excluir" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eliminar" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ștergeți" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Удалить" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odstrániť" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Izbriši" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Обриши" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Obriši" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ta bort" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "நீக்கு" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ลบ" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sil" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Видалити" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "حذف کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xóa" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "删除" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "刪除" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "刪除" + } + } + } + }, + "Delete Account" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "حذف الحساب" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Изтриване на акаунт" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "অ্যাকাউন্ট মুছুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Suprimeix el compte" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Smazat účet" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slet konto" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konto löschen" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konto löschen" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konto löschen" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Διαγραφή λογαριασμού" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Delete Account" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Delete Account" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Delete Account" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Delete Account" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Delete Account" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Delete Account" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Delete Account" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eliminar cuenta" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "حذف حساب" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poista tili" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tanggalin ang Account" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Supprimer le compte" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Supprimer le compte" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konto lösche" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "એકાઉન્ટ કાઢી નાખો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "מחיקת חשבון" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "खाता हटाएं" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Izbriši račun" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fiók törlése" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hapus Akun" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Elimina account" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "アカウントを削除" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಖಾತೆ ಅಳಿಸಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "계정 삭제" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Longola Kɔnti" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dzēst kontu" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "खाते हटवा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Padam Akaun" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slett konto" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Account verwijderen" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slett konto" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Usuń konto" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Excluir conta" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Excluir conta" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eliminar conta" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ștergeți contul" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Удалить аккаунт" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odstrániť účet" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Izbriši račun" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Обриши налог" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Obriši nalog" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ta bort konto" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "கணக்கை நீக்கு" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ลบบัญชี" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hesabı sil" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Видалити обліковий запис" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "اکاؤنٹ حذف کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xóa tài khoản" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "删除账户" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "刪除帳號" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "刪除帳號" + } + } + } + }, + "Delete Account?" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "حذف الحساب؟" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Изтриване на акаунт?" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "অ্যাকাউন্ট মুছবেন?" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vols suprimir el compte?" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Smazat účet?" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slet konto?" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konto löschen?" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konto löschen?" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konto löschen?" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Διαγραφή λογαριασμού;" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Delete Account?" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Delete Account?" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Delete Account?" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Delete Account?" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Delete Account?" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Delete Account?" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Delete Account?" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "¿Eliminar cuenta?" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "حساب حذف شود؟" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poistetaanko tili?" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tanggalin ang Account?" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Supprimer le compte ?" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Supprimer le compte ?" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konto lösche?" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "એકાઉન્ટ કાઢી નાખો?" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "למחוק את החשבון?" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "खाता हटाएं?" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Izbrisati račun?" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Törli a fiókot?" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hapus Akun?" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eliminare l'account?" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "アカウントを削除しますか?" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಖಾತೆ ಅಳಿಸುವುದೇ?" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "계정을 삭제하시겠습니까?" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Longola Kɔnti?" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dzēst kontu?" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "खाते हटवायचे आहे का?" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Padam Akaun?" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slette konto?" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Account verwijderen?" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slette konto?" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Usunąć konto?" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Excluir conta?" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Excluir conta?" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eliminar conta?" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ștergeți contul?" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Удалить аккаунт?" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odstrániť účet?" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Izbrisati račun?" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Обрисати налог?" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Obrisati nalog?" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ta bort konto?" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "கணக்கை நீக்க வேண்டுமா?" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ลบบัญชี?" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hesap silinsin mi?" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Видалити обліковий запис?" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "اکاؤنٹ حذف کریں؟" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xóa tài khoản?" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "删除账户?" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "確定要刪除帳號?" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "要刪除帳號嗎?" + } + } + } + }, + "DeleteAccountBody" : { + "comment" : "Alert message body shown to confirm account deletion action.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "سيؤدي هذا إلى مسح جميع البيانات المرتبطة بحسابك، ولا يمكن التراجع عنه. ستحتاج إلى تسجيل الدخول مرة أخرى لإكمال هذا الإجراء" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dies löscht alle mit deinem Konto verbundenen Daten und kann nicht rückgängig gemacht werden. Du musst dich erneut anmelden, um diese Aktion abzuschließen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "This will erase all data associated with your account, and can't be undone You will need to sign in again to complete this action" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Esto borrará todos los datos asociados con tu cuenta y no se puede deshacer. Deberás iniciar sesión nuevamente para completar esta acción" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cela effacera toutes les données associées à ton compte et ne peut pas être annulé. Tu devras te reconnecter pour effectuer cette action" + } + } + } + }, + "DeleteAccountConfirmationMessage" : { + "comment" : "Explanation message shown before deleting account.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "سيؤدي هذا إلى مسح جميع البيانات المرتبطة بحسابك، ولا يمكن التراجع عنه. هل أنت متأكد من رغبتك في حذف حسابك؟" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dies löscht alle mit deinem Konto verbundenen Daten und kann nicht rückgängig gemacht werden. Bist du sicher, dass du dein Konto löschen möchtest?" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "This will erase all data associated with your account, and can't be undone. Are you sure you want to delete your account?" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Esto borrará todos los datos asociados con tu cuenta y no se puede deshacer. ¿Estás seguro de que deseas eliminar tu cuenta?" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cela effacera toutes les données associées à ton compte et ne peut pas être annulé. Es-tu sûr de vouloir supprimer ton compte ?" + } + } + } + }, + "DeleteAccountConfirmationTitle" : { + "comment" : "Alert message title shown to confirm account deletion action.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "حذف الحساب؟" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konto löschen?" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Delete Account?" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "¿Eliminar cuenta?" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Supprimer le compte ?" + } + } + } + }, + "DeleteAccountControllerTitle" : { + "comment" : "Title of Controller shown before deleting account", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "حذف الحساب" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konto löschen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Delete account" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eliminar cuenta" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Supprimer le compte" + } + } + } + }, + "Display Name" : { + "comment" : "Field label for display name", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "الاسم المعروض" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Показвано име" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "প্রদর্শিত নাম" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nom visible" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zobrazované jméno" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Visningsnavn" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anzeigename" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anzeigename" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anzeigename" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Εμφανιζόμενο όνομα" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Display Name" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Display Name" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Display Name" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Display Name" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Display Name" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Display Name" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Display Name" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nombre para mostrar" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "نام نمایشی" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Näyttönimi" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Display Name" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nom affiché" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nom affiché" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aazeigname" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "પ્રદર્શન નામ" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "שם תצוגה" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "प्रदर्शन नाम" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prikazano ime" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Megjelenítendő név" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nama Tampilan" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nome visualizzato" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "表示名" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಪ್ರದರ್ಶನ ಹೆಸರು" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "표시 이름" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nkombo ya Komonisa" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Attēlojamais vārds" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "प्रदर्शन नाव" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nama Paparan" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Visningsnavn" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Weergavenaam" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Visingsnamn" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nazwa wyświetlana" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nome de exibição" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nome de exibição" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nome de apresentação" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nume afișat" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Отображаемое имя" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zobrazované meno" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prikazano ime" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Име за приказ" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ime za prikaz" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Visningsnamn" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "காட்சிப் பெயர்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ชื่อที่แสดง" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Görünen ad" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ім'я для відображення" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "ڈسپلے نام" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tên hiển thị" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "显示名称" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "顯示名稱" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "顯示名稱" + } + } + } + }, + "Don't have an account yet?" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "ليس لديك حساب بعد؟" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Все още нямате акаунт?" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "অ্যাকাউন্ট নেই?" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Encara no tens cap compte?" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nemáte ještě účet?" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Har du ikke en konto endnu?" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hast du noch kein Konto?" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Haben Sie noch kein Konto?" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Haben Sie noch kein Konto?" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Δεν έχετε ακόμα λογαριασμό;" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Don't have an account yet?" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Don't have an account yet?" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Don't have an account yet?" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Don't have an account yet?" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Don't have an account yet?" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Don't have an account yet?" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Don't have an account yet?" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "¿Aún no tienes una cuenta?" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "هنوز حساب ندارید؟" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eikö sinulla ole tiliä?" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wala pang account?" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tu n'as pas encore de compte ?" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vous n'avez pas encore de compte ?" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Häsch no keis Konto?" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "હજી સુધી એકાઉન્ટ નથી?" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "עדיין אין לך חשבון?" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "अभी तक खाता नहीं है?" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Još nemate račun?" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Még nincs fiókja?" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Belum punya akun?" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Non hai ancora un account?" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "まだアカウントをお持ちでないですか?" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಇನ್ನೂ ಖಾತೆ ಇಲ್ಲವೇ?" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "아직 계정이 없으신가요?" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ozali naino na kɔnti te?" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vēl nav konta?" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "अद्याप खाते नाही का?" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Belum mempunyai akaun?" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Har du ikke en konto ennå?" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Heb je nog geen account?" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Har du ikkje ein konto enno?" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nie masz jeszcze konta?" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ainda não tem uma conta?" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ainda não tem uma conta?" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ainda não tem uma conta?" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nu aveți încă un cont?" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Еще нет аккаунта?" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ešte nemáte účet?" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Še nimate računa?" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Још увек немате налог?" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Još uvek nemate nalog?" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Har du inget konto än?" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "இன்னும் கணக்கு இல்லையா?" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ยังไม่มีบัญชี?" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Henüz bir hesabınız yok mu?" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ще немає облікового запису?" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "ابھی تک اکاؤنٹ نہیں ہے؟" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Chưa có tài khoản?" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "还没有账户?" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "還沒有帳號?" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "還沒有帳號?" + } + } + } + }, + "EditEmailTitle" : { + "comment" : "Controller title shown when editing account email. Use short/abbreviated translation for 'email' which is less than 15 chars.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تعديل البريد الإلكتروني" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-Mail bearbeiten" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Edit email" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Editar correo" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Modifier l'e-mail" + } + } + } + }, + "EditNameTitle" : { + "comment" : "Controller title shown when editing account name.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تعديل الاسم" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Name bearbeiten" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Edit name" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Editar nombre" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Modifier le nom" + } + } + } + }, + "EditPasswordAlertMessage" : { + "comment" : "Alert message shown when editing account password.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "لتغيير كلمة مرور حسابك، ستحتاج إلى تسجيل الدخول مرة أخرى." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Um das Passwort deines Kontos zu ändern, musst du dich erneut anmelden." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "To change password to your account, you will need to sign in again." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Para cambiar la contraseña de tu cuenta, deberás iniciar sesión nuevamente." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pour modifier le mot de passe de ton compte, tu devras te reconnecter." + } + } + } + }, + "Email" : { + "comment" : "Field label for email", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "البريد الإلكتروني" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Имейл" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ইমেইল" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Correu electrònic" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Email" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Email" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-Mail" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-Mail" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-Mail" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Email" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Email" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Email" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Email" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Email" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Email" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Email" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Email" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Correo" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ایمیل" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sähköposti" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Email" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-mail" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-mail" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-Mail" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "ઇમેઇલ" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "דוא״ל" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "ईमेल" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Email" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-mail" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Email" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Email" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "メールアドレス" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಇಮೇಲ್" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이메일" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Email" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-pasts" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "ईमेल" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-mel" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-post" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-mail" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-post" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-mail" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-mail" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-mail" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-mail" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-mail" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Электронная почта" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-mail" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-pošta" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Имејл" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Imejl" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-post" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "மின்னஞ்சல்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "อีเมล" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-posta" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Електронна пошта" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "ای میل" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Email" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "邮箱" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "電子郵件" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "電子郵件" + } + } + } + }, + "Emails don't match" : { + "extractionState" : "stale", + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Имейлите не съвпадат" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ইমেইল মিলছে না" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Els correus electrònics no coincideixen" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Emailové adresy se neshodují" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Emailadresserne stemmer ikke overens" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-Mail-Adressen stimmen nicht überein" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-Mail-Adressen stimmen nicht überein" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Τα emails δεν ταιριάζουν" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Emails don't match" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Emails don't match" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Emails don't match" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Emails don't match" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Emails don't match" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Emails don't match" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ایمیل‌ها مطابقت ندارند" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sähköpostiosoitteet eivät täsmää" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hindi tumutugma ang mga email" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Les e-mails ne correspondent pas" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-Mail-Adresse passe nöd" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "ઇમેઇલ્સ મેળ ખાતા નથી" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "כתובות הדוא״ל אינן תואמות" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "ईमेल मेल नहीं खाते" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Email adrese se ne podudaraju" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Az e-mail címek nem egyeznek" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Email tidak cocok" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Le email non corrispondono" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "メールアドレスが一致しません" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಇಮೇಲ್‌ಗಳು ಹೊಂದಿಕೆಯಾಗುವುದಿಲ್ಲ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이메일이 일치하지 않습니다" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ba-email ekokani te" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-pasti nesakrīt" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "ईमेल जुळत नाहीत" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-mel tidak sepadan" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-postene stemmer ikke overens" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-mailadressen komen niet overeen" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-postane stemmer ikkje overens" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adresy e-mail nie pasują do siebie" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Os e-mails não correspondem" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Os e-mails não correspondem" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Os e-mails não correspondem" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-mailurile nu se potrivesc" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Адреса электронной почты не совпадают" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-maily sa nezhodujú" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-poštna naslova se ne ujemata" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Имејлови се не поклапају" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Imejlovi se ne poklapaju" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-postadresserna matchar inte" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "மின்னஞ்சல்கள் பொருந்தவில்லை" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "อีเมลไม่ตรงกัน" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-postalar eşleşmiyor" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Адреси електронної пошти не збігаються" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "ای میلز مماثل نہیں ہیں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Email không khớp" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "邮箱地址不一致" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "電子郵件地址不一致" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "電子郵件不一致" + } + } + } + }, + "EmailsDontMatch" : { + "comment" : "Error message displayed when after re-authorization current user's email and re-authorized user's email doesn't match. Use short/abbreviated translation for 'email' which is less than 15 chars.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "رسائل البريد الإلكتروني غير متطابقة" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-Mails stimmen nicht überein" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Emails don't match" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Los correos no coinciden" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Les e-mails ne correspondent pas" + } + } + } + }, + "EmailSentConfirmationMessage" : { + "comment" : "Message displayed after email is sent. The placeholder is the email address that the email is sent to.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تم إرسال بريد إلكتروني لتسجيل الدخول مع تعليمات إضافية إلى %@. تحقق من بريدك الإلكتروني لإكمال تسجيل الدخول." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eine Anmelde-E-Mail mit zusätzlichen Anweisungen wurde an %@ gesendet. Überprüfe deine E-Mails, um die Anmeldung abzuschließen." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "A sign-in email with additional instructions was sent to %@. Check your email to complete sign-in." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se envió un correo de inicio de sesión con instrucciones adicionales a %@. Revisa tu correo para completar el inicio de sesión." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Un e-mail de connexion avec des instructions supplémentaires a été envoyé à %@. Vérifie tes e-mails pour terminer la connexion." + } + } + } + }, + "Enrolled Methods" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "الطرق المسجلة" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Регистрирани методи" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "নিবন্ধিত পদ্ধতি" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mètodes registrats" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registrované metody" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registrerede metoder" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registrierte Methoden" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registrierte Methoden" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registrierte Methoden" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Εγγεγραμμένες μέθοδοι" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enrolled Methods" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enrolled Methods" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enrolled Methods" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enrolled Methods" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enrolled Methods" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enrolled Methods" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enrolled Methods" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Métodos registrados" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "روش‌های ثبت شده" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Käytössä olevat menetelmät" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Naka-enroll na mga Paraan" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Méthodes inscrites" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Méthodes enregistrées" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registrierti Methode" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "નોંધાયેલી પદ્ધતિઓ" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "שיטות רשומות" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "नामांकित विधियां" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registrirane metode" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Regisztrált módszerek" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Metode Terdaftar" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Metodi registrati" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "登録済みの方法" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ನೋಂದಾಯಿಸಲಾದ ವಿಧಾನಗಳು" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "등록된 방법" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ndenge ya Kokoma" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reģistrētās metodes" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "नोंदणीकृत पद्धती" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kaedah Berdaftar" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registrerte metoder" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geregistreerde methoden" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registrerte metodar" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zarejestrowane metody" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Métodos registrados" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Métodos cadastrados" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Métodos registados" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Metode înregistrate" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Зарегистрированные методы" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zaregistrované metódy" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registrirane metode" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Регистровани методи" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registrovani metodi" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registrerade metoder" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "பதிவு செய்யப்பட்ட முறைகள்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "วิธีที่ลงทะเบียนแล้ว" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kayıtlı yöntemler" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Зареєстровані методи" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "اندراج شدہ طریقے" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Phương thức đã đăng ký" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "已注册方式" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "已註冊方式" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "已註冊方式" + } + } + } + }, + "Enrolled: %@" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "مسجل: %@" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Регистрирано: %@" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "নিবন্ধিত: %@" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registrat: %@" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registrováno: %@" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registreret: %@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registriert: %@" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registriert: %@" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registriert: %@" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Εγγεγραμμένη: %@" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enrolled: %@" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enrolled: %@" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enrolled: %@" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enrolled: %@" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enrolled: %@" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enrolled: %@" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enrolled: %@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registrado: %@" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ثبت شده: %@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Käytössä: %@" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Naka-enroll: %@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inscrit : %@" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enregistré : %@" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registriert: %@" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "નોંધાયેલ: %@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "רשום: %@" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "नामांकित: %@" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registrirano: %@" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Regisztrálva: %@" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terdaftar: %@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registrato: %@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "登録済み: %@" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ನೋಂದಾಯಿಸಲಾಗಿದೆ: %@" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "등록됨: %@" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ekomi: %@" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reģistrēts: %@" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "नोंदणीकृत: %@" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Berdaftar: %@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registrert: %@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geregistreerd: %@" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registrert: %@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zarejestrowano: %@" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registrado: %@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cadastrado: %@" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registado: %@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Înregistrat: %@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Зарегистрировано: %@" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zaregistrované: %@" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registrirano: %@" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Регистровано: %@" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registrovano: %@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registrerad: %@" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "பதிவு செய்யப்பட்டது: %@" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ลงทะเบียนแล้ว: %@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kayıtlı: %@" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Зареєстровано: %@" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "اندراج شدہ: %@" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Đã đăng ký: %@" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "已注册:%@" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "已註冊:%@" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "已註冊:%@" + } + } + } + }, + "Enter 6-digit code" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "أدخل الرمز المكون من 6 أرقام" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Въведете 6-цифрен код" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "৬-সংখ্যার কোড লিখুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Introdueix el codi de 6 dígits" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zadejte 6místný kód" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Indtast 6-cifret kode" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "6-stelligen Code eingeben" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "6-stelligen Code eingeben" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "6-stelligen Code eingeben" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Εισαγάγετε τον κωδικό 6 ψηφίων" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter 6-digit code" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter 6-digit code" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter 6-digit code" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter 6-digit code" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter 6-digit code" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter 6-digit code" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter 6-digit code" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingresa el código de 6 dígitos" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "کد ۶ رقمی را وارد کنید" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Syötä 6-numeroinen koodi" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ilagay ang 6-digit na code" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Saisis le code à 6 chiffres" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Saisissez le code à 6 chiffres" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "6-stellige Code iigäh" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "6-અંકનો કોડ દાખલ કરો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הזן קוד בן 6 ספרות" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "6 अंकों का कोड डालें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unesite 6-znamenkasti kod" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adja meg a 6 számjegyű kódot" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Masukkan kode 6 digit" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inserisci il codice a 6 cifre" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "6桁のコードを入力" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "6-ಅಂಕಿಯ ಕೋಡ್ ನಮೂದಿಸಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "6자리 코드 입력" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kotisa kode ya banimɛrɔ 6" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ievadiet 6 ciparu kodu" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "6-अंकी कोड एंटर करा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Masukkan kod 6 digit" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skriv inn 6-sifret kode" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voer de 6-cijferige code in" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skriv inn 6-sifra kode" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wprowadź 6-cyfrowy kod" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Digite o código de 6 dígitos" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Digite o código de 6 dígitos" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Introduza o código de 6 dígitos" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Introduceți codul de 6 cifre" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Введите 6-значный код" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zadajte 6-ciferný kód" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vnesite 6-mestno kodo" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Унесите 6-цифрени код" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unesite 6-cifreni kod" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ange 6-siffrig kod" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "6 இலக்க குறியீட்டை உள்ளிடவும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ใส่รหัส 6 หลัก" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "6 haneli kodu girin" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Введіть 6-значний код" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "6 ہندسوں کا کوڈ درج کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nhập mã 6 chữ số" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "输入 6 位验证码" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "輸入 6 位驗證碼" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "輸入 6 位數驗證碼" + } + } + } + }, + "Enter code from app" : { + "comment" : "Prompt for entering code from authenticator app", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "أدخل الرمز من التطبيق" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Въведете кода от приложението" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "অ্যাপ থেকে কোড লিখুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Introdueix el codi de l'aplicació" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zadejte kód z aplikace" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Indtast koden fra appen" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Code aus der App eingeben" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Code aus der App eingeben" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Code aus der App eingeben" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Εισαγάγετε τον κωδικό από την εφαρμογή" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter code from app" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter code from app" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter code from app" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter code from app" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter code from app" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter code from app" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter code from app" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingresa el código de la aplicación" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "کد را از برنامه وارد کنید" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Syötä sovelluksen koodi" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ilagay ang code mula sa app" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Saisis le code de l'application" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Saisissez le code de l'application" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Code us de App iigäh" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "એપમાંથી કોડ દાખલ કરો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הזן קוד מהאפליקציה" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "ऐप से कोड डालें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unesite kod iz aplikacije" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adja meg az alkalmazásból származó kódot" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Masukkan kode dari aplikasi" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inserisci il codice dall'app" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "アプリからコードを入力" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಆ್ಯಪ್‌ನಿಂದ ಕೋಡ್ ನಮೂದಿಸಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "앱에서 코드 입력" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kotisa kode uta na aplikasyo" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ievadiet kodu no lietotnes" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "अॅपमधून कोड एंटर करा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Masukkan kod daripada aplikasi" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skriv inn kode fra appen" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voer de code uit de app in" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skriv inn kode frå appen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wprowadź kod z aplikacji" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Digite o código do aplicativo" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Digite o código do app" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Introduza o código da aplicação" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Introduceți codul din aplicație" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Введите код из приложения" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zadajte kód z aplikácie" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vnesite kodo iz aplikacije" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Унесите код из апликације" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unesite kod iz aplikacije" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ange kod från appen" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "செயலியிலிருந்து குறியீட்டை உள்ளிடவும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ใส่รหัสจากแอป" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uygulamadan kodu girin" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Введіть код із програми" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "ایپ سے کوڈ درج کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nhập mã từ ứng dụng" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "输入应用中的验证码" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "輸入應用程式中的驗證碼" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "輸入 App 裡的驗證碼" + } + } + } + }, + "Enter display name for this authenticator" : { + "comment" : "Prompt for entering display name for authenticator", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "أدخل الاسم المعروض لهذا المصادق" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Въведете показвано име за този удостоверител" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "এই অথেন্টিকেটরের জন্য প্রদর্শনের নাম লিখুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Introdueix el nom visible per a aquest autenticador" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zadejte zobrazované jméno pro tento autentikátor" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Indtast visningsnavn for denne godkender" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anzeigename für diesen Authentifikator eingeben" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geben Sie einen Anzeigenamen für diesen Authentifikator ein" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geben Sie einen Anzeigenamen für diesen Authentifikator ein" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Εισαγάγετε εμφανιζόμενο όνομα για αυτόν τον έλεγχο ταυτότητας" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter display name for this authenticator" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter display name for this authenticator" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter display name for this authenticator" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter display name for this authenticator" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter display name for this authenticator" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter display name for this authenticator" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter display name for this authenticator" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingresa el nombre para mostrar de este autenticador" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "نام نمایشی برای این احراز هویت را وارد کنید" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anna autentikaattorille näyttönimi" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ilagay ang display name para sa authenticator na ito" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Saisis le nom affiché pour cet authentificateur" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Saisissez le nom affiché pour cet authentificateur" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gib en Aazeigname für dä Authentifikator ii" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "આ પ્રમાણીકરણ માટે પ્રદર્શન નામ દાખલ કરો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הזן שם תצוגה עבור מאמת זה" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "इस प्रमाणक के लिए प्रदर्शन नाम दर्ज करें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unesite prikazano ime za ovaj autentifikator" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adja meg a megjelenítendő nevet ehhez a hitelesítőhöz" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Masukkan nama tampilan untuk autentikator ini" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inserisci il nome visualizzato per questo autenticatore" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "この認証システムの表示名を入力" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಈ ದೃಢೀಕರಣಕ್ಕಾಗಿ ಪ್ರದರ್ಶನ ಹೆಸರನ್ನು ನಮೂದಿಸಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이 인증자의 표시 이름 입력" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kotisa nkombo ya komonisa mpo na oyo ya kondimisa" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ievadiet attēlojamo vārdu šim autentifikatoram" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "या प्रमाणीकरणासाठी प्रदर्शन नाव एंटर करा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Masukkan nama paparan untuk pengesah ini" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skriv inn visningsnavn for denne autentiseringen" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voer een weergavenaam in voor deze authenticator" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skriv inn visingsnamn for denne autentiseringa" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wprowadź nazwę wyświetlaną dla tego uwierzytelniania" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Digite o nome de exibição para este autenticador" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Digite o nome de exibição para este autenticador" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Introduza o nome de apresentação para este autenticador" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Introduceți numele afișat pentru acest autentificator" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Введите отображаемое имя для этого аутентификатора" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zadajte zobrazované meno pre tento overovateľ" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vnesite prikazano ime za ta overjevalnik" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Унесите име за приказ за овај аутентификатор" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unesite ime za prikaz za ovaj autentifikator" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ange visningsnamn för denna autentiserare" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "இந்த அங்கீகரிப்பாளருக்கான காட்சிப் பெயரை உள்ளிடவும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ใส่ชื่อที่แสดงสำหรับตัวตรวจสอบสิทธิ์นี้" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bu kimlik doğrulayıcı için görünen ad girin" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Введіть ім'я для відображення для цього автентифікатора" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "اس تصدیق کار کے لیے ڈسپلے نام درج کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nhập tên hiển thị cho trình xác thực này" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "为此验证器输入显示名称" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "為此驗證器輸入顯示名稱" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "請輸入此驗證器的顯示名稱" + } + } + } + }, + "Enter display name for this device" : { + "comment" : "Prompt for entering display name for device", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "أدخل الاسم المعروض لهذا الجهاز" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Въведете показвано име за това устройство" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "এই ডিভাইসের জন্য প্রদর্শনের নাম লিখুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Introdueix el nom visible per a aquest dispositiu" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zadejte zobrazované jméno tohoto zařízení" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Indtast visningsnavn for denne enhed" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anzeigename für dieses Gerät eingeben" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geben Sie einen Anzeigenamen für dieses Gerät ein" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geben Sie einen Anzeigenamen für dieses Gerät ein" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Εισαγάγετε εμφανιζόμενο όνομα για αυτή τη συσκευή" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter display name for this device" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter display name for this device" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter display name for this device" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter display name for this device" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter display name for this device" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter display name for this device" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter display name for this device" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingresa el nombre para mostrar de este dispositivo" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "نام نمایشی برای این دستگاه را وارد کنید" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anna tälle laitteelle näyttönimi" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ilagay ang display name para sa device na ito" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Saisis le nom affiché pour cet appareil" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Saisissez le nom affiché pour cet appareil" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gib en Aazeigname für das Gerät ii" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "આ ડિવાઇસ માટે પ્રદર્શન નામ દાખલ કરો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הזן שם תצוגה עבור מכשיר זה" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "इस डिवाइस के लिए प्रदर्शन नाम दर्ज करें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unesite prikazano ime za ovaj uređaj" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adja meg a megjelenítendő nevet ehhez az eszközhöz" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Masukkan nama tampilan untuk perangkat ini" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inserisci il nome visualizzato per questo dispositivo" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "このデバイスの表示名を入力" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಈ ಸಾಧನಕ್ಕಾಗಿ ಪ್ರದರ್ಶನ ಹೆಸರನ್ನು ನಮೂದಿಸಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이 기기의 표시 이름 입력" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kotisa nkombo ya komonisa mpo na aparɛyi oyo" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ievadiet attēlojamo vārdu šai ierīcei" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "या डिव्हाइससाठी प्रदर्शन नाव एंटर करा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Masukkan nama paparan untuk peranti ini" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skriv inn visningsnavn for denne enheten" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voer een weergavenaam in voor dit apparaat" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skriv inn visingsnamn for denne eininga" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wprowadź nazwę wyświetlaną dla tego urządzenia" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Digite o nome de exibição para este dispositivo" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Digite o nome de exibição para este dispositivo" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Introduza o nome de apresentação para este dispositivo" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Introduceți numele afișat pentru acest dispozitiv" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Введите отображаемое имя для этого устройства" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zadajte zobrazované meno pre toto zariadenie" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vnesite prikazano ime za to napravo" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Унесите име за приказ за овај уређај" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unesite ime za prikaz za ovaj uređaj" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ange visningsnamn för denna enhet" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "இந்த சாதனத்திற்கான காட்சிப் பெயரை உள்ளிடவும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ใส่ชื่อที่แสดงสำหรับอุปกรณ์นี้" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bu cihaz için görünen ad girin" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Введіть ім'я для відображення для цього пристрою" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "اس ڈیوائس کے لیے ڈسپلے نام درج کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nhập tên hiển thị cho thiết bị này" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "为此设备输入显示名称" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "為此裝置輸入顯示名稱" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "請輸入此裝置的顯示名稱" + } + } + } + }, + "Enter phone number" : { + "comment" : "Prompt for entering phone number", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "أدخل رقم الهاتف" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Въведете телефонен номер" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ফোন নম্বর লিখুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Introdueix el número de telèfon" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zadejte telefonní číslo" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Indtast telefonnummer" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telefonnummer eingeben" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telefonnummer eingeben" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telefonnummer eingeben" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Εισαγάγετε αριθμό τηλεφώνου" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter phone number" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter phone number" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter phone number" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter phone number" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter phone number" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter phone number" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter phone number" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingresa el número de teléfono" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "شماره تلفن را وارد کنید" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Syötä puhelinnumero" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ilagay ang numero ng telepono" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Saisis le numéro de téléphone" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Saisissez le numéro de téléphone" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telefonnummere iigäh" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "ફોન નંબર દાખલ કરો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הזן מספר טלפון" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "फ़ोन नंबर दर्ज करें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unesite broj telefona" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adja meg a telefonszámot" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Masukkan nomor telepon" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inserisci il numero di telefono" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "電話番号を入力" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ದೂರವಾಣಿ ಸಂಖ್ಯೆ ನಮೂದಿಸಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "전화번호 입력" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kotisa nimero ya telefone" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ievadiet tālruņa numuru" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "फोन नंबर एंटर करा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Masukkan nombor telefon" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skriv inn telefonnummer" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voer je telefoonnummer in" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skriv inn telefonnummer" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wprowadź numer telefonu" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Digite o número de telefone" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Digite o número de telefone" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Introduza o número de telefone" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Introduceți numărul de telefon" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Введите номер телефона" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zadajte telefónne číslo" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vnesite telefonsko številko" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Унесите број телефона" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unesite broj telefona" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ange telefonnummer" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "தொலைபேசி எண்ணை உள்ளிடவும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ใส่หมายเลขโทรศัพท์" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telefon numarası girin" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Введіть номер телефону" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "فون نمبر درج کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nhập số điện thoại" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "输入手机号" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "輸入電話號碼" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "輸入電話號碼" + } + } + } + }, + "Enter the 6-digit code from your authenticator app" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "أدخل الرمز المكون من 6 أرقام من تطبيق المصادقة الخاص بك" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Въведете 6-цифрения код от приложението за удостоверяване" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "আপনার অথেন্টিকেটর অ্যাপ থেকে ৬-সংখ্যার কোড লিখুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Introdueix el codi de 6 dígits de la teva aplicació d'autenticació" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zadejte 6místný kód z vaší autentikační aplikace" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Indtast den 6-cifrede kode fra din autentifikationsapp" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gib den 6-stelligen Code aus deiner Authentifizierungs-App ein" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geben Sie den 6-stelligen Code aus Ihrer Authentifizierungs-App ein" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geben Sie den 6-stelligen Code aus Ihrer Authentifizierungs-App ein" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Εισαγάγετε τον κωδικό 6 ψηφίων από την εφαρμογή ελέγχου ταυτότητας" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter the 6-digit code from your authenticator app" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter the 6-digit code from your authenticator app" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter the 6-digit code from your authenticator app" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter the 6-digit code from your authenticator app" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter the 6-digit code from your authenticator app" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter the 6-digit code from your authenticator app" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter the 6-digit code from your authenticator app" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingresa el código de 6 dígitos de tu aplicación de autenticación" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "کد ۶ رقمی از برنامه احراز هویت خود را وارد کنید" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Syötä autentikaatiosovelluksen 6-numeroinen koodi" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ilagay ang 6-digit na code mula sa iyong authenticator app" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Saisis le code à 6 chiffres de ton application d'authentification" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Saisissez le code à 6 chiffres de votre application d'authentification" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gib de 6-stellig Code us dinere Authentifizierigs-App ii" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "તમારી પ્રમાણીકરણ એપમાંથી 6-અંકનો કોડ દાખલ કરો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הזן את הקוד בן 6 הספרות מאפליקציית האימות שלך" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "अपने प्रमाणक ऐप से 6 अंकों का कोड दर्ज करें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unesite 6-znamenkasti kod iz vaše aplikacije za autentifikaciju" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adja meg a 6 számjegyű kódot a hitelesítő alkalmazásból" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Masukkan kode 6 digit dari aplikasi autentikator Anda" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inserisci il codice a 6 cifre dalla tua app di autenticazione" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "認証アプリから6桁のコードを入力してください" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ನಿಮ್ಮ ದೃಢೀಕರಣ ಆ್ಯಪ್‌ನಿಂದ 6-ಅಂಕಿಯ ಕೋಡ್ ನಮೂದಿಸಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "인증 앱에서 6자리 코드를 입력하세요" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kotisa kode ya banimɛrɔ 6 uta na aplikasyo na yo ya kondimisa" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ievadiet 6 ciparu kodu no savas autentifikācijas lietotnes" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "तुमच्या प्रमाणीकरण अॅपमधून 6-अंकी कोड एंटर करा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Masukkan kod 6 digit daripada aplikasi pengesah anda" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skriv inn den 6-sifrede koden fra autentiseringsappen din" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voer de 6-cijferige code uit je authenticator-app in" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skriv inn den 6-sifra koden frå autentiseringsappen din" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wprowadź 6-cyfrowy kod z aplikacji uwierzytelniającej" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Digite o código de 6 dígitos do seu aplicativo autenticador" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Digite o código de 6 dígitos do seu app autenticador" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Introduza o código de 6 dígitos da sua aplicação de autenticação" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Introduceți codul de 6 cifre din aplicația dvs. de autentificare" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Введите 6-значный код из вашего приложения для аутентификации" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zadajte 6-ciferný kód z vašej aplikácie na overovanie" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vnesite 6-mestno kodo iz aplikacije za preverjanje pristnosti" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Унесите 6-цифрени код из ваше апликације за аутентификацију" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unesite 6-cifreni kod iz vaše aplikacije za autentifikaciju" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ange den 6-siffriga koden från din autentiseringsapp" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "உங்கள் அங்கீகரிப்பு செயலியிலிருந்து 6 இலக்க குறியீட்டை உள்ளிடவும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ใส่รหัส 6 หลักจากแอปตรวจสอบสิทธิ์ของคุณ" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kimlik doğrulayıcı uygulamanızdan 6 haneli kodu girin" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Введіть 6-значний код із вашої програми автентифікації" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "اپنی تصدیقی ایپ سے 6 ہندسوں کا کوڈ درج کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nhập mã 6 chữ số từ ứng dụng xác thực của bạn" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "请输入身份验证器应用中的 6 位验证码" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "請輸入驗證器應用程式中的 6 位驗證碼" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "請輸入驗證器 App 提供的 6 位數驗證碼" + } + } + } + }, + "Enter Verification Code" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "أدخل رمز التحقق" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Въведете код за проверка" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "যাচাইকরণ কোড লিখুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Introdueix el codi de verificació" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zadejte ověřovací kód" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Indtast bekræftelseskode" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bestätigungscode eingeben" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verifizierungscode eingeben" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verifizierungscode eingeben" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Εισαγάγετε τον κωδικό επαλήθευσης" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter Verification Code" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter Verification Code" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter Verification Code" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter Verification Code" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter Verification Code" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter Verification Code" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter Verification Code" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingresa el código de verificación" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "کد تأیید را وارد کنید" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Syötä vahvistuskoodi" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ilagay ang Verification Code" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Saisis le code de vérification" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Saisissez le code de vérification" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verifizierigscode iigäh" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "ચકાસણી કોડ દાખલ કરો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הזן קוד אימות" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "सत्यापन कोड दर्ज करें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unesite verifikacijski kod" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adja meg az ellenőrző kódot" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Masukkan Kode Verifikasi" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inserisci il codice di verifica" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "確認コードを入力" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಪರಿಶೀಲನಾ ಕೋಡ್ ನಮೂದಿಸಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "확인 코드 입력" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kotisa Kode ya Kondimisa" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ievadiet verifikācijas kodu" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "पडताळणी कोड एंटर करा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Masukkan Kod Pengesahan" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skriv inn bekreftelseskode" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voer verificatiecode in" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skriv inn stadfestingskode" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wprowadź kod weryfikacyjny" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Digite o código de verificação" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Digite o código de verificação" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Introduza o código de verificação" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Introduceți codul de verificare" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Введите код подтверждения" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zadajte overovací kód" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vnesite potrditveno kodo" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Унесите верификациони код" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unesite verifikacioni kod" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ange verifieringskod" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "சரிபார்ப்பு குறியீட்டை உள்ளிடவும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ใส่รหัสยืนยัน" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Doğrulama kodunu girin" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Введіть код перевірки" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "تصدیقی کوڈ درج کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nhập mã xác minh" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "输入验证码" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "輸入驗證碼" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "輸入驗證碼" + } + } + } + }, + "Enter your email" : { + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Въведете своя имейл" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "আপনার ইমেইল লিখুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Introdueix el teu correu electrònic" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zadejte svůj email" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Indtast din email" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geben Sie Ihre E-Mail-Adresse ein" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geben Sie Ihre E-Mail-Adresse ein" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Εισαγάγετε το email σας" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter your email" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter your email" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter your email" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter your email" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter your email" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter your email" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ایمیل خود را وارد کنید" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Syötä sähköpostiosoitteesi" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ilagay ang iyong email" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Saisissez votre e-mail" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gib dini E-Mail-Adresse ii" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "તમારો ઇમેઇલ દાખલ કરો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הזן את כתובת הדוא״ל שלך" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "अपना ईमेल दर्ज करें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unesite svoj email" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adja meg az e-mail címét" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Masukkan email Anda" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inserisci la tua email" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "メールアドレスを入力" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ನಿಮ್ಮ ಇಮೇಲ್ ನಮೂದಿಸಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이메일을 입력하세요" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kotisa email na yo" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ievadiet savu e-pastu" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "तुमचा ईमेल एंटर करा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Masukkan e-mel anda" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skriv inn e-postadressen din" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voer je e-mail in" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skriv inn e-postadressa di" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wprowadź swój adres e-mail" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Digite seu e-mail" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Digite seu e-mail" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Introduza o seu e-mail" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Introduceți e-mailul dvs." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Введите вашу электронную почту" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zadajte váš e-mail" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vnesite svoj e-poštni naslov" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Унесите ваш имејл" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unesite vaš imejl" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ange din e-post" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "உங்கள் மின்னஞ்சலை உள்ளிடவும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ใส่อีเมลของคุณ" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-postanızı girin" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Введіть вашу електронну пошту" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "اپنی ای میل درج کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nhập email của bạn" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "输入您的邮箱" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "輸入您的電子郵件" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "輸入您的電子郵件" + } + } + } + }, + "Enter your password" : { + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Въведете своята парола" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "আপনার পাসওয়ার্ড লিখুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Introdueix la teva contrasenya" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zadejte své heslo" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Indtast din adgangskode" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geben Sie Ihr Passwort ein" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geben Sie Ihr Passwort ein" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Εισαγάγετε τον κωδικό πρόσβασης σας" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter your password" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter your password" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter your password" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter your password" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter your password" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter your password" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "رمز عبور خود را وارد کنید" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Syötä salasanasi" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ilagay ang iyong password" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Saisissez votre mot de passe" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gib dis Passwort ii" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "તમારો પાસવર્ડ દાખલ કરો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הזן את הסיסמה שלך" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "अपना पासवर्ड दर्ज करें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unesite svoju lozinku" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adja meg a jelszavát" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Masukkan kata sandi Anda" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inserisci la tua password" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "パスワードを入力" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್ ನಮೂದಿಸಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "비밀번호를 입력하세요" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kotisa liloba na yo ya kobombama" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ievadiet savu paroli" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "तुमचा पासवर्ड एंटर करा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Masukkan kata laluan anda" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skriv inn passordet ditt" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voer je wachtwoord in" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skriv inn passordet ditt" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wprowadź swoje hasło" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Digite sua senha" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Digite sua senha" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Introduza a sua palavra-passe" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Introduceți parola dvs." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Введите ваш пароль" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zadajte vaše heslo" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vnesite svoje geslo" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Унесите вашу лозинку" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unesite vašu lozinku" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ange ditt lösenord" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "உங்கள் கடவுச்சொல்லை உள்ளிடவும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ใส่รหัสผ่านของคุณ" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Şifrenizi girin" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Введіть ваш пароль" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "اپنا پاس ورڈ درج کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nhập mật khẩu của bạn" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "输入您的密码" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "輸入您的密碼" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "輸入您的密碼" + } + } + } + }, + "Enter Your Phone Number" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "أدخل رقم هاتفك" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Въведете телефонния си номер" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "আপনার ফোন নম্বর লিখুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Introdueix el teu número de telèfon" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zadejte své telefonní číslo" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Indtast dit telefonnummer" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gib deine Telefonnummer ein" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geben Sie Ihre Telefonnummer ein" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geben Sie Ihre Telefonnummer ein" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Εισαγάγετε τον αριθμό τηλεφώνου σας" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter Your Phone Number" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter Your Phone Number" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter Your Phone Number" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter Your Phone Number" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter Your Phone Number" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter Your Phone Number" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter Your Phone Number" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingresa tu número de teléfono" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "شماره تلفن خود را وارد کنید" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Syötä puhelinnumerosi" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ilagay ang Iyong Numero ng Telepono" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Saisis ton numéro de téléphone" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Saisissez votre numéro de téléphone" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gib dini Telefonnummere ii" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "તમારો ફોન નંબર દાખલ કરો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הזן את מספר הטלפון שלך" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "अपना फ़ोन नंबर दर्ज करें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unesite svoj broj telefona" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adja meg a telefonszámát" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Masukkan Nomor Telepon Anda" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inserisci il tuo numero di telefono" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "電話番号を入力してください" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ನಿಮ್ಮ ದೂರವಾಣಿ ಸಂಖ್ಯೆ ನಮೂದಿಸಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "전화번호를 입력하세요" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kotisa Nimero na Yo ya Telefone" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ievadiet savu tālruņa numuru" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "तुमचा फोन नंबर एंटर करा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Masukkan Nombor Telefon Anda" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skriv inn telefonnummeret ditt" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voer je telefoonnummer in" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skriv inn telefonnummeret ditt" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wprowadź swój numer telefonu" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Digite seu número de telefone" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Digite seu número de telefone" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Introduza o seu número de telefone" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Introduceți numărul dvs. de telefon" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Введите ваш номер телефона" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zadajte vaše telefónne číslo" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vnesite svojo telefonsko številko" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Унесите ваш број телефона" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unesite vaš broj telefona" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ange ditt telefonnummer" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "உங்கள் தொலைபேசி எண்ணை உள்ளிடவும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ใส่หมายเลขโทรศัพท์ของคุณ" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telefon numaranızı girin" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Введіть ваш номер телефону" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "اپنا فون نمبر درج کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nhập số điện thoại của bạn" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "输入您的手机号" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "輸入您的電話號碼" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "輸入您的電話號碼" + } + } + } + }, + "EnterYourEmail" : { + "comment" : "Title for email entry screen, email text field placeholder. Use short/abbreviated translation for 'email' which is less than 15 chars.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "أدخل بريدك الإلكتروني" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gib deine E-Mail ein" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter your email" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingresa tu correo" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Saisis ton e-mail" + } + } + } + }, + "EnterYourPassword" : { + "comment" : "Password text field placeholder.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "أدخل كلمة المرور" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gib dein Passwort ein" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter your password" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingresa tu contraseña" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Saisis ton mot de passe" + } + } + } + }, + "Error" : { + "comment" : "Alert title Error.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "خطأ" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Грешка" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ত্রুটি" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Error" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Chyba" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fejl" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fehler" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fehler" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fehler" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Σφάλμα" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Error" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Error" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Error" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Error" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Error" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Error" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Error" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Error" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "خطا" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Virhe" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Error" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Erreur" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Erreur" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fähler" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "ભૂલ" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "שגיאה" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "त्रुटि" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Greška" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hiba" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kesalahan" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Errore" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "エラー" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ದೋಷ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "오류" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Libunga" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kļūda" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "त्रुटी" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ralat" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Feil" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fout" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Feil" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Błąd" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Erro" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Erro" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Erro" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eroare" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ошибка" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Chyba" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Napaka" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Грешка" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Greška" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fel" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "பிழை" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ข้อผิดพลาด" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hata" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Помилка" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "خرابی" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lỗi" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "错误" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "錯誤" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "錯誤" + } + } + } + }, + "ExistingAccountTitle" : { + "comment" : "Title of an alert shown to an existing user coming back to the app.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "لديك حساب بالفعل" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du hast bereits ein Konto" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "You already have an account" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ya tienes una cuenta" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tu as déjà un compte" + } + } + } + }, + "Facebook" : { + "extractionState" : "stale", + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ফেসবুক" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + } + } + }, + "First & last name" : { + "extractionState" : "stale", + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Име и фамилия" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "নামের প্রথম ও শেষ অংশ" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nom i cognoms" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jméno a příjmení" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fornavn og efternavn" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vor- und Nachname" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vor- und Nachname" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Όνομα και επώνυμο" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "First & last name" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "First & last name" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "First & last name" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "First & last name" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "First & last name" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "First & last name" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "نام و نام خانوادگی" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etunimi ja sukunimi" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pangalan at apelyido" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prénom et nom" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vor- und Nachname" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "પ્રથમ અને છેલ્લું નામ" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "שם פרטי ושם משפחה" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "पहला और अंतिम नाम" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ime i prezime" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kereszt- és vezetéknév" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nama depan & belakang" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nome e cognome" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "姓名" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಮೊದಲ ಮತ್ತು ಕೊನೆಯ ಹೆಸರು" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이름 및 성" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nkombo ya liboso ná ya suka" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vārds un uzvārds" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "पहिले आणि आडनाव" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nama pertama & akhir" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "For- og etternavn" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voor- en achternaam" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "For- og etternamn" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Imię i nazwisko" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nome e sobrenome" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nome e sobrenome" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nome próprio e apelido" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prenume și nume" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Имя и фамилия" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Meno a priezvisko" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ime in priimek" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Име и презиме" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ime i prezime" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "För- och efternamn" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "முதல் மற்றும் கடைசி பெயர்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ชื่อและนามสกุล" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ad ve soyad" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ім'я та прізвище" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "پہلا اور آخری نام" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Họ và tên" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "姓名" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "姓名" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "姓名" + } + } + } + }, + "FirstAndLastName" : { + "comment" : "Name text field placeholder.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "الاسم الأول والأخير" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vor- und Nachname" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "First & last name" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nombre y apellido" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prénom et nom" + } + } + } + }, + "Follow the instructions sent to %@ to recover your password." : { + "extractionState" : "stale", + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Следвайте инструкциите, изпратени до %@, за да възстановите паролата си." + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ এ পাঠানো নির্দেশনা অনুসরণ করে আপনার পাসওয়ার্ড পুনরুদ্ধার করুন।" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Segueix les instruccions enviades a %@ per recuperar la teva contrasenya." + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Postupujte podle instrukcí zaslaných na %@ pro obnovení hesla." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Følg instruktionerne sendt til %@ for at gendanne din adgangskode." + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Folgen Sie den Anweisungen, die an %@ gesendet wurden, um Ihr Passwort wiederherzustellen." + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Folgen Sie den Anweisungen, die an %@ gesendet wurden, um Ihr Passwort wiederherzustellen." + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ακολουθήστε τις οδηγίες που στάλθηκαν στο %@ για να ανακτήσετε τον κωδικό πρόσβασής σας." + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Follow the instructions sent to %@ to recover your password." + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Follow the instructions sent to %@ to recover your password." + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Follow the instructions sent to %@ to recover your password." + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Follow the instructions sent to %@ to recover your password." + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Follow the instructions sent to %@ to recover your password." + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Follow the instructions sent to %@ to recover your password." + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "دستورالعمل‌های ارسال شده به %@ را برای بازیابی رمز عبور خود دنبال کنید." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Noudata osoitteeseen %@ lähetettyjä ohjeita palauttaaksesi salasanan." + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sundin ang mga tagubilin na ipinadala sa %@ upang maibalik ang iyong password." + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Suivez les instructions envoyées à %@ pour récupérer votre mot de passe." + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Folg de Awisige wo a %@ gschickt worde sind, zum dis Passwort wiederhärzstelle." + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "તમારો પાસવર્ડ પુનઃપ્રાપ્ત કરવા માટે %@ પર મોકલેલી સૂચનાઓને અનુસરો." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "עקוב אחר ההוראות שנשלחו אל %@ כדי לשחזר את הסיסמה שלך." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "अपना पासवर्ड पुनर्प्राप्त करने के लिए %@ पर भेजे गए निर्देशों का पालन करें।" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slijedite upute poslane na %@ za oporavak lozinke." + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kövesse a következő címre küldött utasításokat a jelszó helyreállításához: %@." + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ikuti instruksi yang dikirim ke %@ untuk memulihkan kata sandi Anda." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Segui le istruzioni inviate a %@ per recuperare la tua password." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "パスワードを回復するには、%@に送信された手順に従ってください。" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್ ಮರುಪಡೆಯಲು %@ ಗೆ ಕಳುಹಿಸಿದ ಸೂಚನೆಗಳನ್ನು ಅನುಸರಿಸಿ." + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "비밀번호를 복구하려면 %@(으)로 전송된 지침을 따르세요." + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Landa malako oyo etindamaki na %@ mpo na kozongisa liloba na yo ya kobombama." + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Izpildiet uz %@ nosūtītos norādījumus, lai atgūtu paroli." + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "तुमचा पासवर्ड पुनर्प्राप्त करण्यासाठी %@ वर पाठवलेल्या सूचनांचे अनुसरण करा." + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ikuti arahan yang dihantar ke %@ untuk memulihkan kata laluan anda." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Følg instruksjonene sendt til %@ for å gjenopprette passordet ditt." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Volg de instructies die zijn verzonden naar %@ om je wachtwoord te herstellen." + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Følg instruksjonane sendt til %@ for å gjenopprette passordet ditt." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Postępuj zgodnie z instrukcjami wysłanymi na adres %@, aby odzyskać hasło." + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Siga as instruções enviadas para %@ para recuperar sua senha." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Siga as instruções enviadas para %@ para recuperar sua senha." + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Siga as instruções enviadas para %@ para recuperar a sua palavra-passe." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Urmați instrucțiunile trimise la %@ pentru a vă recupera parola." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Следуйте инструкциям, отправленным на %@, чтобы восстановить пароль." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Postupujte podľa pokynov odoslaných na %@ a obnovte si heslo." + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sledite navodilom, poslanih na %@, za obnovitev gesla." + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Пратите инструкције послате на %@ да поврати��е лозинку." + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pratite instrukcije poslate na %@ da povratite lozinku." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Följ instruktionerna som skickades till %@ för att återställa ditt lösenord." + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "உங்கள் கடவுச்சொல்லை மீட்டெடுக்க %@ க்கு அனுப்பப்பட்ட வழிமுறைகளைப் பின்பற்றவும்." + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ปฏิบัติตามคำแนะนำที่ส่งไปที่ %@ เพื่อกู้คืนรหัสผ่านของคุณ" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Şifrenizi kurtarmak için %@ adresine gönderilen talimatları izleyin." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Дотримуйтесь інструкцій, надісланих на %@, щоб відновити пароль." + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "اپنا پاس ورڈ بحال کرنے کے لیے %@ پر بھیجی گئی ہدایات پر عمل کریں۔" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Làm theo hướng dẫn được gửi đến %@ để khôi phục mật khẩu của bạn." + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "按照发送至 %@ 的说明恢复您的密码。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "請按照傳送至 %@ 的說明來恢復您的密碼。" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "請依照寄送至 %@ 的說明來恢復您的密碼。" + } + } + } + }, + "ForgotPassword" : { + "comment" : "Button text for 'Forgot Password' action.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "إرسال بريد إلكتروني لاستعادة كلمة المرور" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort-Wiederherstellungs-E-Mail senden" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send password recovery email" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviar correo de recuperación de contraseña" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Envoyer un e-mail de récupération de mot de passe" + } + } + } + }, + "ForgotPasswordTitle" : { + "comment" : "Title of forgot password button.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "مشكلة في تسجيل الدخول؟" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Probleme beim Anmelden?" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trouble signing in?" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "¿Problemas para iniciar sesión?" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Problème de connexion ?" + } + } + } + }, + "Get instructions sent to this email that explain how to reset your password." : { + "extractionState" : "stale", + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ще изпратим на този имейл инструкции за нулиране на паролата ви." + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "এই ইমেইলে পাসওয়ার্ড রিসেট করার নির্দেশনা পাঠানো হবে।" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviarem a aquest correu instruccions sobre com restablir la contrasenya." + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odešleme instrukce pro reset hesla na tento email." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vi sender instruktioner til denne email om, hvordan du nulstiller din adgangskode." + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Erhalten Sie Anweisungen an diese E-Mail, die erklären, wie Sie Ihr Passwort zurücksetzen können." + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Erhalten Sie Anweisungen an diese E-Mail, die erklären, wie Sie Ihr Passwort zurücksetzen können." + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Λάβετε οδηγίες σε αυτό το email που εξηγούν πώς να επαναφέρετε τον κωδικό πρόσβασής σας." + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Get instructions sent to this email that explain how to reset your password." + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Get instructions sent to this email that explain how to reset your password." + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Get instructions sent to this email that explain how to reset your password." + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Get instructions sent to this email that explain how to reset your password." + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Get instructions sent to this email that explain how to reset your password." + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Get instructions sent to this email that explain how to reset your password." + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "دستورالعمل‌هایی را که نحوه بازنشانی رمز عبور شما را توضیح می‌دهد به این ایمیل دریافت کنید." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Saat tähän sähköpostiin ohjeet salasanan palauttamiseen." + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Makatanggap ng mga tagubilin na ipinadala sa email na ito na nagpapaliwanag kung paano i-reset ang iyong password." + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recevez des instructions envoyées à cet e-mail qui expliquent comment réinitialiser votre mot de passe." + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bechum Awisige a die E-Mail gschickt, wo erklära wie du dis Passwort zruggsetzsch." + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "આ ઇમેઇલ પર મોકલેલી સૂચનાઓ મેળવો જે તમારો પાસવર્ડ કેવી રીતે રીસેટ કરવો તે સમજાવે છે." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "קבל הוראות שנשלחות לדוא״ל זה המסבירות כיצד לאפס את הסיסמה שלך." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "इस ईमेल पर भेजे गए निर्देश प्राप्त करें जो बताते हैं कि आपका पासवर्ड कैसे रीसेट करें।" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poslat ćemo upute na ovaj email za ponovno postavljanje lozinke." + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kapjon utasításokat erre az e-mail címre, amelyek elmagyarázzák, hogyan állíthatja vissza a jelszavát." + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dapatkan instruksi yang dikirim ke email ini yang menjelaskan cara mengatur ulang kata sandi Anda." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ricevi le istruzioni inviate a questa email che spiegano come reimpostare la password." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "パスワードをリセットする方法を説明する手順をこのメールで受け取ります。" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ಹೇಗೆ ಮರುಹೊಂದಿಸುವುದು ಎಂಬುದನ್ನು ವಿವರಿಸುವ ಸೂಚನೆಗಳನ್ನು ಈ ಇಮೇಲ್‌ಗೆ ಕಳುಹಿಸಲಾಗುತ್ತದೆ." + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "비밀번호를 재설정하는 방법을 설명하는 지침을 이 이메일로 받으세요." + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zwa malako oyo etindami na email oyo oyo elimboli ndenge ya kosala ya sika liloba na yo ya kobombama." + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Saņemiet norādījumus uz šo e-pastu, kas paskaidro, kā atiestatīt paroli." + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "तुमचा पासवर्ड कसा रीसेट करावा हे स्पष्ट करणाऱ्या सूचना या ईमेलवर पाठवा." + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dapatkan arahan yang dihantar ke e-mel ini yang menerangkan cara menetapkan semula kata laluan anda." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Få instruksjoner sendt til denne e-posten som forklarer hvordan du tilbakestiller passordet ditt." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "We sturen instructies naar dit e-mailadres over het resetten van je wachtwoord." + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Få instruksjonar sendt til denne e-posten som forklarer korleis du tilbakestiller passordet ditt." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Otrzymaj instrukcje wysłane na ten adres e-mail, które wyjaśniają, jak zresetować hasło." + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Receba instruções enviadas para este e-mail que explicam como redefinir sua senha." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Receba instruções enviadas para este e-mail que explicam como redefinir sua senha." + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Receba instruções enviadas para este e-mail que explicam como redefinir a sua palavra-passe." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Primiți instrucțiuni trimise la acest e-mail care explică cum să vă resetați parola." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Получите инструкции, отправленные на этот адрес электронной почты, которые объясняют, как сбросить пароль." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dostanete pokyny odoslané na tento e-mail, ktoré vysvetľujú, ako obnoviť heslo." + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prejemite navodila, poslana na ta e-poštni naslov, ki pojasnjujejo, kako ponastaviti geslo." + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Добијте инструкције послате на овај имејл које објашњавају како да ресетујете лозинку." + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dobijte instrukcije poslate na ovaj imejl koje objašnjavaju kako da resetujete lozinku." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Få instruktioner skickade till denna e-post som förklarar hur du återställer ditt lösenord." + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "உங்கள் கடவுச்சொல்லை எவ்வாறு மீட்டமைப்பது என்பதை விளக்கும் வழிமுறைகளை இந்த மின்னஞ்சலுக்குப் பெறவும்." + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "รับคำแนะนำที่ส่งไปยังอีเมลนี้ที่อธิบายวิธีการรีเซ็ตรหัสผ่านของคุณ" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Şifrenizi nasıl sıfırlayacağınızı açıklayan talimatları bu e-postaya gönderin." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Отримайте інструкції, надіслані на цю електронну пошту, які пояснюють, як скинути пароль." + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "اس ای میل پر بھیجی گئی ہدایات حاصل کریں جو بتاتی ہیں کہ اپنا پاس ورڈ کیسے ری سیٹ کریں۔" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nhận hướng dẫn được gửi đến email này giải thích cách đặt lại mật khẩu của bạn." + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "我们会向此邮箱发送重置密码的说明。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "我們會傳送重設密碼的說明到此電子郵件。" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "我們會寄送密碼重設說明至此電子郵件。" + } + } + } + }, + "Get Started" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "ابدأ" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Започнете" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "শুরু করুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Comença" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Začít" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kom i gang" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loslegen" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Erste Schritte" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Erste Schritte" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Έναρξη" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Get Started" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Get Started" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Get Started" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Get Started" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Get Started" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Get Started" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Get Started" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Comenzar" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "شروع کنید" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aloita" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Magsimula" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Commencer" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Commencer" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Los göh" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "પ્રારંભ કરો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "התחל" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "शुरू करें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Započni" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kezdő lépések" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mulai" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inizia" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "始める" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಪ್ರಾರಂಭಿಸಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "시작하기" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Banda" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sākt" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "सुरू करा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mulakan" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kom i gang" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aan de slag" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kom i gang" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rozpocznij" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Começar" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Começar" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Começar" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Începeți" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Начать" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Začať" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Začni" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Почни" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Počni" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kom igång" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "தொடங்குக" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เริ่มต้นใช้งาน" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Başlayın" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Почати" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "شروع کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bắt đầu" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "开始" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "開始使用" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "開始使用" + } + } + } + }, + "Google" : { + "extractionState" : "stale", + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "গুগল" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + } + } + }, + "If the steps above didn't work, you can resend the email. Note that this will deactivate the link in the older email." : { + "extractionState" : "stale", + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ако горните стъпки не помогнат, може да изпратите имейла отново. Това ще деактивира стария линк." + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "উপরের পদক্ষেপগুলো কাজ না করলে আপনি ইমেইলটি পুনরায় পাঠাতে পারেন। মনে রাখবেন, এটি পুরোনো ইমেইলের লিঙ্ক নিষ্ক্রিয় করবে।" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Si els passos anteriors no funcionen, pots tornar a enviar el correu. Tingues en compte que això desactivarà l'enllaç del correu antic." + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pokud výše uvedené kroky nepomohou, můžete email odeslat znovu. Starý odkaz tím bude deaktivován." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hvis ovenstående ikke virker, kan du gensende emailen. Bemærk, at dette deaktiverer linket i den gamle email." + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wenn die obigen Schritte nicht funktioniert haben, können Sie die E-Mail erneut senden. Beachten Sie, dass dies den Link in der älteren E-Mail deaktiviert." + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wenn die obigen Schritte nicht funktioniert haben, können Sie die E-Mail erneut senden. Beachten Sie, dass dies den Link in der älteren E-Mail deaktiviert." + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Εάν τα παραπάνω βήματα δεν λειτούργησαν, μπορείτε να στείλετε ξανά το email. Σημειώστε ότι αυτό θα απενεργοποιήσει τον σύνδεσμο στο παλαιότερο email." + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "If the steps above didn't work, you can resend the email. Note that this will deactivate the link in the older email." + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "If the steps above didn't work, you can resend the email. Note that this will deactivate the link in the older email." + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "If the steps above didn't work, you can resend the email. Note that this will deactivate the link in the older email." + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "If the steps above didn't work, you can resend the email. Note that this will deactivate the link in the older email." + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "If the steps above didn't work, you can resend the email. Note that this will deactivate the link in the older email." + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "If the steps above didn't work, you can resend the email. Note that this will deactivate the link in the older email." + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "اگر مراحل بالا کار نکرد، می‌توانید ایمیل را دوباره ارسال کنید. توجه داشته باشید که این کار لینک در ایمیل قدیمی را غیرفعال می‌کند." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jos mikään yllä olevista ei toimi, voit lähettää sähköpostin uudelleen. Huomaa, että tämä poistaa vanhan linkin käytöstä." + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kung ang mga hakbang sa itaas ay hindi gumana, maaari mong ipadala muli ang email. Tandaan na ito ay magde-deactivate ng link sa lumang email." + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Si les étapes ci-dessus n'ont pas fonctionné, vous pouvez renvoyer l'e-mail. Notez que cela désactivera le lien dans l'ancien e-mail." + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wenn die obige Schritt nöd funktioniert händ, chasch d'E-Mail nomol schicke. Beacht dass das de Link i de ältere E-Mail deaktiviert." + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "જો ઉપરોક્ત પગલાં કામ ન કરે, તો તમે ઇમેઇલ ફરીથી મોકલી શકો છો. નોંધ કરો કે આ જૂના ઇમેઇલમાં લિંક નિષ્ક્રિય કરશે." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "אם השלבים לעיל לא עבדו, תוכל לשלוח שוב את הדוא״ל. שים לב שפעולה זו תשבית את הקישור בדוא״ל הישן יותר." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "यदि उपरोक्त चरण काम नहीं करते हैं, तो आप ईमेल फिर से भेज सकते हैं। ध्यान दें कि इससे पुराने ईमेल में लिंक निष्क्रिय हो जाएगा।" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ako prethodni koraci ne uspiju, možete ponovno poslati email. Stari link bit će deaktiviran." + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ha a fenti lépések nem működtek, újraküldheti az e-mailt. Ne feledje, hogy ez deaktiválja a régebbi e-mailben lévő hivatkozást." + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jika langkah-langkah di atas tidak berhasil, Anda dapat mengirim ulang email. Perhatikan bahwa ini akan menonaktifkan tautan di email yang lama." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se i passaggi precedenti non hanno funzionato, puoi inviare nuovamente l'email. Nota che questo disattiverà il link nell'email precedente." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "上記の手順で解決しない場合は、メールを再送信できます。これにより、古いメールのリンクが無効になることに注意してください。" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಮೇಲಿನ ಹಂತಗಳು ಕೆಲಸ ಮಾಡದಿದ್ದರೆ, ನೀವು ಇಮೇಲ್ ಅನ್ನು ಮತ್ತೆ ಕಳುಹಿಸಬಹುದು. ಇದು ಹಳೆಯ ಇಮೇಲ್‌ನಲ್ಲಿರುವ ಲಿಂಕ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ ಎಂಬುದನ್ನು ಗಮನಿಸಿ." + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "위의 단계가 작동하지 않으면 이메일을 다시 보낼 수 있습니다. 이렇게 하면 이전 이메일의 링크가 비활성화됩니다." + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Soki makambu oyo likolo esalaki te, okoki kotinda email lisusu. Yeba ete oyo ekokangisa lien oyo ezali na email ya kala." + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ja iepriekšminētās darbības nepalīdzēja, varat nosūtīt e-pastu vēlreiz. Ņemiet vērā, ka tas deaktivizēs saiti vecākajā e-pastā." + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "वरील चरण कार्य करत नसल्यास, तुम्ही ईमेल पुन्हा पाठवू शकता. लक्षात ठेवा की हे जुन्या ईमेलमधील लिंक निष्क्रिय करेल." + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jika langkah di atas tidak berkesan, anda boleh menghantar semula e-mel. Ambil perhatian bahawa ini akan menyahaktifkan pautan dalam e-mel yang lebih lama." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hvis trinnene ovenfor ikke fungerte, kan du sende e-posten på nytt. Merk at dette vil deaktivere lenken i den eldre e-posten." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Als de bovenstaande stappen niet helpen, kun je de e-mail opnieuw verzenden. De link in de oude e-mail wordt dan gedeactiveerd." + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Viss stega ovanfor ikkje fungerte, kan du sende e-posten på nytt. Merk at dette vil deaktivere lenka i den eldre e-posten." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jeśli powyższe kroki nie zadziałały, możesz wysłać e-mail ponownie. Pamiętaj, że spowoduje to dezaktywację linku w starszym e-mailu." + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se as etapas acima não funcionaram, você pode reenviar o e-mail. Observe que isso desativará o link no e-mail mais antigo." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se as etapas acima não funcionaram, você pode reenviar o e-mail. Observe que isso desativará o link no e-mail mais antigo." + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se os passos acima não funcionaram, pode reenviar o e-mail. Note que isto irá desativar a ligação no e-mail mais antigo." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dacă pașii de mai sus nu au funcționat, puteți retrimite e-mailul. Rețineți că aceasta va dezactiva linkul din e-mailul mai vechi." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Если приведенные выше шаги не помогли, вы можете отправить письмо снова. Обратите внимание, что это деактивирует ссылку в старом письме." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ak vyššie uvedené kroky nefungovali, môžete e-mail odoslať znova. Upozorňujeme, že tým sa deaktivuje odkaz v staršom e-maile." + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Če zgornji koraki niso pomagali, lahko e-pošto pošljete znova. Upoštevajte, da bo to deaktiviralo povezavo v starejši e-pošti." + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ако горњи кораци нису помогли, можете поново послати имејл. Имајте на уму да ће ово деактивирати линк у старијем имејлу." + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ako gornji koraci nisu pomogli, možete ponovo poslati imejl. Imajte na umu da će ovo deaktivirati link u starijem imejlu." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Om stegen ovan inte fungerade kan du skicka om e-posten. Observera att detta inaktiverar länken i den äldre e-posten." + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "மேலே உள்ள படிகள் வேலை செய்யவில்லை என்றால், நீங்கள் மின்னஞ்சலை மீண்டும் அனுப்பலாம். இது பழைய மின்னஞ்சலில் உள்ள இணைப்பை செயலிழக்கச் செய்யும் என்பதை கவனத்தில் கொள்ளவும்." + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "หากขั้นตอนข้างต้นไม่ได้ผล คุณสามารถส่งอีเมลอีกครั้งได้ โปรดทราบว่าการดำเนินการนี้จะยกเลิกการใช้งานลิงก์ในอีเมลเก่า" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yukarıdaki adımlar işe yaramadıysa, e-postayı yeniden gönderebilirsiniz. Bunun eski e-postadaki bağlantıyı devre dışı bırakacağını unutmayın." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Якщо наведені вище кроки не допомогли, ви можете надіслати лист знову. Зауважте, що це деактивує посилання в старому листі." + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "اگر اوپر کے اقدامات کام نہیں کرتے، تو آپ ای میل دوبارہ بھیج سکتے ہیں۔ نوٹ کریں کہ یہ پرانی ای میل میں لنک کو غیر فعال کر دے گا۔" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nếu các bước trên không hiệu quả, bạn có thể gửi lại email. Lưu ý rằng điều này sẽ vô hiệu hóa liên kết trong email cũ." + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "如果上述步骤无效,您可以重新发送邮件。请注意,这将使旧邮件中的链接失效。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "如果以上方法皆無效,您可以重新傳送電子郵件;舊郵件中的連結將會失效。" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "若上述方式皆無效,您可以重新寄送電子郵件。舊郵件中的連結將會失效。" + } + } + } + }, + "In order to change your password, you first need to enter your current password." : { + "extractionState" : "stale", + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "За да промените паролата си, първо трябва да въведете текущата." + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "পাসওয়ার্ড পরিবর্তন করতে হলে আপনাকে আগে বর্তমান পাসওয়ার্ড দিতে হবে।" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Per canviar la contrasenya, primer has d'introduir la contrasenya actual." + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pro změnu hesla musíte nejprve zadat aktuální heslo." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "For at ændre din adgangskode skal du først indtaste din nuværende adgangskode." + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Um Ihr Passwort zu ändern, müssen Sie zuerst Ihr aktuelles Passwort eingeben." + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Um Ihr Passwort zu ändern, müssen Sie zuerst Ihr aktuelles Passwort eingeben." + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Για να αλλάξετε τον κωδικό πρόσβασής σας, πρέπει πρώτα να εισαγάγετε τον τρέχοντα κωδικό πρόσβασης." + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "In order to change your password, you first need to enter your current password." + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "In order to change your password, you first need to enter your current password." + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "In order to change your password, you first need to enter your current password." + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "In order to change your password, you first need to enter your current password." + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "In order to change your password, you first need to enter your current password." + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "In order to change your password, you first need to enter your current password." + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "برای تغییر رمز عبور، ابتدا باید رمز عبور فعلی خود را وارد کنید." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vaihtaaksesi salasanan, sinun on ensin annettava nykyinen salasana." + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Upang baguhin ang iyong password, kailangan mo munang ilagay ang iyong kasalukuyang password." + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pour modifier votre mot de passe, vous devez d'abord saisir votre mot de passe actuel." + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Um dis Passwort z'ändere, muesch zersch dis aktuells Passwort iigäh." + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "તમારો પાસવર્ડ બદલવા માટે, તમારે પહેલા તમારો વર્તમાન પાસવર્ડ દાખલ કરવાની જરૂર છે." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "כדי לשנות את הסיסמה שלך, עליך להזין תחילה את הסיסמה הנוכחית שלך." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "अपना पासवर्ड बदलने के लिए, आपको पहले अपना वर्तमान पासवर्ड दर्ज करना होगा।" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Da biste promijenili lozinku, morate unijeti trenutačnu lozinku." + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "A jelszó módosításához először meg kell adnia a jelenlegi jelszavát." + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Untuk mengubah kata sandi Anda, Anda harus memasukkan kata sandi Anda saat ini terlebih dahulu." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Per cambiare la password, devi prima inserire la password attuale." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "パスワードを変更するには、まず現在のパスワードを入力する必要があります。" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್ ಬದಲಾಯಿಸಲು, ನೀವು ಮೊದಲು ನಿಮ್ಮ ಪ್ರಸ್ತುತ ಪಾಸ್‌ವರ್ಡ್ ನಮೂದಿಸಬೇಕು." + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "비밀번호를 변경하려면 먼저 현재 비밀번호를 입력해야 합니다." + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mpo na kobongola liloba na yo ya kobombama, esengeli liboso kotisa liloba na yo ya kobombama ya lelo." + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lai mainītu paroli, vispirms jāievada pašreizējā parole." + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "तुमचा पासवर्ड बदलण्यासाठी, तुम्हाला प्रथम तुमचा सध्याचा पासवर्ड एंटर करणे आवश्यक आहे." + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Untuk menukar kata laluan anda, anda mesti memasukkan kata laluan semasa anda terlebih dahulu." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "For å endre passordet ditt, må du først skrive inn ditt nåværende passord." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Om je wachtwoord te wijzigen, moet je eerst je huidige wachtwoord invoeren." + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "For å endre passordet ditt, må du først skrive inn det noverande passordet ditt." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aby zmienić hasło, musisz najpierw wprowadzić aktualne hasło." + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Para alterar sua senha, primeiro você precisa digitar sua senha atual." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Para alterar sua senha, primeiro você precisa digitar sua senha atual." + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Para alterar a sua palavra-passe, primeiro precisa de introduzir a sua palavra-passe atual." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pentru a vă schimba parola, trebuie mai întâi să introduceți parola actuală." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Чтобы изменить пароль, сначала нужно ввести текущий пароль." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ak chcete zmeniť heslo, najprv musíte zadať svoje aktuálne heslo." + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Če želite spremeniti geslo, morate najprej vnesti trenutno geslo." + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Да бисте променили лозинку, прво морате да унесете тренутну лозинку." + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Da biste promenili lozinku, prvo morate da unesete trenutnu lozinku." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "För att ändra ditt lösenord måste du först ange ditt nuvarande lösenord." + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "உங்கள் கடவுச்சொல்லை மாற்ற, முதலில் உங்கள் தற்போதைய கடவுச்சொல்லை உள்ளிட வேண்டும்." + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ในการเปลี่ยนรหัสผ่าน คุณต้องใส่รหัสผ่านปัจจุบันของคุณก่อน" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Şifrenizi değiştirmek için önce mevcut şifrenizi girmeniz gerekir." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Щоб змінити пароль, спершу потрібно ввести поточний пароль." + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "اپنا پاس ورڈ تبدیل کرنے کے لیے، آپ کو پہلے اپنا موجودہ پاس ورڈ درج کرنا ہوگا۔" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Để thay đổi mật khẩu, trước tiên bạn cần nhập mật khẩu hiện tại của mình." + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "要更改您的密码,您需要先输入当前密码。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "若要變更密碼,您必須先輸入目前的密碼。" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "若要變更密碼,您必須先輸入目前的密碼。" + } + } + } + }, + "Invalid OAuth Provider" : { + "comment" : "Error message displayed when OAuth provider configuration is invalid.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "موفر OAuth غير صالح" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Невалиден OAuth доставчик" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "অবৈধ OAuth প্রদানকারী" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Proveïdor OAuth no vàlid" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Neplatný poskytovatel OAuth" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ugyldig OAuth-udbyder" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ungültiger OAuth-Anbieter" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ungültiger OAuth-Anbieter" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ungültiger OAuth-Anbieter" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Μη έγκυρος πάροχος OAuth" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Invalid OAuth Provider" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Invalid OAuth Provider" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Invalid OAuth Provider" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Invalid OAuth Provider" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Invalid OAuth Provider" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Invalid OAuth Provider" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Invalid OAuth Provider" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Proveedor OAuth inválido" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ارائه‌دهنده OAuth نامعتبر" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Virheellinen OAuth-palveluntarjoaja" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Invalid na OAuth Provider" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fournisseur OAuth invalide" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fournisseur OAuth non valide" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ungültige OAuth-Anbieter" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "અમાન્ય OAuth પ્રદાતા" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "ספק OAuth לא חוקי" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "अमान्य OAuth प्रदाता" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nevažeći OAuth pružatelj" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Érvénytelen OAuth szolgáltató" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Penyedia OAuth Tidak Valid" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Provider OAuth non valido" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "無効なOAuthプロバイダ" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಅಮಾನ್ಯ OAuth ಪೂರೈಕೆದಾರ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "잘못된 OAuth 제공업체" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mopesi OAuth ya mabe" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nederīgs OAuth pakalpojumu sniedzējs" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "अवैध OAuth प्रदाता" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pembekal OAuth Tidak Sah" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ugyldig OAuth-leverandør" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ongeldige OAuth-provider" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ugyldig OAuth-leverandør" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nieprawidłowy dostawca OAuth" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Provedor OAuth inválido" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Provedor OAuth inválido" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fornecedor OAuth inválido" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Furnizor OAuth invalid" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Недействительный провайдер OAuth" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Neplatný poskytovateľ OAuth" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Neveljaven ponudnik OAuth" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Неважећи OAuth провајдер" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nevažeći OAuth provajder" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ogiltig OAuth-leverantör" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "தவறான OAuth வழங்குநர்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ผู้ให้บริการ OAuth ไม่ถูกต้อง" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geçersiz OAuth sağlayıcısı" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Недійсний постачальник OAuth" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "غلط OAuth فراہم کنندہ" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nhà cung cấp OAuth không hợp lệ" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "无效的 OAuth 提供商" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "無效的 OAuth 提供者" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "無效的 OAuth 服務提供者" + } + } + } + }, + "InvalidEmailError" : { + "comment" : "Error message displayed when user enters an invalid email address. Use short/abbreviated translation for 'email' which is less than 15 chars.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "عنوان البريد الإلكتروني هذا غير صحيح." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Diese E-Mail-Adresse ist nicht korrekt." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "That email address isn't correct." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Esa dirección de correo no es correcta." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cette adresse e-mail n'est pas correcte." + } + } + } + }, + "InvalidPasswordError" : { + "comment" : "Error message displayed when user enters an empty password.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "لا يمكن أن تكون كلمة المرور فارغة." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort darf nicht leer sein." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Password cannot be empty." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "La contraseña no puede estar vacía." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Le mot de passe ne peut pas être vide." + } + } + } + }, + "Linked account" : { + "extractionState" : "stale", + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Свързан акаунт" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "লিঙ্ক করা অ্যাকাউন্ট" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Compte enllaçat" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Propojený účet" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tilknyttet konto" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verknüpftes Konto" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verknüpftes Konto" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Συνδεδεμένος λογαριασμός" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Linked account" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Linked account" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Linked account" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Linked account" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Linked account" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Linked account" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "حساب متصل" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Linkitetty tili" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Naka-link na account" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Compte lié" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verknüpfts Konto" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "લિંક કરેલ એકાઉન્ટ" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "חשבון מקושר" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "लिंक किया गया खाता" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Povezani račun" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Csatolt fiók" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Akun tertaut" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Account collegato" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "リンク済みアカウント" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಲಿಂಕ್ ಮಾಡಿದ ಖಾತೆ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "연결된 계정" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kɔnti ya kokangama" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Saistīts konts" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "लिंक केलेले खाते" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Akaun dipautkan" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tilkoblet konto" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gekoppeld account" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tilkopla konto" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Połączone konto" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Conta vinculada" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Conta vinculada" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Conta associada" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cont conectat" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Связанный аккаунт" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prepojený účet" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Povezan račun" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Повезан налог" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Povezan nalog" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Länkat konto" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "இணைக்கப்பட்ட கணக்கு" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "บัญชีที่เชื่อมโยง" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bağlantılı hesap" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Пов'язаний обліковий запис" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "منسلک اکاؤنٹ" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tài khoản đã liên kết" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "已关联账户" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "已連結帳號" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "已連結帳號" + } + } + } + }, + "Linked Accounts" : { + "extractionState" : "stale", + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Свързани акаунти" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "লিঙ্ক করা অ্যাকাউন্টসমূহ" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Comptes enllaçats" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Propojené účty" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tilknyttede konti" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verknüpfte Konten" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verknüpfte Konten" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Συνδεδεμένοι λογαριασμοί" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Linked Accounts" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Linked Accounts" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Linked Accounts" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Linked Accounts" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Linked Accounts" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Linked Accounts" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "حساب‌های متصل" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Linkitetyt tilit" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mga Naka-link na Account" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Comptes liés" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verknüpfti Kontos" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "લિંક કરેલ એકાઉન્ટ્સ" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "חשבונות מקושרים" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "लिंक किए गए खाते" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Povezani računi" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Csatolt fiókok" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Akun Tertaut" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Account collegati" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "リンク済みアカウント" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಲಿಂಕ್ ಮಾಡಿದ ಖಾತೆಗಳು" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "연결된 계정" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bakɔnti ya kokangama" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Saistītie konti" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "लिंक केलेली खाती" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Akaun Dipautkan" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tilkoblede kontoer" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gekoppelde accounts" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tilkopla kontoar" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Połączone konta" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Contas vinculadas" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Contas vinculadas" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Contas associadas" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Conturi conectate" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Связанные аккаунты" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prepojené účty" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Povezani računi" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Повезани налози" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Povezani nalozi" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Länkade konton" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "இணைக்கப்பட்ட கணக்குகள்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "บัญชีที่เชื่อมโยง" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bağlantılı hesaplar" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Пов'язані облікові записи" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "منسلک اکاؤنٹس" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Các tài khoản đã liên kết" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "已关联账户" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "已連結帳號" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "已連結帳號" + } + } + } + }, + "Login" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تسجيل الدخول" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вход" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "লগইন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inicia sessió" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Přihlásit se" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Login" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anmelden" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anmelden" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anmelden" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Σύνδεση" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Login" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Login" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Login" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Login" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Login" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Login" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Login" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Iniciar sesión" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ورود" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kirjaudu" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mag-login" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Connexion" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Connexion" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aamälde" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "લૉગિન" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "התחברות" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "लॉग इन करें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prijava" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bejelentkezés" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Masuk" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Accedi" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ログイン" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಲಾಗಿನ್" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "로그인" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kokota" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pieteikties" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "लॉगिन" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Log masuk" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Logg inn" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inloggen" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Logg inn" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zaloguj się" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entrar" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entrar" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Iniciar sessão" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Conectare" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Войти" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prihlásiť sa" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prijava" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Пријави се" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prijavi se" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Logga in" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "உள்நுழை" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เข้าสู่ระบบ" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Oturum aç" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Увійти" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "لاگ ان" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Đăng nhập" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "登录" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "登入" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "登入" + } + } + } + }, + "Manage Two-Factor Authentication" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "إدارة المصادقة الثنائية" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Управление на двуфакторното удостоверяване" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "টু-ফ্যাক্টর প্রমাণীকরণ পরিচালনা করুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gestiona l'autenticació en dos passos" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spravovat dvoufázové ověření" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Administrer tofaktorgodkendelse" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zwei-Faktor-Authentifizierung verwalten" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zwei-Faktor-Authentifizierung verwalten" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zwei-Faktor-Authentifizierung verwalten" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Διαχείριση ελέγχου ταυτότητας δύο παραγόντων" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manage Two-Factor Authentication" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manage Two-Factor Authentication" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manage Two-Factor Authentication" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manage Two-Factor Authentication" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manage Two-Factor Authentication" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manage Two-Factor Authentication" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manage Two-Factor Authentication" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Administrar autenticación de dos factores" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "مدیریت احراز هویت دو عاملی" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hallitse kaksivaiheista tunnistautumista" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pamahalaan ang Two-Factor Authentication" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gérer l'authentification à deux facteurs" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gérer l'authentification à deux facteurs" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zwei-Faktor-Authentifizierig verwalte" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "ટુ-ફેક્ટર પ્રમાણીકરણનું સંચાલન કરો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "ניהול אימות דו־שלבי" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "दो-कारक प्रमाणीकरण प्रबंधित करें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Upravljanje dvofaktorskom autentifikacijom" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kétfaktoros hitelesítés kezelése" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kelola Autentikasi Dua Faktor" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gestisci l'autenticazione a due fattori" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "2段階認証を管理" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಎರಡು-ಅಂಶ ದೃಢೀಕರಣವನ್ನು ನಿರ್ವಹಿಸಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "2단계 인증 관리" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Boyangeli ya Kondimisa ya Bakambi mibale" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pārvaldīt divfaktoru autentifikāciju" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "दोन-घटक प्रमाणीकरण व्यवस्थापित करा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Urus Pengesahan Dua Faktor" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Administrer tofaktorautentisering" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beheer tweeledige verificatie" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Administrer tofaktorautentisering" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zarządzaj uwierzytelnianiem dwuskładnikowym" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gerenciar autenticação de dois fatores" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gerenciar autenticação de dois fatores" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gerir autenticação de dois fatores" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gestionați autentificarea cu doi factori" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Управление двухфакторной аутентификацией" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spravovať dvojfaktorové overovanie" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Upravljaj dvofaktorsko preverjanje pristnosti" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Управљај двофакторском аутентификацијом" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Upravljaj dvofaktorskom autentifikacijom" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hantera tvåfaktorsautentisering" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "இரு காரணி அங்கீகாரத்தை நிர்வகிக்கவும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "จัดการการตรวจสอบสิทธิ์แบบสองปัจจัย" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "İki faktörlü kimlik doğrulamayı yönet" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Керувати двофакторною автентифікацією" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "دو عنصری تصدیق کا نظم کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quản lý xác thực hai yếu tố" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "管理双重验证" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "管理雙重驗證" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "管理雙重驗證" + } + } + } + }, + "Manage your authentication methods" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "إدارة طرق المصادقة الخاصة بك" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Управлявайте своите методи на удостоверяване" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "আপনার প্রমাণীকরণ পদ্ধতি পরিচালনা করুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gestiona els teus mètodes d'autenticació" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spravujte své metody ověření" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Administrer dine godkendelsesmetoder" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verwalte deine Authentifizierungsmethoden" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verwalten Sie Ihre Authentifizierungsmethoden" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verwalten Sie Ihre Authentifizierungsmethoden" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Διαχειριστείτε τις μεθόδους ελέγχου ταυτότητας σας" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manage your authentication methods" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manage your authentication methods" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manage your authentication methods" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manage your authentication methods" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manage your authentication methods" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manage your authentication methods" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manage your authentication methods" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Administra tus métodos de autenticación" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "روش‌های احراز هویت خود را مدیریت کنید" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hallitse tunnistusmenetelmiäsi" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pamahalaan ang iyong mga paraan ng authentication" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gère tes méthodes d'authentification" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gérer vos méthodes d'authentification" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verwalt dini Authentifizierigsmethode" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "તમારી પ્રમાણીકરણ પદ્ધતિઓનું સંચાલન કરો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "נהל את שיטות האימות שלך" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "अपनी प्रमाणीकरण विधियों को प्रबंधित करें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Upravljajte svojim metodama autentifikacije" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hitelesítési módszerek kezelése" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kelola metode autentikasi Anda" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gestisci i tuoi metodi di autenticazione" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "認証方法を管理する" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ನಿಮ್ಮ ದೃಢೀಕರಣ ವಿಧಾನಗಳನ್ನು ನಿರ್ವಹಿಸಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "인증 방법 관리" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Boyangeli ya ndenge na yo ya kondimisa" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pārvaldīt autentifikācijas metodes" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "तुमच्या प्रमाणीकरण पद्धती व्यवस्थापित करा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Urus kaedah pengesahan anda" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Administrer autentiseringsmetodene dine" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beheer je verificatiemethoden" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Administrer autentiseringsmetodane dine" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zarządzaj swoimi metodami uwierzytelniania" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gerenciar seus métodos de autenticação" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gerenciar seus métodos de autenticação" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gerir os seus métodos de autenticação" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gestionați metodele dvs. de autentificare" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Управляйте вашими методами аутентификации" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spravujte svoje metódy overovania" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Upravljajte svoje metode preverjanja pristnosti" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Управљајте вашим методама аутентификације" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Upravljajte vašim metodama autentifikacije" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hantera dina autentiseringsmetoder" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "உங்கள் அங்கீகார முறைகளை நிர்வகிக்கவும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "จัดการวิธีการตรวจสอบสิทธิ์ของคุณ" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kimlik doğrulama yöntemlerinizi yönetin" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Керуйте своїми методами автентифікації" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "اپنے تصدیقی طریقوں کا نظم کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quản lý các phương thức xác thực của bạn" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "管理您的验证方式" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "管理您的驗證方式" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "管理您的驗證方式" + } + } + } + }, + "Manual Entry Key:" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "مفتاح الإدخال اليدوي:" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ключ за ръчно въвеждане:" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ম্যানুয়াল এন্ট্রি কী:" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Clau d'entrada manual:" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Klíč pro ruční zadání:" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manuel indtastningsnøgle:" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manueller Eingabeschlüssel:" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manueller Eingabeschlüssel:" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manueller Eingabeschlüssel:" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Κλειδί μη αυτόματης εισαγωγής:" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manual Entry Key:" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manual Entry Key:" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manual Entry Key:" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manual Entry Key:" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manual Entry Key:" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manual Entry Key:" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manual Entry Key:" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Clave de entrada manual:" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "کلید ورود دستی:" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manuaalinen lisäysavain:" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manual Entry Key:" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Clé de saisie manuelle :" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Clé de saisie manuelle :" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manuelle Iigabschlüssel:" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "મેન્યુઅલ એન્ટ્રી કી:" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "מפתח הזנה ידנית:" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "मैनुअल एंट्री कुंजी:" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ključ za ručni unos:" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kézi beviteli kulcs:" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kunci Entri Manual:" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Chiave di inserimento manuale:" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "手動入力キー:" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಹಸ್ತಚಾಲಿತ ನಮೂದು ಕೀ:" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "수동 입력 키:" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fungola ya Kokotisa na Mabɔkɔ:" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manuālās ievades atslēga:" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "मॅन्युअल एंट्री की:" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kunci Kemasukan Manual:" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manuell inntastingsnøkkel:" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Handmatige invoersleutel:" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manuell inntastingsnøkkel:" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Klucz wprowadzania ręcznego:" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Chave de entrada manual:" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Chave de entrada manual:" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Chave de introdução manual:" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cheie de introducere manuală:" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ключ ручного ввода:" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kľúč na manuálne zadanie:" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ključ za ročni vnos:" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Кључ за ручни унос:" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ključ za ručni unos:" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manuell inmatningsnyckel:" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "கைமுறை உள்ளீட்டு விசை:" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "คีย์สำหรับป้อนด้วยตนเอง:" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manuel giriş anahtarı:" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ключ ручного введення:" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "دستی اندراج کی کلید:" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Khóa nhập thủ công:" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "手动输入密钥:" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "手動輸入金鑰:" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "手動輸入金鑰:" + } + } + } + }, + "MFA is not enabled in the current configuration. Please contact your administrator." : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "لم يتم تمكين المصادقة متعددة العوامل في التكوين الحالي. يرجى الاتصال بالمسؤول." + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Двуфакторното удостоверяване не е активирано в текущата конфигурация. Свържете се с администратора си." + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "বর্তমান কনফিগারেশনে MFA সক্রিয় নেই। প্রশাসকের সাথে যোগাযোগ করুন।" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "L'autenticació multifactor (MFA) no està activada a la configuració actual. Posa't en contacte amb l'administrador." + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "MFA není v aktuální konfiguraci povoleno. Kontaktujte svého administrátora." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "MFA er ikke aktiveret i den nuværende konfiguration. Kontakt din administrator." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "MFA ist in der aktuellen Konfiguration nicht aktiviert. Bitte kontaktiere deinen Administrator." + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Die Multi-Faktor-Authentifizierung ist in der aktuellen Konfiguration nicht aktiviert. Bitte wenden Sie sich an Ihren Administrator." + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Die Multi-Faktor-Authentifizierung ist in der aktuellen Konfiguration nicht aktiviert. Bitte wenden Sie sich an Ihren Administrator." + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ο έλεγχος ταυτότητας πολλαπλών παραγόντων δεν είναι ενεργοποιημένος στην τρέχουσα διαμόρφωση. Επικοινωνήστε με τον διαχειριστή σας." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "MFA is not enabled in the current configuration. Please contact your administrator." + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "MFA is not enabled in the current configuration. Please contact your administrator." + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "MFA is not enabled in the current configuration. Please contact your administrator." + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "MFA is not enabled in the current configuration. Please contact your administrator." + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "MFA is not enabled in the current configuration. Please contact your administrator." + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "MFA is not enabled in the current configuration. Please contact your administrator." + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "MFA is not enabled in the current configuration. Please contact your administrator." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "MFA no está habilitado en la configuración actual. Por favor, contacta a tu administrador." + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "احراز هویت چند عاملی در پیکربندی فعلی فعال نیست. لطفاً با سرپرست خود تماس بگیرید." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "MFA ei ole käytössä nykyisessä kokoonpanossa. Ota yhteyttä ylläpitäjään." + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ang MFA ay hindi naka-enable sa kasalukuyang configuration. Mangyaring makipag-ugnayan sa iyong administrator." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "L'authentification multifacteur n'est pas activée dans la configuration actuelle. Contacte ton administrateur." + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "L'authentification multifacteur n'est pas activée dans la configuration actuelle. Veuillez contacter votre administrateur." + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "D'Multi-Faktor-Authentifizierig isch i de aktuelle Konfiguration nöd aktiviert. Bitte wend di a din Administrator." + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "વર્તમાન ગોઠવણીમાં MFA સક્ષમ નથી. કૃપા કરીને તમારા વ્યવસ્થાપકનો સંપર્ક કરો." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "אימות רב־גורמי אינו מופעל בתצורה הנוכחית. אנא פנה למנהל המערכת שלך." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "MFA वर्तमान कॉन्फ़िगरेशन में सक्षम नहीं है। कृपया अपने व्यवस्थापक से संपर्क करें।" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "MFA nije omogućen u trenutnoj konfiguraciji. Kontaktirajte administratora." + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Az MFA nincs engedélyezve a jelenlegi konfigurációban. Lépjen kapcsolatba a rendszergazdával." + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "MFA tidak diaktifkan dalam konfigurasi saat ini. Silakan hubungi administrator Anda." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "L'MFA non è abilitata nella configurazione corrente. Contatta il tuo amministratore." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "現在の設定ではMFAが有効になっていません。管理者にお問い合わせください。" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಪ್ರಸ್ತುತ ಸಂರಚನೆಯಲ್ಲಿ MFA ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿಲ್ಲ. ದಯವಿಟ್ಟು ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ." + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "현재 구성에서 MFA가 활성화되어 있지 않습니다. 관리자에게 문의하세요." + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "MFA ezali te na configuration ya lelo. Bengelaki kozwa contact na administratɛrɛ na yo." + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "MFA nav iespējots pašreizējā konfigurācijā. Lūdzu, sazinieties ar administratoru." + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "सध्याच्या कॉन्फिगरेशनमध्ये MFA सक्षम नाही. कृपया तुमच्या प्रशासकाशी संपर्क साधा." + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "MFA tidak didayakan dalam konfigurasi semasa. Sila hubungi pentadbir anda." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "MFA er ikke aktivert i gjeldende konfigurasjon. Vennligst kontakt administratoren din." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "MFA is niet ingeschakeld in de huidige configuratie. Neem contact op met je beheerder." + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "MFA er ikkje aktivert i gjeldande konfigurasjon. Ver venleg og kontakt administratoren din." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "MFA nie jest włączone w bieżącej konfiguracji. Skontaktuj się z administratorem." + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "A MFA não está ativada na configuração atual. Entre em contato com seu administrador." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "A MFA não está ativada na configuração atual. Entre em contato com seu administrador." + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "A MFA não está ativada na configuração atual. Contacte o seu administrador." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "MFA nu este activată în configurația actuală. Contactați administratorul." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "MFA не включена в текущей конфигурации. Обратитесь к администратору." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "MFA nie je v aktuálnej konfigurácii povolená. Obráťte sa na správcu." + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "MFA ni omogočen v trenutni konfiguraciji. Obrnite se na skrbnika." + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "MFA није омогућен у тренутној конфигурацији. Молимо контактирајте администратора." + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "MFA nije omogućen u trenutnoj konfiguraciji. Molimo kontaktirajte administratora." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "MFA är inte aktiverad i den aktuella konfigurationen. Kontakta din administratör." + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "தற்போதைய கட்டமைப்பில் MFA இயக்கப்படவில்லை. உங்கள் நிர்வாகியைத் தொடர்பு கொள்ளவும்." + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "MFA ไม่ได้เปิดใช้งานในการกำหนดค่าปัจจุบัน โปรดติดต่อผู้ดูแลระบบของคุณ" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "MFA mevcut yapılandırmada etkin değil. Lütfen yöneticinize başvurun." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "MFA не ввімкнено в поточній конфігурації. Зверніться до адміністратора." + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "موجودہ ترتیب میں MFA فعال نہیں ہے۔ براہ کرم اپنے منتظم سے رابطہ کریں۔" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "MFA không được bật trong cấu hình hiện tại. Vui lòng liên hệ với quản trị viên của bạn." + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "当前配置未启用多重验证(MFA)。请联系管理员。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "目前設定未啟用多重驗證(MFA)。請聯絡您的管理員。" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "目前的設定未啟用多重驗證 (MFA)。請聯絡您的管理員。" + } + } + } + }, + "Multi-Factor Authentication Disabled" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "المصادقة متعددة العوامل معطلة" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Двуфакторното удостоверяване е изключено" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "মাল্টি-ফ্যাক্টর প্রমাণীকরণ নিষ্ক্রিয়" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autenticació multifactor desactivada" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vícefázové ověření vypnuto" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Multifaktorgodkendelse deaktiveret" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mehr-Faktor-Authentifizierung deaktiviert" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Multi-Faktor-Authentifizierung deaktiviert" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Multi-Faktor-Authentifizierung deaktiviert" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ο έλεγχος ταυτότητας πολλαπλών παραγόντων είναι απενεργοποιημένος" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Multi-Factor Authentication Disabled" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Multi-Factor Authentication Disabled" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Multi-Factor Authentication Disabled" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Multi-Factor Authentication Disabled" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Multi-Factor Authentication Disabled" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Multi-Factor Authentication Disabled" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Multi-Factor Authentication Disabled" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autenticación multifactor deshabilitada" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "احراز هویت چند عاملی غیرفعال است" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Monivaiheinen tunnistautuminen pois käytöstä" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Naka-disable ang Multi-Factor Authentication" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authentification multifacteur désactivée" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authentification multifacteur désactivée" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Multi-Faktor-Authentifizierig deaktiviert" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "મલ્ટિ-ફેક્ટર પ્રમાણીકરણ અક્ષમ" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "אימות רב־גורמי מושבת" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "बहु-कारक प्रमाणीकरण अक्षम" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Višestruka autentifikacija onemogućena" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Többtényezős hitelesítés letiltva" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autentikasi Multi-Faktor Dinonaktifkan" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autenticazione a più fattori disabilitata" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "多要素認証が無効" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಬಹು-ಅಂಶ ದೃಢೀಕರಣ ನಿಷ್ಕ್ರಿಯಗೊಂಡಿದೆ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "다단계 인증 비활성화됨" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kondimisa ya Bakambi ebele ekangami" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Daudzfaktoru autentifikācija atspējota" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "बहु-घटक प्रमाणीकरण अक्षम केले" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pengesahan Pelbagai Faktor Dilumpuhkan" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Flerfaktorautentisering deaktivert" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Multifactor-authenticatie uitgeschakeld" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fleirfaktorautentisering deaktivert" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uwierzytelnianie wieloskładnikowe wyłączone" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autenticação multifator desativada" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autenticação multifator desativada" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autenticação multifator desativada" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autentificarea cu mai mulți factori dezactivată" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Многофакторная аутентификация отключена" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Viacfaktorové overovanie zakázané" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Večfaktorsko preverjanje pristnosti onemogočeno" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вишефакторска аутентификација онемогућена" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Višefaktorska autentifikacija onemogućena" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Flerfaktorsautentisering inaktiverad" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "பல காரணி அங்கீகாரம் முடக்கப்பட்டது" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ปิดการใช้งานการตรวจสอบสิทธิ์แบบหลายปัจจัย" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Çok faktörlü kimlik doğrulama devre dışı" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Багатофакторна автентифікація вимкнена" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "کثیر عنصری تصدیق غیر فعال" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xác thực đa yếu tố đã bị tắt" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "多重验证已禁用" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "多重驗證已停用" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "多重驗證已停用" + } + } + } + }, + "Name" : { + "comment" : "Label next to a name text field.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "الاسم" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Име" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "নাম" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nom" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jméno" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Navn" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Name" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Name" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Name" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Όνομα" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Name" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Name" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Name" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Name" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Name" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Name" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Name" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nombre" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "نام" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nimi" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pangalan" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nom" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nom" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Name" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "નામ" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "שם" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "नाम" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ime" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Név" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nama" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nome" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "名前" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಹೆಸರು" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이름" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nkombo" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vārds" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "नाव" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nama" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Navn" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Naam" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Namn" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nazwa" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nome" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nome" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nome" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nume" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Имя" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Meno" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ime" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Име" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ime" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Namn" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "பெயர்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ชื่อ" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ad" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ім'я" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "نام" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tên" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "姓名" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "姓名" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "姓名" + } + } + } + }, + "New password" : { + "extractionState" : "stale", + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Нова парола" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "নতুন পাসওয়ার্ড" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nova contrasenya" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nové heslo" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ny adgangskode" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Neues Passwort" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Neues Passwort" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Νέος κωδικός πρόσβασης" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "New password" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "New password" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "New password" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "New password" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "New password" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "New password" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "رمز عبور جدید" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uusi salasana" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bagong password" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nouveau mot de passe" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Neus Passwort" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "નવો પાસવર્ડ" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "סיסמה חדשה" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "नया पासवर्ड" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nova lozinka" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Új jelszó" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kata sandi baru" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nuova password" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "新しいパスワード" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಹೊಸ ಪಾಸ್‌ವರ್ಡ್" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "새 비밀번호" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Liloba ya sika ya kobombama" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jaunā parole" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "नवीन पासवर्ड" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kata laluan baharu" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nytt passord" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nieuw wachtwoord" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nytt passord" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nowe hasło" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nova senha" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nova senha" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nova palavra-passe" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Parolă nouă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Новый пароль" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nové heslo" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Novo geslo" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Нова лозинка" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nova lozinka" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nytt lösenord" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "புதிய கடவுச்சொல்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "รหัสผ่านใหม่" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yeni şifre" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Новий пароль" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "نیا پاس ورڈ" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mật khẩu mới" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "新密码" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "新密碼" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "新密碼" + } + } + } + }, + "Next" : { + "comment" : "Next button title.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "التالي" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Напред" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "পরবর্তী" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Següent" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Další" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Næste" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Weiter" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Weiter" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Weiter" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Επόμενο" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Next" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Next" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Next" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Next" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Next" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Next" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Next" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Siguiente" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "بعدی" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Seuraava" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Susunod" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Suivant" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Suivant" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Witer" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "આગળ" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הבא" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "अगला" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sljedeće" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Következő" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Berikutnya" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Avanti" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "次へ" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಮುಂದೆ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "다음" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Oyo elandaki" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tālāk" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "पुढे" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Seterusnya" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Neste" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Volgende" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Neste" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dalej" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Próximo" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Próximo" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Seguinte" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Următorul" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Далее" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ďalej" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Naprej" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Следеће" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sledeće" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nästa" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "அடுத்தது" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ถัดไป" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "İleri" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Далі" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "اگلا" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tiếp theo" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "下一步" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "下一步" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "下一步" + } + } + } + }, + "No Authentication Methods" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "لا توجد طرق مصادقة" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Няма налични методи за удостоверяване" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "কোনো প্রমাণীকরণ পদ্ধতি নেই" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "No hi ha mètodes d'autenticació" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Žádné metody ověření" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingen godkendelsesmetoder" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Keine Authentifizierungsmethoden" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Keine Authentifizierungsmethoden" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Keine Authentifizierungsmethoden" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Δεν υπάρχουν μέθοδοι ελέγχου ταυτότητας" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "No Authentication Methods" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "No Authentication Methods" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "No Authentication Methods" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "No Authentication Methods" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "No Authentication Methods" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "No Authentication Methods" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "No Authentication Methods" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sin métodos de autenticación" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "هیچ روش احراز هویتی وجود ندارد" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ei tunnistusmenetelmiä" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Walang mga Paraan ng Authentication" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aucune méthode d'authentification" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aucune méthode d'authentification" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kei Authentifizierigsmethode" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "કોઈ પ્રમાણીકરણ પદ્ધતિઓ નથી" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "אין שיטות אימות" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "कोई प्रमाणीकरण विधि नहीं" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nema dostupnih metoda autentifikacije" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nincsenek hitelesítési módszerek" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tidak Ada Metode Autentikasi" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nessun metodo di autenticazione" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "認証方法なし" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಯಾವುದೇ ದೃಢೀಕರಣ ವಿಧಾನಗಳಿಲ್ಲ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "인증 방법 없음" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ndenge moko te ya Kondimisa" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nav autentifikācijas metožu" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "कोणत्याही प्रमाणीकरण पद्धती नाहीत" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tiada Kaedah Pengesahan" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingen autentiseringsmetoder" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geen authenticatiemethoden" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingen autentiseringsmetodar" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Brak metod uwierzytelniania" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nenhum método de autenticação" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nenhum método de autenticação" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nenhum método de autenticação" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nicio metodă de autentificare" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Нет методов аутентификации" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Žiadne metódy overovania" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ni metod preverjanja pristnosti" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Нема метода аутентификације" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nema metoda autentifikacije" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inga autentiseringsmetoder" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "அங்கீகார முறைகள் இல்லை" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ไม่มีวิธีการตรวจสอบสิทธิ์" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kimlik doğrulama yöntemi yok" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Немає методів автентифікації" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "کوئی تصدیقی طریقے نہیں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Không có phương thức xác thực" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "无验证方式" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "無驗證方式" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "無可用的驗證方式" + } + } + } + }, + "No Authentication Methods Available" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "لا توجد طرق مصادقة متاحة" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Няма налични методи за удостоверяване" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "কোনো প্রমাণীকরণ পদ্ধতি উপলব্ধ নেই" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "No hi ha mètodes d'autenticació disponibles" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Žádné metody ověření nejsou k dispozici" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingen godkendelsesmetoder tilgængelige" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Keine Authentifizierungsmethoden verfügbar" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Keine Authentifizierungsmethoden verfügbar" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Keine Authentifizierungsmethoden verfügbar" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Δεν υπάρχουν διαθέσιμες μέθοδοι ελέγχου ταυτότητας" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "No Authentication Methods Available" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "No Authentication Methods Available" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "No Authentication Methods Available" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "No Authentication Methods Available" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "No Authentication Methods Available" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "No Authentication Methods Available" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "No Authentication Methods Available" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "No hay métodos de autenticación disponibles" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "هیچ روش احراز هویتی موجود نیست" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ei käytettävissä olevia tunnistusmenetelmiä" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Walang Available na mga Paraan ng Authentication" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aucune méthode d'authentification disponible" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aucune méthode d'authentification disponible" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kei Authentifizierigsmethode verfüegbar" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "કોઈ પ્રમાણીકરણ પદ્ધતિઓ ઉપલબ્ધ નથી" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "אין שיטות אימות זמינות" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "कोई प्रमाणीकरण विधि उपलब्ध नहीं" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nema dostupnih metoda autentifikacije" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nincsenek elérhető hitelesítési módszerek" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tidak Ada Metode Autentikasi yang Tersedia" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nessun metodo di autenticazione disponibile" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "利用可能な認証方法がありません" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಯಾವುದೇ ದೃಢೀಕರಣ ವಿಧಾನಗಳು ಲಭ್ಯವಿಲ್ಲ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "사용 가능한 인증 방법 없음" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ndenge moko te ya Kondimisa ezali" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nav pieejamu autentifikācijas metožu" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "कोणत्याही प्रमाणीकरण पद्धती उपलब्ध नाहीत" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tiada Kaedah Pengesahan Tersedia" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingen autentiseringsmetoder tilgjengelig" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geen authenticatiemethoden beschikbaar" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingen autentiseringsmetodar tilgjengeleg" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Brak dostępnych metod uwierzytelniania" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nenhum método de autenticação disponível" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nenhum método de autenticação disponível" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nenhum método de autenticação disponível" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nicio metodă de autentificare disponibilă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Нет доступных методов аутентификации" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nie sú k dispozícii žiadne metódy overovania" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ni razpoložljivih metod preverjanja pristnosti" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Нема доступних метода аутентификације" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nema dostupnih metoda autentifikacije" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inga tillgängliga autentiseringsmetoder" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "கிடைக்கக்கூடிய அங்கீகார முறைகள் இல்லை" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ไม่มีวิธีการตรวจสอบสิทธิ์ที่พร้อมใช้งาน" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kullanılabilir kimlik doğrulama yöntemi yok" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Немає доступних методів автентифікації" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "کوئی دستیاب تصدیقی طریقے نہیں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Không có phương thức xác thực khả dụng" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "没有可用的验证方式" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "沒有可用的驗證方式" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "沒有可用的驗證方式" + } + } + } + }, + "No MFA methods are configured as allowed. Please contact your administrator." : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "لم يتم تكوين أي طرق MFA كمسموح بها. يرجى الاتصال بالمسؤول." + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Няма позволени MFA методи. Свържете се с администратора си." + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "কোনো MFA পদ্ধতি অনুমোদিত নয়। প্রশাসকের সাথে যোগাযোগ করুন।" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "No hi ha cap mètode MFA permès configurat. Posa't en contacte amb l'administrador." + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nebyly povoleny žádné MFA metody. Kontaktujte svého administrátora." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingen MFA-metoder er tilladt. Kontakt administrator." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Keine MFA-Methoden sind als erlaubt konfiguriert. Bitte kontaktiere deinen Administrator." + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Es sind keine MFA-Methoden als zulässig konfiguriert. Bitte wenden Sie sich an Ihren Administrator." + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Es sind keine MFA-Methoden als zulässig konfiguriert. Bitte wenden Sie sich an Ihren Administrator." + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Δεν έχουν ρυθμιστεί επιτρεπόμενες μέθοδοι MFA. Επικοινωνήστε με τον διαχειριστή σας." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "No MFA methods are configured as allowed. Please contact your administrator." + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "No MFA methods are configured as allowed. Please contact your administrator." + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "No MFA methods are configured as allowed. Please contact your administrator." + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "No MFA methods are configured as allowed. Please contact your administrator." + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "No MFA methods are configured as allowed. Please contact your administrator." + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "No MFA methods are configured as allowed. Please contact your administrator." + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "No MFA methods are configured as allowed. Please contact your administrator." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "No hay métodos MFA configurados como permitidos. Por favor, contacta a tu administrador." + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "هیچ روش MFA به عنوان مجاز پیکربندی نشده است. لطفاً با سرپرست خود تماس بگیرید." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "MFA-menetelmiä ei ole sallittu. Ota yhteyttä ylläpitäjään." + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Walang naka-configure na pinapayagang MFA methods. Mangyaring makipag-ugnayan sa iyong administrator." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aucune méthode d'authentification multifacteur n'est configurée comme autorisée. Contacte ton administrateur." + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aucune méthode d'authentification multifacteur n'est configurée comme autorisée. Veuillez contacter votre administrateur." + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Es sind kei MFA-Methode als zuegloh konfiguriert. Bitte wend di a din Administrator." + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "કોઈ MFA પદ્ધતિઓ મંજૂર તરીકે ગોઠવેલી નથી. કૃપા કરીને તમારા વ્યવસ્થાપકનો સંપર્ક કરો." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "לא הוגדרו שיטות MFA כמותרות. אנא פנה למנהל המערכת שלך." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "कोई MFA विधियां अनुमत के रूप में कॉन्फ़िगर नहीं की गई हैं। कृपया अपने व्यवस्थापक से संपर्क करें।" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nijedna MFA metoda nije dopuštena. Kontaktirajte administratora." + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nincsenek engedélyezettként konfigurált MFA-módszerek. Lépjen kapcsolatba a rendszergazdával." + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tidak ada metode MFA yang dikonfigurasi sebagai diizinkan. Silakan hubungi administrator Anda." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nessun metodo MFA è configurato come consentito. Contatta il tuo amministratore." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "許可されたMFA方法が設定されていません。管理者にお問い合わせください。" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಯಾವುದೇ MFA ವಿಧಾನಗಳನ್ನು ಅನುಮತಿಸಲಾಗಿದೆ ಎಂದು ಕಾನ್ಫಿಗರ್ ಮಾಡಲಾಗಿಲ್ಲ. ದಯವಿಟ್ಟು ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ." + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "허용된 MFA 방법이 구성되어 있지 않습니다. 관리자에게 문의하세요." + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ndenge moko te ya MFA esalemi lokola endimami. Bengelaki kozwa contact na administratɛrɛ na yo." + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nav konfigurētas atļautās MFA metodes. Lūdzu, sazinieties ar administratoru." + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "कोणत्याही MFA पद्धती परवानगी म्हणून कॉन्फिगर केलेल्या नाहीत. कृपया तुमच्या प्रशासकाशी संपर्क साधा." + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tiada kaedah MFA dikonfigurasikan sebagai dibenarkan. Sila hubungi pentadbir anda." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingen MFA-metoder er konfigurert som tillatt. Vennligst kontakt administratoren din." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Er zijn geen MFA-methoden toegestaan. Neem contact op met je beheerder." + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingen MFA-metodar er konfigurert som tillate. Ver venleg og kontakt administratoren din." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Żadne metody MFA nie są skonfigurowane jako dozwolone. Skontaktuj się z administratorem." + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nenhum método de MFA está configurado como permitido. Entre em contato com seu administrador." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nenhum método de MFA está configurado como permitido. Entre em contato com seu administrador." + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nenhum método de MFA está configurado como permitido. Contacte o seu administrador." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nicio metodă MFA nu este configurată ca permisă. Contactați administratorul." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Не настроены разрешенные методы MFA. Обратитесь к администратору." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nie sú nakonfigurované žiadne povolené metódy MFA. Obráťte sa na správcu." + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nobena metoda MFA ni konfigurirana kot dovoljena. Obrnite se na skrbnika." + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ниједан MFA метод није конфигурисан као дозвољен. Молимо контактирајте администратора." + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nijedan MFA metod nije konfigurisan kao dozvoljen. Molimo kontaktirajte administratora." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inga MFA-metoder är konfigurerade som tillåtna. Kontakta din administratör." + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "அனுமதிக்கப்பட்ட MFA முறைகள் எதுவும் கட்டமைக்கப்படவில்லை. உங்கள் நிர்வாகியைத் தொடர்பு கொள்ளவும்." + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ไม่มีวิธี MFA ที่กำหนดค่าเป็นที่อนุญาต โปรดติดต่อผู้ดูแลระบบของคุณ" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "İzin verilen MFA yöntemi yapılandırılmamış. Lütfen yöneticinize başvurun." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Не налаштовано дозволених методів MFA. Зверніться до адміністратора." + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "اجازت یافتہ کے طور پر کوئی MFA طریقے ترتیب نہیں دیے گئے۔ براہ کرم اپنے منتظم سے رابطہ کریں۔" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Không có phương thức MFA nào được cấu hình là cho phép. Vui lòng liên hệ với quản trị viên của bạn." + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "未配置任何允许的 MFA 验证方式。请联系管理员。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "未設定任何允許的 MFA 驗證方式。請聯絡管理員。" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "未設定任何允許使用的 MFA 方式。請聯絡您的管理員。" + } + } + } + }, + "OK" : { + "comment" : "OK button title.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "موافق" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "ОК" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ওকে" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "D'acord" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aceptar" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "تأیید" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "ઓકે" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "אישור" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "ठीक है" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "U redu" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಸರಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "확인" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Malamu" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Labi" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "ठीक आहे" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "ОК" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "V redu" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "У реду" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "U redu" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "சரி" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ตกลง" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tamam" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "ОК" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "ٹھیک ہے" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "确定" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "確定" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "確定" + } + } + } + }, + "Password" : { + "comment" : "Field label for password", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "كلمة المرور" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Парола" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "পাসওয়ার্ড" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Contrasenya" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Heslo" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adgangskode" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Κωδικός πρόσβασης" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Password" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Password" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Password" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Password" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Password" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Password" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Password" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Contraseña" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "رمز عبور" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Salasana" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Password" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mot de passe" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mot de passe" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "પાસવર્ડ" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "סיסמה" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "पासवर्ड" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lozinka" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jelszó" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kata Sandi" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Password" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "パスワード" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಪಾಸ್‌ವರ್ಡ್" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "비밀번호" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Liloba ya Kobombama" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Parole" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "पासवर्ड" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kata Laluan" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passord" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wachtwoord" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passord" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hasło" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Senha" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Senha" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Palavra-passe" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Parolă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Пароль" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Heslo" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geslo" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Лозинка" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lozinka" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lösenord" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "கடவுச்சொல்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "รหัสผ่าน" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Şifre" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Пароль" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "پاس ورڈ" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mật khẩu" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "密码" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "密碼" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "密碼" + } + } + } + }, + "Password cannot be empty." : { + "extractionState" : "stale", + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Паролата не може да бъде празна." + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "পাসওয়ার্ড খালি থাকতে পারে না।" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "La contrasenya no pot estar buida." + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Heslo nesmí být prázdné." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adgangskoden må ikke være tom." + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Das Passwort darf nicht leer sein." + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Das Passwort darf nicht leer sein." + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ο κωδικός πρόσβασης δεν μπορεί να είναι κενός." + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Password cannot be empty." + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Password cannot be empty." + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Password cannot be empty." + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Password cannot be empty." + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Password cannot be empty." + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Password cannot be empty." + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "رمز عبور نمی‌تواند خالی باشد." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Salasana ei voi olla tyhjä." + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ang password ay hindi maaaring walang laman." + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Le mot de passe ne peut pas être vide." + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "S'Passwort darf nöd leer si." + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "પાસવર્ડ ખાલી ન હોઈ શકે." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הסיסמה אינה יכולה להיות ריקה." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "पासवर्ड खाली नहीं हो सकता।" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lozinka ne može biti prazna." + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "A jelszó nem lehet üres." + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kata sandi tidak boleh kosong." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "La password non può essere vuota." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "パスワードを空にすることはできません。" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಪಾಸ್‌ವರ್ಡ್ ಖಾಲಿ ಇರಬಾರದು." + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "비밀번호는 비워둘 수 없습니다." + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Liloba ya kobombama ekoki kozala mpamba te." + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Parole nevar būt tukša." + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "पासवर्ड रिक्त असू शकत नाही." + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kata laluan tidak boleh kosong." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passordet kan ikke være tomt." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wachtwoord mag niet leeg zijn." + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passordet kan ikkje vere tomt." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hasło nie może być puste." + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "A senha não pode estar vazia." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "A senha não pode estar vazia." + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "A palavra-passe não pode estar vazia." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Parola nu poate fi goală." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Пароль не может быть пустым." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Heslo nemôže byť prázdne." + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geslo ne sme biti prazno." + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Лозинка не може бити празна." + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lozinka ne može biti prazna." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lösenordet kan inte vara tomt." + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "கடவுச்சொல் காலியாக இருக்க முடியாது." + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "รหัสผ่านต้องไม่ว่างเปล่า" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Şifre boş olamaz." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Пароль не може бути порожнім." + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "پاس ورڈ خالی نہیں ہو سکتا۔" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mật khẩu không được để trống." + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "密码不能为空。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "密碼不能為空。" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "密碼不能為空白。" + } + } + } + }, + "Password must be at least 6 characters long." : { + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Паролата трябва да бъде поне 6 знака." + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "পাসওয়ার্ড কমপক্ষে ৬ অক্ষরের হতে হবে।" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "La contrasenya ha de tenir com a mínim 6 caràcters." + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Heslo musí mít alespoň 6 znaků." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adgangskoden skal være mindst 6 tegn lang." + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Das Passwort muss mindestens 6 Zeichen lang sein." + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Das Passwort muss mindestens 6 Zeichen lang sein." + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ο κωδικός πρόσβασης πρέπει να έχει τουλάχιστον 6 χαρακτήρες." + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Password must be at least 6 characters long." + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Password must be at least 6 characters long." + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Password must be at least 6 characters long." + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Password must be at least 6 characters long." + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Password must be at least 6 characters long." + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Password must be at least 6 characters long." + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "رمز عبور باید حداقل ۶ کاراکتر باشد." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Salasanan on oltava vähintään 6 merkkiä pitkä." + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ang password ay dapat na hindi bababa sa 6 characters ang haba." + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Le mot de passe doit contenir au moins 6 caractères." + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "S'Passwort muess mindischtens 6 Zeiche lang si." + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "પાસવર્ડ ઓછામાં ઓછો 6 અક્ષરોનો હોવો જોઈએ." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הסיסמה חייבת להיות באורך של 6 תווים לפחות." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "पासवर्ड कम से कम 6 अक्षर लंबा होना चाहिए।" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lozinka mora imati najmanje 6 znakova." + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "A jelszónak legalább 6 karakter hosszúnak kell lennie." + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kata sandi harus terdiri dari minimal 6 karakter." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "La password deve essere lunga almeno 6 caratteri." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "パスワードは6文字以上である必要があります。" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಪಾಸ್‌ವರ್ಡ್ ಕನಿಷ್ಠ 6 ಅಕ್ಷರಗಳಷ್ಟು ಉದ್ದವಾಗಿರಬೇಕು." + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "비밀번호는 6자 이상이어야 합니다." + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Liloba ya kobombama esengeli kozala na bakarakteri 6 o mingi." + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Parolei jābūt vismaz 6 rakstzīmes garai." + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "पासवर्ड किमान 6 वर्णांचा असणे आवश्यक आहे." + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kata laluan mesti sekurang-kurangnya 6 aksara panjang." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passordet må være minst 6 tegn langt." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wachtwoord moet minstens 6 tekens lang zijn." + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passordet må vere minst 6 teikn langt." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hasło musi mieć co najmniej 6 znaków." + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "A senha deve ter pelo menos 6 caracteres." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "A senha deve ter pelo menos 6 caracteres." + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "A palavra-passe deve ter pelo menos 6 caracteres." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Parola trebuie să aibă cel puțin 6 caractere." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Пароль должен содержать не менее 6 символов." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Heslo musí mať aspoň 6 znakov." + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geslo mora vsebovati vsaj 6 znakov." + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Лозинка мора имати најмање 6 карактера." + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lozinka mora imati najmanje 6 karaktera." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lösenordet måste vara minst 6 tecken långt." + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "கடவுச்சொல் குறைந்தது 6 எழுத்துகள் நீளமாக இருக்க வேண்டும்." + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "รหัสผ่านต้องมีความยาวอย่างน้อย 6 ตัวอักษร" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Şifre en az 6 karakter uzunluğunda olmalıdır." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Пароль повинен містити не менше 6 символів." + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "پاس ورڈ کم از کم 6 حروف لمبا ہونا چاہیے۔" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mật khẩu phải có ít nhất 6 ký tự." + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "密码至少需要 6 个字符。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "密碼至少需 6 個字元。" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "密碼至少需 6 個字元。" + } + } + } + }, + "Password Updated" : { + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Паролата е актуализирана" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "পাসওয়ার্ড আপডেট হয়েছে" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Contrasenya actualitzada" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Heslo aktualizováno" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adgangskode opdateret" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort aktualisiert" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort aktualisiert" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ο κωδικός πρόσβασης ενημερώθηκε" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Password Updated" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Password Updated" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Password Updated" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Password Updated" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Password Updated" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Password Updated" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "رمز عبور به‌روزرسانی شد" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Salasana päivitetty" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Na-update ang Password" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mot de passe mis à jour" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort aktualisiert" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "પાસવર્ડ અપડેટ થયો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הסיסמה עודכנה" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "पासवर्ड अपडेट किया गया" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lozinka je ažurirana" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jelszó frissítve" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kata Sandi Diperbarui" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Password aggiornata" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "パスワードが更新されました" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಪಾಸ್‌ವರ್ಡ್ ನವೀಕರಿಸಲಾಗಿದೆ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "비밀번호 업데이트됨" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Liloba ya Kobombama Esalami ya Sika" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Parole atjaunināta" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "पासवर्ड अपडेट केला" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kata Laluan Dikemas Kini" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passord oppdatert" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wachtwoord bijgewerkt" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passord oppdatert" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hasło zaktualizowane" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Senha atualizada" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Senha atualizada" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Palavra-passe atualizada" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Parolă actualizată" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Пароль обновлен" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Heslo aktualizované" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geslo posodobljeno" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Лозинка ажурирана" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lozinka ažurirana" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lösenord uppdaterat" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "கடவுச்சொல் புதுப்பிக்கப்பட்டது" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "อัปเดตรหัสผ่านแล้ว" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Şifre güncellendi" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Пароль оновлено" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "پاس ورڈ اپ ڈیٹ ہو گیا" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mật khẩu đã được cập nhật" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "密码已更新" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "密碼已更新" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "密碼已更新" + } + } + } + }, + "PasswordRecoveryEmailSentMessage" : { + "comment" : "Message displayed when the email for password recovery has been sent.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "اتبع التعليمات المرسلة إلى %@ لاستعادة كلمة المرور الخاصة بك." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Folge den Anweisungen, die an %@ gesendet wurden, um dein Passwort wiederherzustellen." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Follow the instructions sent to %@ to recover your password." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sigue las instrucciones enviadas a %@ para recuperar tu contraseña." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Suis les instructions envoyées à %@ pour récupérer ton mot de passe." + } + } + } + }, + "PasswordRecoveryEmailSentTitle" : { + "comment" : "Title of a message displayed when the email for password recovery has been sent. Use short/abbreviated translation for 'email' which is less than 15 chars.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تحقق من بريدك الإلكتروني" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Überprüfe deine E-Mails" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Check your email" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Revisa tu correo" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vérifie tes e-mails" + } + } + } + }, + "PasswordRecoveryMessage" : { + "comment" : "Explanation on how the password of an account can be recovered. Use short/abbreviated translation for 'email' which is less than 15 chars.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "احصل على التعليمات المرسلة إلى هذا البريد الإلكتروني التي توضح كيفية إعادة تعيين كلمة المرور الخاصة بك." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Erhalte Anweisungen an diese E-Mail, die erklären, wie du dein Passwort zurücksetzen kannst." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Get instructions sent to this email that explain how to reset your password." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recibe instrucciones enviadas a este correo que explican cómo restablecer tu contraseña." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reçois des instructions envoyées à cet e-mail qui expliquent comment réinitialiser ton mot de passe." + } + } + } + }, + "PasswordRecoveryTitle" : { + "comment" : "Title for password recovery screen.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "استعادة كلمة المرور" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort wiederherstellen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recover password" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recuperar contraseña" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Récupérer le mot de passe" + } + } + } + }, + "PasswordVerificationMessage" : { + "comment" : "Message to explain to the user that password is needed for an account with this email address.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "لقد استخدمت %@ بالفعل لتسجيل الدخول. أدخل كلمة المرور لذلك الحساب." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du hast bereits %@ verwendet, um dich anzumelden. Gib dein Passwort für dieses Konto ein." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "You've already used %@ to sign in. Enter your password for that account." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ya has usado %@ para iniciar sesión. Ingresa tu contraseña para esa cuenta." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tu as déjà utilisé %@ pour te connecter. Saisis ton mot de passe pour ce compte." + } + } + } + }, + "Phone" : { + "comment" : "Field label for phone", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "الهاتف" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Телефон" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ফোন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telèfon" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telefon" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telefon" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telefon" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telefon" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telefon" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Τηλέφωνο" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Phone" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Phone" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Phone" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Phone" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Phone" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Phone" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Phone" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Teléfono" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "تلفن" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Puhelin" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telepono" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Téléphone" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Téléphone" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telefon" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "ફોન" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "טלפון" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "फ़ोन" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telefon" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telefon" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telepon" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telefono" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "電話" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ದೂರವಾಣಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "전화" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telefone" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tālrunis" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "फोन" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telefon" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telefon" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telefoon" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telefon" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telefon" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telefone" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telefone" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telefone" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telefon" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Телефон" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telefón" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telefon" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Телефон" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telefon" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telefon" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "தொலைபேசி" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "โทรศัพท์" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telefon" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Телефон" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "فون" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Điện thoại" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "手机" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "電話" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "電話" + } + } + } + }, + "Phone Number" : { + "comment" : "Field label for phone number", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "رقم الهاتف" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Телефонен номер" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ফোন নম্বর" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Número de telèfon" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telefonní číslo" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telefonnummer" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telefonnummer" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telefonnummer" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telefonnummer" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Αριθμός τηλεφώνου" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Phone Number" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Phone Number" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Phone Number" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Phone Number" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Phone Number" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Phone Number" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Phone Number" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Número de teléfono" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "شماره تلفن" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Puhelinnumero" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Numero ng Telepono" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Numéro de téléphone" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Numéro de téléphone" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telefonnummere" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "ફોન નંબર" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "מספר טלפון" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "फ़ोन नंबर" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Broj telefona" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telefonszám" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nomor Telepon" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Numero di telefono" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "電話番号" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ದೂರವಾಣಿ ಸಂಖ್ಯೆ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "전화번호" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nimero ya Telefone" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tālruņa numurs" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "फोन नंबर" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nombor Telefon" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telefonnummer" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telefoonnummer" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telefonnummer" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Numer telefonu" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Número de telefone" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Número de telefone" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Número de telefone" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Număr de telefon" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Номер телефона" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telefónne číslo" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telefonska številka" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Број телефона" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Broj telefona" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telefonnummer" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "தொலைபேசி எண்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "หมายเลขโทรศัพท์" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telefon numarası" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Номер телефону" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "فون نمبر" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Số điện thoại" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "手机号" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "電話號碼" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "電話號碼" + } + } + } + }, + "PlaceholderChosePassword" : { + "comment" : "Placeholder of secret input cell when user changes password.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "اختر كلمة المرور" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort wählen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Choose password" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Elegir contraseña" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Choisis un mot de passe" + } + } + } + }, + "PlaceholderEnterEmail" : { + "comment" : "Placeholder of input cell when user changes name. Use short/abbreviated translation for 'email' which is less than 15 chars.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "أدخل بريدك الإلكتروني" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gib deine E-Mail ein" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter your email" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingresa tu correo" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Saisis ton e-mail" + } + } + } + }, + "PlaceholderEnterName" : { + "comment" : "Placeholder of input cell when user changes name.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter your name" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gib deinen Namen ein" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter your name" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingresa tu nombre" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Saisis ton nom" + } + } + } + }, + "PlaceholderEnterPassword" : { + "comment" : "Placeholder of secret input cell when user changes password.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "أدخل كلمة المرور" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gib dein Passwort ein" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter your password" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingresa tu contraseña" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Saisis ton mot de passe" + } + } + } + }, + "PlaceholderNewPassword" : { + "comment" : "Placeholder of secret input cell when user confirms password.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "كلمة مرور جديدة" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Neues Passwort" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "New password" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nueva contraseña" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nouveau mot de passe" + } + } + } + }, + "Please tap on the link in your email to complete verification." : { + "comment" : "A message displayed in a sheet that appears after a user requests email verification. It instructs the user to tap on the link in their email to complete the verification process.", + "isCommentAutoGenerated" : true, + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Докоснете линка в имейла си, за да завършите проверката." + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "যাচাইকরণ সম্পূর্ণ করতে আপনার ইমেইলের লিংকে ট্যাপ করুন।" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Toca l'enllaç del correu electrònic per completar la verificació." + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Klepněte na odkaz ve svém emailu pro dokončení ověření." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tryk på linket i din email for at fuldføre bekræftelsen." + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bitte tippen Sie auf den Link in Ihrer E-Mail, um die Verifizierung abzuschließen." + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bitte tippen Sie auf den Link in Ihrer E-Mail, um die Verifizierung abzuschliessen." + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Πατήστε στον σύνδεσμο στο email σας για να ολοκληρώσετε την επαλήθευση." + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Please tap on the link in your email to complete verification." + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Please tap on the link in your email to complete verification." + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Please tap on the link in your email to complete verification." + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Please tap on the link in your email to complete verification." + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Please tap on the link in your email to complete verification." + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Please tap on the link in your email to complete verification." + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "لطفاً برای تکمیل تأیید روی لینک در ایمیل خود ضربه بزنید." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Viimeistele vahvistus napauttamalla sähköpostissa olevaa linkkiä." + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mangyaring i-tap ang link sa iyong email upang makumpleto ang verification." + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Veuillez appuyer sur le lien dans votre e-mail pour terminer la vérification." + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bitte tipp uf de Link i dinere E-Mail zum d'Verifizierig abzschliesse." + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "ચકાસણી પૂર્ણ કરવા માટે કૃપા કરીને તમારા ઇમેઇલમાંની લિંક પર ટેપ કરો." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "אנא הקש על הקישור בדוא״ל שלך כדי להשלים את האימות." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "सत्यापन पूरा करने के लिए कृपया अपने ईमेल में लिंक पर टैप करें।" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dodirnite poveznicu u vašem emailu kako biste dovršili verifikaciju." + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Koppintson az e-mailjében lévő hivatkozásra az ellenőrzés befejezéséhez." + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Silakan ketuk tautan di email Anda untuk menyelesaikan verifikasi." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tocca il link nella tua email per completare la verifica." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "メール内のリンクをタップして確認を完了してください。" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಪರಿಶೀಲನೆಯನ್ನು ಪೂರ್ಣಗೊಳಿಸಲು ದಯವಿಟ್ಟು ನಿಮ್ಮ ಇಮೇಲ್‌ನಲ್ಲಿರುವ ಲಿಂಕ್ ಅನ್ನು ಟ್ಯಾಪ್ ಮಾಡಿ." + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "확인을 완료하려면 이메일의 링크를 탭하세요." + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bengelaki finá na lien oyo ezali na email na yo mpo na kosilisa kondimisa." + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lūdzu, pieskarieties saitei e-pastā, lai pabeigtu verifikāciju." + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "पडताळणी पूर्ण करण्यासाठी कृपया तुमच्या ईमेलमधील लिंकवर टॅप करा." + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sila ketik pada pautan dalam e-mel anda untuk melengkapkan pengesahan." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vennligst trykk på lenken i e-posten din for å fullføre bekreftelsen." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tik op de link in je e-mail om de verificatie te voltooien." + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ver venleg og trykk på lenka i e-posten din for å fullføre stadfestinga." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dotknij linku w swoim e-mailu, aby ukończyć weryfikację." + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Toque no link em seu e-mail para concluir a verificação." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Toque no link em seu e-mail para concluir a verificação." + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Toque na ligação no seu e-mail para concluir a verificação." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Atingeți linkul din e-mailul dvs. pentru a finaliza verificarea." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Пожалуйста, нажмите на ссылку в вашем письме, чтобы завершить проверку." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Klepnite na odkaz v e-maile a dokončite overenie." + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tapnite na povezavo v svoji e-pošti za dokončanje preverjanja." + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Молимо додирните линк у вашем имејлу да завршите верификацију." + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Molimo dodirnite link u vašem imejlu da završite verifikaciju." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tryck på länken i din e-post för att slutföra verifieringen." + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "சரிபார்ப்பை முடிக்க உங்கள் மின்னஞ்சலில் உள்ள இணைப்பைத் தட்டவும்." + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "โปรดแตะลิงก์ในอีเมลของคุณเพื่อยืนยันให้เสร็จสมบูรณ์" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Doğrulamayı tamamlamak için lütfen e-postanızdaki bağlantıya dokunun." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Будь ласка, торкніться посилання в своєму листі, щоб завершити перевірку." + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "تصدیق مکمل کرنے کے لیے براہ کرم اپنی ای میل میں لنک پر ٹیپ کریں۔" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vui lòng nhấn vào liên kết trong email của bạn để hoàn tất xác minh." + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "请点击邮件中的链接完成验证。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "請點擊電子郵件中的連結以完成驗證。" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "請點擊電子郵件中的連結以完成驗證。" + } + } + } + }, + "Prefer Email link sign-in?" : { + "comment" : "Button label to push user to email link sign-in", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تفضل تسجيل الدخول برابط البريد الإلكتروني؟" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Предпочитате вход чрез имейл линк?" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ইমেইল লিংক সাইন-ইন পছন্দ করেন?" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prefereixes iniciar sessió amb un enllaç per correu?" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preferujete přihlášení pomocí emailového odkazu?" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Foretrækker du login via emaillink?" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lieber mit E-Mail-Link anmelden?" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bevorzugen Sie die Anmeldung per E-Mail-Link?" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bevorzugen Sie die Anmeldung per E-Mail-Link?" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Προτιμάτε σύνδεση με σύνδεσμο email;" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prefer Email link sign-in?" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prefer email-link sign-in?" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prefer email link sign-in?" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prefer email link sign-in?" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prefer email link sign-in?" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prefer email link sign-in?" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prefer email link sign-in?" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "¿Prefieres iniciar sesión con enlace por correo?" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ورود با لینک ایمیل را ترجیح می‌دهید؟" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Haluatko kirjautua sähköpostilinkillä?" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mas gusto ang Email link sign-in?" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Préfères-tu la connexion par lien e-mail ?" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vous préférez la connexion par lien e-mail ?" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bevorzugsch Aamäldig per E-Mail-Link?" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "ઇમેઇલ લિંક સાઇન-ઇન પસંદ કરો છો?" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "מעדיף התחברות באמצעות קישור בדוא״ל?" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "ईमेल लिंक साइन-इन पसंद करते हैं?" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preferirate prijavu putem email poveznice?" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inkább e-mail hivatkozással szeretne bejelentkezni?" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lebih suka masuk dengan tautan email?" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preferisci l'accesso tramite link email?" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "メールリンクでのサインインを希望しますか?" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಇಮೇಲ್ ಲಿಂಕ್ ಸೈನ್-ಇನ್ ಆದ್ಯತೆ ನೀಡುವಿರಾ?" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이메일 링크 로그인을 선호하시나요?" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Olingi kokota na lien ya email?" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vēlaties pierakstīties ar e-pasta saiti?" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "ईमेल लिंक साइन-इन पसंत करता का?" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lebih suka log masuk dengan pautan e-mel?" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Foretrekker du pålogging med e-postlenke?" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Liever inloggen via e-mail-link?" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Føretrekker du pålogging med e-postlenke?" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wolisz logowanie przez link w e-mailu?" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prefere login por link de e-mail?" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prefere login por link de e-mail?" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prefere início de sessão por ligação de e-mail?" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preferați conectarea prin link de e-mail?" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Предпочитаете вход по ссылке из электронной почты?" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uprednostňujete prihlásenie odkazom z e-mailu?" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Raje prijavo s povezavo iz e-pošte?" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Више волите пријављивање путем имејл линка?" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Više volite prijavljivanje putem imejl linka?" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Föredrar du inloggning med e-postlänk?" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "மின்னஞ்சல் இணைப்பு உள்நுழைவை விரும்புகிறீர்களா?" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ต้องการลงชื่อเข้าใช้ด้วยลิงก์อีเมลหรือไม่?" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-posta bağlantısıyla oturum açmayı tercih ediyor musunuz?" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Віддаєте перевагу входу за посиланням з електронної пошти?" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "ای میل لنک سائن ان کو ترجیح دیتے ہیں؟" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bạn thích đăng nhập bằng liên kết email?" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "更喜欢使用邮箱链接登录?" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "偏好使用電子郵件連結登入?" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "偏好使用電子郵件連結登入?" + } + } + } + }, + "Privacy Policy" : { + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Политика за поверителност" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "গোপনীয়তা নীতি" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Política de privacitat" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zásady ochrany osobních údajů" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Privatlivspolitik" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Datenschutzerklärung" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Datenschutzerklärung" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Πολιτική απορρήτου" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Privacy Policy" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Privacy Policy" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Privacy Policy" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Privacy Policy" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Privacy Policy" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Privacy Policy" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "سیاست حفظ حریم خصوصی" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tietosuojakäytäntö" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Patakaran sa Privacy" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Politique de confidentialité" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dateschutzerklärig" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "ગોપનીયતા નીતિ" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "מדיניות פרטיות" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "गोपनीयता नीति" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Politika privatnosti" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adatvédelmi szabályzat" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kebijakan Privasi" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Informativa sulla privacy" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "プライバシーポリシー" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಗೌಪ್ಯತಾ ನೀತಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "개인정보 보호정책" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mobeko ya Bomoi ya Moto ye moko" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konfidencialitātes politika" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "गोपनीयता धोरण" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dasar Privasi" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Personvernerklæring" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Privacybeleid" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Personvernpolitikk" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Polityka prywatności" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Política de privacidade" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Política de privacidade" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Política de privacidade" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Politica de confidențialitate" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Политика конфиденциальности" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zásady ochrany osobných údajov" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pravilnik o zasebnosti" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Политика приватности" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Politika privatnosti" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sekretesspolicy" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "தனியுரிமைக் கொள்கை" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "นโยบายความเป็นส่วนตัว" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gizlilik politikası" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Політика конфіденційності" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "رازداری کی پالیسی" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Chính sách quyền riêng tư" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "隐私政策" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "隱私權政策" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "隱私權政策" + } + } + } + }, + "PrivacyPolicy" : { + "comment" : "Text linked to a web page with the Privacy Policy content.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "سياسة الخصوصية" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Datenschutzrichtlinie" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Privacy Policy" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Política de privacidad" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Politique de confidentialité" + } + } + } + }, + "Profile" : { + "extractionState" : "stale", + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Профил" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "প্রোফাইল" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Perfil" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profil" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profil" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profil" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profil" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Προφίλ" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profile" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profile" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profile" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profile" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profile" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profile" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "پروفایل" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profiili" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profile" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profil" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profil" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "પ્રોફાઇલ" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "פרופיל" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "प्रोफ़ाइल" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profil" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profil" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profil" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profilo" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "プロフィール" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಪ್ರೊಫೈಲ್" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "프로필" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profil" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profils" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "प्रोफाइल" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profil" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profil" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profiel" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profil" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profil" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Perfil" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Perfil" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Perfil" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profil" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Профиль" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profil" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profil" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Профил" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profil" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profil" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "சுயவிவரம்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "โปรไฟล์" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profil" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Профіль" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "پروفائل" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hồ sơ" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "个人资料" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "個人資料" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "個人資料" + } + } + } + }, + "ProviderTitleFacebook" : { + "comment" : "Title of Facebook provider", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "فيسبوك" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook" + } + } + } + }, + "ProviderTitleGoogle" : { + "comment" : "Title of Google provider", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "جوجل" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google" + } + } + } + }, + "ProviderTitlePassword" : { + "comment" : "Title of Password/Email provider. Use short/abbreviated translation for 'email' which is less than 15 chars.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "البريد الإلكتروني" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-Mail" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Email" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Correo" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-mail" + } + } + } + }, + "ProviderTitleTwitter" : { + "comment" : "Title of Twitter provider", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تويتر" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + } + } + }, + "ProviderUsedPreviouslyMessage" : { + "comment" : "Alert message to let user know what identity provider (second placeholder, ex. Google) was used previously for the email address (first placeholder).", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "لقد استخدمت %@ بالفعل. سجل الدخول باستخدام %@ للمتابعة." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du hast bereits %@ verwendet. Melde dich mit %@ an, um fortzufahren." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "You've already used %@. Sign in with %@ to continue." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ya has usado %@. Inicia sesión con %@ para continuar." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tu as déjà utilisé %@. Connecte-toi avec %@ pour continuer." + } + } + } + }, + "ReauthenticateEditPasswordAlertMessage" : { + "comment" : "Alert message shown when re-authenticating before editing account password.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "لتغيير كلمة المرور الخاصة بك، تحتاج أولاً إلى إدخال كلمة المرور الحالية." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Um dein Passwort zu ändern, musst du zuerst dein aktuelles Passwort eingeben." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "In order to change your password, you first need to enter your current password." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Para cambiar tu contraseña, primero debes ingresar tu contraseña actual." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pour modifier ton mot de passe, tu dois d'abord saisir ton mot de passe actuel." + } + } + } + }, + "Recover password" : { + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Възстановяване на парола" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "পাসওয়ার্ড পুনরুদ্ধার করুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recupera la contrasenya" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Obnovit heslo" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gendan adgangskode" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort wiederherstellen" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort wiederherstellen" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ανάκτηση κωδικού πρόσβασης" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recover password" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recover password" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recover password" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recover password" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recover password" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recover password" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "بازیابی رمز عبور" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Palauta salasana" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ibalik ang password" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Récupérer le mot de passe" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort wiederhärstelle" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "પાસવર્ડ પુનઃપ્રાપ્ત કરો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "שחזור סיסמה" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "पासवर्ड पुनर्प्राप्त करें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Oporavi lozinku" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jelszó helyreállítása" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pulihkan kata sandi" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recupera password" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "パスワードを回復" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಪಾಸ್‌ವರ್ಡ್ ಮರುಪಡೆಯಿರಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "비밀번호 복구" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zongisa liloba ya kobombama" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Atgūt paroli" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "पासवर्ड पुनर्प्राप्त करा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pulihkan kata laluan" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gjenopprett passord" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wachtwoord herstellen" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gjenopprett passord" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odzyskaj hasło" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recuperar senha" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recuperar senha" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recuperar palavra-passe" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recuperați parola" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Восстановить пароль" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Obnoviť heslo" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Obnovi geslo" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Поврати лозинку" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Povrati lozinku" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Återställ lösenord" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "கடவுச்சொல்லை மீட்டெடுக்கவும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "กู้คืนรหัสผ่าน" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Şifreyi kurtar" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Відновити пароль" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "پاس ورڈ بحال کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Khôi phục mật khẩu" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "找回密码" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "找回密碼" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "找回密碼" + } + } + } + }, + "Remove" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "إزالة" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Премахване" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "অপসারণ করুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Elimina" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odebrat" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fjern" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entfernen" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entfernen" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entfernen" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Κατάργηση" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Remove" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Remove" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Remove" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Remove" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Remove" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Remove" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Remove" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eliminar" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "حذف" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poista" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alisin" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Retirer" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Supprimer" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entferne" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "દૂર કરો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הסרה" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "हटाएं" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ukloni" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eltávolítás" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hapus" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rimuovi" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "削除" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ತೆಗೆದುಹಾಕಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "제거" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Longola" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Noņemt" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "काढा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alih keluar" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fjern" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verwijderen" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fjern" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Usuń" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Remover" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Remover" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Remover" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eliminați" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Удалить" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odstrániť" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odstrani" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Уклони" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ukloni" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ta bort" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "அகற்று" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ลบออก" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kaldır" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Видалити" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "ہٹائیں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xóa" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "移除" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "移除" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "移除" + } + } + } + }, + "Resend" : { + "comment" : "Resend button title.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "إعادة إرسال" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Изпрати отново" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "পুনরায় পাঠান" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Torna a enviar" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Znovu odeslat" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gensend" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Erneut senden" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Erneut senden" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Erneut senden" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Επαναποστολή" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Resend" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Resend" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Resend" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Resend" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Resend" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Resend" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Resend" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reenviar" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ارسال مجدد" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lähetä uudelleen" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ipadala muli" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Renvoyer" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Renvoyer" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nomol schicke" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "ફરીથી મોકલો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "שלח שוב" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "फिर से भेजें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pošalji ponovno" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Újraküldés" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kirim ulang" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Invia di nuovo" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "再送信" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಮತ್ತೆ ಕಳುಹಿಸಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "다시 보내기" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tinda lisusu" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nosūtīt vēlreiz" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "पुन्हा पाठवा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hantar semula" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send på nytt" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Opnieuw verzenden" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send på nytt" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wyślij ponownie" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reenviar" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reenviar" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reenviar" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Retrimiteți" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Отправить снова" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odoslať znova" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pošlji znova" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Пошаљи поново" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pošalji ponovo" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skicka igen" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "மீண்டும் அனுப்பு" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ส่งอีกครั้ง" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yeniden gönder" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Надіслати знову" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "دوبارہ بھیجیں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gửi lại" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "重新发送" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "重新傳送" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "重新傳送" + } + } + } + }, + "Resend Code" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "إعادة إرسال الرمز" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Изпрати кода отново" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "কোড পুনরায় পাঠান" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Torna a enviar el codi" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Znovu odeslat kód" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gensend kode" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Code erneut senden" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Code erneut senden" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Code erneut senden" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Επαναποστολή κωδικού" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Resend Code" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Resend Code" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Resend Code" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Resend Code" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Resend Code" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Resend Code" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Resend Code" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reenviar código" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ارسال مجدد کد" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lähetä koodi uudelleen" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ipadala Muli ang Code" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Renvoyer le code" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Renvoyer le code" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Code nomol schicke" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "કોડ ફરીથી મોકલો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "שלח קוד שוב" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "कोड फिर से भेजें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pošalji kod ponovno" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kód újraküldése" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kirim Ulang Kode" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Invia di nuovo il codice" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "コードを再送信" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಕೋಡ್ ಮತ್ತೆ ಕಳುಹಿಸಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "코드 다시 보내기" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tinda Kode Lisusu" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nosūtīt kodu vēlreiz" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "कोड पुन्हा पाठवा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hantar Semula Kod" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send kode på nytt" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Code opnieuw verzenden" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send kode på nytt" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wyślij kod ponownie" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reenviar código" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reenviar código" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reenviar código" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Retrimiteți codul" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Отправить код снова" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odoslať kód znova" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pošlji kodo znova" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Пошаљи код поново" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pošalji kod ponovo" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skicka kod igen" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "குறியீட்டை மீண்டும் அனுப்பு" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ส่งรหัสอีกครั้ง" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kodu yeniden gönder" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Надіслати код знову" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "کوڈ دوبارہ بھیجیں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gửi lại mã" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "重新发送验证码" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "重新傳送驗證碼" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "重新傳送驗證碼" + } + } + } + }, + "Save" : { + "comment" : "Save button title.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "حفظ" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Запази" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "সংরক্ষণ করুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Desa" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uložit" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gem" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Speichern" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Speichern" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Speichern" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Αποθήκευση" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Save" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Save" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Save" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Save" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Save" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Save" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Save" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Guardar" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ذخیره" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tallenna" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "I-save" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enregistrer" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enregistrer" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Speichere" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "સાચવો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "שמירה" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "सहेजें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spremi" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mentés" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Simpan" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Salva" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "保存" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಉಳಿಸಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "저장" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bomba" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Saglabāt" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "जतन करा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Simpan" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lagre" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Opslaan" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lagre" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zapisz" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Salvar" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Salvar" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Guardar" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Salvați" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Сохранить" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uložiť" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Shrani" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Сачувај" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sačuvaj" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spara" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "சேமி" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "บันทึก" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kaydet" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Зберегти" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "محفوظ کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lưu" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "保存" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "儲存" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "儲存" + } + } + } + }, + "Scan QR Code" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "مسح رمز QR" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Сканирайте QR код" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "QR কোড স্ক্যান করুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Escaneja el codi QR" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Naskenovat QR kód" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Scan QR-kode" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "QR-Code scannen" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "QR-Code scannen" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "QR-Code scannen" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Σάρωση κωδικού QR" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Scan QR Code" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Scan QR Code" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Scan QR Code" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Scan QR Code" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Scan QR Code" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Scan QR Code" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Scan QR Code" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Escanear código QR" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "اسکن کد QR" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skannaa QR-koodi" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "I-scan ang QR Code" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Scanner le code QR" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Scanner le code QR" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "QR-Code scanne" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "QR કોડ સ્કેન કરો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "סרוק קוד QR" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "QR कोड स्कैन करें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skeniraj QR kod" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "QR-kód beolvasása" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pindai Kode QR" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Scansiona il codice QR" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "QRコードをスキャン" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "QR ಕೋಡ್ ಸ್ಕ್ಯಾನ್ ಮಾಡಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "QR 코드 스캔" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Talá Kode QR" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skenēt QR kodu" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "QR कोड स्कॅन करा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Imbas Kod QR" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skann QR-kode" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "QR-code scannen" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skann QR-kode" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zeskanuj kod QR" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Escanear código QR" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Escanear código QR" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Digitalizar código QR" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Scanați codul QR" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Сканировать QR-код" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skenovať QR kód" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skeniraj QR kodo" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Скенирај QR код" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skeniraj QR kod" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skanna QR-kod" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "QR குறியீட்டை ஸ்கேன் செய்யவும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "สแกนคิวอาร์โค้ด" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "QR kodunu tara" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Сканувати QR-код" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "QR کوڈ اسکین کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quét mã QR" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "扫描二维码" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "掃描 QR Code" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "掃描 QR Code" + } + } + } + }, + "Scan with your authenticator app or tap to open directly" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "امسح بتطبيق المصادقة الخاص بك أو انقر للفتح مباشرة" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Сканирайте с приложението за удостоверяване или докоснете за директно отваряне" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "আপনার অথেন্টিকেটর অ্যাপ দিয়ে স্ক্যান করুন অথবা সরাসরি খোলার জন্য ট্যাপ করুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Escaneja amb la teva aplicació d'autenticació o toca per obrir directament" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Naskenujte pomocí autentikační aplikace nebo klepněte pro přímé otevření" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Scan med din autentifikationsapp eller tryk for at åbne direkte" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Scanne mit deiner Authentifizierungs-App oder tippe, um direkt zu öffnen" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Scannen Sie mit Ihrer Authentifizierungs-App oder tippen Sie, um direkt zu öffnen" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Scannen Sie mit Ihrer Authentifizierungs-App oder tippen Sie, um direkt zu öffnen" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Σαρώστε με την εφαρμογή ελέγχου ταυτότητας ή πατήστε για άμεσο άνοιγμα" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Scan with your authenticator app or tap to open directly" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Scan with your authenticator app or tap to open directly" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Scan with your authenticator app or tap to open directly" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Scan with your authenticator app or tap to open directly" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Scan with your authenticator app or tap to open directly" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Scan with your authenticator app or tap to open directly" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Scan with your authenticator app or tap to open directly" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Escanea con tu aplicación de autenticación o toca para abrir directamente" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "با برنامه احراز هویت خود اسکن کنید یا برای باز کردن مستقیم ضربه بزنید" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skannaa autentikaatiosovelluksella tai napauta avataksesi suoraan" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "I-scan gamit ang iyong authenticator app o i-tap upang direktang buksan" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Scanne avec ton application d'authentification ou appuie pour ouvrir directement" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Scannez avec votre application d'authentification ou appuyez pour ouvrir directement" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Scann mit dinere Authentifizierigs-App oder tipp zum diräkt öffne" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "તમારી પ્રમાણીકરણ એપ સાથે સ્કેન કરો અથવા સીધું ખોલવા માટે ટેપ કરો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "סרוק עם אפליקציית האימות שלך או הקש כדי לפתוח ישירות" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "अपने प्रमाणक ऐप से स्कैन करें या सीधे खोलने के लिए टैप करें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skenirajte pomoću aplikacije za autentifikaciju ili dodirnite za izravno otvaranje" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Olvassa be a hitelesítő alkalmazással, vagy érintse meg a közvetlen megnyitáshoz" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pindai dengan aplikasi autentikator Anda atau ketuk untuk membuka langsung" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Scansiona con la tua app di autenticazione o tocca per aprire direttamente" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "認証アプリでスキャンするか、タップして直接開く" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ನಿಮ್ಮ ದೃಢೀಕರಣ ಆ್ಯಪ್‌ನೊಂದಿಗೆ ಸ್ಕ್ಯಾನ್ ಮಾಡಿ ಅಥವಾ ನೇರವಾಗಿ ತೆರೆಯಲು ಟ್ಯಾಪ್ ಮಾಡಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "인증 앱으로 스캔하거나 탭하여 바로 열기" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Talá na aplikasyo na yo ya kondimisa to finá mpo na kofungola mbala moko" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skenējiet ar autentifikācijas lietotni vai pieskarieties, lai atvērtu tieši" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "तुमच्या प्रमाणीकरण अॅपसह स्कॅन करा किंवा थेट उघडण्यासाठी टॅप करा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Imbas dengan aplikasi pengesah anda atau ketik untuk membuka secara langsung" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skann med autentiseringsappen din eller trykk for å åpne direkte" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Scan met je authenticator-app of tik om direct te openen" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skann med autentiseringsappen din eller trykk for å opne direkte" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zeskanuj aplikacją uwierzytelniającą lub dotknij, aby otworzyć bezpośrednio" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Escaneie com seu aplicativo autenticador ou toque para abrir diretamente" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Escaneie com seu app autenticador ou toque para abrir diretamente" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Digitalize com a sua aplicação de autenticação ou toque para abrir diretamente" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Scanați cu aplicația dvs. de autentificare sau atingeți pentru a deschide direct" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Отсканируйте с помощью приложения для аутентификации или нажмите, чтобы открыть напрямую" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Naskenujte pomocou aplikácie na overovanie alebo klepnutím otvorte priamo" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skenirajte z aplikacijo za preverjanje pristnosti ali tapnite za neposredno odpiranje" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Скенирајте апликацијом за аутентификацију или додирните да бисте отворили директно" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skenirajte aplikacijom za autentifikaciju ili dodirnite da biste otvorili direktno" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skanna med din autentiseringsapp eller tryck för att öppna direkt" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "உங்கள் அங்கீகரிப்பு செயலி மூலம் ஸ்கேன் செய்யவும் அல்லது நேரடியாகத் திறக்க தட்டவும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "สแกนด้วยแอปตรวจสอบสิทธิ์ของคุณ หรือแตะเพื่อเปิดโดยตรง" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kimlik doğrulayıcı uygulamanızla tarayın veya doğrudan açmak için dokunun" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Скануйте за допомогою програми автентифікації або торкніться, щоб відкрити безпосередньо" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "اپنی تصدیقی ایپ سے اسکین کریں یا براہ راست کھولنے کے لیے ٹیپ کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quét bằng ứng dụng xác thực của bạn hoặc nhấn để mở trực tiếp" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "使用身份验证器应用扫描或点击直接打开" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "使用驗證器應用掃描,或輕觸直接開啟" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "請使用驗證器 App 掃描,或點擊直接開啟" + } + } + } + }, + "Security" : { + "extractionState" : "stale", + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Сигурност" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "নিরাপত্তা" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Seguretat" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zabezpečení" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sikkerhed" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sicherheit" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sicherheit" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ασφάλεια" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Security" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Security" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Security" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Security" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Security" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Security" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "امنیت" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Turvallisuus" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Seguridad" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sécurité" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sicherheit" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "સુરક્ષા" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "אבטחה" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "सुरक्षा" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sigurnost" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Biztonság" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Keamanan" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sicurezza" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "セキュリティ" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಭದ್ರತೆ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "보안" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Libateli" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Drošība" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "सुरक्षितता" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Keselamatan" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sikkerhet" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beveiliging" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tryggleik" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bezpieczeństwo" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Segurança" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Segurança" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Segurança" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Securitate" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Безопасность" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zabezpečenie" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Varnost" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Безбедност" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bezbednost" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Säkerhet" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "பாதுகாப்பு" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ความปลอดภัย" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Güvenlik" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Безпека" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "سیکیورٹی" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bảo mật" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "安全" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "安全性" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "安全性" + } + } + } + }, + "Send" : { + "comment" : "Send button title.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "إرسال" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Изпрати" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "পাঠান" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Envia" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odeslat" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Senden" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Senden" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Senden" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Αποστολή" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviar" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ارسال" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lähetä" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ipadala" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Envoyer" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Envoyer" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Schicke" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "મોકલો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "שלח" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "भेजें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pošalji" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Küldés" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kirim" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Invia" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "送信" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಕಳುಹಿಸಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "보내기" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tinda" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nosūtīt" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "पाठवा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hantar" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verzenden" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wyślij" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviar" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviar" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviar" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trimiteți" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Отправить" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odoslať" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pošlji" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Пошаљи" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pošalji" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skicka" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "அனுப்பு" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ส่ง" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gönder" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Надіслати" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "بھیجیں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gửi" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "发送" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "傳送" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "傳送" + } + } + } + }, + "Send a password recovery link to your email" : { + "comment" : "Field label for password recovery email", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "إرسال رابط استعادة كلمة المرور إلى بريدك الإلكتروني" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Изпратете линк за възстановяване на паролата на вашия имейл" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "আপনার ইমেইলে পাসওয়ার্ড পুনরুদ্ধারের লিংক পাঠান" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Envia un enllaç de recuperació de contrasenya al teu correu" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odeslat odkaz pro obnovení hesla na váš email" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send et link til gendannelse af adgangskode til din email" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort-Wiederherstellungslink an deine E-Mail senden" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Senden Sie einen Link zur Passwortwiederherstellung an Ihre E-Mail" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Senden Sie einen Link zur Passwortwiederherstellung an Ihre E-Mail" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Αποστολή συνδέσμου ανάκτησης κωδικού πρόσβασης στο email σας" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send a password recovery link to your email" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send a password recovery link to your email" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send a password recovery link to your email" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send a password recovery link to your email" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send a password recovery link to your email" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send a password recovery link to your email" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send a password recovery link to your email" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviar un enlace de recuperación de contraseña a tu correo" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "لینک بازیابی رمز عبور را به ایمیل خود ارسال کنید" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lähetä salasanan palautuslinkki sähköpostiisi" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Magpadala ng password recovery link sa iyong email" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Envoyer un lien de récupération de mot de passe à ton e-mail" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Envoyer un lien de récupération de mot de passe à votre e-mail" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Schick en Link zur Passwortwiederhärstellig a dini E-Mail" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "તમારા ઇમેઇલ પર પાસવર્ડ પુનઃપ્રાપ્તિ લિંક મોકલો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "שלח קישור לשחזור סיסמה לדוא״ל שלך" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "अपने ईमेल पर पासवर्ड पुनर्प्राप्ति लिंक भेजें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pošaljite poveznicu za oporavak lozinke na svoj email" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jelszó-helyreállítási hivatkozás küldése az e-mailjére" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kirim tautan pemulihan kata sandi ke email Anda" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Invia un link di recupero password alla tua email" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "パスワード回復リンクをメールに送信" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ನಿಮ್ಮ ಇಮೇಲ್‌ಗೆ ಪಾಸ್‌ವರ್ಡ್ ಮರುಪಡೆಯುವ ಲಿಂಕ್ ಕಳುಹಿಸಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이메일로 비밀번호 복구 링크 보내기" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tinda lien ya kozongisa liloba ya kobombama na email na yo" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nosūtīt paroles atgūšanas saiti uz e-pastu" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "तुमच्या ईमेलवर पासवर्ड पुनर्प्राप्ती लिंक पाठवा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hantar pautan pemulihan kata laluan ke e-mel anda" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send en lenke for gjenoppretting av passord til e-posten din" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stuur een link voor wachtwoordherstel naar je e-mail" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send ei lenke for gjenoppretting av passord til e-posten din" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wyślij link do odzyskiwania hasła na swój adres e-mail" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviar um link de recuperação de senha para seu e-mail" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviar um link de recuperação de senha para seu e-mail" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviar uma ligação de recuperação de palavra-passe para o seu e-mail" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trimiteți un link de recuperare a parolei la e-mailul dvs." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Отправить ссылку для восстановления пароля на вашу электронную почту" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odoslať odkaz na obnovenie hesla na váš e-mail" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pošlji povezavo za obnovitev gesla na svoj e-poštni naslov" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Пошаљи линк за опоравак лозинке на ваш имејл" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pošalji link za oporavak lozinke na vaš imejl" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skicka en länk för lösenordsåterställning till din e-post" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "உங்கள் மின்னஞ்சலுக்கு கடவுச்சொல் மீட்பு இணைப்பை அனுப்பவும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ส่งลิงก์กู้คืนรหัสผ่านไปยังอีเมลของคุณ" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-postanıza şifre kurtarma bağlantısı gönderin" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Надіслати посилання для відновлення пароля на вашу електронну пошту" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "اپنی ای میل پر پاس ورڈ بحالی کا لنک بھیجیں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gửi liên kết khôi phục mật khẩu đến email của bạn" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "向您的邮箱发送密码找回链接" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "傳送密碼重設連結至您的電子郵件" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "將密碼重設連結傳送到您的電子郵件" + } + } + } + }, + "Send a sign-in link to your email" : { + "comment" : "Field label for sign-in email link", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "إرسال رابط تسجيل الدخول إلى بريدك الإلكتروني" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Изпратете линк за вход на вашия имейл" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "আপনার ইমেইলে সাইন-ইন লিংক পাঠান" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Envia un enllaç d'inici de sessió al teu correu" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odeslat přihlašovací odkaz na váš email" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send et loginlink til din email" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anmeldelink an deine E-Mail senden" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Senden Sie einen Anmeldelink an Ihre E-Mail" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Senden Sie einen Anmeldelink an Ihre E-Mail" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Αποστολή συνδέσμου σύνδεσης στο email σας" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send a sign-in link to your email" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send a sign-in link to your email" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send a sign-in link to your email" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send a sign-in link to your email" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send a sign-in link to your email" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send a sign-in link to your email" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send a sign-in link to your email" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviar un enlace de inicio de sesión a tu correo" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "لینک ورود را به ایمیل خود ارسال کنید" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lähetä kirjautumislinkki sähköpostiisi" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Magpadala ng sign-in link sa iyong email" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Envoyer un lien de connexion à ton e-mail" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Envoyer un lien de connexion à votre e-mail" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Schick en Aamäldelink a dini E-Mail" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "તમારા ઇમેઇલ પર સાઇન-ઇન લિંક મોકલો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "שלח קישור להתחברות לדוא״ל שלך" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "अपने ईमेल पर साइन-इन लिंक भेजें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pošaljite poveznicu za prijavu na svoj email" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bejelentkezési hivatkozás küldése az e-mailjére" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kirim tautan masuk ke email Anda" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Invia un link di accesso alla tua email" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "サインインリンクをメールに送信" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ನಿಮ್ಮ ಇಮೇಲ್‌ಗೆ ಸೈನ್-ಇನ್ ಲಿಂಕ್ ಕಳುಹಿಸಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이메일로 로그인 링크 보내기" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tinda lien ya kokota na email na yo" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nosūtīt pierakstīšanās saiti uz e-pastu" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "तुमच्या ईमेलवर साइन-इन लिंक पाठवा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hantar pautan log masuk ke e-mel anda" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send en påloggingslenke til e-posten din" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stuur een inloglink naar je e-mail" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send ei påloggingslenke til e-posten din" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wyślij link logowania na swój adres e-mail" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviar um link de login para seu e-mail" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviar um link de login para seu e-mail" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviar uma ligação de início de sessão para o seu e-mail" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trimiteți un link de conectare la e-mailul dvs." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Отправить ссылку для входа на вашу электронную почту" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odoslať odkaz na prihlásenie na váš e-mail" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pošlji povezavo za prijavo na svoj e-poštni naslov" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Пошаљи линк за пријављивање на ваш имејл" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pošalji link za prijavljivanje na vaš imejl" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skicka en inloggningslänk till din e-post" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "உங்கள் மின்னஞ்சலுக்கு உள்நுழைவு இணைப்பை அனுப்பவும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ส่งลิงก์ลงชื่อเข้าใช้ไปยังอีเมลของคุณ" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-postanıza oturum açma bağlantısı gönderin" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Надіслати посилання для входу на вашу електронну пошту" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "اپنی ای میل پر سائن ان لنک بھیجیں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gửi liên kết đăng nhập đến email của bạn" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "向您的邮箱发送登录链接" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "傳送登入連結至您的電子郵件" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "將登入連結傳送到您的電子郵件" + } + } + } + }, + "Send Code" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "إرسال الرمز" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Изпрати код" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "কোড পাঠান" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Envia el codi" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odeslat kód" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send kode" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Code senden" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Code senden" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Code senden" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Αποστολή κωδικού" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send Code" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send Code" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send Code" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send Code" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send Code" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send Code" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send Code" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviar código" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ارسال کد" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lähetä koodi" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ipadala ang Code" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Envoyer le code" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Envoyer le code" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Code schicke" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "કોડ મોકલો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "שלח קוד" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "कोड भेजें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pošalji kod" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kód küldése" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kirim Kode" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Invia codice" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "コードを送信" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಕೋಡ್ ಕಳುಹಿಸಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "코드 보내기" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tinda Kode" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nosūtīt kodu" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "कोड पाठवा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hantar Kod" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send kode" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Code verzenden" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send kode" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wyślij kod" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviar código" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviar código" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviar código" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trimiteți codul" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Отправить код" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odoslať kód" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pošlji kodo" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Пошаљи код" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pošalji kod" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skicka kod" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "குறியீட்டை அனுப்பு" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ส่งรหัส" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kod gönder" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Надіслати код" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "کوڈ بھیجیں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gửi mã" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "发送验证码" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "傳送驗證碼" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "傳送驗證碼" + } + } + } + }, + "Send email sign-in link" : { + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Изпрати имейл линк за вход" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ইমেইল সাইন-ইন লিংক পাঠান" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Envia l'enllaç d'inici de sessió per correu" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odeslat přihlašovací odkaz emailem" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send email-loginlink" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-Mail-Anmeldelink senden" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-Mail-Anmeldelink senden" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Αποστολή συνδέσμου σύνδεσης μέσω email" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send email sign-in link" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send email sign-in link" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send email sign-in link" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send email sign-in link" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send email sign-in link" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send email sign-in link" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ارسال لینک ورود ایمیل" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lähetä kirjautumislinkki sähköpostilla" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ipadala ang email sign-in link" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Envoyer le lien de connexion par e-mail" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-Mail-Aamäldelink schicke" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "ઇમેઇલ સાઇન-ઇન લિંક મોકલો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "שלח קישור להתחברות בדוא״ל" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "ईमेल साइन-इन लिंक भेजें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pošalji email poveznicu za prijavu" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-mailes bejelentkezési hivatkozás küldése" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kirim tautan masuk email" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Invia link di accesso via email" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "メールサインインリンクを送信" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಇಮೇಲ್ ಸೈನ್-ಇನ್ ಲಿಂಕ್ ಕಳುಹಿಸಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이메일 로그인 링크 보내기" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tinda lien ya kokota na email" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nosūtīt e-pasta pierakstīšanās saiti" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "ईमेल साइन-इन लिंक पाठवा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hantar pautan log masuk e-mel" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send påloggingslenke på e-post" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stuur e-mail-inloglink" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send påloggingslenke på e-post" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wyślij link logowania przez e-mail" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviar link de login por e-mail" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviar link de login por e-mail" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviar ligação de início de sessão por e-mail" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trimiteți link de conectare prin e-mail" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Отправить ссылку для входа по электронной почте" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odoslať odkaz na prihlásenie e-mailom" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pošlji povezavo za prijavo prek e-pošte" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Пошаљи линк за пријављивање путем имејла" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pošalji link za prijavljivanje putem imejla" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skicka inloggningslänk via e-post" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "மின்னஞ்சல் உள்நுழைவு இணைப்பை அனுப்பு" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ส่งลิงก์ลงชื่อเข้าใช้ทางอีเมล" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-posta oturum açma bağlantısı gönder" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Надіслати посилання для входу електронною поштою" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "ای میل سائن ان لنک بھیجیں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gửi liên kết đăng nhập qua email" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "发送邮箱登录链接" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "傳送電子郵件登入連結" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "傳送電子郵件登入連結" + } + } + } + }, + "Send password recovery email" : { + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Изпрати имейл за възстановяване на парола" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "পাসওয়ার্ড পুনরুদ্ধার ইমেইল পাঠান" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Envia el correu de recuperació de contrasenya" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odeslat email pro obnovení hesla" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send email til gendannelse af adgangskode" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwortwiederherstellungs-E-Mail senden" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwortwiederherstellungs-E-Mail senden" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Αποστολή email ανάκτησης κωδικού πρόσβασης" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send password recovery email" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send password recovery email" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send password recovery email" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send password recovery email" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send password recovery email" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send password recovery email" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ارسال ایمیل بازیابی رمز عبور" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lähetä salasanan palautussähköposti" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ipadala ang password recovery email" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Envoyer l'e-mail de récupération de mot de passe" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwortwiederhärstelligs-E-Mail schicke" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "પાસવર્ડ પુનઃપ્રાપ્તિ ઇમેઇલ મોકલો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "שלח דוא״ל לשחזור סיסמה" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "पासवर्ड पुनर्प्राप्ति ईमेल भेजें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pošalji email za oporavak lozinke" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jelszó-helyreállítási e-mail küldése" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kirim email pemulihan kata sandi" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Invia email di recupero password" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "パスワード回復メールを送信" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಪಾಸ್‌ವರ್ಡ್ ಮರುಪಡೆಯುವ ಇಮೇಲ್ ಕಳುಹಿಸಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "비밀번호 복구 이메일 보내기" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tinda email ya kozongisa liloba ya kobombama" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nosūtīt paroles atgūšanas e-pastu" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "पासवर्ड पुनर्प्राप्ती ईमेल पाठवा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hantar e-mel pemulihan kata laluan" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send e-post for gjenoppretting av passord" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stuur wachtwoordherstel e-mail" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send e-post for gjenoppretting av passord" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wyślij e-mail do odzyskiwania hasła" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviar e-mail de recuperação de senha" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviar e-mail de recuperação de senha" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviar e-mail de recuperação de palavra-passe" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trimiteți e-mail de recuperare a parolei" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Отправить письмо для восстановления пароля" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odoslať e-mail na obnovenie hesla" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pošlji e-pošto za obnovitev gesla" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Пошаљи имејл за опоравак лозинке" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pošalji imejl za oporavak lozinke" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skicka e-post för lösenordsåterställning" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "கடவுச்சொல் மீட்பு மின்னஞ்சலை அனுப்பு" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ส่งอีเมลกู้คืนรหัสผ่าน" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Şifre kurtarma e-postası gönder" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Надіслати лист для відновлення пароля" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "پاس ورڈ بحالی کی ای میل بھیجیں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gửi email khôi phục mật khẩu" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "发送密码找回邮件" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "傳送密碼重設郵件" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "傳送密碼重設郵件" + } + } + } + }, + "SendEmailSignInLinkButtonLabel" : { + "comment" : "Button label for sending email sign-in link", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "إرسال رابط تسجيل الدخول عبر البريد الإلكتروني" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-Mail-Anmeldelink senden" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send email sign-in link" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviar enlace de inicio de sesión por correo" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Envoyer le lien de connexion par e-mail" + } + } + } + }, + "Set Up Two-Factor Authentication" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "إعداد المصادقة الثنائية" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Настройте двуфакторно удостоверяване" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "টু-ফ্যাক্টর প্রমাণীকরণ সেট আপ করুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Configura l'autenticació en dos passos" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nastavit dvoufázové ověření" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Opsæt tofaktorgodkendelse" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zwei-Faktor-Authentifizierung einrichten" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zwei-Faktor-Authentifizierung einrichten" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zwei-Faktor-Authentifizierung einrichten" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ρύθμιση ελέγχου ταυτότητας δύο παραγόντων" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Set Up Two-Factor Authentication" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Set Up Two-Factor Authentication" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Set Up Two-Factor Authentication" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Set Up Two-Factor Authentication" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Set Up Two-Factor Authentication" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Set Up Two-Factor Authentication" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Set Up Two-Factor Authentication" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Configurar autenticación de dos factores" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "راه‌اندازی احراز هویت دو عاملی" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ota käyttöön kaksivaiheinen tunnistautuminen" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "I-set Up ang Two-Factor Authentication" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Configurer l'authentification à deux facteurs" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Configurer l'authentification à deux facteurs" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zwei-Faktor-Authentifizierig iirichte" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "ટુ-ફેક્ટર પ્રમાણીકરણ સેટ કરો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הגדרת אימות דו־שלבי" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "दो-कारक प्रमाणीकरण सेट करें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Postavite dvofaktorsku autentifikaciju" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kétfaktoros hitelesítés beállítása" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Siapkan Autentikasi Dua Faktor" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Configura l'autenticazione a due fattori" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "2段階認証を設定" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಎರಡು-ಅಂಶ ದೃಢೀಕರಣವನ್ನು ಹೊಂದಿಸಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "2단계 인증 설정" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tyá Kondimisa ya Bakambi mibale" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Iestatīt divfaktoru autentifikāciju" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "दोन-घटक प्रमाणीकरण सेट करा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sediakan Pengesahan Dua Faktor" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konfigurer tofaktorautentisering" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tweeledige verificatie instellen" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konfigurer tofaktorautentisering" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skonfiguruj uwierzytelnianie dwuskładnikowe" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Configurar autenticação de dois fatores" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Configurar autenticação de dois fatores" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Configurar autenticação de dois fatores" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Configurați autentificarea cu doi factori" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Настроить двухфакторную аутентификацию" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nastaviť dvojfaktorové overovanie" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nastavi dvofaktorsko preverjanje pristnosti" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Подеси двофакторску аутентификацију" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Podesi dvofaktorsku autentifikaciju" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konfigurera tvåfaktorsautentisering" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "இரு காரணி அங்கீகாரத்தை அமைக்கவும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ตั้งค่าการตรวจสอบสิทธิ์แบบสองปัจจัย" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "İki faktörlü kimlik doğrulamayı kur" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Налаштувати двофакторну автентифікацію" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "دو عنصری تصدیق سیٹ اپ کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thiết lập xác thực hai yếu tố" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "设置双重验证" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "設定雙重驗證" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "設定雙重驗證" + } + } + } + }, + "Set up two-factor authentication to add an extra layer of security to your account." : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "قم بإعداد المصادقة الثنائية لإضافة طبقة أمان إضافية إلى حسابك." + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Настройте двуфакторно удостоверяване, за да добавите допълнителен слой сигурност към акаунта си." + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "আপনার অ্যাকাউন্টে অতিরিক্ত নিরাপত্তা যোগ করতে টু-ফ্যাক্টর প্রমাণীকরণ সেট আপ করুন।" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Configura l'autenticació en dos passos per afegir una capa addicional de seguretat al teu compte." + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nastavte dvoufázové ověření, aby byl váš účet lépe chráněn." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Opsæt tofaktorgodkendelse for at tilføje et ekstra sikkerhedslag til din konto." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Richte die Zwei-Faktor-Authentifizierung ein, um deinem Konto eine zusätzliche Sicherheitsebene hinzuzufügen." + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Richten Sie die Zwei-Faktor-Authentifizierung ein, um Ihrem Konto eine zusätzliche Sicherheitsebene hinzuzufügen." + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Richten Sie die Zwei-Faktor-Authentifizierung ein, um Ihrem Konto eine zusätzliche Sicherheitsebene hinzuzufügen." + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ρυθμίστε τον έλεγχο ταυτότητας δύο παραγόντων για να προσθέσετε ένα επιπλέον επίπεδο ασφάλειας στον λογαριασμό σας." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Set up two-factor authentication to add an extra layer of security to your account." + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Set up two-factor authentication to add an extra layer of security to your account." + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Set up two-factor authentication to add an extra layer of security to your account." + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Set up two-factor authentication to add an extra layer of security to your account." + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Set up two-factor authentication to add an extra layer of security to your account." + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Set up two-factor authentication to add an extra layer of security to your account." + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Set up two-factor authentication to add an extra layer of security to your account." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Configura la autenticación de dos factores para agregar una capa adicional de seguridad a tu cuenta." + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "احراز هویت دو عاملی را راه‌اندازی کنید تا یک لایه امنیتی اضافی به حساب خود اضافه کنید." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ota käyttöön kaksivaiheinen tunnistautuminen lisätäksesi tilillesi ylimääräisen turvakerroksen." + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "I-set up ang two-factor authentication upang magdagdag ng karagdagang layer ng seguridad sa iyong account." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Configure l'authentification à deux facteurs pour ajouter une couche de sécurité supplémentaire à ton compte." + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Configurez l'authentification à deux facteurs pour ajouter une couche de sécurité supplémentaire à votre compte." + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Richt d'Zwei-Faktor-Authentifizierig ii, zum dim Konto e zuesätzlichi Sicherheitsschicht hinzuezfüege." + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "તમારા એકાઉન્ટમાં સુરક્ષાનું એક વધારાનું સ્તર ઉમેરવા માટે ટુ-ફેક્ટર પ્રમાણીકરણ સેટ કરો." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הגדר אימות דו־שלבי כדי להוסיף שכבת אבטחה נוספת לחשבון שלך." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "अपने खाते में सुरक्षा की एक अतिरिक्त परत जोड़ने के लिए दो-कारक प्रमाणीकरण सेट करें।" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Postavite dvofaktorsku autentifikaciju kako biste poboljšali sigurnost svog računa." + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Állítson be kétfaktoros hitelesítést, hogy további biztonsági réteget adjon a fiókjához." + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Siapkan autentikasi dua faktor untuk menambahkan lapisan keamanan ekstra ke akun Anda." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Configura l'autenticazione a due fattori per aggiungere un ulteriore livello di sicurezza al tuo account." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "2段階認証を設定して、アカウントにセキュリティレイヤーを追加します。" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ನಿಮ್ಮ ಖಾತೆಗೆ ಹೆಚ್ಚುವರಿ ಭದ್ರತಾ ಪದರವನ್ನು ಸೇರಿಸಲು ಎರಡು-ಅಂಶ ದೃಢೀಕರಣವನ್ನು ಹೊಂದಿಸಿ." + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "계정에 추가 보안 계층을 추가하려면 2단계 인증을 설정하세요." + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tyá kondimisa ya bakambi mibale mpo na kobakisa mokano mosusu ya libateli na kɔnti na yo." + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Iestatiet divfaktoru autentifikāciju, lai pievienotu papildu drošības līmeni savam kontam." + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "तुमच्या खात्यात सुरक्षिततेचा अतिरिक्त स्तर जोडण्यासाठी दोन-घटक प्रमाणीकरण सेट करा." + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sediakan pengesahan dua faktor untuk menambah lapisan keselamatan tambahan pada akaun anda." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konfigurer tofaktorautentisering for å legge til et ekstra sikkerhetslag til kontoen din." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stel tweeledige verificatie in om je account extra te beveiligen." + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konfigurer tofaktorautentisering for å leggje til eit ekstra tryggingsslag til kontoen din." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skonfiguruj uwierzytelnianie dwuskładnikowe, aby dodać dodatkową warstwę zabezpieczeń do swojego konta." + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Configure a autenticação de dois fatores para adicionar uma camada extra de segurança à sua conta." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Configure a autenticação de dois fatores para adicionar uma camada extra de segurança à sua conta." + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Configure a autenticação de dois fatores para adicionar uma camada extra de segurança à sua conta." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Configurați autentificarea cu doi factori pentru a adăuga un nivel suplimentar de securitate la contul dvs." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Настройте двухфакторную аутентификацию, чтобы добавить дополнительный уровень безопасности к вашему аккаунту." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nastavte dvojfaktorové overovanie a pridajte do svojho účtu ďalšiu vrstvu zabezpečenia." + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nastavite dvofaktorsko preverjanje pristnosti in dodajte dodatno raven varnosti svojemu računu." + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Подесите двофакторску аутентификацију да бисте додали додатни ниво безбедности вашем налогу." + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Podesite dvofaktorsku autentifikaciju da biste dodali dodatni nivo bezbednosti vašem nalogu." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konfigurera tvåfaktorsautentisering för att lägga till ett extra lager av säkerhet till ditt konto." + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "உங்கள் கணக்கிற்கு கூடுதல் பாதுகாப்பு அடுக்கைச் சேர்க்க இரு காரணி அங்கீகாரத்தை அமைக்கவும்." + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ตั้งค่าการตรวจสอบสิทธิ์แบบสองปัจจัยเพื่อเพิ่มระดับความปลอดภัยเพิ่มเติมให้กับบัญชีของคุณ" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hesabınıza ekstra bir güvenlik katmanı eklemek için iki faktörlü kimlik doğrulamayı kurun." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Налаштуйте двофакторну автентифікацію, щоб додати додатковий рівень безпеки до свого облікового запису." + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "اپنے اکاؤنٹ میں سیکیورٹی کی ایک اضافی تہہ شامل کرنے کے لیے دو عنصری تصدیق سیٹ اپ کریں۔" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thiết lập xác thực hai yếu tố để thêm một lớp bảo mật bổ sung cho tài khoản của bạn." + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "设置双重验证,为您的账户添加额外的安全层。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "設定雙重驗證,為您的帳號增加額外的安全防護層。" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "設定雙重驗證,為您的帳號增加一層額外的安全保護。" + } + } + } + }, + "Sign in" : { + "extractionState" : "stale", + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вход" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "সাইন ইন করুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inicia sessió" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Přihlásit se" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Login" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anmelden" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anmelden" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Σύνδεση" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ورود" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kirjaudu sisään" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mag-sign in" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se connecter" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aamälde" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "સાઇન ઇન કરો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "התחבר" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "साइन इन करें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prijava" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bejelentkezés" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Masuk" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Accedi" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "サインイン" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಸೈನ್ ಇನ್ ಮಾಡಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "로그인" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kokota" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pierakstīties" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "साइन इन करा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Log masuk" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Logg inn" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inloggen" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Logg inn" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zaloguj się" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entrar" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entrar" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Iniciar sessão" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Conectați-vă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Войти" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prihlásiť sa" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prijavi se" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Пријави се" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prijavi se" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Logga in" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "உள்நுழை" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ลงชื่อเข้าใช้" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Oturum aç" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Увійти" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "سائن ان کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Đăng nhập" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "登录" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "登入" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "登入" + } + } + } + }, + "Sign in with %@" : { + "extractionState" : "stale", + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вход с %@" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ দিয়ে সাইন ইন করুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inicia sessió amb %@" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Přihlásit se pomocí %@" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Log ind med %@" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mit %@ anmelden" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mit %@ anmelden" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Σύνδεση με %@" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with %@" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with %@" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with %@" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with %@" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with %@" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with %@" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ورود با %@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kirjaudu käyttäen %@" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mag-sign in gamit ang %@" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se connecter avec %@" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mit %@ aamälde" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ સાથે સાઇન ઇન કરો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "התחבר באמצעות %@" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ के साथ साइन इन करें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prijava putem %@" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bejelentkezés ezzel: %@" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Masuk dengan %@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Accedi con %@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@でサインイン" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ ನೊಂದಿಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@(으)로 로그인" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kokota na %@" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pierakstīties ar %@" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ सह साइन इन करा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Log masuk dengan %@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Logg inn med %@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inloggen met %@" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Logg inn med %@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zaloguj się przez %@" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entrar com %@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entrar com %@" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Iniciar sessão com %@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Conectați-vă cu %@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Войти через %@" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prihlásiť sa cez %@" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prijavi se z %@" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Пријави се путем %@" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prijavi se putem %@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Logga in med %@" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ உடன் உள்நுழையவும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ลงชื่อเข้าใช้ด้วย %@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ ile oturum aç" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Увійти через %@" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ کے ساتھ سائن ان کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Đăng nhập bằng %@" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "使用 %@ 登录" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "使用 %@ 登入" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "使用 %@ 登入" + } + } + } + }, + "Sign in with Apple" : { + "comment" : "Sign in with Apple button label.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تسجيل الدخول باستخدام Apple" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вход с Apple" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "অ্যাপল দিয়ে সাইন ইন করুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inicia sessió amb Apple" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Přihlásit se pomocí Apple" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Log ind med Apple" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mit Apple anmelden" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mit Apple anmelden" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mit Apple anmelden" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Σύνδεση με Apple" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with Apple" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with Apple" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with Apple" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with Apple" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with Apple" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with Apple" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with Apple" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Iniciar sesión con Apple" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ورود با Apple" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kirjaudu Applella" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mag-sign in gamit ang Apple" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se connecter avec Apple" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se connecter avec Apple" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mit Apple aamälde" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apple સાથે સાઇન ઇન કરો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "התחבר באמצעות Apple" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apple के साथ साइन इन करें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prijava putem Apple-a" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bejelentkezés Apple-lel" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Masuk dengan Apple" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Accedi con Apple" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Appleでサインイン" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apple ನೊಂದಿಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apple로 로그인" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kokota na Apple" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pierakstīties ar Apple" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apple सह साइन इन करा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Log masuk dengan Apple" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Logg inn med Apple" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inloggen met Apple" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Logg inn med Apple" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zaloguj się przez Apple" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entrar com Apple" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entrar com Apple" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Iniciar sessão com Apple" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Conectați-vă cu Apple" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Войти через Apple" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prihlásiť sa cez Apple" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prijavi se z Apple" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Пријави се путем Apple" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prijavi se putem Apple" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Logga in med Apple" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apple உடன் உள்நுழையவும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ลงชื่อเข้าใช้ด้วย Apple" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apple ile oturum aç" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Увійти через Apple" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apple کے ساتھ سائن ان کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Đăng nhập bằng Apple" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "使用 Apple 登录" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "使用 Apple 登入" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "使用 Apple 登入" + } + } + } + }, + "Sign in with email" : { + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вход с имейл" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ইমেইল দিয়ে সাইন ইন করুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inicia sessió amb correu electrònic" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Přihlásit se emailem" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Log ind med email" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mit E-Mail anmelden" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mit E-Mail anmelden" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Σύνδεση με email" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with email" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with email" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with email" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with email" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with email" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with email" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ورود با ایمیل" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kirjaudu sähköpostilla" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mag-sign in gamit ang email" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se connecter avec l'e-mail" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mit E-Mail aamälde" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "ઇમેઇલ સાથે સાઇન ઇન કરો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "התחבר באמצעות דוא״ל" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "ईमेल के साथ साइन इन करें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prijava emailom" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bejelentkezés e-maillel" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Masuk dengan email" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Accedi con email" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "メールでサインイン" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಇಮೇಲ್ ನೊಂದಿಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이메일로 로그인" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kokota na email" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pierakstīties ar e-pastu" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "ईमेलसह साइन इन करा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Log masuk dengan e-mel" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Logg inn med e-post" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inloggen met e-mail" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Logg inn med e-post" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zaloguj się przez e-mail" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entrar com e-mail" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entrar com e-mail" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Iniciar sessão com e-mail" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Conectați-vă cu e-mailul" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Войти через электронную почту" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prihlásiť sa e-mailom" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prijavi se z e-pošto" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Пријави се путем имејла" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prijavi se putem imejla" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Logga in med e-post" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "மின்னஞ்சல் மூலம் உள்நுழையவும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ลงชื่อเข้าใช้ด้วยอีเมล" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-posta ile oturum aç" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Увійти через електронну пошту" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "ای میل کے ساتھ سائن ان کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Đăng nhập bằng email" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "使用邮箱登录" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "使用電子郵件登入" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "使用電子郵件登入" + } + } + } + }, + "Sign in with email link" : { + "comment" : "Sign in with email link View title", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تسجيل الدخول برابط البريد الإلكتروني" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вход чрез имейл линк" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ইমেইল লিংক দিয়ে সাইন ইন করুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inicia sessió amb l'enllaç del correu" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Přihlásit se pomocí emailového odkazu" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Log ind med emaillink" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mit E-Mail-Link anmelden" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mit E-Mail-Link anmelden" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mit E-Mail-Link anmelden" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Σύνδεση με σύνδεσμο email" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with email link" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with email link" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with email link" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with email link" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with email link" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with email link" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with email link" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Iniciar sesión con enlace por correo" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ورود با لینک ایمیل" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kirjaudu sähköpostilinkillä" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mag-sign in gamit ang email link" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se connecter avec un lien e-mail" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se connecter avec un lien e-mail" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mit E-Mail-Link aamälde" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "ઇમેઇલ લિંક સાથે સાઇન ઇન કરો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "התחבר באמצעות קישור בדוא״ל" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "ईमेल लिंक के साथ साइन इन करें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prijava putem email poveznice" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bejelentkezés e-mail hivatkozással" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Masuk dengan tautan email" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Accedi con link email" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "メールリンクでサインイン" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಇಮೇಲ್ ಲಿಂಕ್ ನೊಂದಿಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이메일 링크로 로그인" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kokota na lien ya email" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pierakstīties ar e-pasta saiti" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "ईमेल लिंकसह साइन इन करा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Log masuk dengan pautan e-mel" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Logg inn med e-postlenke" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inloggen met e-mail-link" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Logg inn med e-postlenke" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zaloguj się przez link w e-mailu" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entrar com link de e-mail" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entrar com link de e-mail" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Iniciar sessão com ligação de e-mail" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Conectați-vă cu link de e-mail" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Войти по ссылке из электронной почты" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prihlásiť sa odkazom z e-mailu" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prijavi se s povezavo iz e-pošte" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Пријави се путем имејл линка" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prijavi se putem imejl linka" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Logga in med e-postlänk" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "மின்னஞ்சல் இணைப்பு மூலம் உள்நுழையவும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ลงชื่อเข้าใช้ด้วยลิงก์อีเมล" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-posta bağlantısıyla oturum aç" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Увійти за посиланням з електронної пошти" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "ای میل لنک کے ساتھ سائن ان کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Đăng nhập bằng liên kết email" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "使用邮箱链接登录" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "使用電子郵件連結登入" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "使用電子郵件連結登入" + } + } + } + }, + "Sign in with Facebook" : { + "comment" : "Sign in with Facebook button label.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تسجيل الدخول باستخدام Facebook" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вход с Facebook" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ফেসবুক দিয়ে সাইন ইন করুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inicia sessió amb Facebook" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Přihlásit se pomocí Facebooku" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Log ind med Facebook" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mit Facebook anmelden" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mit Facebook anmelden" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mit Facebook anmelden" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Σύνδεση με Facebook" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with Facebook" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with Facebook" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with Facebook" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with Facebook" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with Facebook" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with Facebook" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with Facebook" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Iniciar sesión con Facebook" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ورود با Facebook" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kirjaudu Facebookilla" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mag-sign in gamit ang Facebook" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se connecter avec Facebook" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se connecter avec Facebook" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mit Facebook aamälde" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook સાથે સાઇન ઇન કરો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "התחבר באמצעות Facebook" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook के साथ साइन इन करें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prijava putem Facebook-a" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bejelentkezés Facebookkal" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Masuk dengan Facebook" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Accedi con Facebook" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebookでサインイン" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook ನೊಂದಿಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook으로 로그인" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kokota na Facebook" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pierakstīties ar Facebook" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook सह साइन इन करा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Log masuk dengan Facebook" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Logg inn med Facebook" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inloggen met Facebook" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Logg inn med Facebook" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zaloguj się przez Facebook" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entrar com Facebook" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entrar com Facebook" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Iniciar sessão com Facebook" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Conectați-vă cu Facebook" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Войти через Facebook" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prihlásiť sa cez Facebook" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prijavi se s Facebookom" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Пријави се путем Facebook" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prijavi se putem Facebook" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Logga in med Facebook" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook உடன் உள்நுழையவும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ลงชื่อเข้าใช้ด้วย Facebook" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook ile oturum aç" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Увійти через Facebook" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facebook کے ساتھ سائن ان کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Đăng nhập bằng Facebook" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "使用 Facebook 登录" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "使用 Facebook 登入" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "使用 Facebook 登入" + } + } + } + }, + "Sign in with Firebase" : { + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вход с Firebase" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ফায়ারবেস দিয়ে সাইন ইন করুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inicia sessió amb Firebase" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Přihlásit se pomocí Firebase" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Log ind med Firebase" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mit Firebase anmelden" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mit Firebase anmelden" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Σύνδεση με Firebase" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with Firebase" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with Firebase" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with Firebase" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with Firebase" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with Firebase" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with Firebase" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ورود با Firebase" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kirjaudu Firebasella" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mag-sign in gamit ang Firebase" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se connecter avec Firebase" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mit Firebase aamälde" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Firebase સાથે સાઇન ઇન કરો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "התחבר באמצעות Firebase" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Firebase के साथ साइन इन करें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prijava putem Firebase-a" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bejelentkezés Firebase-zel" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Masuk dengan Firebase" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Accedi con Firebase" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Firebaseでサインイン" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Firebase ನೊಂದಿಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Firebase로 로그인" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kokota na Firebase" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pierakstīties ar Firebase" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Firebase सह साइन इन करा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Log masuk dengan Firebase" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Logg inn med Firebase" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inloggen met Firebase" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Logg inn med Firebase" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zaloguj się przez Firebase" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entrar com Firebase" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entrar com Firebase" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Iniciar sessão com Firebase" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Conectați-vă cu Firebase" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Войти через Firebase" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prihlásiť sa cez Firebase" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prijavi se s Firebaseom" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Пријави се путем Firebase" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prijavi se putem Firebase" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Logga in med Firebase" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "Firebase உடன் உள்நுழையவும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ลงชื่อเข้าใช้ด้วย Firebase" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Firebase ile oturum aç" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Увійти через Firebase" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "Firebase کے ساتھ سائن ان کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Đăng nhập bằng Firebase" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "使用 Firebase 登录" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "使用 Firebase 登入" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "使用 Firebase 登入" + } + } + } + }, + "Sign in with Google" : { + "comment" : "Sign in with Google button label.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تسجيل الدخول باستخدام Google" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вход с Google" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "গুগল দিয়ে সাইন ইন করুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inicia sessió amb Google" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Přihlásit se pomocí Google" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Log ind med Google" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mit Google anmelden" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mit Google anmelden" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mit Google anmelden" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Σύνδεση με Google" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with Google" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with Google" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with Google" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with Google" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with Google" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with Google" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with Google" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Iniciar sesión con Google" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ورود با Google" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kirjaudu Googlella" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mag-sign in gamit ang Google" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se connecter avec Google" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se connecter avec Google" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mit Google aamälde" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google સાથે સાઇન ઇન કરો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "התחבר באמצעות Google" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google के साथ साइन इन करें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prijava putem Google-a" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bejelentkezés Google-lal" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Masuk dengan Google" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Accedi con Google" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Googleでサインイン" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google ನೊಂದಿಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google로 로그인" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kokota na Google" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pierakstīties ar Google" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google सह साइन इन करा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Log masuk dengan Google" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Logg inn med Google" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inloggen met Google" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Logg inn med Google" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zaloguj się przez Google" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entrar com Google" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entrar com Google" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Iniciar sessão com Google" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Conectați-vă cu Google" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Войти через Google" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prihlásiť sa cez Google" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prijavi se z Googlom" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Пријави се путем Google" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prijavi se putem Google" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Logga in med Google" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google உடன் உள்நுழையவும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ลงชื่อเข้าใช้ด้วย Google" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google ile oturum aç" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Увійти через Google" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google کے ساتھ سائن ان کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Đăng nhập bằng Google" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "使用 Google 登录" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "使用 Google 登入" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "使用 Google 登入" + } + } + } + }, + "Sign in with Phone" : { + "comment" : "Sign in with Phone button label.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تسجيل الدخول باستخدام الهاتف" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вход с телефон" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ফোন দিয়ে সাইন ইন করুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inicia sessió amb el telèfon" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Přihlásit se pomocí telefonu" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Log ind med telefon" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mit Telefon anmelden" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mit Telefon anmelden" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mit Telefon anmelden" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Σύνδεση με τηλέφωνο" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with Phone" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with Phone" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with Phone" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with Phone" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with Phone" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with Phone" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with Phone" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Iniciar sesión con teléfono" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ورود با تلفن" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kirjaudu puhelimella" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mag-sign in gamit ang Telepono" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se connecter avec un téléphone" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se connecter avec le téléphone" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mit Telefon aamälde" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "ફોન સાથે સાઇન ઇન કરો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "התחבר באמצעות טלפון" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "फ़ोन के साथ साइन इन करें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prijava putem telefona" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bejelentkezés telefonnal" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Masuk dengan Telepon" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Accedi con telefono" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "電話でサインイン" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ದೂರವಾಣಿಯೊಂದಿಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "전화번호로 로그인" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kokota na Telefone" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pierakstīties ar tālruni" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "फोनसह साइन इन करा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Log masuk dengan Telefon" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Logg inn med telefon" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inloggen met telefoonnummer" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Logg inn med telefon" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zaloguj się przez telefon" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entrar com telefone" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entrar com telefone" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Iniciar sessão com telefone" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Conectați-vă cu telefonul" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Войти через телефон" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prihlásiť sa telefónom" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prijavi se s telefonom" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Пријави се путем телефона" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prijavi se putem telefona" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Logga in med telefon" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "தொலைபேசி மூலம் உள்நுழையவும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ลงชื่อเข้าใช้ด้วยโทรศัพท์" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telefon ile oturum aç" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Увійти через телефон" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "فون کے ساتھ سائن ان کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Đăng nhập bằng điện thoại" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "使用手机号登录" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "使用電話號碼登入" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "使用電話號碼登入" + } + } + } + }, + "Sign in with X" : { + "comment" : "Sign in with X (Twitter) button label.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تسجيل الدخول باستخدام X" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вход с X" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "X দিয়ে সাইন ইন করুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inicia sessió amb X" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Přihlásit se pomocí X" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Log ind med X" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mit X anmelden" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mit X anmelden" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mit X anmelden" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Σύνδεση με X" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with X" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with X" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with X" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with X" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with X" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with X" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with X" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Iniciar sesión con X" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ورود با X" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kirjaudu X:llä" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mag-sign in gamit ang X" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se connecter avec X" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se connecter avec X" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mit X aamälde" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "X સાથે સાઇન ઇન કરો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "התחבר באמצעות X" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "X के साथ साइन इन करें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prijava putem X" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bejelentkezés X-szel" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Masuk dengan X" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Accedi con X" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xでサインイン" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "X ನೊಂದಿಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "X로 로그인" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kokota na X" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pierakstīties ar X" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "X सह साइन इन करा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Log masuk dengan X" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Logg inn med X" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inloggen met X" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Logg inn med X" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zaloguj się przez X" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entrar com X" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entrar com X" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Iniciar sessão com X" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Conectați-vă cu X" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Войти через X" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prihlásiť sa cez X" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prijavi se z X" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Пријави се путем X" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prijavi se putem X" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Logga in med X" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "X உடன் உள்நுழையவும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ลงชื่อเข้าใช้ด้วย X" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "X ile oturum aç" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Увійти через X" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "X کے ساتھ سائن ان کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Đăng nhập bằng X" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "使用 X 登录" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "使用 X 登入" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "使用 X 登入" + } + } + } + }, + "Sign Out" : { + "comment" : "Account Settings cell title Sign Out.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تسجيل الخروج" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Изход" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "সাইন আউট করুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tanca la sessió" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odhlásit se" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Log ud" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abmelden" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abmelden" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abmelden" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Αποσύνδεση" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign Out" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign Out" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign Out" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign Out" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign Out" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign Out" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign Out" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cerrar sesión" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "خروج" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kirjaudu ulos" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mag-sign out" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se déconnecter" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se déconnecter" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abmälde" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "સાઇન આઉટ કરો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "התנתק" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "साइन आउट करें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odjava" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kijelentkezés" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Keluar" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Esci" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "サインアウト" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಸೈನ್ ಔಟ್" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "로그아웃" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kobima" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Izrakstīties" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "साइन आउट करा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Log keluar" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Logg ut" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uitloggen" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Logg ut" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wyloguj się" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sair" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sair" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminar sessão" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Deconectați-vă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Выйти" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odhlásiť sa" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odjavi se" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Одјави се" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odjavi se" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Logga ut" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "வெளியேறு" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ออกจากระบบ" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Oturumu kapat" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вийти" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "سائن آؤٹ کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Đăng xuất" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "退出登录" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "登出" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "登出" + } + } + } + }, + "Sign up" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "التسجيل" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Регистрация" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "সাইন আপ করুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Crea un compte" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registrovat se" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Opret konto" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registrieren" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registrieren" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registrieren" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Εγγραφή" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign up" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign up" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign up" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign up" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign up" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign up" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign up" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registrarse" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ثبت‌نام" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Luo tili" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mag-sign up" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "S'inscrire" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "S'inscrire" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registriere" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "સાઇન અપ કરો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הירשם" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "साइन अप करें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registracija" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Regisztráció" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Daftar" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registrati" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "登録" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಸೈನ್ ಅಪ್" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "가입하기" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Komikoma" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reģistrēties" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "साइन अप करा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Daftar" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registrer deg" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registreren" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registrer deg" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zarejestruj się" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cadastrar-se" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cadastrar-se" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registar-se" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Înregistrați-vă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Зарегистрироваться" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zaregistrovať sa" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registriraj se" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Региструј се" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registruj se" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registrera dig" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "பதிவு செய்யவும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "สมัครสมาชิก" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kaydol" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Зареєструватися" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "سائن اپ کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Đăng ký" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "注册" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "註冊" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "註冊" + } + } + } + }, + "Sign-in email Sent" : { + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Имейлът за вход е изпратен" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "সাইন-ইন ইমেইল পাঠানো হয়েছে" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "S'ha enviat el correu d'inici de sessió" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Přihlašovací email odeslán" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loginmail sendt" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anmelde-E-Mail gesendet" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anmelde-E-Mail gesendet" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Το email σύνδεσης στάλθηκε" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign-in email Sent" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign-in email Sent" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign-in email Sent" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign-in email Sent" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign-in email Sent" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign-in email Sent" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ایمیل ورود ارسال شد" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kirjautumissähköposti lähetetty" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Naipadala na ang Sign-in Email" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-mail de connexion envoyé" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aamälde-E-Mail gschickt" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "સાઇન-ઇન ઇમેઇલ મોકલ્યો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "דוא״ל התחברות נשלח" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "साइन-इन ईमेल भेजा गया" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Email za prijavu poslan" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bejelentkezési e-mail elküldve" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Email Masuk Terkirim" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Email di accesso inviata" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "サインインメールを送信しました" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಸೈನ್-ಇನ್ ಇಮೇಲ್ ಕಳುಹಿಸಲಾಗಿದೆ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "로그인 이메일 전송됨" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Email ya kokota etindami" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pierakstīšanās e-pasts nosūtīts" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "साइन-इन ईमेल पाठवला" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-mel Log Masuk Dihantar" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Påloggings-e-post sendt" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inlogmail verzonden" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Påloggings-e-post sendt" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wysłano e-mail logowania" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-mail de login enviado" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-mail de login enviado" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-mail de início de sessão enviado" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-mail de conectare trimis" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Письмо для входа отправлено" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-mail na prihlásenie odoslaný" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-pošta za prijavo poslana" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Имејл за пријављивање послат" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Imejl za prijavljivanje poslat" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inloggnings-e-post skickad" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "உள்நுழைவு மின்னஞ்சல் அனுப்பப்பட்டது" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ส่งอีเมลลงชื่อเข้าใช้แล้ว" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Oturum açma e-postası gönderildi" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Лист для входу надіслано" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "سائن ان ای میل بھیج دی گئی" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Email đăng nhập đã được gửi" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "登录邮件已发送" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "登入郵件已傳送" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "登入郵件已寄出" + } + } + } + }, + "Signed in!" : { + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Успешно влязохте!" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "সাইন ইন হয়েছে!" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Has iniciat sessió!" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Přihlášení úspěšné!" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Logget ind!" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Angemeldet!" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Angemeldet!" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Συνδεθήκατε!" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Signed in!" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Signed in!" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Signed in!" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Signed in!" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Signed in!" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Signed in!" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "وارد شدید!" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kirjautuminen onnistui!" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Naka-sign in na!" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Connecté !" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aagmäldet!" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "સાઇન ઇન થયો!" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "התחברת!" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "साइन इन हो गए!" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prijavljeni ste!" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bejelentkezve!" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Berhasil masuk!" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Accesso effettuato!" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "サインインしました!" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಸೈನ್ ಇನ್ ಆಗಿದೆ!" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "로그인되었습니다!" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Okɔtaki!" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pierakstījies!" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "साइन इन झाले!" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Berjaya log masuk!" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Logget inn!" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingelogd!" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Logga inn!" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zalogowano!" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Login efetuado!" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Login efetuado!" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sessão iniciada!" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Conectat!" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вы вошли!" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prihlásený!" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prijavljeni!" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Пријављени сте!" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prijavljeni ste!" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inloggad!" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "உள்நுழைந்துள்ளீர்கள்!" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ลงชื่อเข้าใช้แล้ว!" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Oturum açıldı!" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ви увійшли!" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "سائن ان ہو گئے!" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Đã đăng nhập!" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "登录成功!" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "登入成功!" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "登入成功!" + } + } + } + }, + "SignedIn" : { + "comment" : "Title of successfully signed in label.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تم تسجيل الدخول!" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Angemeldet!" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Signed in!" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "¡Sesión iniciada!" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Connecté !" + } + } + } + }, + "SignInEmailSent" : { + "comment" : "Message displayed after the email of sign-in link is sent.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تم إرسال بريد تسجيل الدخول" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anmelde-E-Mail gesendet" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign-in email Sent" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Correo de inicio de sesión enviado" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-mail de connexion envoyé" + } + } + } + }, + "SignInTitle" : { + "comment" : "Title for sign in screen and sign in button.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تسجيل الدخول" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anmelden" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Iniciar sesión" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se connecter" + } + } + } + }, + "SignInTooManyTimesError" : { + "comment" : "Error message displayed after user trying to sign in too many times.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "لقد أدخلت كلمة مرور غير صحيحة مرات عديدة. حاول مرة أخرى في غضون بضع دقائق." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du hast zu oft ein falsches Passwort eingegeben. Versuche es in ein paar Minuten erneut." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "You've entered an incorrect password too many times. Try again in a few minutes." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Has ingresado una contraseña incorrecta demasiadas veces. Intenta nuevamente en unos minutos." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tu as saisi un mot de passe incorrect trop de fois. Réessaie dans quelques minutes." + } + } + } + }, + "SignInWithEmail" : { + "comment" : "Sign in with email button label. Use short/abbreviated translation for 'email' which is less than 15 chars.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تسجيل الدخول باستخدام البريد الإلكتروني" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mit E-Mail anmelden" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with email" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Iniciar sesión con correo" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se connecter avec un e-mail" + } + } + } + }, + "SignInWithProvider" : { + "comment" : "Sign in with provider button label.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تسجيل الدخول باستخدام %@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mit %@ anmelden" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sign in with %@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Iniciar sesión con %@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se connecter avec %@" + } + } + } + }, + "SignUpTitle" : { + "comment" : "Title for sign up screen.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "إنشاء حساب" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konto erstellen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Create account" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Crear cuenta" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Créer un compte" + } + } + } + }, + "SignUpTooManyTimesError" : { + "comment" : "Error message displayed when many accounts have been created from same IP address.", + "extractionState" : "migrated", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تأتي الكثير من طلبات الحساب من عنوان IP الخاص بك. حاول مرة أخرى في غضون بضع دقائق." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zu viele Kontoanfragen kommen von deiner IP-Adresse. Versuche es in ein paar Minuten erneut." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Too many account requests are coming from your IP address. Try again in a few minutes." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Demasiadas solicitudes de cuenta provienen de tu dirección IP. Intenta nuevamente en unos minutos." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trop de demandes de compte proviennent de ton adresse IP. Réessaie dans quelques minutes." + } + } + } + }, + "SMS Authentication" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "مصادقة الرسائل القصيرة" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS удостоверяване" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS প্রমাণীকরণ" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autenticació per SMS" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS ověření" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS-godkendelse" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS-Authentifizierung" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS-Authentifizierung" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS-Authentifizierung" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Έλεγχος ταυτότητας μέσω SMS" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS Authentication" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS Authentication" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS Authentication" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS Authentication" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS Authentication" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS Authentication" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS Authentication" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autenticación por SMS" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "احراز هویت پیامک" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS-tunnistautuminen" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS Authentication" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authentification par SMS" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authentification par SMS" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS-Authentifizierig" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS પ્રમાણીકરણ" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "אימות SMS" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS प्रमाणीकरण" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS autentifikacija" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS-hitelesítés" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autentikasi SMS" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autenticazione SMS" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS認証" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS ದೃಢೀಕರಣ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS 인증" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kondimisa na SMS" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS autentifikācija" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS प्रमाणीकरण" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pengesahan SMS" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS-autentisering" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS-verificatie" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS-autentisering" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uwierzytelnianie SMS" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autenticação por SMS" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autenticação por SMS" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autenticação por SMS" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autentificare SMS" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS-аутентификация" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Overovanie SMS" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preverjanje pristnosti prek SMS" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS аутентификација" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS autentifikacija" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS-autentisering" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS அங்கீகாரம்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "การตรวจสอบสิทธิ์ทาง SMS" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS kimlik doğrulaması" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS-автентифікація" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS تصدیق" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xác thực SMS" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "短信验证" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "簡訊驗證" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "簡訊驗證" + } + } + } + }, + "SMS Verification" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "التحقق عبر الرسائل القصيرة" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS проверка" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS যাচাইকরণ" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verificació per SMS" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS ověření" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS-bekræftelse" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS-Verifizierung" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS-Verifizierung" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS-Verifizierung" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Επαλήθευση μέσω SMS" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS Verification" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS Verification" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS Verification" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS Verification" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS Verification" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS Verification" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS Verification" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verificación por SMS" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "تأیید پیامک" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS-vahvistus" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS Verification" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vérification par SMS" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vérification par SMS" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS-Verifizierig" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS ચકાસણી" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "אימות SMS" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS सत्यापन" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS verifikacija" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS-ellenőrzés" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verifikasi SMS" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verifica SMS" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS確認" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS ಪರಿಶೀಲನೆ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS 확인" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kondimisa na SMS" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS verifikācija" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS पडताळणी" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pengesahan SMS" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS-bekreftelse" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS-verificatie" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS-stadfesting" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Weryfikacja SMS" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verificação por SMS" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verificação por SMS" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verificação por SMS" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verificare SMS" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS-проверка" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Overenie SMS" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preverjanje prek SMS" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS верификација" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS verifikacija" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS-verifiering" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS சரிபார்ப்பு" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "การยืนยันทาง SMS" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS doğrulaması" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS-перевірка" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS تصدیق" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xác minh SMS" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "短信验证" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "簡訊驗證" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "簡訊驗證" + } + } + } + }, + "SMS: %@" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "الرسائل القصيرة: %@" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "پیامک: %@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS : %@" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS : %@" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "SMS: %@" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "短信:%@" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "簡訊:%@" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "簡訊:%@" + } + } + } + }, + "Tap to open in authenticator app" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "انقر للفتح في تطبيق المصادقة" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Докоснете, за да отворите в приложението за удостоверяване" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "অথেন্টিকেটর অ্যাপে খোলার জন্য ট্যাপ করুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Toca per obrir a l'aplicació d'autenticació" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Klepněte pro otevření v autentikační aplikaci" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tryk for at åbne i autentifikationsapp" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tippe, um in der Authentifizierungs-App zu öffnen" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tippen Sie, um in der Authentifizierungs-App zu öffnen" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tippen Sie, um in der Authentifizierungs-App zu öffnen" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Πατήστε για να ανοίξετε στην εφαρμογή ελέγχου ταυτότητας" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tap to open in authenticator app" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tap to open in authenticator app" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tap to open in authenticator app" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tap to open in authenticator app" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tap to open in authenticator app" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tap to open in authenticator app" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tap to open in authenticator app" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Toca para abrir en la aplicación de autenticación" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "برای باز کردن در برنامه احراز هویت ضربه بزنید" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Napauta avataksesi autentikaatiosovelluksessa" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "I-tap upang buksan sa authenticator app" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Appuie pour ouvrir dans l'application d'authentification" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Appuyez pour ouvrir dans l'application d'authentification" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tipp zum i de Authentifizierigs-App öffne" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "પ્રમાણીકરણ એપમાં ખોલવા માટે ટેપ કરો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הקש כדי לפתוח באפליקציית האימות" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "प्रमाणक ऐप में खोलने के लिए टैप करें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dodirnite za otvaranje u aplikaciji za autentifikaciju" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Érintse meg a hitelesítő alkalmazásban való megnyitáshoz" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ketuk untuk membuka di aplikasi autentikator" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tocca per aprire nell'app di autenticazione" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "タップして認証アプリで開く" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ದೃಢೀಕರಣ ಆ್ಯಪ್‌ನಲ್ಲಿ ತೆರೆಯಲು ಟ್ಯಾಪ್ ಮಾಡಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "탭하여 인증 앱에서 열기" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Finá mpo na kofungola na aplikasyo ya kondimisa" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pieskarieties, lai atvērtu autentifikācijas lietotnē" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "प्रमाणीकरण अॅपमध्ये उघडण्यासाठी टॅप करा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ketik untuk membuka dalam aplikasi pengesah" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trykk for å åpne i autentiseringsapp" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tik om te openen in de authenticator-app" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trykk for å opne i autentiseringsapp" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dotknij, aby otworzyć w aplikacji uwierzytelniającej" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Toque para abrir no aplicativo autenticador" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Toque para abrir no app autenticador" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Toque para abrir na aplicação de autenticação" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Atingeți pentru a deschide în aplicația de autentificare" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Нажмите, чтобы открыть в приложении для аутентификации" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Klepnutím otvoríte v aplikácii na overovanie" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tapnite za odpiranje v aplikaciji za preverjanje pristnosti" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Додирните да бисте отворили у апликацији за аутентификацију" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dodirnite da biste otvorili u aplikaciji za autentifikaciju" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tryck för att öppna i autentiseringsapp" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "அங்கீகரிப்பு செயலியில் திறக்க தட்டவும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "แตะเพื่อเปิดในแอปตรวจสอบสิทธิ์" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kimlik doğrulayıcı uygulamada açmak için dokunun" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Торкніться, щоб відкрити в програмі автентифікації" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "تصدیقی ایپ میں کھولنے کے لیے ٹیپ کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nhấn để mở trong ứng dụng xác thực" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "点击在验证器应用中打开" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "點擊以在驗證器應用中開啟" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "點擊以在驗證器 App 中開啟" + } + } + } + }, + "Terms of Service" : { + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Условия за ползване" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "সেবার শর্তাবলী" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Condicions del servei" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Podmínky služby" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Servicevilkår" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nutzungsbedingungen" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nutzungsbedingungen" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Όροι χρήσης" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terms of Service" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terms of Service" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terms of Service" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terms of Service" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terms of Service" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terms of Service" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "شرایط خدمات" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Käyttöehdot" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mga Tuntunin ng Serbisyo" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Conditions d'utilisation" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nutzigsbedingige" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "સેવાની શરતો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "תנאי שירות" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "सेवा की शर्तें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uvjeti korištenja" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Szolgáltatási feltételek" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ketentuan Layanan" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Termini di servizio" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "利用規約" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಸೇವಾ ನಿಯಮಗಳು" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "서비스 약관" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mibeko ya Mosala" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pakalpojumu sniegšanas noteikumi" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "सेवा अटी" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terma Perkhidmatan" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tjenestevilkår" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Servicevoorwaarden" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tenestevilkår" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Warunki korzystania z usługi" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Termos de serviço" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Termos de serviço" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Termos de serviço" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Termeni și condiții" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Условия обслуживания" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Podmienky používania" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pogoji uporabe" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Услови коришћења" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uslovi korišćenja" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Användarvillkor" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "சேவை விதிமுறைகள்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ข้อกำหนดการให้บริการ" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hizmet şartları" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Умови обслуговування" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "سروس کی شرائط" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Điều khoản dịch vụ" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "服务条款" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "服務條款" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "服務條款" + } + } + } + }, + "TermsOfService" : { + "comment" : "Text linked to a web page with the Terms of Service content.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "شروط الخدمة" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nutzungsbedingungen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terms of Service" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Términos de servicio" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Conditions d'utilisation" + } + } + } + }, + "TermsOfServiceMessage" : { + "comment" : "A message displayed when the first log in screen is displayed. The first placeholder is the terms of service agreement link, the second place holder is the privacy policy agreement link.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "من خلال المتابعة، فإنك تشير إلى أنك تقبل %@ و %@ الخاصة بنا." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Indem du fortfährst, bestätigst du, dass du unsere %@ und %@ akzeptierst." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "By continuing, you are indicating that you accept our %@ and %@." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Al continuar, indicas que aceptas nuestros %@ y %@." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "En continuant, tu indiques que tu acceptes nos %@ et notre %@." + } + } + } + }, + "That email address doesn't match an existing account." : { + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Този имейл адрес не съответства на съществуващ акаунт." + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "এই ইমেইল ঠিকানা কোনো বিদ্যমান অ্যাকাউন্টের সাথে মেলে না।" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aquest correu electrònic no coincideix amb cap compte existent." + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tato emailová adresa neodpovídá žádnému existujícímu účtu." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Denne emailadresse matcher ingen eksisterende konto." + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Diese E-Mail-Adresse stimmt mit keinem vorhandenen Konto überein." + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Diese E-Mail-Adresse stimmt mit keinem vorhandenen Konto überein." + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Αυτή η διεύθυνση email δεν αντιστοιχεί σε υπάρχοντα λογαριασμό." + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "That email address doesn't match an existing account." + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "That email address doesn't match an existing account." + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "That email address doesn't match an existing account." + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "That email address doesn't match an existing account." + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "That email address doesn't match an existing account." + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "That email address doesn't match an existing account." + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "آن آدرس ایمیل با حساب موجودی مطابقت ندارد." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sähköpostiosoite ei vastaa mitään olemassa olevaa tiliä." + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ang email address na iyan ay hindi tumutugma sa umiiral na account." + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cette adresse e-mail ne correspond à aucun compte existant." + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Die E-Mail-Adresse passt zu keim vorhandene Konto." + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "તે ઇમેઇલ સરનામું હાલના એકાઉન્ટ સાથે મેળ ખાતું નથી." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "כתובת דוא״ל זו אינה תואמת לחשבון קיים." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "वह ईमेल पता किसी मौजूदा खाते से मेल नहीं खाता।" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ta email adresa ne odgovara nijednom postojećem računu." + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ez az e-mail cím nem egyezik meg egy meglévő fiókkal." + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alamat email tersebut tidak cocok dengan akun yang ada." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quell'indirizzo email non corrisponde a un account esistente." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "そのメールアドレスは既存のアカウントと一致しません。" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಆ ಇಮೇಲ್ ವಿಳಾಸವು ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಖಾತೆಗೆ ಹೊಂದಿಕೆಯಾಗುವುದಿಲ್ಲ." + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "해당 이메일 주소가 기존 계정과 일치하지 않습니다." + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adrese wana ya email ekokani te na kɔnti oyo ezali." + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Šī e-pasta adrese neatbilst esošam kontam." + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "तो ईमेल पत्ता अस्तित्वातील खात्याशी जुळत नाही." + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alamat e-mel tersebut tidak sepadan dengan akaun sedia ada." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Den e-postadressen samsvarer ikke med en eksisterende konto." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dat e-mailadres hoort niet bij een bestaand account." + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Den e-postadressa passar ikkje med ein eksisterande konto." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ten adres e-mail nie pasuje do istniejącego konta." + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Esse endereço de e-mail não corresponde a uma conta existente." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Esse endereço de e-mail não corresponde a uma conta existente." + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Esse endereço de e-mail não corresponde a uma conta existente." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Acea adresă de e-mail nu corespunde unui cont existent." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Этот адрес электронной почты не соответствует существующему аккаунту." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Táto e-mailová adresa sa nezhoduje s existujúcim účtom." + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ta e-poštni naslov se ne ujema z obstoječim računom." + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Та имејл адреса се не поклапа са постојећим налогом." + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ta imejl adresa se ne poklapa sa postojećim nalogom." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Den e-postadressen matchar inget befintligt konto." + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "அந்த மின்னஞ்சல் முகவரி இருக்கும் கணக்குடன் பொருந்தவில்லை." + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ที่อยู่อีเมลนั้นไม่ตรงกับบัญชีที่มีอยู่" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bu e-posta adresi mevcut bir hesapla eşleşmiyor." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ця адреса електронної пошти не відповідає існуючому обліковому запису." + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "یہ ای میل ایڈریس کسی موجودہ اکاؤنٹ سے مماثل نہیں ہے۔" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Địa chỉ email đó không khớp với tài khoản hiện có." + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "该邮箱地址与任何现有账户不匹配。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "此電子郵件地址與任何現有帳號不符。" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "此電子郵件地址與任何現有帳號不符。" + } + } + } + }, + "That email address is for an account that has been disabled." : { + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Този имейл адрес е за акаунт, който е деактивиран." + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "এই ইমেইল ঠিকানার অ্যাকাউন্ট নিষ্ক্রিয় করা হয়েছে।" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aquest correu electrònic pertany a un compte que s'ha desactivat." + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tato emailová adresa patří k účtu, který byl deaktivován." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Denne emailadresse tilhører en konto, der er deaktiveret." + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Diese E-Mail-Adresse gehört zu einem Konto, das deaktiviert wurde." + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Diese E-Mail-Adresse gehört zu einem Konto, das deaktiviert wurde." + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Αυτή η διεύθυνση email αντιστοιχεί σε λογαριασμό που έχει απενεργοποιηθεί." + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "That email address is for an account that has been disabled." + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "That email address is for an account that has been disabled." + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "That email address is for an account that has been disabled." + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "That email address is for an account that has been disabled." + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "That email address is for an account that has been disabled." + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "That email address is for an account that has been disabled." + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "آن آدرس ایمیل برای حسابی است که غیرفعال شده است." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tämä sähköpostiosoite kuuluu poistettuun tai estettyyn tiliin." + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ang email address na iyan ay para sa account na na-disable na." + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cette adresse e-mail correspond à un compte qui a été désactivé." + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Die E-Mail-Adresse ghört zu eme Konto, wo deaktiviert worde isch." + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "તે ઇમેઇલ સરનામું એવા એકાઉન્ટ માટે છે જે અક્ષમ કરવામાં આવ્યું છે." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "כתובת דוא״ל זו שייכת לחשבון שהושבת." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "वह ईमेल पता एक ऐसे खाते के लिए है जो अक्षम कर दिया गया है।" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ta email adresa pripada računu koji je deaktiviran." + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ez az e-mail cím egy letiltott fiókhoz tartozik." + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alamat email tersebut untuk akun yang telah dinonaktifkan." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quell'indirizzo email è per un account che è stato disabilitato." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "そのメールアドレスは無効化されたアカウントのものです。" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಆ ಇಮೇಲ್ ವಿಳಾಸವು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾದ ಖಾತೆಗೆ ಸೇರಿದೆ." + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "해당 이메일 주소는 비활성화된 계정입니다." + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adrese wana ya email ezali mpo na kɔnti oyo ekangami." + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Šī e-pasta adrese ir kontam, kas ir atspējots." + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "तो ईमेल पत्ता अक्षम केलेल्या खात्यासाठी आहे." + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alamat e-mel tersebut adalah untuk akaun yang telah dilumpuhkan." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Den e-postadressen tilhører en konto som har blitt deaktivert." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dat e-mailadres hoort bij een account dat is uitgeschakeld." + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Den e-postadressa tilhøyrer ein konto som har blitt deaktivert." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ten adres e-mail należy do konta, które zostało wyłączone." + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Esse endereço de e-mail é de uma conta que foi desativada." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Esse endereço de e-mail é de uma conta que foi desativada." + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Esse endereço de e-mail é de uma conta que foi desativada." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Acea adresă de e-mail este pentru un cont care a fost dezactivat." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Этот адрес электронной почты принадлежит отключенному аккаунту." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Táto e-mailová adresa je pre účet, ktorý bol zakázaný." + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ta e-poštni naslov je za račun, ki je bil onemogočen." + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Та имејл адреса је за налог који је онемогућен." + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ta imejl adresa je za nalog koji je onemogućen." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Den e-postadressen är för ett konto som har inaktiverats." + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "அந்த மின்னஞ்சல் முகவரி முடக்கப்பட்ட கணக்கிற்கானது." + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ที่อยู่อีเมลนั้นเป็นของบัญชีที่ถูกปิดใช้งาน" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bu e-posta adresi devre dışı bırakılmış bir hesaba ait." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ця адреса електронної пошти належить до вимкненого облікового запису." + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "یہ ای میل ایڈریس ایک ایسے اکاؤنٹ کے لیے ہے جو غیر فعال کر دیا گیا ہے۔" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Địa chỉ email đó dành cho tài khoản đã bị vô hiệu hóa." + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "该邮箱对应的账户已被禁用。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "此電子郵件對應的帳號已被停用。" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "此電子郵件所屬的帳號已被停用。" + } + } + } + }, + "That email address isn't correct." : { + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Този имейл адрес не е правилен." + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "এই ইমেইল ঠিকানাটি সঠিক নয়।" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aquest correu electrònic no és correcte." + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tato emailová adresa není správná." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Denne emailadresse er ikke korrekt." + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Diese E-Mail-Adresse ist nicht korrekt." + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Diese E-Mail-Adresse ist nicht korrekt." + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Αυτή η διεύθυνση email δεν είναι σωστή." + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "That email address isn't correct." + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "That email address isn't correct." + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "That email address isn't correct." + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "That email address isn't correct." + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "That email address isn't correct." + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "That email address isn't correct." + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "آن آدرس ایمیل صحیح نیست." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sähköpostiosoite ei ole oikea." + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ang email address na iyan ay hindi tama." + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cette adresse e-mail n'est pas correcte." + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Die E-Mail-Adresse isch nöd korrekt." + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "તે ઇમેઇલ સરનામું સાચું નથી." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "כתובת דוא״ל זו אינה נכונה." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "वह ईमेल पता सही नहीं है।" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ta email adresa nije ispravna." + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ez az e-mail cím nem helyes." + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alamat email tersebut tidak benar." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quell'indirizzo email non è corretto." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "そのメールアドレスは正しくありません。" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಆ ಇಮೇಲ್ ವಿಳಾಸವು ಸರಿಯಾಗಿಲ್ಲ." + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "해당 이메일 주소가 올바르지 않습니다." + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adrese wana ya email ezali malamu te." + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Šī e-pasta adrese nav pareiza." + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "तो ईमेल पत्ता बरोबर नाही." + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alamat e-mel tersebut tidak betul." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Den e-postadressen er ikke riktig." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dat e-mailadres is niet correct." + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Den e-postadressa er ikkje riktig." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ten adres e-mail nie jest poprawny." + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Esse endereço de e-mail não está correto." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Esse endereço de e-mail não está correto." + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Esse endereço de e-mail não está correto." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Acea adresă de e-mail nu este corectă." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Этот адрес электронной почты неверен." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Táto e-mailová adresa nie je správna." + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ta e-poštni naslov ni pravilen." + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Та имејл адреса није исправна." + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ta imejl adresa nije ispravna." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Den e-postadressen är inte korrekt." + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "அந்த மின்னஞ்சல் முகவரி சரியானது அல்ல." + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ที่อยู่อีเมลนั้นไม่ถูกต้อง" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bu e-posta adresi doğru değil." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ця адреса електронної пошти неправильна." + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "یہ ای میل ایڈریس درست نہیں ہے۔" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Địa chỉ email đó không chính xác." + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "该邮箱地址不正确。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "此電子郵件地址不正確。" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "此電子郵件地址不正確。" + } + } + } + }, + "The email address is already in use by another account." : { + "comment" : "Error message displayed when the email address is already in use. Use short/abbreviated translation for 'email' which is less than 15 chars.", + "extractionState" : "migrated", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "عنوان البريد الإلكتروني مستخدم بالفعل من قبل حساب آخر." + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Този имейл адрес вече се използва от друг акаунт." + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "এই ইমেইল ঠিকানা ইতোমধ্যে অন্য একটি অ্যাকাউন্টে ব্যবহৃত হচ্ছে।" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aquest correu electrònic ja s'està utilitzant en un altre compte." + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tato emailová adresa je již používána jiným účtem." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Emailadressen bruges allerede af en anden konto." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Die E-Mail-Adresse wird bereits von einem anderen Konto verwendet." + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Die E-Mail-Adresse wird bereits von einem anderen Konto verwendet." + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Die E-Mail-Adresse wird bereits von einem anderen Konto verwendet." + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Η διεύθυνση email χρησιμοποιείται ήδη από άλλο λογαριασμό." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "The email address is already in use by another account." + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "The email address is already in use by another account." + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "The email address is already in use by another account." + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "The email address is already in use by another account." + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "The email address is already in use by another account." + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "The email address is already in use by another account." + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "The email address is already in use by another account." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "La dirección de correo ya está en uso por otra cuenta." + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "آدرس ایمیل قبلاً توسط حساب دیگری استفاده شده است." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sähköpostiosoite on jo toisen tilin käytössä." + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ang email address ay ginagamit na ng ibang account." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cette adresse e-mail est déjà utilisée par un autre compte." + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cette adresse e-mail est déjà utilisée par un autre compte." + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "D'E-Mail-Adresse wird scho vo eme andere Konto verwendet." + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "ઇમેઇલ સરનામું પહેલેથી જ બીજા એકાઉન્ટ દ્વારા ઉપયોગમાં છે." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "כתובת הדוא״ל כבר בשימוש על ידי חשבון אחר." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "ईमेल पता पहले से किसी अन्य खाते द्वारा उपयोग में है।" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ta email adresa se već koristi na drugom računu." + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Az e-mail címet már egy másik fiók használja." + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alamat email sudah digunakan oleh akun lain." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "L'indirizzo email è già utilizzato da un altro account." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "このメールアドレスは既に別のアカウントで使用されています。" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಇಮೇಲ್ ವಿಳಾಸವು ಈಗಾಗಲೇ ಮತ್ತೊಂದು ಖಾತೆಯಿಂದ ಬಳಕೆಯಲ್ಲಿದೆ." + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이메일 주소가 이미 다른 계정에서 사용 중입니다." + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adrese ya email esalelamaka na kɔnti mosusu." + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-pasta adresi jau izmanto cits konts." + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "ईमेल पत्ता आधीच दुसऱ्या खात्याद्वारे वापरात आहे." + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alamat e-mel telah digunakan oleh akaun lain." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-postadressen er allerede i bruk av en annen konto." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dat e-mailadres is al in gebruik door een ander account." + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-postadressa er allereie i bruk av ein annan konto." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adres e-mail jest już używany przez inne konto." + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "O endereço de e-mail já está em uso por outra conta." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "O endereço de e-mail já está em uso por outra conta." + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "O endereço de e-mail já está a ser utilizado por outra conta." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adresa de e-mail este deja utilizată de un alt cont." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Этот адрес электронной почты уже используется другим аккаунтом." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Túto e-mailovú adresu už používa iný účet." + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ta e-poštni naslov že uporablja drug račun." + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Имејл адресу већ користи други налог." + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Imejl adresu već koristi drugi nalog." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-postadressen används redan av ett annat konto." + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "மின்னஞ்சல் முகவரி ஏற்கனவே வேறொரு கணக்கால் பயன்படுத்தப்படுகிறது." + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ที่อยู่อีเมลนี้ถูกใช้โดยบัญชีอื่นแล้ว" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-posta adresi zaten başka bir hesap tarafından kullanılıyor." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ця адреса електронної пошти вже використовується іншим обліковим записом." + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "ای میل ایڈریس پہلے سے کسی دوسرے اکاؤنٹ کے زیر استعمال ہے۔" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Địa chỉ email đã được tài khoản khác sử dụng." + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "该邮箱已被其他账户使用。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "此電子郵件地址已被其他帳號使用。" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "此電子郵件地址已被其他帳號使用。" + } + } + } + }, + "The email and password you entered don't match." : { + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Въведеният имейл и парола не съвпадат." + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ইমেইল এবং পাসওয়ার্ড মেলে না।" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "El correu electrònic i la contrasenya introduïts no coincideixen." + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zadaný email a heslo se neshodují." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Email og adgangskode stemmer ikke overens." + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Die eingegebene E-Mail-Adresse und das Passwort stimmen nicht überein." + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Die eingegebene E-Mail-Adresse und das Passwort stimmen nicht überein." + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Το email και ο κωδικός πρόσβασης που εισαγάγατε δεν ταιριάζουν." + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "The email and password you entered don't match." + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "The email and password you entered don't match." + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "The email and password you entered don't match." + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "The email and password you entered don't match." + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "The email and password you entered don't match." + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "The email and password you entered don't match." + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ایمیل و رمز عبوری که وارد کردید مطابقت ندارند." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Antamasi sähköposti ja salasana eivät täsmää." + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ang email at password na iyong inilagay ay hindi tumutugma." + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "L'e-mail et le mot de passe que vous avez saisis ne correspondent pas." + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "D'E-Mail-Adresse und s'Passwort wo du iigäh häsch passe nöd." + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "તમે દાખલ કરેલ ઇમેઇલ અને પાસવર્ડ મેળ ખાતા નથી." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הדוא״ל והסיסמה שהזנת אינם תואמים." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "आपके द्वारा दर्ज किया गया ईमेल और पासवर्ड मेल नहीं खाते।" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Email i lozinka koje ste unijeli ne podudaraju se." + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "A megadott e-mail cím és jelszó nem egyezik." + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Email dan kata sandi yang Anda masukkan tidak cocok." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "L'email e la password inserite non corrispondono." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "入力されたメールアドレスとパスワードが一致しません。" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ನೀವು ನಮೂದಿಸಿದ ಇಮೇಲ್ ಮತ್ತು ಪಾಸ್‌ವರ್ಡ್ ಹೊಂದಿಕೆಯಾಗುವುದಿಲ್ಲ." + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "입력한 이메일과 비밀번호가 일치하지 않습니다." + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Email na liloba ya kobombama oyo otisaki ekokani te." + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ievadītais e-pasts un parole nesakrīt." + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "तुम्ही एंटर केलेला ईमेल आणि पासवर्ड जुळत नाहीत." + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-mel dan kata laluan yang anda masukkan tidak sepadan." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-posten og passordet du skrev inn stemmer ikke overens." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Het ingevoerde e-mailadres en wachtwoord komen niet overeen." + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-posten og passordet du skreiv inn stemmer ikkje overens." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wprowadzony adres e-mail i hasło nie pasują do siebie." + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "O e-mail e a senha que você digitou não correspondem." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "O e-mail e a senha que você digitou não correspondem." + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "O e-mail e a palavra-passe que introduziu não correspondem." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-mailul și parola pe care le-ați introdus nu se potrivesc." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Введенные адрес электронной почты и пароль не совпадают." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zadaný e-mail a heslo sa nezhodujú." + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vneseni e-poštni naslov in geslo se ne ujemata." + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Имејл и лозинка које сте унели се не поклапају." + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Imejl i lozinka koje ste uneli se ne poklapaju." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-postadressen och lösenordet du angav stämmer inte överens." + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "நீங்கள் உள்ளிட்ட மின்னஞ்சல் மற்றும் கடவுச்சொல் பொருந்தவில்லை." + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "อีเมลและรหัสผ่านที่คุณใส่ไม่ตรงกัน" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Girdiğiniz e-posta ve şifre eşleşmiyor." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Введена адреса електронної пошти та пароль не збігаються." + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "آپ کی درج کردہ ای میل اور پاس ورڈ مماثل نہیں ہیں۔" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Email và mật khẩu bạn nhập không khớp." + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "邮箱和密码不匹配。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "您輸入的電子郵件與密碼不相符。" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "您輸入的電子郵件與密碼不相符。" + } + } + } + }, + "This action can't be undone" : { + "extractionState" : "stale", + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Това действие не може да бъде отменено" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "এই পদক্ষেপ পূর্বাবস্থায় ফেরানো যাবে না" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aquesta acció no es pot desfer" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tuto akci nelze vrátit zpět" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Denne handling kan ikke fortrydes" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Diese Aktion kann nicht rückgängig gemacht werden" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Diese Aktion kann nicht rückgängig gemacht werden" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Αυτή η ενέργεια δεν μπορεί να αναιρεθεί" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "This action can't be undone" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "This action can't be undone" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "This action can't be undone" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "This action can't be undone" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "This action can't be undone" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "This action can't be undone" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "این عمل قابل بازگشت نیست" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tätä toimintoa ei voi perua" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ang aksyon na ito ay hindi maaaring bawiin" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cette action ne peut pas être annulée" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Die Aktion cha nöd rückgängig gmacht werde" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "આ ક્રિયા પાછી લેવી શકાતી નથી" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "לא ניתן לבטל פעולה זו" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "यह कार्रवाई पूर्ववत नहीं की जा सकती" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ova radnja se ne može poništiti" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ez a művelet nem vonható vissza" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tindakan ini tidak dapat dibatalkan" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Questa azione non può essere annullata" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "この操作は元に戻せません" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಈ ಕ್ರಿಯೆಯನ್ನು ರದ್ದುಗೊಳಿಸಲಾಗುವುದಿಲ್ಲ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이 작업은 실행 취소할 수 없습니다" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Likambo oyo ekoki kozonga te" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Šo darbību nevar atsaukt" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "ही क्रिया पूर्ववत करता येणार नाही" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tindakan ini tidak boleh dibuat asal" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Denne handlingen kan ikke angres" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Deze actie kan niet ongedaan worden gemaakt" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Denne handlinga kan ikkje angrast" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ta czynność nie może zostać cofnięta" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Esta ação não pode ser desfeita" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Esta ação não pode ser desfeita" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Esta ação não pode ser anulada" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Această acțiune nu poate fi anulată" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Это действие нельзя отменить" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Túto akciu nie je možné vrátiť späť" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tega dejanja ni mogoče razveljaviti" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ова акција се не може опозвати" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ova akcija se ne može opozvati" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Denna åtgärd kan inte ångras" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "இந்த செயலை செயல்தவிர்க்க முடியாது" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "การดำเนินการนี้ไม่สามารถยกเลิกได้" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bu işlem geri alınamaz" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Цю дію неможливо скасувати" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "اس کارروائی کو کالعدم نہیں کیا جا سکتا" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hành động này không thể hoàn tác" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "此操作无法撤销" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "此動作無法還原" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "此操作無法復原" + } + } + } + }, + "This action cannot be undone. All your data will be permanently deleted. You may need to reauthenticate to complete this action." : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "لا يمكن التراجع عن هذا الإجراء. سيتم حذف جميع بياناتك بشكل دائم. قد تحتاج إلى إعادة المصادقة لإكمال هذا الإجراء." + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Това действие не може да бъде отменено. Всички ваши данни ще бъдат изтрити завинаги. Може да се наложи да се удостоверите отново." + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "এই পদক্ষেপ পূর্বাবস্থায় ফেরানো যাবে না। আপনার সমস্ত তথ্য স্থায়ীভাবে মুছে ফেলা হবে। এটি সম্পূর্ণ করতে আপনাকে পুনরায় প্রমাণীকরণ করতে হতে পারে।" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aquesta acció no es pot desfer. Totes les teves dades se suprimiran definitivament. És possible que hagis de tornar a autenticar-te per completar l'acció." + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tuto akci nelze vrátit zpět. Všechna vaše data budou trvale odstraněna. Možná bude nutné se znovu ověřit." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Denne handling kan ikke fortrydes. Alle dine data vil blive permanent slettet. Du skal muligvis logge ind igen for at fuldføre handlingen." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Diese Aktion kann nicht rückgängig gemacht werden. Alle deine Daten werden dauerhaft gelöscht. Du musst dich möglicherweise erneut authentifizieren, um diese Aktion abzuschließen." + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Diese Aktion kann nicht rückgängig gemacht werden. Alle Ihre Daten werden dauerhaft gelöscht. Möglicherweise müssen Sie sich erneut authentifizieren, um diese Aktion abzuschließen." + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Diese Aktion kann nicht rückgängig gemacht werden. Alle Ihre Daten werden dauerhaft gelöscht. Möglicherweise müssen Sie sich erneut authentifizieren, um diese Aktion abzuschliessen." + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Αυτή η ενέργεια δεν μπορεί να αναιρεθεί. Όλα τα δεδομένα σας θα διαγραφούν οριστικά. Ενδέχεται να χρειαστεί να επαναπιστοποιηθείτε για να ολοκληρώσετε αυτήν την ενέργεια." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "This action cannot be undone. All your data will be permanently deleted. You may need to reauthenticate to complete this action." + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "This action cannot be undone. All your data will be permanently deleted. You may need to re-authenticate to complete this action." + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "This action cannot be undone. All your data will be permanently deleted. You may need to re-authenticate to complete this action." + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "This action cannot be undone. All your data will be permanently deleted. You may need to re-authenticate to complete this action." + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "This action cannot be undone. All your data will be permanently deleted. You may need to re-authenticate to complete this action." + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "This action cannot be undone. All your data will be permanently deleted. You may need to re-authenticate to complete this action." + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "This action cannot be undone. All your data will be permanently deleted. You may need to re-authenticate to complete this action." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Esta acción no se puede deshacer. Todos tus datos se eliminarán permanentemente. Es posible que debas volver a autenticarte para completar esta acción." + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "این عمل قابل بازگشت نیست. تمام داده‌های شما به طور دائم حذف خواهند شد. ممکن است برای تکمیل این عمل نیاز به احراز هویت مجدد داشته باشید." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tätä toimintoa ei voi perua. Kaikki tietosi poistetaan pysyvästi. Sinun on ehkä tunnistauduttava uudelleen suorittaaksesi toiminnon." + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ang aksyon na ito ay hindi maaaring bawiin. Ang lahat ng iyong data ay permanenteng mabubura. Maaaring kailangan mong mag-authenticate muli upang makumpleto ang aksyon na ito." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cette action ne peut pas être annulée. Toutes tes données seront définitivement supprimées. Tu devras peut-être te réauthentifier pour effectuer cette action." + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cette action ne peut pas être annulée. Toutes vos données seront définitivement supprimées. Vous devrez peut-être vous authentifier à nouveau pour effectuer cette action." + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Die Aktion cha nöd rückgängig gmacht werde. All dini Date wärde dauerhaft glöscht. Du muesch dich villicht nomol authentifiziere, zum die Aktion abzschliesse." + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "આ ક્રિયા પાછી લઈ શકાતી નથી. તમારા બધા ડેટા કાયમી ધોરણે કાઢી નાખવામાં આવશે. આ ક્રિયા પૂર્ણ કરવા માટે તમારે પુનઃપ્રમાણીકરણ કરવાની જરૂર પડી શકે છે." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "לא ניתן לבטל פעולה זו. כל הנתונים שלך יימחקו לצמיתות. ייתכן שתצטרך להזדהות מחדש כדי להשלים פעולה זו." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "इस कार्रवाई को पूर्ववत नहीं किया जा सकता। आपका सभी डेटा स्थायी रूप से हटा दिया जाएगा। इस कार्रवाई को पूरा करने के लिए आपको पुनः प्रमाणित करने की आवश्यकता हो सकती है।" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ova radnja se ne može poništiti. Svi vaši podaci bit će trajno izbrisani. Možda ćete se morati ponovno autentificirati kako biste dovršili radnju." + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ez a művelet nem vonható vissza. Minden adata véglegesen törlésre kerül. Előfordulhat, hogy újra hitelesítenie kell magát a művelet befejezéséhez." + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tindakan ini tidak dapat dibatalkan. Semua data Anda akan dihapus secara permanen. Anda mungkin perlu mengautentikasi ulang untuk menyelesaikan tindakan ini." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Questa azione non può essere annullata. Tutti i tuoi dati verranno eliminati definitivamente. Potrebbe essere necessario autenticarsi nuovamente per completare questa azione." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "この操作は元に戻せません。すべてのデータが完全に削除されます。この操作を完了するには、再認証が必要になる場合があります。" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಈ ಕ್ರಿಯೆಯನ್ನು ರದ್ದುಗೊಳಿಸಲಾಗುವುದಿಲ್ಲ. ನಿಮ್ಮ ಎಲ್ಲಾ ಡೇಟಾವನ್ನು ಶಾಶ್ವತವಾಗಿ ಅಳಿಸಲಾಗುತ್ತದೆ. ಈ ಕ್ರಿಯೆಯನ್ನು ಪೂರ್ಣಗೊಳಿಸಲು ನೀವು ಮರುದೃಢೀಕರಿಸಬೇಕಾಗಬಹುದು." + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이 작업은 실행 취소할 수 없습니다. 모든 데이터가 영구적으로 삭제됩니다. 이 작업을 완료하려면 다시 인증해야 할 수 있습니다." + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Likambo oyo ekoki kozonga te. Makambo na yo nyonso ekolongwama mpo na libela. Ekoki kozala esengeli ondimisa lisusu mpo na kosilisa likambo oyo." + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Šo darbību nevar atsaukt. Visi jūsu dati tiks neatgriezeniski dzēsti. Lai pabeigtu šo darbību, iespējams, būs nepieciešama atkārtota autentifikācija." + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "ही क्रिया पूर्ववत करता येणार नाही. तुमचा सर्व डेटा कायमचा हटवला जाईल. ही क्रिया पूर्ण करण्यासाठी तुम्हाला पुन्हा प्रमाणीकरण करावे लागेल." + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tindakan ini tidak boleh dibuat asal. Semua data anda akan dipadamkan secara kekal. Anda mungkin perlu mengesahkan semula untuk melengkapkan tindakan ini." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Denne handlingen kan ikke angres. Alle dataene dine vil bli permanent slettet. Du må kanskje autentisere på nytt for å fullføre denne handlingen." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Deze actie kan niet ongedaan worden gemaakt. Al je gegevens worden permanent verwijderd. Mogelijk moet je opnieuw inloggen om dit te voltooien." + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Denne handlinga kan ikkje angrast. Alle data dine vil bli permanent sletta. Du må kanskje autentisere på nytt for å fullføre denne handlinga." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ta czynność nie może zostać cofnięta. Wszystkie Twoje dane zostaną trwale usunięte. Może być konieczne ponowne uwierzytelnienie, aby ukończyć tę czynność." + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Esta ação não pode ser desfeita. Todos os seus dados serão excluídos permanentemente. Pode ser necessário autenticar novamente para concluir esta ação." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Esta ação não pode ser desfeita. Todos os seus dados serão excluídos permanentemente. Pode ser necessário autenticar novamente para concluir esta ação." + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Esta ação não pode ser anulada. Todos os seus dados serão eliminados permanentemente. Poderá ser necessário autenticar novamente para concluir esta ação." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Această acțiune nu poate fi anulată. Toate datele dvs. vor fi șterse definitiv. Poate fi necesar să vă reautentificați pentru a finaliza această acțiune." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Это действие нельзя отменить. Все ваши данные будут безвозвратно удалены. Возможно, потребуется повторная аутентификация для завершения этого действия." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Túto akciu nie je možné vrátiť späť. Všetky vaše údaje budú trvalo vymazané. Na dokončenie tejto akcie možno budete musieť znova overiť svoju totožnosť." + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tega dejanja ni mogoče razveljaviti. Vsi vaši podatki bodo trajno izbrisani. Za dokončanje tega dejanja boste morda morali znova preveriti svojo pristnost." + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ова акција се не може опозвати. Сви ваши подаци ће бити трајно обрисани. Можда ћете морати поново да се аутентификујете да бисте завршили ову акцију." + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ova akcija se ne može opozvati. Svi vaši podaci će biti trajno obrisani. Možda ćete morati ponovo da se autentifikujete da biste završili ovu akciju." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Denna åtgärd kan inte ångras. All din data kommer att raderas permanent. Du kan behöva autentisera dig igen för att slutföra denna åtgärd." + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "இந்த செயலை செயல்தவிர்க்க முடியாது. உங்கள் அனைத்து தரவும் நிரந்தரமாக நீக்கப்படும். இந்த செயலை நிறைவு செய்ய நீங்கள் மீண்டும் அங்கீகரிக்க வேண்டியிருக்கலாம்." + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "การดำเนินการนี้ไม่สามารถยกเลิกได้ ข้อมูลทั้งหมดของคุณจะถูกลบอย่างถาวร คุณอาจต้องตรวจสอบสิทธิ์อีกครั้งเพื่อดำเนินการให้เสร็จสมบูรณ์" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bu işlem geri alınamaz. Tüm verileriniz kalıcı olarak silinecektir. Bu işlemi tamamlamak için yeniden kimlik doğrulaması yapmanız gerekebilir." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Цю дію неможливо скасувати. Усі ваші дані будуть видалені назавжди. Можливо, вам доведеться повторно автентифікуватися, щоб завершити цю дію." + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "اس کارروائی کو کالعدم نہیں کیا جا سکتا۔ آپ کا تمام ڈیٹا مستقل طور پر حذف ہو جائے گا۔ اس کارروائی کو مکمل کرنے کے لیے آپ کو دوبارہ تصدیق کرنے کی ضرورت ہو سکتی ہے۔" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hành động này không thể hoàn tác. Tất cả dữ liệu của bạn sẽ bị xóa vĩnh viễn. Bạn có thể cần xác thực lại để hoàn tất hành động này." + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "此操作无法撤销。您的所有数据将被永久删除。您可能需要重新验证才能完成操作。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "此動作無法還原。所有資料將永久刪除。您可能需要重新驗證才能完成此操作。" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "此操作無法復原。所有資料將永久刪除。您可能需要重新驗證以完成此操作。" + } + } + } + }, + "This type of account isn't supported by this app" : { + "extractionState" : "stale", + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Този тип акаунт не се поддържа от приложението" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "এই ধরনের অ্যাকাউন্ট অ্যাপ দ্বারা সমর্থিত নয়" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aquest tipus de compte no és compatible amb aquesta aplicació" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tento typ účtu není touto aplikací podporován" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Denne kontotype understøttes ikke af denne app" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dieser Kontotyp wird von dieser App nicht unterstützt" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dieser Kontotyp wird von dieser App nicht unterstützt" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Αυτός ο τύπος λογαριασμού δεν υποστηρίζεται από αυτήν την εφαρμογή" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "This type of account isn't supported by this app" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "This type of account isn't supported by this app" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "This type of account isn't supported by this app" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "This type of account isn't supported by this app" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "This type of account isn't supported by this app" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "This type of account isn't supported by this app" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "این نوع حساب توسط این برنامه پشتیبانی نمی‌شود" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tämän tyyppistä tiliä ei tueta tässä sovelluksessa" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ang uri ng account na ito ay hindi suportado ng app na ito" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ce type de compte n'est pas pris en charge par cette application" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dä Kontotyp wird vo dere App nöd unterstützt" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "આ પ્રકારનું એકાઉન્ટ આ એપ દ્વારા સમર્થિત નથી" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "סוג חשבון זה אינו נתמך על ידי אפליקציה זו" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "इस प्रकार का खाता इस ऐप द्वारा समर्थित नहीं है" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ovaj tip računa nije podržan u ovoj aplikaciji" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ez a fióktípus nem támogatott ebben az alkalmazásban" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jenis akun ini tidak didukung oleh aplikasi ini" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Questo tipo di account non è supportato da questa app" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "このタイプのアカウントはこのアプリでサポートされていません" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಈ ರೀತಿಯ ಖಾತೆಯನ್ನು ಈ ಆ್ಯಪ್ ಬೆಂಬಲಿಸುವುದಿಲ್ಲ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이 유형의 계정은 이 앱에서 지원되지 않습니다" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lolenge oyo ya kɔnti esunga te na aplikasyo oyo" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Šo konta veidu neatbalsta šī lietotne" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "या प्रकारचे खाते या अॅपद्वारे समर्थित नाही" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jenis akaun ini tidak disokong oleh aplikasi ini" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Denne kontotypen støttes ikke av denne appen" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dit type account wordt niet ondersteund door deze app" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Denne kontotypen er ikkje støtta av denne appen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ten typ konta nie jest obsługiwany przez tę aplikację" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Este tipo de conta não é compatível com este aplicativo" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Este tipo de conta não é compatível com este app" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Este tipo de conta não é suportado por esta aplicação" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Acest tip de cont nu este acceptat de această aplicație" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Этот тип аккаунта не поддерживается этим приложением" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tento typ účtu nie je touto aplikáciou podporovaný" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ta vrsta računa ni podprta v tej aplikaciji" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Овај тип налога није подржан од стране ове апликације" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ovaj tip naloga nije podržan od strane ove aplikacije" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Denna typ av konto stöds inte av denna app" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "இந்த வகை கணக்கு இந்த செயலியால் ஆதரிக்கப்படவில்லை" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "แอปนี้ไม่รองรับบัญชีประเภทนี้" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bu hesap türü bu uygulama tarafından desteklenmiyor" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Цей тип облікового запису не підтримується цією програмою" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "اس قسم کا اکاؤنٹ اس ایپ کے ذریعے تعاون یافتہ نہیں ہے" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loại tài khoản này không được ứng dụng này hỗ trợ" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "此类账户不受此应用支持" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "此類型帳號不支援此應用程式" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "此類型帳號不支援本應用程式" + } + } + } + }, + "This will erase all data associated with your account, and can't be undone You will need to sign in again to complete this action" : { + "extractionState" : "stale", + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Това ще изтрие всички данни, свързани с вашия акаунт, и не може да бъде отменено. Ще трябва да влезете отново, за да завършите действието." + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "এটি আপনার অ্যাকাউন্টের সাথে সম্পর্কিত সমস্ত তথ্য মুছে ফেলবে এবং পূর্বাবস্থায় ফেরানো যাবে না। এই পদক্ষেপ সম্পূর্ণ করতে আপনাকে পুনরায় সাইন ইন করতে হবে।" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Això suprimirà totes les dades associades al teu compte i no es podrà desfer. Hauràs d'iniciar sessió de nou per completar aquesta acció." + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tato akce smaže všechna data spojená s vaším účtem a nelze ji vrátit zpět. Pro dokončení se budete muset znovu přihlásit." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dette vil slette alle data tilknyttet din konto, og kan ikke fortrydes. Du skal logge ind igen for at fuldføre handlingen." + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dies löscht alle mit Ihrem Konto verbundenen Daten und kann nicht rückgängig gemacht werden. Sie müssen sich erneut anmelden, um diese Aktion abzuschließen" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dies löscht alle mit Ihrem Konto verbundenen Daten und kann nicht rückgängig gemacht werden. Sie müssen sich erneut anmelden, um diese Aktion abzuschliessen" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Αυτό θα διαγράψει όλα τα δεδομένα που σχετίζονται με τον λογαριασμό σας και δεν μπορεί να αναιρεθεί. Θα χρειαστεί να συνδεθείτε ξανά για να ολοκληρώσετε αυτήν την ενέργεια" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "This will erase all data associated with your account, and can't be undone. You will need to sign in again to complete this action." + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "This will erase all data associated with your account, and can't be undone. You will need to sign in again to complete this action." + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "This will erase all data associated with your account and can't be undone. You will need to sign in again to complete this action." + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "This will erase all data associated with your account and can't be undone. You will need to sign in again to complete this action." + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "This will erase all data associated with your account and can't be undone. You will need to sign in again to complete this action." + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "This will erase all data associated with your account and can't be undone. You will need to sign in again to complete this action." + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "این کار تمام داده‌های مرتبط با حساب شما را پاک می‌کند و قابل بازگشت نیست. برای تکمیل این عمل باید دوباره وارد شوید" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tämä poistaa kaiken tiliisi liittyvän tiedon, eikä toimintoa voi perua. Sinun täytyy kirjautua uudelleen suorittaaksesi toiminnon." + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ito ay magbubura ng lahat ng data na nauugnay sa iyong account, at hindi maaaring bawiin. Kailangan mong mag-sign in muli upang makumpleto ang aksyon na ito" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cela effacera toutes les données associées à votre compte et ne peut pas être annulé. Vous devrez vous reconnecter pour effectuer cette action" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Das löscht alli Date wo mit dim Konto verbunde sind und cha nöd rückgängig gmacht werde. Du muesch dich nomol aamälde, zum die Aktion abzschliesse" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "આ તમારા એકાઉન્ટ સાથે સંબંધિત તમામ ડેટા કાઢી નાખશે, અને પાછો લઈ શકાશે નહીં. આ ક્રિયા પૂર્ણ કરવા માટે તમારે ફરીથી સાઇન ઇન કરવાની જરૂર પડશે" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "פעולה זו תמחק את כל הנתונים המשויכים לחשבון שלך, ולא ניתן לבטלה. תצטרך להתחבר שוב כדי להשלים פעולה זו" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "यह आपके खाते से संबंधित सभी डेटा मिटा देगा, और इसे पूर्ववत नहीं किया जा सकता। इस कार्रवाई को पूरा करने के लिए आपको फिर से साइन इन करना होगा" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ova radnja će izbrisati sve podatke povezane s vašim računom i ne može se poništiti. Morat ćete se ponovno prijaviti kako biste dovršili radnju." + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ez töröl minden fiókjához társított adatot, és nem vonható vissza. A művelet befejezéséhez újra be kell jelentkeznie" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ini akan menghapus semua data yang terkait dengan akun Anda, dan tidak dapat dibatalkan. Anda perlu masuk lagi untuk menyelesaikan tindakan ini" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Questo cancellerà tutti i dati associati al tuo account e non può essere annullato. Dovrai accedere di nuovo per completare questa azione" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "これにより、アカウントに関連するすべてのデータが消去され、元に戻すことはできません。この操作を完了するには、再度サインインする必要があります" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಇದು ನಿಮ್ಮ ಖಾತೆಗೆ ಸಂಬಂಧಿಸಿದ ಎಲ್ಲಾ ಡೇಟಾವನ್ನು ಅಳಿಸುತ್ತದೆ ಮತ್ತು ರದ್ದುಗೊಳಿಸಲಾಗುವುದಿಲ್ಲ. ಈ ಕ್ರಿಯೆಯನ್ನು ಪೂರ್ಣಗೊಳಿಸಲು ನೀವು ಮತ್ತೆ ಸೈನ್ ಇನ್ ಮಾಡಬೇಕಾಗುತ್ತದೆ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이렇게 하면 계정과 관련된 모든 데이터가 삭제되며 실행 취소할 수 없습니다. 이 작업을 완료하려면 다시 로그인해야 합니다" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Oyo ekolongola makambo nyonso oyo ezali na kɔnti na yo, mpe ekoki kozonga te. Esengeli okota lisusu mpo na kosilisa likambo oyo" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tas izdzēsīs visus ar jūsu kontu saistītos datus, un to nevar atsaukt. Lai pabeigtu šo darbību, būs jāpierakstās vēlreiz" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "हे तुमच्या खात्याशी संबंधित सर्व डेटा मिटवेल, आणि पूर्ववत करता येणार नाही. ही क्रिया पूर्ण करण्यासाठी तुम्हाला पुन्हा साइन इन करावे लागेल" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ini akan memadam semua data yang berkaitan dengan akaun anda, dan tidak boleh dibuat asal. Anda perlu log masuk semula untuk melengkapkan tindakan ini" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dette vil slette alle data tilknyttet kontoen din, og kan ikke angres. Du må logge inn igjen for å fullføre denne handlingen" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dit verwijdert alle gegevens van je account en kan niet ongedaan worden gemaakt. Je moet opnieuw inloggen om dit te voltooien." + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dette vil slette alle data knytte til kontoen din, og kan ikkje angrast. Du må logge inn igjen for å fullføre denne handlinga" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spowoduje to usunięcie wszystkich danych związanych z Twoim kontem i nie można tego cofnąć. Będziesz musiał zalogować się ponownie, aby ukończyć tę czynność" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Isso excluirá todos os dados associados à sua conta e não poderá ser desfeito. Você precisará fazer login novamente para concluir esta ação" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Isso excluirá todos os dados associados à sua conta e não poderá ser desfeito. Você precisará fazer login novamente para concluir esta ação" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Isto irá eliminar todos os dados associados à sua conta e não pode ser anulado. Terá de iniciar sessão novamente para concluir esta ação" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aceasta va șterge toate datele asociate cu contul dvs. și nu poate fi anulată. Va trebui să vă conectați din nou pentru a finaliza această acțiune" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Это удалит все данные, связанные с вашим аккаунтом, и не может быть отменено. Вам нужно будет снова войти, чтобы завершить это действие" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tým sa vymažú všetky údaje spojené s vaším účtom a túto akciu nie je možné vrátiť späť. Na dokončenie tejto akcie sa budete musieť znova prihlásiť" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "S tem boste izbrisali vse podatke, povezane z vašim računom, in tega ni mogoče razveljaviti. Za dokončanje tega dejanja se boste morali znova prijaviti" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ово ће обрисати све податке повезане са вашим налогом и не може се опозвати. Мораћете да се пријавите поново да бисте завршили ову акцију" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ovo će obrisati sve podatke povezane sa vašim nalogom i ne može se opozvati. Moraćete da se prijavite ponovo da biste završili ovu akciju" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Detta raderar all data kopplad till ditt konto och kan inte ångras. Du måste logga in igen för att slutföra denna åtgärd" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "இது உங்கள் கணக்குடன் தொடர்புடைய அனைத்து தரவையும் அழிக்கும், மற்றும் செயல்தவிர்க்க முடியாது. இந்த செயலை நிறைவு செய்ய நீங்கள் மீண்டும் உள்நுழைய வேண்டும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "การดำเนินการนี้จะลบข้อมูลทั้งหมดที่เกี่ยวข้องกับบัญชีของคุณและไม่สามารถยกเลิกได้ คุณจะต้องลงชื่อเข้าใช้อีกครั้งเพื่อดำเนินการให้เสร็จสมบูรณ์" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bu, hesabınızla ilişkili tüm verileri silecek ve geri alınamaz. Bu işlemi tamamlamak için tekrar oturum açmanız gerekecek" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Це видалить усі дані, пов'язані з вашим обліковим записом, і це неможливо скасувати. Вам потрібно буде увійти знову, щоб завершити цю дію" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "یہ آپ کے اکاؤنٹ سے منسلک تمام ڈیٹا کو مٹا دے گا، اور اسے کالعدم نہیں کیا جا سکتا۔ اس کارروائی کو مکمل کرنے کے لیے آپ کو دوبارہ سائن ان کرنا ہوگا" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Điều này sẽ xóa tất cả dữ liệu liên quan đến tài khoản của bạn và không thể hoàn tác. Bạn sẽ cần đăng nhập lại để hoàn tất hành động này" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "此操作将清除与您账户相关的所有数据,且无法撤销。您需要重新登录才能完成。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "此操作將清除所有帳號相關資料且無法還原。您需要重新登入以完成此動作。" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "此操作將清除所有帳號相關資料,且無法復原。您需要重新登入以完成此操作。" + } + } + } + }, + "This will erase all data associated with your account, and can't be undone. Are you sure you want to delete your account?" : { + "extractionState" : "stale", + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Това ще изтрие всички данни, свързани с акаунта ви, и не може да бъде отменено. Сигурни ли сте, че искате да го изтриете?" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "এটি আপনার অ্যাকাউন্টের সমস্ত তথ্য মুছে ফেলবে এবং পূর্বাবস্থায় ফেরানো যাবে না। আপনি কি সত্যিই আপনার অ্যাকাউন্ট মুছতে চান?" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Això suprimirà totes les dades associades al teu compte i no es podrà desfer. Estàs segur que vols suprimir el teu compte?" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tato akce smaže všechna data vašeho účtu a nelze ji vrátit zpět. Opravdu chcete účet smazat?" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dette sletter alle data tilknyttet din konto og kan ikke fortrydes. Er du sikker på, at du vil slette kontoen?" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dies löscht alle mit Ihrem Konto verbundenen Daten und kann nicht rückgängig gemacht werden. Sind Sie sicher, dass Sie Ihr Konto löschen möchten?" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dies löscht alle mit Ihrem Konto verbundenen Daten und kann nicht rückgängig gemacht werden. Sind Sie sicher, dass Sie Ihr Konto löschen möchten?" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Αυτό θα διαγράψει όλα τα δεδομένα που σχετίζονται με τον λογαριασμό σας και δεν μπορεί να αναιρεθεί. Είστε βέβαιοι ότι θέλετε να διαγράψετε τον λογαριασμό σας;" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "This will erase all data associated with your account and can't be undone. Are you sure you want to delete your account?" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "This will erase all data associated with your account and can't be undone. Are you sure you want to delete your account?" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "This will erase all data associated with your account and can't be undone. Are you sure you want to delete your account?" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "This will erase all data associated with your account and can't be undone. Are you sure you want to delete your account?" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "This will erase all data associated with your account and can't be undone. Are you sure you want to delete your account?" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "This will erase all data associated with your account and can't be undone. Are you sure you want to delete your account?" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "این کار تمام داده‌های مرتبط با حساب شما را پاک می‌کند و قابل بازگشت نیست. آیا مطمئن هستید که می‌خواهید حساب خود را حذف کنید؟" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tämä poistaa kaiken tiliisi liittyvän tiedon, eikä toimintoa voi perua. Haluatko varmasti poistaa tilisi?" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ito ay magbubura ng lahat ng data na nauugnay sa iyong account, at hindi maaaring bawiin. Sigurado ka bang gusto mong tanggalin ang iyong account?" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cela effacera toutes les données associées à votre compte et ne peut pas être annulé. Êtes-vous sûr de vouloir supprimer votre compte ?" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Das löscht alli Date wo mit dim Konto verbunde sind und cha nöd rückgängig gmacht werde. Bisch sicher, dass du dis Konto lösche wetsch?" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "આ તમારા એકાઉન્ટ સાથે સંબંધિત તમામ ડેટા કાઢી નાખશે, અને પાછો લઈ શકાશે નહીં. શું તમે ખરેખર તમારું એકાઉન્ટ કાઢી નાખવા માંગો છો?" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "פעולה זו תמחק את כל הנתונים המשויכים לחשבון שלך, ולא ניתן לבטלה. האם אתה בטוח שברצונך למחוק את החשבון שלך?" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "यह आपके खाते से संबंधित सभी डेटा मिटा देगा, और इसे पूर्ववत नहीं किया जा सकता। क्या आप वाकई अपना खाता हटाना चाहते हैं?" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ova radnja će izbrisati sve podatke vašeg računa i ne može se poništiti. Jeste li sigurni da želite izbrisati svoj račun?" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ez töröl minden fiókjához társított adatot, és nem vonható vissza. Biztos, hogy törölni szeretné a fiókját?" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ini akan menghapus semua data yang terkait dengan akun Anda, dan tidak dapat dibatalkan. Apakah Anda yakin ingin menghapus akun Anda?" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Questo cancellerà tutti i dati associati al tuo account e non può essere annullato. Sei sicuro di voler eliminare il tuo account?" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "これにより、アカウントに関連するすべてのデータが消去され、元に戻すことはできません。本当にアカウントを削除しますか?" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಇದು ನಿಮ್ಮ ಖಾತೆಗೆ ಸಂಬಂಧಿಸಿದ ಎಲ್ಲಾ ಡೇಟಾವನ್ನು ಅಳಿಸುತ್ತದೆ ಮತ್ತು ರದ್ದುಗೊಳಿಸಲಾಗುವುದಿಲ್ಲ. ನೀವು ನಿಮ್ಮ ಖಾತೆಯನ್ನು ಅಳಿಸಲು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ?" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이렇게 하면 계정과 관련된 모든 데이터가 삭제되며 실행 취소할 수 없습니다. 정말로 계정을 삭제하시겠습니까?" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Oyo ekolongola makambo nyonso oyo ezali na kɔnti na yo, mpe ekoki kozonga te. Olingi mpenza kolongola kɔnti na yo?" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tas izdzēsīs visus ar jūsu kontu saistītos datus, un to nevar atsaukt. Vai tiešām vēlaties dzēst kontu?" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "हे तुमच्या खात्याशी संबंधित सर्व डेटा मिटवेल, आणि पूर्ववत करता येणार नाही. तुम्हाला खात्रीपूर्वक तुमचे खाते हटवायचे आहे का?" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ini akan memadam semua data yang berkaitan dengan akaun anda, dan tidak boleh dibuat asal. Adakah anda pasti mahu memadam akaun anda?" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dette vil slette alle data tilknyttet kontoen din, og kan ikke angres. Er du sikker på at du vil slette kontoen din?" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dit verwijdert alle gegevens van je account en kan niet ongedaan worden gemaakt. Weet je zeker dat je je account wilt verwijderen?" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dette vil slette alle data knytte til kontoen din, og kan ikkje angrast. Er du sikker på at du vil slette kontoen din?" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spowoduje to usunięcie wszystkich danych związanych z Twoim kontem i nie można tego cofnąć. Czy na pewno chcesz usunąć swoje konto?" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Isso excluirá todos os dados associados à sua conta e não poderá ser desfeito. Tem certeza de que deseja excluir sua conta?" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Isso excluirá todos os dados associados à sua conta e não poderá ser desfeito. Tem certeza de que deseja excluir sua conta?" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Isto irá eliminar todos os dados associados à sua conta e não pode ser anulado. Tem a certeza de que deseja eliminar a sua conta?" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aceasta va șterge toate datele asociate cu contul dvs. și nu poate fi anulată. Sigur doriți să vă ștergeți contul?" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Это удалит все данные, связанные с вашим аккаунтом, и не может быть отменено. Вы уверены, что хотите удалить свой аккаунт?" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tým sa vymažú všetky údaje spojené s vaším účtom a túto akciu nie je možné vrátiť späť. Naozaj chcete odstrániť svoj účet?" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "S tem boste izbrisali vse podatke, povezane z vašim računom, in tega ni mogoče razveljaviti. Ali ste prepričani, da želite izbrisati svoj račun?" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ово ће обрисати све податке повезане са вашим налогом и не може се опозвати. Да ли сте сигурни да желите да обришете налог?" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ovo će obrisati sve podatke povezane sa vašim nalogom i ne može se opozvati. Da li ste sigurni da želite da obrišete nalog?" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Detta raderar all data kopplad till ditt konto och kan inte ångras. Är du säker på att du vill ta bort ditt konto?" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "இது உங்கள் கணக்குடன் தொடர்புடைய அனைத்து தரவையும் அழிக்கும், மற்றும் செயல்தவிர்க்க முடியாது. உங்கள் கணக்கை நிச்சயமாக நீக்க விரும்புகிறீர்களா?" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "การดำเนินการนี้จะลบข้อมูลทั้งหมดที่เกี่ยวข้องกับบัญชีของคุณและไม่สามารถยกเลิกได้ คุณแน่ใจหรือไม่ว่าต้องการลบบัญชีของคุณ?" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bu, hesabınızla ilişkili tüm verileri silecek ve geri alınamaz. Hesabınızı silmek istediğinizden emin misiniz?" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Це видалить усі дані, пов'язані з вашим обліковим записом, і це неможливо скасувати. Ви впевнені, що хочете видалити свій обліковий запис?" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "یہ آپ کے اکاؤنٹ سے منسلک تمام ڈیٹا کو مٹا دے گا، اور اسے کالعدم نہیں کیا جا سکتا۔ کیا آپ واقعی اپنا اکاؤنٹ حذف کرنا چاہتے ہیں؟" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Điều này sẽ xóa tất cả dữ liệu liên quan đến tài khoản của bạn và không thể hoàn tác. Bạn có chắc chắn muốn xóa tài khoản của mình không?" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "此操作将清除您账户的所有数据,且无法撤销。确定要删除您的账户吗?" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "此操作將清除所有帳號資料且無法還原。您確定要刪除帳號嗎?" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "此操作將刪除所有與您帳號相關的資料,且無法復原。確定要刪除帳號嗎?" + } + } + } + }, + "To add password to your account, you will need to sign in again." : { + "extractionState" : "stale", + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "За да добавите парола към акаунта си, трябва да влезете отново." + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "আপনার অ্যাকাউন্টে পাসওয়ার্ড যোগ করতে আপনাকে পুনরায় সাইন ইন করতে হবে।" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Per afegir una contrasenya al teu compte, hauràs d'iniciar sessió de nou." + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pro přidání hesla k vašemu účtu se musíte znovu přihlásit." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "For at tilføje en adgangskode til din konto skal du logge ind igen." + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Um Ihrem Konto ein Passwort hinzuzufügen, müssen Sie sich erneut anmelden." + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Um Ihrem Konto ein Passwort hinzuzufügen, müssen Sie sich erneut anmelden." + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Για να προσθέσετε κωδικό πρόσβασης στον λογαριασμό σας, θα πρέπει να συνδεθείτε ξανά." + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "To add a password to your account, you will need to sign in again." + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "To add a password to your account, you will need to sign in again." + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "To add a password to your account, you will need to sign in again." + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "To add a password to your account, you will need to sign in again." + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "To add a password to your account, you will need to sign in again." + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "To add a password to your account, you will need to sign in again." + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "برای افزودن رمز عبور به حساب خود، باید دوباره وارد شوید." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lisätäksesi salasanan tiliisi sinun täytyy kirjautua uudelleen." + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Upang magdagdag ng password sa iyong account, kailangan mong mag-sign in muli." + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pour ajouter un mot de passe à votre compte, vous devrez vous reconnecter." + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Um dim Konto es Passwort hinzuezfüege, muesch dich nomol aamälde." + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "તમારા એકાઉન્ટમાં પાસવર્ડ ઉમેરવા માટે, તમારે ફરીથી સાઇન ઇન કરવાની જરૂર પડશે." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "כדי להוסיף סיסמה לחשבון שלך, תצטרך להתחבר שוב." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "अपने खाते में पासवर्ड जोड़ने के लिए, आपको फिर से साइन इन करना होगा।" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Da biste dodali lozinku svom računu, morat ćete se ponovno prijaviti." + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jelszó hozzáadásához újra be kell jelentkeznie." + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Untuk menambahkan kata sandi ke akun Anda, Anda perlu masuk lagi." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Per aggiungere una password al tuo account, dovrai accedere di nuovo." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "アカウントにパスワードを追加するには、再度サインインする必要があります。" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ನಿಮ್ಮ ಖಾತೆಗೆ ಪಾಸ್‌ವರ್ಡ್ ಸೇರಿಸಲು, ನೀವು ಮತ್ತೆ ಸೈನ್ ಇನ್ ಮಾಡಬೇಕಾಗುತ್ತದೆ." + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "계정에 비밀번호를 추가하려면 다시 로그인해야 합니다." + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mpo na kobakisa liloba ya kobombama na kɔnti na yo, esengeli okota lisusu." + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lai kontam pievienotu paroli, būs jāpierakstās vēlreiz." + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "तुमच्या खात्यात पासवर्ड जोडण्यासाठी, तुम्हाला पुन्हा साइन इन करावे लागेल." + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Untuk menambah kata laluan pada akaun anda, anda perlu log masuk semula." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "For å legge til passord til kontoen din, må du logge inn igjen." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Om een wachtwoord toe te voegen, moet je opnieuw inloggen." + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "For å leggje til passord til kontoen din, må du logge inn igjen." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aby dodać hasło do swojego konta, musisz zalogować się ponownie." + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Para adicionar uma senha à sua conta, você precisará fazer login novamente." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Para adicionar uma senha à sua conta, você precisará fazer login novamente." + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Para adicionar uma palavra-passe à sua conta, terá de iniciar sessão novamente." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pentru a adăuga o parolă la contul dvs., va trebui să vă conectați din nou." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Чтобы добавить пароль к вашему аккаунту, вам нужно будет снова войти." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ak chcete pridať heslo do svojho účtu, budete sa musieť znova prihlásiť." + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Če želite dodati geslo svojemu računu, se boste morali znova prijaviti." + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Да бисте додали лозинку вашем налогу, мораћете да се пријавите поново." + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Da biste dodali lozinku vašem nalogu, moraćete da se prijavite ponovo." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "För att lägga till lösenord till ditt konto måste du logga in igen." + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "உங்கள் கணக்கில் கடவுச்சொல்லைச் சேர்க்க, நீங்கள் மீண்டும் உள்நுழைய வேண்டும்." + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ในการเพิ่มรหัสผ่านให้กับบัญชีของคุณ คุณจะต้องลงชื่อเข้าใช้อีกครั้ง" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hesabınıza şifre eklemek için tekrar oturum açmanız gerekecek." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Щоб додати пароль до свого облікового запису, вам потрібно буде увійти знову." + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "اپنے اکاؤنٹ میں پاس ورڈ شامل کرنے کے لیے، آپ کو دوبارہ سائن ان کرنا ہوگا۔" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Để thêm mật khẩu vào tài khoản của bạn, bạn sẽ cần đăng nhập lại." + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "要为账户添加密码,您需要重新登录。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "要為帳號新增密碼,您需要重新登入。" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "若要為帳號新增密碼,您需要重新登入。" + } + } + } + }, + "To change email address associated with your account, you will need to sign in again." : { + "extractionState" : "stale", + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "За да промените имейла, свързан с акаунта ви, трябва да влезете отново." + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "আপনার অ্যাকাউন্টের সাথে যুক্ত ইমেইল ঠিকানা পরিবর্তন করতে আপনাকে পুনরায় সাইন ইন করতে হবে।" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Per canviar el correu electrònic associat al teu compte, hauràs d'iniciar sessió de nou." + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pro změnu emailové adresy u vašeho účtu se musíte znovu přihlásit." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "For at ændre emailadressen for din konto skal du logge ind igen." + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Um die mit Ihrem Konto verknüpfte E-Mail-Adresse zu ändern, müssen Sie sich erneut anmelden." + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Um die mit Ihrem Konto verknüpfte E-Mail-Adresse zu ändern, müssen Sie sich erneut anmelden." + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Για να αλλάξετε τη διεύθυνση email που σχετίζεται με τον λογαριασμό σας, θα πρέπει να συνδεθείτε ξανά." + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "To change the email address associated with your account, you will need to sign in again." + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "To change the email address associated with your account, you will need to sign in again." + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "To change the email address associated with your account, you will need to sign in again." + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "To change the email address associated with your account, you will need to sign in again." + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "To change the email address associated with your account, you will need to sign in again." + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "To change the email address associated with your account, you will need to sign in again." + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "برای تغییر آدرس ایمیل مرتبط با حساب خود، باید دوباره وارد شوید." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vaihtaaksesi tiliisi liitetyn sähköpostiosoitteen sinun täytyy kirjautua uudelleen." + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Upang baguhin ang email address na nauugnay sa iyong account, kailangan mong mag-sign in muli." + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pour modifier l'adresse e-mail associée à votre compte, vous devrez vous reconnecter." + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Um d'E-Mail-Adresse wo mit dim Konto verknüpft isch z'ändere, muesch dich nomol aamälde." + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "તમારા એકાઉન્ટ સાથે સંબંધિત ઇમેઇલ સરનામું બદલવા માટે, તમારે ફરીથી સાઇન ઇન કરવાની જરૂર પડશે." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "כדי לשנות את כתובת הדוא״ל המשויכת לחשבון שלך, תצטרך להתחבר שוב." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "अपने खाते से संबद्ध ईमेल पता बदलने के लिए, आपको फिर से साइन इन करना होगा।" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Da biste promijenili email adresu povezanu s vašim računom, morat ćete se ponovno prijaviti." + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "A fiókjához társított e-mail cím módosításához újra be kell jelentkeznie." + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Untuk mengubah alamat email yang terkait dengan akun Anda, Anda perlu masuk lagi." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Per cambiare l'indirizzo email associato al tuo account, dovrai accedere di nuovo." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "アカウントに関連付けられたメールアドレスを変更するには、再度サインインする必要があります。" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ನಿಮ್ಮ ಖಾತೆಗೆ ಸಂಬಂಧಿಸಿದ ಇಮೇಲ್ ವಿಳಾಸವನ್ನು ಬದಲಾಯಿಸಲು, ನೀವು ಮತ್ತೆ ಸೈನ್ ಇನ್ ಮಾಡಬೇಕಾಗುತ್ತದೆ." + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "계정과 연결된 이메일 주소를 변경하려면 다시 로그인해야 합니다." + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mpo na kobongola adrese ya email oyo ekangami na kɔnti na yo, esengeli okota lisusu." + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lai mainītu ar kontu saistīto e-pasta adresi, būs jāpierakstās vēlreiz." + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "तुमच्या खात्याशी संबंधित ईमेल पत्ता बदलण्यासाठी, तुम्हाला पुन्हा साइन इन करावे लागेल." + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Untuk menukar alamat e-mel yang berkaitan dengan akaun anda, anda perlu log masuk semula." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "For å endre e-postadressen tilknyttet kontoen din, må du logge inn igjen." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Om je e-mailadres te wijzigen, moet je opnieuw inloggen." + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "For å endre e-postadressa knytt til kontoen din, må du logge inn igjen." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aby zmienić adres e-mail powiązany z Twoim kontem, musisz zalogować się ponownie." + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Para alterar o endereço de e-mail associado à sua conta, você precisará fazer login novamente." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Para alterar o endereço de e-mail associado à sua conta, você precisará fazer login novamente." + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Para alterar o endereço de e-mail associado à sua conta, terá de iniciar sessão novamente." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pentru a schimba adresa de e-mail asociată cu contul dvs., va trebui să vă conectați din nou." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Чтобы изменить адрес электронной почты, связанный с вашим аккаунтом, вам нужно будет снова войти." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ak chcete zmeniť e-mailovú adresu spojenú s vaším účtom, budete sa musieť znova prihlásiť." + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Če želite spremeniti e-poštni naslov, povezan z vašim računom, se boste morali znova prijaviti." + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Да бисте променили имејл адресу повезану са вашим налогом, мораћете да се пријавите поново." + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Da biste promenili imejl adresu povezanu sa vašim nalogom, moraćete da se prijavite ponovo." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "För att ändra e-postadressen kopplad till ditt konto måste du logga in igen." + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "உங்கள் கணக்குடன் தொடர்புடைய மின்னஞ்சல் முகவரியை மாற்ற, நீங்கள் மீண்டும் உள்நுழைய வேண்டும்." + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ในการเปลี่ยนที่อยู่อีเมลที่เชื่อมโยงกับบัญชีของคุณ คุณจะต้องลงชื่อเข้าใช้อีกครั้ง" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hesabınızla ilişkili e-posta adresini değiştirmek için tekrar oturum açmanız gerekecek." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Щоб змінити адресу електронної пошти, пов'язану з вашим обліковим записом, вам потрібно буде увійти знову." + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "اپنے اکاؤنٹ سے منسلک ای میل ایڈریس تبدیل کرنے کے لیے، آپ کو دوبارہ سائن ان کرنا ہوگا۔" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Để thay đổi địa chỉ email liên kết với tài khoản của bạn, bạn sẽ cần đăng nhập lại." + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "要更改账户绑定的邮箱,您需要重新登录。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "要更改帳號使用的電子郵件地址,您需要重新登入。" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "若要更改帳號綁定的電子郵件地址,您需要重新登入。" + } + } + } + }, + "To change password to your account, you will need to sign in again." : { + "extractionState" : "stale", + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "За да промените паролата си, трябва да влезете отново." + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "আপনার অ্যাকাউন্টের পাসওয়ার্ড পরিবর্তন করতে আপনাকে পুনরায় সাইন ইন করতে হবে।" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Per canviar la contrasenya del teu compte, hauràs d'iniciar sessió de nou." + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pro změnu hesla u vašeho účtu se musíte znovu přihlásit." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "For at ændre din adgangskode skal du logge ind igen." + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Um das Passwort für Ihr Konto zu ändern, müssen Sie sich erneut anmelden." + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Um das Passwort für Ihr Konto zu ändern, müssen Sie sich erneut anmelden." + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Για να αλλάξετε τον κωδικό πρόσβασης του λογαριασμού σας, θα πρέπει να συνδεθείτε ξανά." + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "To change the password for your account, you will need to sign in again." + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "To change the password for your account, you will need to sign in again." + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "To change the password for your account, you will need to sign in again." + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "To change the password for your account, you will need to sign in again." + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "To change the password for your account, you will need to sign in again." + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "To change the password for your account, you will need to sign in again." + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "برای تغییر رمز عبور حساب خود، باید دوباره وارد شوید." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vaihtaaksesi tilisi salasanan sinun täytyy kirjautua uudelleen." + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Upang baguhin ang password sa iyong account, kailangan mong mag-sign in muli." + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pour modifier le mot de passe de votre compte, vous devrez vous reconnecter." + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Um s'Passwort für dis Konto z'ändere, muesch dich nomol aamälde." + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "તમારા એકાઉન્ટનો પાસવર્ડ બદલવા માટે, તમારે ફરીથી સાઇન ઇન કરવાની જરૂર પડશે." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "כדי לשנות את הסיסמה של החשבון שלך, תצטרך להתחבר שוב." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "अपने खाते का पासवर्ड बदलने के लिए, आपको फिर से साइन इन करना होगा।" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Da biste promijenili lozinku, morat ćete se ponovno prijaviti." + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "A fiókja jelszavának módosításához újra be kell jelentkeznie." + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Untuk mengubah kata sandi akun Anda, Anda perlu masuk lagi." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Per cambiare la password del tuo account, dovrai accedere di nuovo." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "アカウントのパスワードを変更するには、再度サインインする必要があります。" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ನಿಮ್ಮ ಖಾತೆಯ ಪಾಸ್‌ವರ್ಡ್ ಬದಲಾಯಿಸಲು, ನೀವು ಮತ್ತೆ ಸೈನ್ ಇನ್ ಮಾಡಬೇಕಾಗುತ್ತದೆ." + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "계정의 비밀번호를 변경하려면 다시 로그인해야 합니다." + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mpo na kobongola liloba ya kobombama na kɔnti na yo, esengeli okota lisusu." + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lai mainītu konta paroli, būs jāpierakstās vēlreiz." + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "तुमच्या खात्याचा पासवर्ड बदलण्यासाठी, तुम्हाला पुन्हा साइन इन करावे लागेल." + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Untuk menukar kata laluan akaun anda, anda perlu log masuk semula." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "For å endre passordet til kontoen din, må du logge inn igjen." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Om je wachtwoord te wijzigen, moet je opnieuw inloggen." + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "For å endre passordet til kontoen din, må du logge inn igjen." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aby zmienić hasło do swojego konta, musisz zalogować się ponownie." + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Para alterar a senha da sua conta, você precisará fazer login novamente." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Para alterar a senha da sua conta, você precisará fazer login novamente." + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Para alterar a palavra-passe da sua conta, terá de iniciar sessão novamente." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pentru a schimba parola contului dvs., va trebui să vă conectați din nou." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Чтобы изменить пароль вашего аккаунта, вам нужно будет снова войти." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ak chcete zmeniť heslo svojho účtu, budete sa musieť znova prihlásiť." + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Če želite spremeniti geslo svojega računa, se boste morali znova prijaviti." + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Да бисте променили лозинку вашег налога, мораћете да се пријавите поново." + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Da biste promenili lozinku vašeg naloga, moraćete da se prijavite ponovo." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "För att ändra lösenordet till ditt konto måste du logga in igen." + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "உங்கள் கணக்கின் கடவுச்சொல்லை மாற்ற, நீங்கள் மீண்டும் உள்நுழைய வேண்டும்." + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ในการเปลี่ยนรหัสผ่านของบัญชีของคุณ คุณจะต้องลงชื่อเข้าใช้อีกครั้ง" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hesabınızın şifresini değiştirmek için tekrar oturum açmanız gerekecek." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Щоб змінити пароль свого облікового запису, вам потрібно буде увійти знову." + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "اپنے اکاؤنٹ کا پاس ورڈ تبدیل کرنے کے لیے، آپ کو دوبارہ سائن ان کرنا ہوگا۔" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Để thay đổi mật khẩu tài khoản của bạn, bạn sẽ cần đăng nhập lại." + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "要更改账户密码,您需要重新登录。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "要更改帳號密碼,您需要重新登入。" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "若要更改帳號密碼,您需要重新登入。" + } + } + } + }, + "Too many account requests are coming from your IP address. Try again in a few minutes." : { + "extractionState" : "stale", + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Твърде много заявки идват от вашия IP адрес. Опитайте отново след няколко минути." + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "আপনার IP ঠিকানা থেকে অনেক বেশি অনুরোধ পাঠানো হয়েছে। কয়েক মিনিট পরে আবার চেষ্টা করুন।" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hi ha massa sol·licituds de compte des de la teva adreça IP. Torna-ho a provar d'aquí a uns minuts." + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Z vaší IP adresy přichází příliš mnoho požadavků. Zkuste to znovu za pár minut." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Der kommer for mange forespørgsler fra din IP-adresse. Prøv igen om et par minutter." + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zu viele Kontoanfragen kommen von Ihrer IP-Adresse. Versuchen Sie es in ein paar Minuten erneut." + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zu viele Kontoanfragen kommen von Ihrer IP-Adresse. Versuchen Sie es in ein paar Minuten erneut." + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Πάρα πολλά αιτήματα λογαριασμού προέρχονται από τη διεύθυνση IP σας. Δοκιμάστε ξανά σε λίγα λεπτά." + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Too many account requests are coming from your IP address. Try again in a few minutes." + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Too many account requests are coming from your IP address. Try again in a few minutes." + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Too many account requests are coming from your IP address. Try again in a few minutes." + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Too many account requests are coming from your IP address. Try again in a few minutes." + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Too many account requests are coming from your IP address. Try again in a few minutes." + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Too many account requests are coming from your IP address. Try again in a few minutes." + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "درخواست‌های زیادی از آدرس IP شما در حال دریافت است. چند دقیقه دیگر دوباره امتحان کنید." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Liian monta pyyntöä tulee IP-osoitteestasi. Yritä uudelleen muutaman minuutin kuluttua." + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Masyadong maraming account requests ang nanggagaling sa iyong IP address. Subukan muli sa ilang minuto." + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trop de demandes de compte proviennent de votre adresse IP. Réessayez dans quelques minutes." + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Z'viel Kontoanfrage chöme vo dinere IP-Adresse. Versuech's i es paar Minute nomol." + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "તમારા IP સરનામામાંથી ઘણી બધી એકાઉન્ટ વિનંતીઓ આવી રહી છે. થોડીવારમાં ફરી પ્રયાસ કરો." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "יותר מדי בקשות חשבון מגיעות מכתובת ה־IP שלך. נסה שוב בעוד מספר דקות." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "आपके IP पते से बहुत सारे खाता अनुरोध आ रहे हैं। कुछ मिनटों में फिर से प्रयास करें।" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Previše zahtjeva dolazi s vaše IP adrese. Pokušajte ponovno za nekoliko minuta." + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Túl sok fiókigénylés érkezik az Ön IP-címéről. Próbálja újra néhány perc múlva." + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terlalu banyak permintaan akun berasal dari alamat IP Anda. Coba lagi dalam beberapa menit." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Troppe richieste di account provengono dal tuo indirizzo IP. Riprova tra qualche minuto." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "お使いのIPアドレスからのアカウントリクエストが多すぎます。数分後に再試行してください。" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ನಿಮ್ಮ IP ವಿಳಾಸದಿಂದ ಹಲವಾರು ಖಾತೆ ವಿನಂತಿಗಳು ಬರುತ್ತಿವೆ. ಕೆಲವು ನಿಮಿಷಗಳಲ್ಲಿ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ." + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "IP 주소에서 너무 많은 계정 요청이 오고 있습니다. 몇 분 후에 다시 시도하세요." + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Masengi mingi ya kɔnti ezali kowuta na adrese na yo ya IP. Meka lisusu na baminti moke." + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "No jūsu IP adreses tiek veikti pārāk daudzi konta pieprasījumi. Mēģiniet vēlreiz pēc dažām minūtēm." + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "तुमच्या IP पत्त्यावरून खूप खाते विनंत्या येत आहेत. काही मिनिटांनी पुन्हा प्रयत्न करा." + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terlalu banyak permintaan akaun datang daripada alamat IP anda. Cuba lagi dalam beberapa minit." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "For mange kontoforespørsler kommer fra IP-adressen din. Prøv igjen om noen minutter." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Er komen te veel verzoeken vanaf je IP-adres. Probeer het over een paar minuten opnieuw." + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "For mange kontoførespurnader kjem frå IP-adressa di. Prøv igjen om nokre minutt." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Z Twojego adresu IP przychodzi zbyt wiele żądań konta. Spróbuj ponownie za kilka minut." + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Muitas solicitações de conta estão vindo do seu endereço IP. Tente novamente em alguns minutos." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Muitas solicitações de conta estão vindo do seu endereço IP. Tente novamente em alguns minutos." + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Demasiados pedidos de conta estão a chegar do seu endereço IP. Tente novamente dentro de alguns minutos." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prea multe solicitări de cont vin de la adresa dvs. IP. Încercați din nou în câteva minute." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "С вашего IP-адреса поступает слишком много запросов аккаунта. Попробуйте снова через несколько минут." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Z vašej IP adresy prichádza príliš veľa požiadaviek na účet. Skúste to znova o niekoľko minút." + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Z vašega IP naslova prihaja preveč zahtev za račun. Poskusite znova čez nekaj minut." + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Превише захтева за налог долази са ваше IP адресе. Покушајте поново за неколико минута." + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Previše zahteva za nalog dolazi sa vaše IP adrese. Pokušajte ponovo za nekoliko minuta." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "För många kontoförfrågningar kommer från din IP-adress. Försök igen om några minuter." + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "உங்கள் IP முகவரியிலிருந்து பல கணக்கு கோரிக்கைகள் வருகின்றன. சில நிமிடங்களில் மீண்டும் முயற்சிக்கவும்." + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "มีคำขอบัญชีจากที่อยู่ IP ของคุณมากเกินไป ลองอีกครั้งในอีกสักครู่" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "IP adresinizden çok fazla hesap isteği geliyor. Birkaç dakika sonra tekrar deneyin." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "З вашої IP-адреси надходить занадто багато запитів облікового запису. Спробуйте знову через кілька хвилин." + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "آپ کے IP ایڈریس سے بہت زیادہ اکاؤنٹ کی درخواستیں آ رہی ہیں۔ چند منٹ میں دوبارہ کوشش کریں۔" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quá nhiều yêu cầu tài khoản đến từ địa chỉ IP của bạn. Hãy thử lại sau vài phút." + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "来自您 IP 地址的请求过多,请稍后再试。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "您的 IP 發出了過多的請求,請稍後再試。" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "您的 IP 位址發出了過多請求,請稍後再試。" + } + } + } + }, + "Trouble getting emails?" : { + "extractionState" : "stale", + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Проблеми с получаването на имейли?" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ইমেইল পেতে সমস্যা?" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tens problemes per rebre correus?" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Máte potíže s přijímáním emailů?" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Problemer med at modtage emails?" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Probleme beim Empfangen von E-Mails?" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Probleme beim Empfangen von E-Mails?" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Πρόβλημα με τη λήψη emails;" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trouble getting emails?" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trouble getting emails?" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trouble getting emails?" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trouble getting emails?" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trouble getting emails?" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trouble getting emails?" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "مشکل در دریافت ایمیل دارید؟" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Onko sähköpostien vastaanottamisessa ongelmia?" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "May problema sa pagtanggap ng mga email?" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Des difficultés à recevoir des e-mails ?" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Problem bim E-Mails übercho?" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "ઇમેઇલ્સ મેળવવામાં મુશ્કેલી?" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "בעיות בקבלת הודעות דוא״ל?" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "ईमेल प्राप्त करने में समस्या?" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Problemi s primanjem emailova?" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Problémák az e-mailek fogadásával?" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kesulitan menerima email?" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Problemi a ricevere email?" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "メールの受信に問題がありますか?" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಇಮೇಲ್‌ಗಳನ್ನು ಪಡೆಯುವಲ್ಲಿ ಸಮಸ್ಯೆ?" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이메일을 받는 데 문제가 있나요?" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mikakatano ya kozwa ba-email?" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Problēmas ar e-pasta saņemšanu?" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "ईमेल मिळविण्यात समस्या?" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Masalah menerima e-mel?" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Problemer med å motta e-poster?" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Problemen met het ontvangen van e-mails?" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Problem med å motta e-postar?" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Problem z otrzymywaniem e-maili?" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Problemas para receber e-mails?" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Problemas para receber e-mails?" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Problemas a receber e-mails?" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Probleme în a primi e-mailuri?" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Проблемы с получением писем?" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Problémy s prijímaním e-mailov?" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Težave s prejemanjem e-pošte?" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Проблеми са пријемом имејлова?" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Problemi sa prijemom imejlova?" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Problem med att få e-post?" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "மின்னஞ்சல்களைப் பெறுவதில் சிக்கலா?" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "มีปัญหาในการรับอีเมลหรือไม่?" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-posta almakta sorun mu yaşıyorsunuz?" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Проблеми з отриманням листів?" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "ای میلز موصول کرنے میں پریشانی؟" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gặp sự cố khi nhận email?" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "无法收到邮件?" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "收不到電子郵件?" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "收不到電子郵件?" + } + } + } + }, + "Trouble signing in?" : { + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Проблеми с влизането?" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "সাইন ইন করতে সমস্যা?" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tens problemes per iniciar sessió?" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Máte potíže s přihlášením?" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Problemer med at logge ind?" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Probleme beim Anmelden?" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Probleme beim Anmelden?" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Πρόβλημα με τη σύνδεση;" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trouble signing in?" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trouble signing in?" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trouble signing in?" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trouble signing in?" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trouble signing in?" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trouble signing in?" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "مشکل در ورود دارید؟" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Onko kirjautumisessa ongelmia?" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "May problema sa pag-sign in?" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Des difficultés à vous connecter ?" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Problem bim Aamälde?" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "સાઇન ઇન કરવામાં મુશ્કેલી?" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "בעיות בהתחברות?" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "साइन इन करने में समस्या?" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Problemi s prijavom?" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Problémák a bejelentkezéssel?" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kesulitan masuk?" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Problemi ad accedere?" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "サインインに問題がありますか?" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಸೈನ್ ಇನ್ ಮಾಡುವಲ್ಲಿ ಸಮಸ್ಯೆ?" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "로그인하는 데 문제가 있나요?" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mikakatano ya kokota?" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Problēmas ar pierakstīšanos?" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "साइन इन करण्यात समस्या?" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Masalah log masuk?" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Problemer med å logge inn?" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Problemen met inloggen?" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Problem med å logge inn?" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Problem z logowaniem?" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Problemas para fazer login?" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Problemas para fazer login?" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Problemas a iniciar sessão?" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Probleme la conectare?" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Проблемы со входом?" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Problémy s prihlásením?" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Težave s prijavo?" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Проблеми са пријављивањем?" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Problemi sa prijavljivanjem?" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Problem med att logga in?" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "உள்நுழைவதில் சிக்கலா?" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "มีปัญหาในการลงชื่อเข้าใช้หรือไม่?" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Oturum açmakta sorun mu yaşıyorsunuz?" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Проблеми зі входом?" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "سائن ان میں پریشانی؟" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gặp sự cố khi đăng nhập?" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "无法登录?" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "登入遇到問題?" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "登入遇到問題?" + } + } + } + }, + "TroubleGettingEmailMessage" : { + "comment" : "Alert message displayed when user having trouble getting email.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "جرب هذه الحلول الشائعة:\n - تحقق مما إذا تم وضع علامة على البريد الإلكتروني كرسالة غير مرغوب فيها أو تمت تصفيته.\n - تحقق من اتصالك بالإنترنت.\n - تحقق من أنك لم تخطئ في كتابة بريدك الإلكتروني.\n - تحقق من أن مساحة صندوق الوارد الخاص بك لا تنفد أو مشاكل أخرى متعلقة بإعدادات صندوق الوارد.\n إذا لم تنجح الخطوات المذكورة أعلاه، يمكنك إعادة إرسال البريد الإلكتروني. لاحظ أن هذا سيؤدي إلى إلغاء تنشيط الرابط في البريد الإلكتروني القديم." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Versuche diese gängigen Lösungen: \n - Überprüfe, ob die E-Mail als Spam markiert oder gefiltert wurde.\n - Überprüfe deine Internetverbindung.\n - Überprüfe, ob du deine E-Mail nicht falsch geschrieben hast.\n - Überprüfe, ob dein Postfach voll ist oder andere Probleme mit den Postfacheinstellungen vorliegen.\n Wenn die obigen Schritte nicht funktioniert haben, kannst du die E-Mail erneut senden. Beachte, dass dadurch der Link in der älteren E-Mail deaktiviert wird." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Try these common fixes: \n - Check if the email was marked as spam or filtered.\n - Check your internet connection.\n - Check that you did not misspell your email.\n - Check that your inbox space is not running out or other inbox settings related issues.\n If the steps above didn't work, you can resend the email. Note that this will deactivate the link in the older email." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prueba estas soluciones comunes: \n - Verifica si el correo fue marcado como spam o filtrado.\n - Verifica tu conexión a internet.\n - Verifica que no hayas escrito mal tu correo.\n - Verifica que tu bandeja de entrada no esté llena u otros problemas relacionados con la configuración de la bandeja de entrada.\n Si los pasos anteriores no funcionaron, puedes reenviar el correo. Ten en cuenta que esto desactivará el enlace del correo anterior." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Essaie ces solutions courantes :\n - Vérifie si l'e-mail a été marqué comme spam ou filtré.\n - Vérifie ta connexion Internet.\n - Vérifie que tu n'as pas mal orthographié ton e-mail.\n - Vérifie que l'espace de ta boîte de réception n'est pas saturé ou qu'il n'y a pas d'autres problèmes de paramètres de boîte de réception.\n Si les étapes ci-dessus n'ont pas fonctionné, tu peux renvoyer l'e-mail. Note que cela désactivera le lien dans l'ancien e-mail." + } + } + } + }, + "TroubleGettingEmailTitle" : { + "comment" : "Title used in trouble getting email alert view.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "مشكلة في تلقي رسائل البريد الإلكتروني؟" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Probleme beim Empfang von E-Mails?" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trouble getting emails?" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "¿Problemas para recibir correos?" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Problème pour recevoir les e-mails ?" + } + } + } + }, + "Try these common fixes:" : { + "extractionState" : "stale", + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Опитайте тези често срещани решения:" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "এই সাধারণ সমাধানগুলো চেষ্টা করুন:" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prova aquestes solucions habituals:" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zkuste tato běžná řešení:" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prøv disse almindelige løsninger:" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Probieren Sie diese gängigen Lösungen aus:" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Probieren Sie diese gängigen Lösungen aus:" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Δοκιμάστε αυτές τις συνήθεις λύσεις:" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Try these common fixes:" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Try these common fixes:" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Try these common fixes:" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Try these common fixes:" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Try these common fixes:" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Try these common fixes:" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "این راه‌حل‌های رایج را امتحان کنید:" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kokeile näitä yleisiä ratkaisuja:" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Subukan ang mga karaniwang solusyon na ito:" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Essayez ces solutions courantes :" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Probier die gängige Lösige us:" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "આ સામાન્ય સુધારાઓ અજમાવો:" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "נסה את הפתרונות הנפוצים הבאים:" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "इन सामान्य समाधानों को आजमाएं:" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pokušajte sljedeća uobičajena rješenja:" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Próbálja ki ezeket a gyakori megoldásokat:" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Coba perbaikan umum ini:" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prova queste soluzioni comuni:" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "これらの一般的な修正を試してください:" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಈ ಸಾಮಾನ್ಯ ಪರಿಹಾರಗಳನ್ನು ಪ್ರಯತ್ನಿಸಿ:" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "다음과 같은 일반적인 해결 방법을 시도해 보세요:" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Meka mayele oyo ya nsango:" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Izmēģiniet šos biežākos risinājumus:" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "या सामान्य उपायांचा प्रयत्न करा:" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cuba penyelesaian biasa ini:" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prøv disse vanlige løsningene:" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Probeer deze veelvoorkomende oplossingen:" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prøv desse vanlege løysingane:" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wypróbuj te popularne rozwiązania:" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Experimente estas correções comuns:" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Experimente estas correções comuns:" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Experimente estas correções comuns:" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Încercați aceste soluții comune:" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Попробуйте эти распространенные решения:" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skúste tieto bežné riešenia:" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poskusite te pogoste rešitve:" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Покушајте ова уобичајена решења:" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pokušajte ova uobičajena rešenja:" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prova dessa vanliga åtgärder:" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "இந்த பொதுவான தீர்வுகளை முயற்சிக்கவும்:" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ลองแก้ไขปัญหาทั่วไปเหล่านี้:" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Şu yaygın çözümleri deneyin:" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Спробуйте ці поширені рішення:" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "یہ عام حل آزمائیں:" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hãy thử các cách khắc phục phổ biến sau:" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "请尝试以下常见解决方案:" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "請嘗試以下常見解決方法:" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "可嘗試以下常見排解方式:" + } + } + } + }, + "Twitter" : { + "extractionState" : "stale", + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "টুইটার" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twitter" + } + } + } + }, + "Two-Factor Authentication" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "المصادقة الثنائية" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Двуфакторно удостоверяване" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "টু-ফ্যাক্টর প্রমাণীকরণ" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autenticació en dos passos" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dvoufázové ověření" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tofaktorgodkendelse" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zwei-Faktor-Authentifizierung" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zwei-Faktor-Authentifizierung" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zwei-Faktor-Authentifizierung" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Έλεγχος ταυτότητας δύο παραγόντων" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Two-Factor Authentication" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Two-Factor Authentication" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Two-Factor Authentication" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Two-Factor Authentication" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Two-Factor Authentication" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Two-Factor Authentication" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Two-Factor Authentication" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autenticación de dos factores" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "احراز هویت دو عاملی" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kaksivaiheinen tunnistautuminen" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Two-Factor Authentication" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authentification à deux facteurs" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authentification à deux facteurs" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zwei-Faktor-Authentifizierig" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "ટુ-ફેક્ટર પ્રમાણીકરણ" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "אימות דו־שלבי" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "दो-कारक प्रमाणीकरण" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dvofaktorska autentifikacija" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kétfaktoros hitelesítés" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autentikasi Dua Faktor" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autenticazione a due fattori" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "2段階認証" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಎರಡು-ಅಂಶ ದೃಢೀಕರಣ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "2단계 인증" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kondimisa ya Bakambi mibale" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Divfaktoru autentifikācija" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "दोन-घटक प्रमाणीकरण" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pengesahan Dua Faktor" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tofaktorautentisering" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tweeledige verificatie" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tofaktorautentisering" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uwierzytelnianie dwuskładnikowe" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autenticação de dois fatores" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autenticação de dois fatores" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autenticação de dois fatores" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autentificare cu doi factori" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Двухфакторная аутентификация" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dvojfaktorové overovanie" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dvofaktorsko preverjanje pristnosti" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Двофакторска аутентификација" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dvofaktorska autentifikacija" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tvåfaktorsautentisering" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "இரு காரணி அங்கீகாரம்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "การตรวจสอบสิทธิ์แบบสองปัจจัย" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "İki faktörlü kimlik doğrulama" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Двофакторна автентифікація" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "دو عنصری تصدیق" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xác thực hai yếu tố" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "双重验证" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "雙重驗證" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "雙重驗證" + } + } + } + }, + "Unable to generate QR Code" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تعذر إنشاء رمز QR" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Неуспешно генериране на QR код" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "QR কোড তৈরি করা সম্ভব নয়" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "No s'ha pogut generar el codi QR" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nelze vygenerovat QR kód" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kan ikke generere QR-kode" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "QR-Code kann nicht generiert werden" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "QR-Code kann nicht generiert werden" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "QR-Code kann nicht generiert werden" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Δεν είναι δυνατή η δημιουργία κωδικού QR" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unable to generate QR Code" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unable to generate QR Code" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unable to generate QR Code" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unable to generate QR Code" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unable to generate QR Code" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unable to generate QR Code" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unable to generate QR Code" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "No se puede generar el código QR" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "امکان ایجاد کد QR وجود ندارد" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "QR-koodia ei voi luoda" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hindi makagawa ng QR Code" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Impossible de générer le code QR" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Impossible de générer le code QR" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "QR-Code cha nöd generiert werde" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "QR કોડ જનરેટ કરવામાં અસમર્થ" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "לא ניתן ליצור קוד QR" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "QR कोड उत्पन्न करने में असमर्थ" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nije moguće generirati QR kod" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nem lehet QR-kódot létrehozni" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tidak dapat membuat Kode QR" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Impossibile generare il codice QR" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "QRコードを生成できません" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "QR ಕೋಡ್ ರಚಿಸಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "QR 코드를 생성할 수 없습니다" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ekoki te kosala Kode QR" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nevar izveidot QR kodu" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "QR कोड तयार करण्यात अक्षम" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tidak dapat menjana Kod QR" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kan ikke generere QR-kode" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kan geen QR-code genereren" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kan ikkje generere QR-kode" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nie można wygenerować kodu QR" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Não foi possível gerar o código QR" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Não foi possível gerar o código QR" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Não foi possível gerar o código QR" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nu se poate genera codul QR" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Не удается создать QR-код" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nepodarilo sa vygenerovať QR kód" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "QR kode ni mogoče ustvariti" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Не могу да генеришем QR код" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ne mogu da generišem QR kod" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kan inte generera QR-kod" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "QR குறியீட்டை உருவாக்க முடியவில்லை" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ไม่สามารถสร้างคิวอาร์โค้ดได้" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "QR kodu oluşturulamıyor" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Не вдалося згенерувати QR-код" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "QR کوڈ بنانے میں ناکام" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Không thể tạo mã QR" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "无法生成二维码" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "無法產生 QR Code" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "無法產生 QR Code" + } + } + } + }, + "Unlink" : { + "extractionState" : "stale", + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Премахване на връзката" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "আনলিংক" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Desvincula" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odpojit" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fjern tilknytning" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verknüpfung aufheben" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verknüpfung aufheben" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Αποσύνδεση" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unlink" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unlink" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unlink" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unlink" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unlink" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unlink" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "قطع اتصال" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poista linkitys" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "I-unlink" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dissocier" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verknüpfig ufhebe" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "અનલિંક કરો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "בטל קישור" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "अनलिंक करें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odspoji" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Leválasztás" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Putuskan tautan" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Scollega" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "リンク解除" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಅನ್‌ಲಿಂಕ್ ಮಾಡಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "연결 해제" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kangola" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Atsaistīt" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "अनलिंक करा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nyahpaut" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Koble fra" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ontkoppelen" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kople frå" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odłącz" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Desvincular" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Desvincular" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Desassociar" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Deconectați" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Отвязать" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odpojiť" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prekini povezavo" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Откачи" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Otkači" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Avlänka" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "இணைப்பை நீக்கு" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ยกเลิกการเชื่อมโยง" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bağlantıyı kaldır" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Від'єднати" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "منسلک ختم کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hủy liên kết" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "取消关联" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "取消連結" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "取消連結" + } + } + } + }, + "Unlink account" : { + "extractionState" : "stale", + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Премахване на връзката с акаунта" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "অ্যাকাউন্ট আনলিংক করুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Desvincula el compte" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odpojit účet" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fjern tilknytning af konto" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kontoverknüpfung aufheben" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kontoverknüpfung aufheben" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Αποσύνδεση λογαριασμού" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unlink account" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unlink account" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unlink account" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unlink account" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unlink account" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unlink account" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "قطع اتصال حساب" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poista tilin linkitys" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "I-unlink ang account" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dissocier le compte" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kontoverknüpfig ufhebe" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "એકાઉન્ટ અનલિંક કરો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "בטל קישור חשבון" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "खाता अनलिंक करें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odspoji račun" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fiók leválasztása" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Putuskan tautan akun" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Scollega account" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "アカウントのリンクを解除" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಖಾತೆಯನ್ನು ಅನ್‌ಲಿಂಕ್ ಮಾಡಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "계정 연결 해제" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kangola kɔnti" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Atsaistīt kontu" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "खाते अनलिंक करा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nyahpaut akaun" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Koble fra konto" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Account ontkoppelen" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kople frå konto" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odłącz konto" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Desvincular conta" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Desvincular conta" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Desassociar conta" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Deconectați contul" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Отвязать аккаунт" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odpojiť účet" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prekini povezavo računa" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Откачи налог" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Otkači nalog" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Avlänka konto" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "கணக்கு இணைப்பை நீக்கு" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ยกเลิกการเชื่อมโยงบัญชี" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hesap bağlantısını kaldır" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Від'єднати обліковий запис" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "اکاؤنٹ کو منسلک ختم کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hủy liên kết tài khoản" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "取消账户关联" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "取消帳號連結" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "取消帳號連結" + } + } + } + }, + "Unlink account?" : { + "extractionState" : "stale", + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Премахване на връзката с акаунта?" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "অ্যাকাউন্ট আনলিংক করবেন?" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vols desvincular el compte?" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odpojit účet?" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fjern tilknytning af konto?" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kontoverknüpfung aufheben?" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kontoverknüpfung aufheben?" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Αποσύνδεση λογαριασμού;" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unlink account?" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unlink account?" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unlink account?" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unlink account?" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unlink account?" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unlink account?" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "حساب قطع اتصال شود؟" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poistetaanko linkitys?" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "I-unlink ang account?" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dissocier le compte ?" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kontoverknüpfig ufhebe?" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "એકાઉન્ટ અનલિંક કરો?" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "לבטל את קישור החשבון?" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "खाता अनलिंक करें?" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odspojiti račun?" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Leválasztja a fiókot?" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Putuskan tautan akun?" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Scollegare l'account?" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "アカウントのリンクを解除しますか?" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಖಾತೆಯನ್ನು ಅನ್‌ಲಿಂಕ್ ಮಾಡುವುದೇ?" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "계정 연결을 해제하시겠습니까?" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kangola kɔnti?" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Atsaistīt kontu?" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "खाते अनलिंक करायचे आहे का?" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nyahpaut akaun?" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Koble fra konto?" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Account ontkoppelen?" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kople frå konto?" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odłączyć konto?" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Desvincular conta?" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Desvincular conta?" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Desassociar conta?" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Deconectați contul?" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Отвязать аккаунт?" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odpojiť účet?" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prekiniti povezavo računa?" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Откачити налог?" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Otkačiti nalog?" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Avlänka konto?" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "கணக்கு இணைப்பை நீக்கவா?" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ยกเลิกการเชื่อมโยงบัญชี?" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hesap bağlantısı kaldırılsın mı?" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Від'єднати обліковий запис?" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "اکاؤنٹ کو منسلک ختم کریں؟" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hủy liên kết tài khoản?" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "取消账户关联?" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "要取消帳號連結嗎?" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "確定取消帳號連結?" + } + } + } + }, + "UnlinkAction" : { + "comment" : "Button title for unlinking account action.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "إلغاء الربط" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verknüpfung aufheben" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unlink" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Desvincular" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Délier" + } + } + } + }, + "UnlinkConfirmationActionTitle" : { + "comment" : "Alert action title shown before unlinking action.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "إلغاء ربط الحساب" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kontoverknüpfung aufheben" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unlink account" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Desvincular cuenta" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Délier le compte" + } + } + } + }, + "UnlinkConfirmationMessage" : { + "comment" : "Alert message shown before unlinking action.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "لن تتمكن بعد الآن من تسجيل الدخول باستخدام حسابك" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du kannst dich nicht mehr mit deinem Konto anmelden" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "You will no longer be able to sign in using your account" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ya no podrás iniciar sesión usando tu cuenta" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tu ne pourras plus te connecter en utilisant ton compte" + } + } + } + }, + "UnlinkConfirmationTitle" : { + "comment" : "Alert title shown before unlinking action.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "إلغاء ربط الحساب؟" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kontoverknüpfung aufheben?" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unlink account?" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "¿Desvincular cuenta?" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Délier le compte ?" + } + } + } + }, + "UnlinkTitle" : { + "comment" : "Controller title shown for unlinking account action.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "الحساب المرتبط" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verknüpftes Konto" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Linked account" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cuenta vinculada" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Compte lié" + } + } + } + }, + "Update password" : { + "comment" : "Update password button label", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تحديث كلمة المرور" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Актуализиране на парола" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "পাসওয়ার্ড আপডেট করুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Actualitza la contrasenya" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktualizovat heslo" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Opdater adgangskode" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort aktualisieren" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort aktualisieren" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort aktualisieren" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ενημέρωση κωδικού πρόσβασης" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Update password" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Update password" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Update password" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Update password" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Update password" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Update password" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Update password" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Actualizar contraseña" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "به‌روزرسانی رمز عبور" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Päivitä salasana" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "I-update ang password" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mettre à jour le mot de passe" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mettre à jour le mot de passe" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort aktualisiere" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "પાસવર્ડ અપડેટ કરો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "עדכן סיסמה" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "पासवर्ड अपडेट करें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ažuriraj lozinku" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jelszó frissítése" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Perbarui kata sandi" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aggiorna password" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "パスワードを更新" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಪಾಸ್‌ವರ್ಡ್ ನವೀಕರಿಸಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "비밀번호 업데이트" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kosala ya sika liloba ya kobombama" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Atjaunināt paroli" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "पासवर्ड अपडेट करा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kemas kini kata laluan" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Oppdater passord" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wachtwoord bijwerken" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Oppdater passord" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zaktualizuj hasło" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Atualizar senha" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Atualizar senha" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Atualizar palavra-passe" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Actualizați parola" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Обновить пароль" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktualizovať heslo" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Posodobi geslo" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ажурирај лозинку" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ažuriraj lozinku" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uppdatera lösenord" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "கடவுச்சொல்லை புதுப்பிக்கவும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "อัปเดตรหัสผ่าน" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Şifreyi güncelle" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Оновити пароль" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "پاس ورڈ اپ ڈیٹ کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cập nhật mật khẩu" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "更新密码" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "更新密碼" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "更新密碼" + } + } + } + }, + "UpdateEmailAlertMessage" : { + "comment" : "Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "لتغيير عنوان البريد الإلكتروني المرتبط بحسابك، ستحتاج إلى تسجيل الدخول مرة أخرى." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Um die mit deinem Konto verknüpfte E-Mail-Adresse zu ändern, musst du dich erneut anmelden." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "To change email address associated with your account, you will need to sign in again." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Para cambiar la dirección de correo asociada con tu cuenta, deberás iniciar sesión nuevamente." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pour modifier l'adresse e-mail associée à ton compte, tu devras te reconnecter." + } + } + } + }, + "UpdateEmailVerificationAlertMessage" : { + "comment" : "Alert action message shown before confirmation of updating email action.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "لتغيير كلمة المرور الخاصة بك، تحتاج أولاً إلى إدخال كلمة المرور الحالية." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Um dein Passwort zu ändern, musst du zuerst dein aktuelles Passwort eingeben." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "In order to change your password, you first need to enter your current password." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Para cambiar tu contraseña, primero debes ingresar tu contraseña actual." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pour modifier ton mot de passe, tu dois d'abord saisir ton mot de passe actuel." + } + } + } + }, + "Use an authenticator app like Google Authenticator or Authy to generate verification codes." : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "استخدم تطبيق مصادقة مثل Google Authenticator أو Authy لإنشاء رموز التحقق." + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Използвайте приложение като Google Authenticator или Authy за генериране на кодове за удостоверяване." + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "যাচাইকরণ কোড তৈরির জন্য Google Authenticator বা Authy এর মতো অ্যাপ ব্যবহার করুন।" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fes servir una aplicació d'autenticació com Google Authenticator o Authy per generar codis de verificació." + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Použijte aplikaci jako Google Authenticator nebo Authy pro generování ověřovacích kódů." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Brug en autentifikationsapp som Google Authenticator eller Authy til at generere bekræftelseskoder." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verwende eine Authentifizierungs-App wie Google Authenticator oder Authy, um Bestätigungscodes zu generieren." + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verwenden Sie eine Authentifizierungs-App wie Google Authenticator oder Authy, um Verifizierungscodes zu generieren." + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verwenden Sie eine Authentifizierungs-App wie Google Authenticator oder Authy, um Verifizierungscodes zu generieren." + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Χρησιμοποιήστε μια εφαρμογή ελέγχου ταυτότητας όπως το Google Authenticator ή το Authy για να δημιουργήσετε κωδικούς επαλήθευσης." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Use an authenticator app like Google Authenticator or Authy to generate verification codes." + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Use an authenticator app like Google Authenticator or Authy to generate verification codes." + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Use an authenticator app like Google Authenticator or Authy to generate verification codes." + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Use an authenticator app like Google Authenticator or Authy to generate verification codes." + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Use an authenticator app like Google Authenticator or Authy to generate verification codes." + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Use an authenticator app like Google Authenticator or Authy to generate verification codes." + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Use an authenticator app like Google Authenticator or Authy to generate verification codes." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Usa una aplicación de autenticación como Google Authenticator o Authy para generar códigos de verificación." + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "از یک برنامه احراز هویت مانند Google Authenticator یا Authy برای تولید کدهای تأیید استفاده کنید." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Käytä autentikaatiosovellusta, kuten Google Authenticator tai Authy, vahvistuskoodeja varten." + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gumamit ng authenticator app tulad ng Google Authenticator o Authy upang makagawa ng mga verification codes." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Utilise une application d'authentification comme Google Authenticator ou Authy pour générer des codes de vérification." + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Utilisez une application d'authentification comme Google Authenticator ou Authy pour générer des codes de vérification." + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verwend e Authentifizierigs-App wie Google Authenticator oder Authy, zum Verifizierungscodes z'generiere." + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "ચકાસણી કોડ જનરેટ કરવા માટે Google Authenticator અથવા Authy જેવી પ્રમાણીકરણ એપનો ઉપયોગ કરો." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "השתמש באפליקציית אימות כמו Google Authenticator או Authy כדי ליצור קודי אימות." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "सत्यापन कोड उत्पन्न करने के लिए Google Authenticator या Authy जैसे प्रमाणक ऐप का उपयोग करें।" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Koristite aplikaciju poput Google Authenticator ili Authy za generiranje verifikacijskih kodova." + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Használjon hitelesítő alkalmazást, például a Google Authenticatort vagy az Authyt ellenőrző kódok létrehozásához." + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gunakan aplikasi autentikator seperti Google Authenticator atau Authy untuk membuat kode verifikasi." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Usa un'app di autenticazione come Google Authenticator o Authy per generare codici di verifica." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google AuthenticatorやAuthyなどの認証アプリを使用して確認コードを生成してください。" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಪರಿಶೀಲನಾ ಕೋಡ್‌ಗಳನ್ನು ರಚಿಸಲು Google Authenticator ಅಥವಾ Authy ನಂತಹ ದೃಢೀಕರಣ ಆ್ಯಪ್ ಬಳಸಿ." + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Google Authenticator 또는 Authy와 같은 인증 앱을 사용하여 확인 코드를 생성하세요." + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Salelá aplikasyo ya kondimisa lokola Google Authenticator to Authy mpo na kosala ba-code ya kondimisa." + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Izmantojiet autentifikācijas lietotni, piemēram, Google Authenticator vai Authy, lai ģenerētu verifikācijas kodus." + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "पडताळणी कोड तयार करण्यासाठी Google Authenticator किंवा Authy सारखे प्रमाणीकरण अॅप वापरा." + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gunakan aplikasi pengesah seperti Google Authenticator atau Authy untuk menjana kod pengesahan." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bruk en autentiseringsapp som Google Authenticator eller Authy til å generere bekreftelseskoder." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gebruik een authenticator-app zoals Google Authenticator of Authy om verificatiecodes te genereren." + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bruk ein autentiseringsapp som Google Authenticator eller Authy til å generere stadfestingskodar." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Użyj aplikacji uwierzytelniającej, takiej jak Google Authenticator lub Authy, do generowania kodów weryfikacyjnych." + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Use um aplicativo autenticador como Google Authenticator ou Authy para gerar códigos de verificação." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Use um app autenticador como Google Authenticator ou Authy para gerar códigos de verificação." + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Utilize uma aplicação de autenticação como o Google Authenticator ou o Authy para gerar códigos de verificação." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Utilizați o aplicație de autentificare precum Google Authenticator sau Authy pentru a genera coduri de verificare." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Используйте приложение для аутентификации, такое как Google Authenticator или Authy, для генерации кодов подтверждения." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Použite aplikáciu na overovanie, ako je Google Authenticator alebo Authy, na generovanie overovacích kódov." + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uporabite aplikacijo za preverjanje pristnosti, kot sta Google Authenticator ali Authy, za ustvarjanje potrditvenih kod." + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Користите апликацију за аутентификацију као што су Google Authenticator или Authy да генеришете верификационе кодове." + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Koristite aplikaciju za autentifikaciju kao što su Google Authenticator ili Authy da generišete verifikacione kodove." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Använd en autentiseringsapp som Google Authenticator eller Authy för att generera verifieringskoder." + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "சரிபார்ப்பு குறியீடுகளை உருவாக்க Google Authenticator அல்லது Authy போன்ற அங்கீகரிப்பு செயலியைப் பயன்படுத்தவும்." + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ใช้แอปตรวจสอบสิทธิ์เช่น Google Authenticator หรือ Authy เพื่อสร้างรหัสยืนยัน" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Doğrulama kodları oluşturmak için Google Authenticator veya Authy gibi bir kimlik doğrulayıcı uygulama kullanın." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Використовуйте програму автентифікації, як-от Google Authenticator або Authy, для генерації кодів перевірки." + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "تصدیقی کوڈز بنانے کے لیے Google Authenticator یا Authy جیسی تصدیقی ایپ استعمال کریں۔" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sử dụng ứng dụng xác thực như Google Authenticator hoặc Authy để tạo mã xác minh." + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "使用 Google Authenticator 或 Authy 等应用生成验证码。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "請使用 Google Authenticator 或 Authy 等應用程式產生驗證碼。" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "請使用 Google Authenticator 或 Authy 等驗證器 App 產生驗證碼。" + } + } + } + }, + "UserNotFoundError" : { + "comment" : "Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "عنوان البريد الإلكتروني هذا لا يتطابق مع حساب موجود." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Diese E-Mail-Adresse stimmt mit keinem vorhandenen Konto überein." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "That email address doesn't match an existing account." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Esa dirección de correo no coincide con una cuenta existente." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cette adresse e-mail ne correspond à aucun compte existant." + } + } + } + }, + "Verification Code" : { + "comment" : "Field label for verification code", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "رمز التحقق" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Код за проверка" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "যাচাইকরণ কোড" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Codi de verificació" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ověřovací kód" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bekræftelseskode" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bestätigungscode" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verifizierungscode" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verifizierungscode" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Κωδικός επαλήθευσης" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verification Code" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verification Code" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verification Code" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verification Code" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verification Code" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verification Code" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verification Code" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Código de verificación" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "کد تأیید" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vahvistuskoodi" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verification Code" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Code de vérification" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Code de vérification" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verifizierigscode" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "ચકાસણી કોડ" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "קוד אימות" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "सत्यापन कोड" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verifikacijski kod" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ellenőrző kód" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kode Verifikasi" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Codice di verifica" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "確認コード" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಪರಿಶೀಲನಾ ಕೋಡ್" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "확인 코드" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kode ya Kondimisa" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verifikācijas kods" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "पडताळणी कोड" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kod Pengesahan" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bekreftelseskode" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verificatiecode" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stadfestingskode" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kod weryfikacyjny" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Código de verificação" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Código de verificação" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Código de verificação" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cod de verificare" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Код подтверждения" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Overovací kód" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Potrditvena koda" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Верификациони код" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verifikacioni kod" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verifieringskod" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "சரிபார்ப்பு குறியீடு" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "รหัสยืนยัน" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Doğrulama kodu" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Код перевірки" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "تصدیقی کوڈ" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mã xác minh" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "验证码" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "驗證碼" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "驗證碼" + } + } + } + }, + "Verify email address?" : { + "comment" : "Label for sending email verification to user.", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "التحقق من عنوان البريد الإلكتروني؟" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Потвърждаване на имейл адрес?" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ইমেইল ঠিকানা যাচাই করবেন?" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vols verificar el correu electrònic?" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ověřit emailovou adresu?" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bekræfte emailadresse?" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-Mail-Adresse verifizieren?" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-Mail-Adresse verifizieren?" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-Mail-Adresse verifizieren?" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Επαλήθευση διεύθυνσης email;" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verify email address?" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verify email address?" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verify email address?" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verify email address?" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verify email address?" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verify email address?" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verify email address?" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "¿Verificar dirección de correo?" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "آدرس ایمیل تأیید شود؟" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vahvistetaanko sähköpostiosoite?" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "I-verify ang email address?" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vérifier l'adresse e-mail ?" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vérifier l'adresse e-mail ?" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-Mail-Adresse verifiziere?" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "ઇમેઇલ સરનામું ચકાસો?" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "לאמת כתובת דוא״ל?" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "ईमेल पता सत्यापित करें?" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Potvrditi email adresu?" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ellenőrzi az e-mail címet?" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verifikasi alamat email?" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verificare l'indirizzo email?" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "メールアドレスを確認しますか?" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಇಮೇಲ್ ವಿಳಾಸವನ್ನು ಪರಿಶೀಲಿಸುವುದೇ?" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이메일 주소를 확인하시겠습니까?" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kondimisa adrese ya email?" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verificēt e-pasta adresi?" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "ईमेल पत्ता सत्यापित करायचा आहे का?" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sahkan alamat e-mel?" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bekrefte e-postadresse?" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-mailadres verifiëren?" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stadfeste e-postadresse?" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zweryfikować adres e-mail?" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verificar endereço de e-mail?" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verificar endereço de e-mail?" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verificar endereço de e-mail?" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verificați adresa de e-mail?" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Подтвердить адрес электронной почты?" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Overiť e-mailovú adresu?" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preveriti e-poštni naslov?" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Верификовати имејл адресу?" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verifikovati imejl adresu?" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verifiera e-postadress?" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "மின்னஞ்சல் முகவரியை சரிபார்க்கவா?" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ยืนยันที่อยู่อีเมล?" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "E-posta adresi doğrulansın mı?" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Перевірити адресу електронної пошти?" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "ای میل ایڈریس کی تصدیق کریں؟" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xác minh địa chỉ email?" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "验证邮箱地址?" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "是否要驗證電子郵件?" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "要驗證電子郵件地址嗎?" + } + } + } + }, + "Verify it's you" : { + "extractionState" : "stale", + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Потвърдете, че това сте вие" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "আপনি কিনা যাচাই করুন" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verifica que ets tu" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ověřte, že jste to vy" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bekræft at det er dig" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bestätigen Sie Ihre Identität" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bestätigen Sie Ihre Identität" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Επαληθεύστε ότι είστε εσείς" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verify it's you" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verify it's you" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verify it's you" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verify it's you" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verify it's you" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verify it's you" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "تأیید کنید که شما هستید" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vahvista henkilöllisyytesi" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "I-verify na ikaw ito" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vérifiez votre identité" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bestätig dass du's bisch" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "તમે છો તે ચકાસો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "אמת שזה אתה" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "सत्यापित करें कि यह आप हैं" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Potvrdite da ste to vi" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Erősítse meg, hogy Ön az" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verifikasi bahwa itu Anda" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verifica che sei tu" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "本人確認" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ಇದು ನೀವು ಎಂದು ಪರಿಶೀಲಿಸಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "본인 확인" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ndimisa ete ezali yo" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apstipriniet, ka esat jūs" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "तुम्हीच आहात हे सत्यापित करा" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sahkan ia adalah anda" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bekreft at det er deg" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bevestig dat jij het bent" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stadfest at det er deg" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zweryfikuj, że to Ty" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verifique se é você" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verifique se é você" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verifique que é você" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verificați că sunteți dvs." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Подтвердите, что это вы" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Overte, že ste to vy" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preverite, da ste to vi" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Потврдите да сте то ви" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Potvrdite da ste to vi" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verifiera att det är du" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "நீங்கள்தான் என்பதை சரிபார்க்கவும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ยืนยันว่าเป็นคุณ" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Siz olduğunuzu doğrulayın" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Підтвердьте, що це ви" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "تصدیق کریں کہ یہ آپ ہیں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xác minh đó là bạn" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "验证您的身份" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "確認您的身份" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "確認您的身分" + } + } + } + }, + "VerifyItsYou" : { + "comment" : "Alert message title show for re-authorization.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تحقق من أنك أنت" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bestätige, dass du es bist" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verify it's you" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verifica que eres tú" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vérifie que c'est toi" + } + } + } + }, + "We sent a code to %@" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "أرسلنا رمزًا إلى %@" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Изпратихме код на %@" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "আমরা %@ এ একটি কোড পাঠিয়েছি" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hem enviat un codi a %@" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odeslali jsme kód na %@" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vi har sendt en kode til %@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wir haben einen Code an %@ gesendet" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wir haben einen Code an %@ gesendet" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wir haben einen Code an %@ gesendet" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Στείλαμε έναν κωδικό στο %@" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "We sent a code to %@" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "We sent a code to %@" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "We sent a code to %@" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "We sent a code to %@" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "We sent a code to %@" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "We sent a code to %@" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "We sent a code to %@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviamos un código a %@" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ما کدی به %@ ارسال کردیم" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lähetimme koodin osoitteeseen %@" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nagpadala kami ng code sa %@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nous avons envoyé un code à %@" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nous avons envoyé un code à %@" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mir händ en Code a %@ gschickt" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "અમે %@ પર કોડ મોકલ્યો" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "שלחנו קוד אל %@" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "हमने %@ पर एक कोड भेजा" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poslali smo kod na %@" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kódot küldtünk a következő címre: %@" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kami mengirim kode ke %@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abbiamo inviato un codice a %@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@にコードを送信しました" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ನಾವು %@ ಗೆ ಕೋಡ್ ಕಳುಹಿಸಿದ್ದೇವೆ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@(으)로 코드를 보냈습니다" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Totindaki kode na %@" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nosūtījām kodu uz %@" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "आम्ही %@ वर एक कोड पाठवला" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kami menghantar kod ke %@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vi sendte en kode til %@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "We hebben een code gestuurd naar %@" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vi sende ein kode til %@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wysłaliśmy kod do %@" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviamos um código para %@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviamos um código para %@" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviámos um código para %@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Am trimis un cod la %@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Мы отправили код на %@" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odoslali sme kód na %@" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poslali smo kodo na %@" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Послали смо код на %@" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poslali smo kod na %@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vi skickade en kod till %@" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "நாங்கள் %@ க்கு ஒரு குறியீட்டை அனுப்பினோம்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เราส่งรหัสไปที่ %@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ adresine bir kod gönderdik" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ми надіслали код на %@" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "ہم نے %@ پر ایک کوڈ بھیجا" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Chúng tôi đã gửi mã đến %@" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "我们已向 %@ 发送验证码" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "我們已向 %@ 傳送驗證碼" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "我們已寄出驗證碼至 %@" + } + } + } + }, + "We'll send a code to ••••••%@" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "سنرسل رمزًا إلى ••••••%@" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ще изпратим код на ••••••%@" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "আমরা ••••••%@ এ একটি কোড পাঠাবো" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviarem un codi a ••••••%@" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odešleme kód na ••••••%@" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vi sender en kode til ••••••%@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wir senden einen Code an ••••••%@" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wir senden einen Code an ••••••%@" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wir senden einen Code an ••••••%@" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Θα στείλουμε έναν κωδικό στο ••••••%@" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "We'll send a code to ••••••%@" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "We'll send a code to ••••••%@" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "We'll send a code to ••••••%@" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "We'll send a code to ••••••%@" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "We'll send a code to ••••••%@" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "We'll send a code to ••••••%@" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "We'll send a code to ••••••%@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviaremos un código a ••••••%@" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ما کدی به ••••••%@ ارسال خواهیم کرد" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lähetämme koodin osoitteeseen ••••••%@" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Magpapadala kami ng code sa ••••••%@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nous enverrons un code à ••••••%@" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nous enverrons un code à ••••••%@" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mir schicke en Code a ••••••%@" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "અમે ••••••%@ પર કોડ મોકલીશું" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "נשלח קוד אל ••••••%@" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "हम ••••••%@ पर एक कोड भेजेंगे" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poslat ćemo kod na ••••••%@" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kódot küldünk a következő címre: ••••••%@" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kami akan mengirim kode ke ••••••%@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Invieremo un codice a ••••••%@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@にコードを送信します" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ನಾವು ••••••%@ ಗೆ ಕೋಡ್ ಕಳುಹಿಸುತ್ತೇವೆ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@(으)로 코드를 보내드립니다" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tokotinda kode na ••••••%@" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nosūtīsim kodu uz ••••••%@" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "आम्ही ••••••%@ वर एक कोड पाठवू" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kami akan menghantar kod ke ••••••%@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vi sender en kode til ••••••%@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "We sturen een code naar ••••••%@" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vi sender ein kode til ••••••%@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wyślemy kod do ••••••%@" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviaremos um código para ••••••%@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviaremos um código para ••••••%@" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviaremos um código para ••••••%@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vom trimite un cod la ••••••%@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Мы отправим код на ••••••%@" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odošleme kód na ••••••%@" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poslali bomo kodo na ••••••%@" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Послаћемо код на ••••••%@" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poslaćemo kod na ••••••%@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vi skickar en kod till ••••••%@" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "நாங்கள் ••••••%@ க்கு ஒரு குறியீட்டை அனுப்புவோம்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เราจะส่งรหัสไปที่ ••••••%@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "••••••%@ adresine bir kod göndereceğiz" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ми надішлемо код на ••••••%@" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "ہم ••••••%@ پر ایک کوڈ بھیجیں گے" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Chúng tôi sẽ gửi mã đến ••••••%@" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "我们将向 ••••••%@ 发送验证码" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "我們將向 ••••••%@ 傳送驗證碼" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "我們將寄送驗證碼至 ••••••%@" + } + } + } + }, + "We'll send a verification code to this number" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "سنرسل رمز تحقق إلى هذا الرقم" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ще изпратим код за проверка на този номер" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "আমরা এই নম্বরে একটি যাচাইকরণ কোড পাঠাবো" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviarem un codi de verificació a aquest número" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pošleme ověřovací kód na toto číslo" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vi sender en bekræftelseskode til dette nummer" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wir senden einen Bestätigungscode an diese Nummer" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wir senden einen Verifizierungscode an diese Nummer" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wir senden einen Verifizierungscode an diese Nummer" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Θα στείλουμε έναν κωδικό επαλήθευσης σε αυτόν τον αριθμό" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "We'll send a verification code to this number" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "We'll send a verification code to this number" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "We'll send a verification code to this number" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "We'll send a verification code to this number" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "We'll send a verification code to this number" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "We'll send a verification code to this number" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "We'll send a verification code to this number" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviaremos un código de verificación a este número" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ما یک کد تأیید به این شماره ارسال خواهیم کرد" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lähetämme vahvistuskoodin tähän numeroon" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Magpapadala kami ng verification code sa numerong ito" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nous enverrons un code de vérification à ce numéro" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nous enverrons un code de vérification à ce numéro" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mir schicke en Verifizierigscode a die Nummere" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "અમે આ નંબર પર ચકાસણી કોડ મોકલીશું" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "נשלח קוד אימות למספר זה" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "हम इस नंबर पर एक सत्यापन कोड भेजेंगे" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poslat ćemo verifikacijski kod na ovaj broj" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ellenőrző kódot küldünk erre a számra" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kami akan mengirim kode verifikasi ke nomor ini" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Invieremo un codice di verifica a questo numero" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "この番号に確認コードを送信します" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ನಾವು ಈ ಸಂಖ್ಯೆಗೆ ಪರಿಶೀಲನಾ ಕೋಡ್ ಕಳುಹಿಸುತ್ತೇವೆ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이 번호로 확인 코드를 보내드립니다" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tokotinda kode ya kondimisa na nimero oyo" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nosūtīsim verifikācijas kodu uz šo numuru" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "आम्ही या नंबरवर एक पडताळणी कोड पाठवू" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kami akan menghantar kod pengesahan ke nombor ini" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vi sender en bekreftelseskode til dette nummeret" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "We sturen een verificatiecode naar dit nummer" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vi sender ein stadfestingskode til dette nummeret" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wyślemy kod weryfikacyjny na ten numer" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviaremos um código de verificação para este número" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviaremos um código de verificação para este número" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviaremos um código de verificação para este número" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vom trimite un cod de verificare la acest număr" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Мы отправим код подтверждения на этот номер" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Na toto číslo odošleme overovací kód" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Na to številko bomo poslali potrditveno kodo" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Послаћемо верификациони код на овај број" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poslaćemo verifikacioni kod na ovaj broj" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vi skickar en verifieringskod till detta nummer" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "இந்த எண்ணுக்கு சரிபார்ப்பு குறியீட்டை அனுப்புவோம்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เราจะส่งรหัสยืนยันไปที่หมายเลขนี้" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bu numaraya bir doğrulama kodu göndereceğiz" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ми надішлемо код перевірки на цей номер" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "ہم اس نمبر پر تصدیقی کوڈ بھیجیں گے" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Chúng tôi sẽ gửi mã xác minh đến số này" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "我们会向此号码发送验证码" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "我們會向此號碼傳送驗證碼" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "我們會寄出驗證碼至此電話號碼" + } + } + } + }, + "We'll send a verification code to your phone" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "سنرسل رمز تحقق إلى هاتفك" + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ще изпратим код за проверка на телефона ви" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "আমরা আপনার ফোনে একটি যাচাইকরণ কোড পাঠাবো" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviarem un codi de verificació al teu telèfon" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pošleme ověřovací kód na váš telefon" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vi sender en bekræftelseskode til din telefon" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wir senden einen Bestätigungscode an dein Telefon" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wir senden einen Verifizierungscode an Ihr Telefon" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wir senden einen Verifizierungscode an Ihr Telefon" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Θα στείλουμε έναν κωδικό επαλήθευσης στο τηλέφωνό σας" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "We'll send a verification code to your phone" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "We'll send a verification code to your phone" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "We'll send a verification code to your phone" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "We'll send a verification code to your phone" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "We'll send a verification code to your phone" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "We'll send a verification code to your phone" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "We'll send a verification code to your phone" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviaremos un código de verificación a tu teléfono" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ما یک کد تأیید به تلفن شما ارسال خواهیم کرد" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lähetämme vahvistuskoodin puhelimeesi" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Magpapadala kami ng verification code sa iyong telepono" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nous enverrons un code de vérification à ton téléphone" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nous enverrons un code de vérification à votre téléphone" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mir schicke en Verifizierigscode uf dis Telefon" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "અમે તમારા ફોન પર ચકાસણી કોડ મોકલીશું" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "נשלח קוד אימות לטלפון שלך" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "हम आपके फ़ोन पर एक सत्यापन कोड भेजेंगे" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poslat ćemo verifikacijski kod na vaš telefon" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ellenőrző kódot küldünk a telefonjára" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kami akan mengirim kode verifikasi ke telepon Anda" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Invieremo un codice di verifica al tuo telefono" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "お使いの電話に確認コードを送信します" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ನಾವು ನಿಮ್ಮ ದೂರವಾಣಿಗೆ ಪರಿಶೀಲನಾ ಕೋಡ್ ಕಳುಹಿಸುತ್ತೇವೆ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "휴대전화로 확인 코드를 보내드립니다" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tokotinda kode ya kondimisa na telefone na yo" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nosūtīsim verifikācijas kodu uz jūsu tālruni" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "आम्ही तुमच्या फोनवर एक पडताळणी कोड पाठवू" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kami akan menghantar kod pengesahan ke telefon anda" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vi sender en bekreftelseskode til telefonen din" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "We sturen een verificatiecode naar je telefoon" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vi sender ein stadfestingskode til telefonen din" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wyślemy kod weryfikacyjny na Twój telefon" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviaremos um código de verificação para seu telefone" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviaremos um código de verificação para seu telefone" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviaremos um código de verificação para o seu telefone" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vom trimite un cod de verificare la telefonul dvs." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Мы отправим код подтверждения на ваш телефон" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Na váš telefón odošleme overovací kód" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Na vaš telefon bomo poslali potrditveno kodo" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Послаћемо верификациони код на ваш телефон" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poslaćemo verifikacioni kod na vaš telefon" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vi skickar en verifieringskod till din telefon" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "உங்கள் தொலைபேசிக்கு சரிபார்ப்பு குறியீட்டை அனுப்புவோம்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เราจะส่งรหัสยืนยันไปที่โทรศัพท์ของคุณ" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telefonunuza bir doğrulama kodu göndereceğiz" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ми надішлемо код перевірки на ваш телефон" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "ہم آپ کے فون پر تصدیقی کوڈ بھیجیں گے" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Chúng tôi sẽ gửi mã xác minh đến điện thoại của bạn" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "我们会向您的手机发送验证码" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "我們會向您的手機傳送驗證碼" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "我們會寄出驗證碼至您的手機" + } + } + } + }, + "We'll send a verification code to your phone number each time you sign in." : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "سنرسل رمز تحقق إلى رقم هاتفك في كل مرة تسجل فيها الدخول." + } + }, + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ще изпращаме код за проверка всеки път, когато влизате." + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "আপনি প্রতিবার সাইন ইন করলে আমরা আপনার ফোন নম্বরে একটি যাচাইকরণ কোড পাঠাবো।" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviarem un codi de verificació al teu número de telèfon cada vegada que iniciïs sessió." + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Při každém přihlášení pošleme ověřovací kód na vaše telefonní číslo." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vi sender en bekræftelseskode til dit telefonnummer hver gang du logger ind." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wir senden jedes Mal einen Bestätigungscode an deine Telefonnummer, wenn du dich anmeldest." + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wir senden jedes Mal, wenn Sie sich anmelden, einen Verifizierungscode an Ihre Telefonnummer." + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wir senden jedes Mal, wenn Sie sich anmelden, einen Verifizierungscode an Ihre Telefonnummer." + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Θα στέλνουμε έναν κωδικό επαλήθευσης στον αριθμό τηλεφώνου σας κάθε φορά που συνδέεστε." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "We'll send a verification code to your phone number each time you sign in." + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "We'll send a verification code to your phone number each time you sign in." + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "We'll send a verification code to your phone number each time you sign in." + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "We'll send a verification code to your phone number each time you sign in." + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "We'll send a verification code to your phone number each time you sign in." + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "We'll send a verification code to your phone number each time you sign in." + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "We'll send a verification code to your phone number each time you sign in." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviaremos un código de verificación a tu número de teléfono cada vez que inicies sesión." + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ما هر بار که وارد می‌شوید یک کد تأیید به شماره تلفن شما ارسال خواهیم کرد." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lähetämme vahvistuskoodin puhelinnumeroosi joka kerta kun kirjaudut." + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Magpapadala kami ng verification code sa iyong numero ng telepono tuwing mag-sign in ka." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nous enverrons un code de vérification à ton numéro de téléphone chaque fois que tu te connectes." + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nous enverrons un code de vérification à votre numéro de téléphone chaque fois que vous vous connecterez." + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mir schicke jedes Mal en Verifizierigscode a dini Telefonnummere, wenn du dich aamäldisch." + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "તમે જ્યારે પણ સાઇન ઇન કરશો ત્યારે અમે તમારા ફોન નંબર પર ચકાસણી કોડ મોકલીશું." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "נשלח קוד אימות למספר הטלפון שלך בכל פעם שתתחבר." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "हर बार जब आप साइन इन करेंगे तो हम आपके फ़ोन नंबर पर एक सत्यापन कोड भेजेंगे।" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poslat ćemo verifikacijski kod na vaš broj telefona svaki put kada se prijavite." + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Minden bejelentkezéskor ellenőrző kódot küldünk a telefonszámára." + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kami akan mengirim kode verifikasi ke nomor telepon Anda setiap kali Anda masuk." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Invieremo un codice di verifica al tuo numero di telefono ogni volta che accedi." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "サインインするたびに、お使いの電話番号に確認コードを送信します。" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ನೀವು ಸೈನ್ ಇನ್ ಮಾಡಿದಾಗಲೆಲ್ಲಾ ನಾವು ನಿಮ್ಮ ದೂರವಾಣಿ ಸಂಖ್ಯೆಗೆ ಪರಿಶೀಲನಾ ಕೋಡ್ ಕಳುಹಿಸುತ್ತೇವೆ." + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "로그인할 때마다 전화번호로 확인 코드를 보내드립니다." + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tokotinda kode ya kondimisa na nimero na yo ya telefone ntango nyonso okokota." + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Katru reizi, kad pierakstīsieties, nosūtīsim verifikācijas kodu uz jūsu tālruņa numuru." + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "प्रत्येक वेळी तुम्ही साइन इन करता तेव्हा आम्ही तुमच्या फोन नंबरवर एक पडताळणी कोड पाठवू." + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kami akan menghantar kod pengesahan ke nombor telefon anda setiap kali anda log masuk." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vi sender en bekreftelseskode til telefonnummeret ditt hver gang du logger inn." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Elke keer dat je inlogt, sturen we een verificatiecode naar je telefoonnummer." + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vi sender ein stadfestingskode til telefonnummeret ditt kvar gong du loggar inn." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Za każdym razem, gdy się logujesz, będziemy wysyłać kod weryfikacyjny na Twój numer telefonu." + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviaremos um código de verificação para seu número de telefone toda vez que você fizer login." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviaremos um código de verificação para seu número de telefone toda vez que você fizer login." + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enviaremos um código de verificação para o seu número de telefone sempre que iniciar sessão." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vom trimite un cod de verificare la numărul dvs. de telefon de fiecare dată când vă conectați." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Мы будем отправлять код подтверждения на ваш номер телефона каждый раз, когда вы входите." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pri každom prihlásení odošleme overovací kód na vaše telefónne číslo." + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vsakič, ko se prijavite, bomo na vašo telefonsko številko poslali potrditveno kodo." + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Послаћемо верификациони код на ваш број телефона сваки пут када се пријавите." + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poslaćemo verifikacioni kod na vaš broj telefona svaki put kada se prijavite." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vi skickar en verifieringskod till ditt telefonnummer varje gång du loggar in." + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "நீங்கள் உள்நுழையும் ஒவ்வொரு முறையும் உங்கள் தொலைபேசி எண்ணுக்கு சரிபார்ப்பு குறியீட்டை அனுப்புவோம்." + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เราจะส่งรหัสยืนยันไปยังหมายเลขโทรศัพท์ของคุณทุกครั้งที่คุณลงชื่อเข้าใช้" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Her oturum açtığınızda telefon numaranıza bir doğrulama kodu göndereceğiz." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ми надсилатимемо код перевірки на ваш номер телефону кожного разу, коли ви входите." + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "ہر بار جب آپ سائن ان کریں گے تو ہم آپ کے فون نمبر پر تصدیقی کوڈ بھیجیں گے۔" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Chúng tôi sẽ gửi mã xác minh đến số điện thoại của bạn mỗi khi bạn đăng nhập." + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "每次登录时,我们都会向您的手机号发送验证码。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "每次登入時,我們都會向您的電話號碼傳送驗證碼。" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "每次登入時,我們都會寄送驗證碼至您的電話號碼。" + } + } + } + }, + "WeakPasswordError" : { + "comment" : "Error message displayed when the password is too weak.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "يجب أن تتكون كلمة المرور من 6 أحرف على الأقل." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passwort muss mindestens 6 Zeichen lang sein." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Password must be at least 6 characters long." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "La contraseña debe tener al menos 6 caracteres." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Le mot de passe doit contenir au moins 6 caractères." + } + } + } + }, + "WrongPasswordError" : { + "comment" : "Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars.", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "البريد الإلكتروني وكلمة المرور اللذان أدخلتهما غير متطابقين." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Die E-Mail und das Passwort, die du eingegeben hast, stimmen nicht überein." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "The email and password you entered don't match." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "El correo y la contraseña que ingresaste no coinciden." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "L'e-mail et le mot de passe que tu as saisis ne correspondent pas." + } + } + } + }, + "You already have an account" : { + "extractionState" : "stale", + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вече имате акаунт" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "আপনার ইতোমধ্যে একটি অ্যাকাউন্ট আছে" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ja tens un compte" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Účet již existuje" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du har allerede en konto" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sie haben bereits ein Konto" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sie haben bereits ein Konto" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Έχετε ήδη λογαριασμό" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "You already have an account" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "You already have an account" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "You already have an account" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "You already have an account" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "You already have an account" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "You already have an account" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "شما قبلاً یک حساب دارید" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sinulla on jo tili" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mayroon ka nang account" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vous avez déjà un compte" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du häsch scho es Konto" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "તમારી પાસે પહેલેથી જ એકાઉન્ટ છે" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "כבר יש לך חשבון" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "आपके पास पहले से एक खाता है" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Već imate račun" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Már van fiókja" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anda sudah memiliki akun" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hai già un account" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "既にアカウントをお持ちです" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ನೀವು ಈಗಾಗಲೇ ಖಾತೆ ಹೊಂದಿದ್ದೀರಿ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이미 계정이 있습니다" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ozali na kɔnti na yo" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jums jau ir konts" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "तुमच्याकडे आधीच खाते आहे" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anda sudah mempunyai akaun" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du har allerede en konto" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Je hebt al een account" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du har allereie ein konto" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Masz już konto" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Você já tem uma conta" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Você já tem uma conta" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Já tem uma conta" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aveți deja un cont" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "У вас уже есть аккаунт" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Už máte účet" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Že imate račun" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Већ имате налог" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Već imate nalog" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du har redan ett konto" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "உங்களிடம் ஏற்கனவே ஒரு கணக்கு உள்ளது" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "คุณมีบัญชีอยู่แล้ว" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zaten bir hesabınız var" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "У вас вже є обліковий запис" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "آپ کے پاس پہلے سے اکاؤنٹ ہے" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bạn đã có tài khoản" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "您已经有账户了" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "您已經有帳號" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "您已經有帳號" + } + } + } + }, + "You will no longer be able to sign in using your account" : { + "extractionState" : "stale", + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Няма да можете повече да влизате с този акаунт" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "আপনি আপনার অ্যাকাউন্ট ব্যবহার করে সাইন ইন করতে পারবেন না" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ja no podràs iniciar sessió amb aquest compte" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nebudete se již moci přihlásit pomocí tohoto účtu" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du vil ikke længere kunne logge ind med denne konto" + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sie können sich nicht mehr mit Ihrem Konto anmelden" + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sie können sich nicht mehr mit Ihrem Konto anmelden" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Δεν θα μπορείτε πλέον να συνδεθείτε χρησιμοποιώντας τον λογαριασμό σας" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "You will no longer be able to sign in using your account" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "You will no longer be able to sign in using your account" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "You will no longer be able to sign in using your account" + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "You will no longer be able to sign in using your account" + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "You will no longer be able to sign in using your account" + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "You will no longer be able to sign in using your account" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "شما دیگر نمی‌توانید با استفاده از حساب خود وارد شوید" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Et voi enää kirjautua sisään käyttämällä tiliäsi" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hindi ka na makakapag-sign in gamit ang iyong account" + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vous ne pourrez plus vous connecter avec votre compte" + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du chasch dich nüme mit dim Konto aamälde" + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "તમે હવે તમારા એકાઉન્ટનો ઉપયોગ કરીને સાઇન ઇન કરી શકશો નહીં" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "לא תוכל עוד להתחבר באמצעות החשבון שלך" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "आप अपने खाते का उपयोग करके अब साइन इन नहीं कर पाएंगे" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Više se nećete moći prijaviti korištenjem ovog računa" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Többé nem fog tudni bejelentkezni a fiókjával" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anda tidak akan dapat masuk lagi menggunakan akun Anda" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Non potrai più accedere utilizzando il tuo account" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "このアカウントを使用してサインインできなくなります" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ನಿಮ್ಮ ಖಾತೆಯನ್ನು ಬಳಸಿಕೊಂಡು ನೀವು ಇನ್ನು ಮುಂದೆ ಸೈನ್ ಇನ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "더 이상 계정을 사용하여 로그인할 수 없습니다" + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Okoki lisusu te kokota na kosalelá kɔnti na yo" + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jūs vairs nevarēsiet pierakstīties, izmantojot kontu" + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "तुम्ही यापुढे तुमचे खाते वापरून साइन इन करू शकणार नाही" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anda tidak lagi dapat log masuk menggunakan akaun anda" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du vil ikke lenger kunne logge inn med kontoen din" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Je kunt niet langer met dit account inloggen" + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du vil ikkje lenger kunne logge inn med kontoen din" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nie będziesz już mógł zalogować się przy użyciu swojego konta" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Você não poderá mais fazer login usando sua conta" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Você não poderá mais fazer login usando sua conta" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Já não poderá iniciar sessão utilizando a sua conta" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nu vă veți mai putea conecta folosind contul dvs." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вы больше не сможете войти, используя свой аккаунт" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Už sa nebudete môcť prihlásiť pomocou svojho účtu" + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ne boste se več mogli prijaviti s svojim računom" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Више нећете моћи да се пријавите користећи ваш налог" + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Više nećete moći da se prijavite koristeći vaš nalog" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du kommer inte längre att kunna logga in med ditt konto" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "உங்கள் கணக்கைப் பயன்படுத்தி இனி உள்நுழைய முடியாது" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "คุณจะไม่สามารถลงชื่อเข้าใช้ด้วยบัญชีของคุณได้อีกต่อไป" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Artık hesabınızı kullanarak oturum açamayacaksınız" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ви більше не зможете увійти, використовуючи свій обліковий запис" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "آپ اپنے اکاؤنٹ کا استعمال کرتے ہوئے مزید سائن ان نہیں کر سکیں گے" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bạn sẽ không thể đăng nhập bằng tài khoản của mình nữa" + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "您将无法再使用此账户登录" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "您將無法再使用此帳號登入" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "您將無法再使用此帳號登入" + } + } + } + }, + "You've already used %@ to sign in. Enter your password for that account." : { + "extractionState" : "stale", + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вече сте използвали %@ за вход. Въведете паролата за този акаунт." + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "আপনি ইতোমধ্যে %@ দিয়ে সাইন ইন করেছেন। ওই অ্যাকাউন্টের পাসওয়ার্ড লিখুন।" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ja has utilitzat %@ per iniciar sessió. Introdueix la contrasenya d'aquest compte." + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Již jste se přihlásili pomocí %@. Zadejte heslo pro tento účet." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du har allerede brugt %@ til at logge ind. Indtast adgangskoden til den konto." + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sie haben bereits %@ zur Anmeldung verwendet. Geben Sie Ihr Passwort für dieses Konto ein." + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sie haben bereits %@ zur Anmeldung verwendet. Geben Sie Ihr Passwort für dieses Konto ein." + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Έχετε ήδη χρησιμοποιήσει το %@ για να συνδεθείτε. Εισαγάγετε τον κωδικό πρόσβασης για αυτόν τον λογαριασμό." + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "You've already used %@ to sign in. Enter your password for that account." + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "You've already used %@ to sign in. Enter your password for that account." + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "You've already used %@ to sign in. Enter your password for that account." + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "You've already used %@ to sign in. Enter your password for that account." + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "You've already used %@ to sign in. Enter your password for that account." + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "You've already used %@ to sign in. Enter your password for that account." + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "شما قبلاً از %@ برای ورود استفاده کرده‌اید. رمز عبور آن حساب را وارد کنید." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Olet jo käyttänyt %@ kirjautumiseen. Anna kyseisen tilin salasana." + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ginamit mo na ang %@ upang mag-sign in. Ilagay ang iyong password para sa account na iyon." + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vous avez déjà utilisé %@ pour vous connecter. Saisissez votre mot de passe pour ce compte." + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du häsch scho %@ zur Aamäldig verwendet. Gib dis Passwort für das Konto ii." + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "તમે સાઇન ઇન કરવા માટે પહેલેથી જ %@ નો ઉપયોગ કર્યો છે. તે એકાઉન્ટ માટે તમારો પાસવર્ડ દાખલ કરો." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "כבר השתמשת ב־%@ כדי להתחבר. הזן את הסיסמה שלך עבור חשבון זה." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "आपने पहले ही साइन इन करने के लिए %@ का उपयोग किया है। उस खाते के लिए अपना पासवर्ड दर्ज करें।" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Već ste koristili %@ za prijavu. Unesite lozinku za taj račun." + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Már használta a következőt bejelentkezéshez: %@. Adja meg a fiók jelszavát." + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anda sudah menggunakan %@ untuk masuk. Masukkan kata sandi Anda untuk akun tersebut." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hai già utilizzato %@ per accedere. Inserisci la password per quell'account." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "既に%@を使用してサインインしています。そのアカウントのパスワードを入力してください。" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ನೀವು ಸೈನ್ ಇನ್ ಮಾಡಲು ಈಗಾಗಲೇ %@ ಬಳಸಿದ್ದೀರಿ. ಆ ಖಾತೆಗೆ ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್ ನಮೂದಿಸಿ." + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이미 %@을(를) 사용하여 로그인했습니다. 해당 계정의 비밀번호를 입력하세요." + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Osaleli na %@ mpo na kokota. Kotisa liloba na yo ya kobombama mpo na kɔnti wana." + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jūs jau izmantojāt %@, lai pierakstītos. Ievadiet šī konta paroli." + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "तुम्ही साइन इन करण्यासाठी आधीच %@ वापरला आहे. त्या खात्यासाठी तुमचा पासवर्ड एंटर करा." + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anda telah menggunakan %@ untuk log masuk. Masukkan kata laluan untuk akaun tersebut." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du har allerede brukt %@ for å logge inn. Skriv inn passordet ditt for den kontoen." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Je hebt %@ al gebruikt om in te loggen. Voer het wachtwoord voor dat account in." + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du har allereie brukt %@ for å logge inn. Skriv inn passordet ditt for den kontoen." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Już używałeś %@ do logowania. Wprowadź hasło dla tego konta." + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Você já usou %@ para fazer login. Digite sua senha para essa conta." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Você já usou %@ para fazer login. Digite sua senha para essa conta." + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Já utilizou %@ para iniciar sessão. Introduza a sua palavra-passe para essa conta." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ați folosit deja %@ pentru a vă conecta. Introduceți parola pentru acel cont." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вы уже использовали %@ для входа. Введите пароль для этого аккаунта." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Už ste použili %@ na prihlásenie. Zadajte heslo pre tento účet." + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Že ste uporabili %@ za prijavo. Vnesite geslo za ta račun." + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Већ сте користили %@ за пријављивање. Унесите лозинку за тај налог." + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Već ste koristili %@ za prijavljivanje. Unesite lozinku za taj nalog." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du har redan använt %@ för att logga in. Ange ditt lösenord för det kontot." + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "நீங்கள் ஏற்கனவே உள்நுழைய %@ ஐப் பயன்படுத்தியுள்ளீர்கள். அந்த கணக்கிற்கான கடவுச்சொல்லை உள்ளிடவும்." + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "คุณได้ใช้ %@ ในการลงชื่อเข้าใช้แล้ว ใส่รหัสผ่านสำหรับบัญชีนั้น" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Oturum açmak için %@ öğesini zaten kullandınız. O hesap için şifrenizi girin." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ви вже використовували %@ для входу. Введіть пароль для цього облікового запису." + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "آپ پہلے ہی سائن ان کرنے کے لیے %@ استعمال کر چکے ہیں۔ اس اکاؤنٹ کے لیے اپنا پاس ورڈ درج کریں۔" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bạn đã sử dụng %@ để đăng nhập. Nhập mật khẩu cho tài khoản đó." + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "您已使用 %@ 登录。请输入该账户的密码。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "您已使用 %@ 登入。請輸入該帳號的密碼。" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "您已使用 %@ 登入。請輸入該帳號的密碼。" + } + } + } + }, + "You've already used %@. Sign in with %@ to continue." : { + "extractionState" : "stale", + "localizations" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вече сте използвали %@. Влезте с %@, за да продължите." + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "আপনি ইতোমধ্যে %@ ব্যবহার করেছেন। চালিয়ে যেতে %@ দিয়ে সাইন ইন করুন।" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ja has utilitzat %@. Inicia sessió amb %@ per continuar." + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Již jste použili %@. Chcete-li pokračovat, přihlaste se pomocí %@." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du har allerede brugt %@. Log ind med %@ for at fortsætte." + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sie haben bereits %@ verwendet. Melden Sie sich mit %@ an, um fortzufahren." + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sie haben bereits %@ verwendet. Melden Sie sich mit %@ an, um fortzufahren." + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Έχετε ήδη χρησιμοποιήσει το %@. Συνδεθείτε με %@ για να συνεχίσετε." + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "You've already used %@. Sign in with %@ to continue." + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "You've already used %@. Sign in with %@ to continue." + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "You've already used %@. Sign in with %@ to continue." + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "You've already used %@. Sign in with %@ to continue." + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "You've already used %@. Sign in with %@ to continue." + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "You've already used %@. Sign in with %@ to continue." + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "شما قبلاً از %@ استفاده کرده‌اید. برای ادامه با %@ وارد شوید." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Olet jo käyttänyt %@. Jatka kirjautumalla sisään käyttäen %@." + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ginamit mo na ang %@. Mag-sign in gamit ang %@ upang magpatuloy." + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vous avez déjà utilisé %@. Connectez-vous avec %@ pour continuer." + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du häsch scho %@ verwendet. Mäld dich mit %@ aa zum wiiterzfahre." + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "તમે પહેલેથી જ %@ નો ઉપયોગ કર્યો છે. ચાલુ રાખવા માટે %@ સાથે સાઇન ઇન કરો." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "כבר השתמשת ב־%@. התחבר עם %@ כדי להמשיך." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "आपने पहले ही %@ का उपयोग किया है। जारी रखने के लिए %@ के साथ साइन इन करें।" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Već ste koristili %@. Prijavite se putem %@ za nastavak." + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Már használta a következőt: %@. Jelentkezzen be a következővel a folytatáshoz: %@." + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anda sudah menggunakan %@. Masuk dengan %@ untuk melanjutkan." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hai già utilizzato %@. Accedi con %@ per continuare." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "既に%@を使用しています。続行するには%@でサインインしてください。" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ನೀವು ಈಗಾಗಲೇ %@ ಬಳಸಿದ್ದೀರಿ. ಮುಂದುವರಿಯಲು %@ ನೊಂದಿಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ." + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이미 %@을(를) 사용했습니다. 계속하려면 %@(으)로 로그인하세요." + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Osaleli na %@. Kota na %@ mpo na kokoba." + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jūs jau izmantojāt %@. Pierakstieties ar %@, lai turpinātu." + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "तुम्ही आधीच %@ वापरला आहे. सुरू ठेवण्यासाठी %@ सह साइन इन करा." + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anda telah menggunakan %@. Log masuk dengan %@ untuk meneruskan." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du har allerede brukt %@. Logg inn med %@ for å fortsette." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Je hebt %@ al gebruikt. Log in met %@ om door te gaan." + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du har allereie brukt %@. Logg inn med %@ for å halde fram." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Już używałeś %@. Zaloguj się przez %@, aby kontynuować." + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Você já usou %@. Entre com %@ para continuar." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Você já usou %@. Entre com %@ para continuar." + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Já utilizou %@. Inicie sessão com %@ para continuar." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ați folosit deja %@. Conectați-vă cu %@ pentru a continua." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вы уже использовали %@. Войдите через %@, чтобы продолжить." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Už ste použili %@. Ak chcete pokračovať, prihláste sa pomocou %@." + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Že ste uporabili %@. Za nadaljevanje se prijavite z %@." + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Већ сте користили %@. Пријавите се са %@ да наставите." + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Već ste koristili %@. Prijavite se sa %@ da nastavite." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du har redan använt %@. Logga in med %@ för att fortsätta." + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "நீங்கள் ஏற்கனவே %@ ஐப் பயன்படுத்தியுள்ளீர்கள். தொடர %@ உடன் உள்நுழையவும்." + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "คุณได้ใช้ %@ แล้ว ลงชื่อเข้าใช้ด้วย %@ เพื่อดำเนินการต่อ" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ öğesini zaten kullandınız. Devam etmek için %@ ile oturum açın." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ви вже використовували %@. Увійдіть через %@, щоб продовжити." + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "آپ پہلے ہی %@ استعمال کر چکے ہیں۔ جاری رکھنے کے لیے %@ کے ساتھ سائن ان کریں۔" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bạn đã sử dụng %@. Đăng nhập bằng %@ để tiếp tục." + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "您已经使用 %@ 登录过。请使用 %@ 登录以继续。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "您已經使用 %@ 登入。請使用 %@ 繼續。" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "您已使用 %@ 登入。請使用 %@ 繼續登入。" } } } }, - "UpdateEmailAlertMessage" : { - "comment" : "Alert action message shown before updating email action. Use short/abbreviated translation for 'email' which is less than 15 chars.", - "extractionState" : "manual", + "You've entered an incorrect password too many times. Try again in a few minutes." : { + "extractionState" : "stale", "localizations" : { - "en" : { + "bg" : { + "stringUnit" : { + "state" : "translated", + "value" : "Въвели сте грешна парола твърде много пъти. Опитайте отново след няколко минути." + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "আপনি অনেকবার ভুল পাসওয়ার্ড লিখেছেন। কয়েক মিনিট পরে আবার চেষ্টা করুন।" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Has introduït una contrasenya incorrecta massa vegades. Torna-ho a provar d'aquí a uns minuts." + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zadali jste nesprávné heslo příliš mnohokrát. Zkuste to znovu později." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du har indtastet en forkert adgangskode for mange gange. Prøv igen om et par minutter." + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sie haben zu oft ein falsches Passwort eingegeben. Versuchen Sie es in ein paar Minuten erneut." + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sie haben zu oft ein falsches Passwort eingegeben. Versuchen Sie es in ein paar Minuten erneut." + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Έχετε εισαγάγει λανθασμένο κωδικό πρόσβασης πάρα πολλές φορές. Δοκιμάστε ξανά σε λίγα λεπτά." + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "You've entered an incorrect password too many times. Try again in a few minutes." + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "You've entered an incorrect password too many times. Try again in a few minutes." + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "You've entered an incorrect password too many times. Try again in a few minutes." + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "You've entered an incorrect password too many times. Try again in a few minutes." + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "You've entered an incorrect password too many times. Try again in a few minutes." + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "You've entered an incorrect password too many times. Try again in a few minutes." + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "شما بارها رمز عبور اشتباه وارد کرده‌اید. چند دقیقه دیگر دوباره امتحان کنید." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Olet syöttänyt väärän salasanan liian monta kertaa. Yritä uudelleen muutaman minuutin kuluttua." + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nag-enter ka ng maling password nang masyadong maraming beses. Subukan muli sa ilang minuto." + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vous avez saisi un mot de passe incorrect trop de fois. Réessayez dans quelques minutes." + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du häsch z'oft es falsches Passwort iigäh. Versuech's i es paar Minute nomol." + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "તમે ઘણી વખત ખોટો પાસવર્ડ દાખલ કર્યો છે. થોડીવારમાં ફરી પ્રયાસ કરો." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הזנת סיסמה שגויה פעמים רבות מדי. נסה שוב בעוד מספר דקות." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "आपने बहुत बार गलत पासवर्ड दर्ज किया है। कुछ मिनटों में फिर से प्रयास करें।" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Previše puta ste unijeli pogrešnu lozinku. Pokušajte ponovno za nekoliko minuta." + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Túl sokszor adott meg helytelen jelszót. Próbálja újra néhány perc múlva." + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anda telah memasukkan kata sandi yang salah terlalu banyak kali. Coba lagi dalam beberapa menit." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hai inserito una password errata troppe volte. Riprova tra qualche minuto." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "パスワードの入力ミスが多すぎます。数分後に再試行してください。" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ನೀವು ಹಲವು ಬಾರಿ ತಪ್ಪಾದ ಪಾಸ್‌ವರ್ಡ್ ನಮೂದಿಸಿದ್ದೀರಿ. ಕೆಲವು ನಿಮಿಷಗಳಲ್ಲಿ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ." + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "잘못된 비밀번호를 너무 많이 입력했습니다. 몇 분 후에 다시 시도하세요." + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Otisi liloba ya kobombama ya mabe mbala mingi. Meka lisusu na baminti moke." + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pārāk daudz reižu ievadīta nepareiza parole. Mēģiniet vēlreiz pēc dažām minūtēm." + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "तुम्ही खूप वेळा चुकीचा पासवर्ड एंटर केला आहे. काही मिनिटांनी पुन्हा प्रयत्न करा." + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anda telah memasukkan kata laluan yang salah terlalu banyak kali. Cuba lagi dalam beberapa minit." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du har skrevet inn feil passord for mange ganger. Prøv igjen om noen minutter." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Je hebt te vaak een verkeerd wachtwoord ingevoerd. Probeer het over een paar minuten opnieuw." + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du har skrive inn feil passord for mange gonger. Prøv igjen om nokre minutt." + } + }, + "pl" : { "stringUnit" : { "state" : "translated", - "value" : "To change email address associated with your account, you will need to sign in again." + "value" : "Wprowadziłeś nieprawidłowe hasło zbyt wiele razy. Spróbuj ponownie za kilka minut." } - } - } - }, - "UpdateEmailVerificationAlertMessage" : { - "comment" : "Alert action message shown before confirmation of updating email action.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "pt" : { "stringUnit" : { "state" : "translated", - "value" : "In order to change your password, you first need to enter your current password." + "value" : "Você digitou uma senha incorreta muitas vezes. Tente novamente em alguns minutos." } - } - } - }, - "UserNotFoundError" : { - "comment" : "Error message displayed when there's no account matching the email address. Use short/abbreviated translation for 'email' which is less than 15 chars.", - "extractionState" : "migrated", - "localizations" : { - "en" : { + }, + "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "That email address doesn’t match an existing account." + "value" : "Você digitou uma senha incorreta muitas vezes. Tente novamente em alguns minutos." } - } - } - }, - "Verify email address?" : { - "comment" : "Label for sending email verification to user.", - "localizations" : { - "en" : { + }, + "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Verify email address?" + "value" : "Introduziu uma palavra-passe incorreta demasiadas vezes. Tente novamente dentro de alguns minutos." } - } - } - }, - "VerifyItsYou" : { - "comment" : "Alert message title show for re-authorization.", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Verify it's you" + "value" : "Ați introdus o parolă incorectă de prea multe ori. Încercați din nou în câteva minute." } - } - } - }, - "WeakPasswordError" : { - "comment" : "Error message displayed when the password is too weak.", - "extractionState" : "migrated", - "localizations" : { - "en" : { + }, + "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Password must be at least 6 characters long." + "value" : "Вы ввели неверный пароль слишком много раз. Попробуйте снова через несколько минут." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Príliš veľakrát ste zadali nesprávne heslo. Skúste to znova o niekoľko minút." + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prevečkrat ste vnesli napačno geslo. Poskusite znova čez nekaj minut." + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Унели сте нетачну лозинку превише пута. Покушајте поново за неколико минута." + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uneli ste netačnu lozinku previše puta. Pokušajte ponovo za nekoliko minuta." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du har angett fel lösenord för många gånger. Försök igen om några minuter." + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "நீங்கள் பல முறை தவறான கடவுச்சொல்லை உள்ளிட்டுள்ளீர்கள். சில நிமிடங்களில் மீண்டும் முயற்சிக்கவும்." + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "คุณใส่รหัสผ่านผิดหลายครั้งเกินไป ลองอีกครั้งในอีกสักครู่" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Çok fazla kez yanlış şifre girdiniz. Birkaç dakika sonra tekrar deneyin." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ви ввели неправильний пароль забагато разів. Спробуйте знову через кілька хвилин." + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "آپ نے بہت زیادہ بار غلط پاس ورڈ درج کیا ہے۔ چند منٹ میں دوبارہ کوشش کریں۔" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bạn đã nhập sai mật khẩu quá nhiều lần. Hãy thử lại sau vài phút." + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "您输入错误密码次数过多,请稍后重试。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "您輸入錯誤密碼的次數過多,請稍後再試。" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "您輸入錯誤密碼的次數過多,請稍後再試。" } } } }, - "WrongPasswordError" : { - "comment" : "Error message displayed when the email and password don't match. Use short/abbreviated translation for 'email' which is less than 15 chars.", - "extractionState" : "migrated", + "Your password has been successfully updated." : { "localizations" : { - "en" : { + "bg" : { "stringUnit" : { "state" : "translated", - "value" : "The email and password you entered don't match." + "value" : "Вашата парола беше успешно актуализирана." + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "আপনার পাসওয়ার্ড সফলভাবে আপডেট হয়েছে।" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "La teva contrasenya s'ha actualitzat correctament." + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vaše heslo bylo úspěšně aktualizováno." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Din adgangskode er blevet opdateret." + } + }, + "de-AT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ihr Passwort wurde erfolgreich aktualisiert." + } + }, + "de-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ihr Passwort wurde erfolgreich aktualisiert." + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ο κωδικός πρόσβασής σας ενημερώθηκε επιτυχώς." + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Your password has been successfully updated." + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Your password has been successfully updated." + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Your password has been successfully updated." + } + }, + "en-IE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Your password has been successfully updated." + } + }, + "en-IN" : { + "stringUnit" : { + "state" : "translated", + "value" : "Your password has been successfully updated." + } + }, + "en-ZA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Your password has been successfully updated." + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "رمز عبور شما با موفقیت به‌روزرسانی شد." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Salasanasi on päivitetty onnistuneesti." + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ang iyong password ay matagumpay na na-update." + } + }, + "fr-CH" : { + "stringUnit" : { + "state" : "translated", + "value" : "Votre mot de passe a été mis à jour avec succès." + } + }, + "gsw" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dis Passwort isch erfolgriich aktualisiert worde." + } + }, + "gu" : { + "stringUnit" : { + "state" : "translated", + "value" : "તમારો પાસવર્ડ સફળતાપૂર્વક અપડેટ થયો છે." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הסיסמה שלך עודכנה בהצלחה." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "आपका पासवर्ड सफलतापूर्वक अपडेट किया गया है।" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vaša lozinka je uspješno ažurirana." + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jelszava sikeresen frissítve." + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kata sandi Anda telah berhasil diperbarui." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "La tua password è stata aggiornata correttamente." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "パスワードが正常に更新されました。" + } + }, + "kn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ಯಶಸ್ವಿಯಾಗಿ ನವೀಕರಿಸಲಾಗಿದೆ." + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "비밀번호가 성공적으로 업데이트되었습니다." + } + }, + "ln" : { + "stringUnit" : { + "state" : "translated", + "value" : "Liloba na yo ya kobombama esalami ya sika na elonga." + } + }, + "lv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jūsu parole ir veiksmīgi atjaunināta." + } + }, + "mr" : { + "stringUnit" : { + "state" : "translated", + "value" : "तुमचा पासवर्ड यशस्वीरित्या अपडेट केला गेला आहे." + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kata laluan anda telah berjaya dikemas kini." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passordet ditt har blitt oppdatert." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Je wachtwoord is succesvol bijgewerkt." + } + }, + "nn-NO" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passordet ditt har blitt oppdatert." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twoje hasło zostało pomyślnie zaktualizowane." + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sua senha foi atualizada com sucesso." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sua senha foi atualizada com sucesso." + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "A sua palavra-passe foi atualizada com sucesso." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Parola dvs. a fost actualizată cu succes." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ваш пароль был успешно обновлен." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vaše heslo bolo úspešne aktualizované." + } + }, + "sl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vaše geslo je bilo uspešno posodobljeno." + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ваша лозинка је успешно ажурирана." + } + }, + "sr-Latn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vaša lozinka je uspešno ažurirana." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ditt lösenord har uppdaterats." + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "உங்கள் கடவுச்சொல் வெற்றிகரமாகப் புதுப்பிக்கப்பட்டது." + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "อัปเดตรหัสผ่านของคุณเรียบร้อยแล้ว" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Şifreniz başarıyla güncellendi." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ваш пароль було успішно оновлено." + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "آپ کا پاس ورڈ کامیابی سے اپ ڈیٹ ہو گیا ہے۔" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mật khẩu của bạn đã được cập nhật thành công." + } + }, + "zh" : { + "stringUnit" : { + "state" : "translated", + "value" : "您的密码已成功更新。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "您的密碼已成功更新。" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "您的密碼已成功更新。" } } } } }, - "version" : "1.0" + "version" : "1.1" } \ No newline at end of file diff --git a/FirebaseSwiftUI/FirebasePhoneAuthSwiftUI/Sources/Utils/PhoneUtils.swift b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Utils/PhoneUtils.swift similarity index 100% rename from FirebaseSwiftUI/FirebasePhoneAuthSwiftUI/Sources/Utils/PhoneUtils.swift rename to FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Utils/PhoneUtils.swift diff --git a/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Utils/StringUtils.swift b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Utils/StringUtils.swift index f3038550969..75f766c09f7 100644 --- a/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Utils/StringUtils.swift +++ b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Utils/StringUtils.swift @@ -19,14 +19,23 @@ let kKeyNotFound = "Key not found" public class StringUtils { let bundle: Bundle - init(bundle: Bundle) { + let languageCode: String? + + init(bundle: Bundle, languageCode: String? = nil) { self.bundle = bundle + self.languageCode = languageCode } public func localizedString(for key: String) -> String { + // If a specific language code is set, load strings from that language bundle + if let languageCode, let path = bundle.path(forResource: languageCode, ofType: "lproj"), + let localizedBundle = Bundle(path: path) { + return localizedBundle.localizedString(forKey: key, value: nil, table: "Localizable") + } + + // Use default localization let keyLocale = String.LocalizationValue(key) - let value = String(localized: keyLocale, bundle: bundle) - return value + return String(localized: keyLocale, bundle: bundle) } public func localizedErrorMessage(for error: Error) -> String { @@ -35,27 +44,27 @@ public class StringUtils { switch errorCode { case .emailAlreadyInUse: return localizedString( - for: "EmailAlreadyInUseError" + for: "The email address is already in use by another account." ) case .invalidEmail: - return localizedString(for: "InvalidEmailError") + return localizedString(for: "That email address isn't correct.") case .weakPassword: - return localizedString(for: "WeakPasswordError") + return localizedString(for: "Password must be at least 6 characters long.") case .tooManyRequests: return localizedString( for: "SignUpTooManyTimesError" ) case .wrongPassword: return localizedString( - for: "WrongPasswordError" + for: "The email and password you entered don't match." ) case .userNotFound: return localizedString( - for: "UserNotFoundError" + for: "That email address doesn't match an existing account." ) case .userDisabled: return localizedString( - for: "AccountDisabledError" + for: "That email address is for an account that has been disabled." ) default: return error.localizedDescription @@ -66,7 +75,7 @@ public class StringUtils { /// found in: /// - AuthPickerView public var authPickerTitle: String { - return localizedString(for: "AuthPickerTitle") + return localizedString(for: "Sign in with Firebase") } /// Email input label @@ -75,14 +84,14 @@ public class StringUtils { /// - PasswordRecoveryView /// - EmailLinkView public var emailInputLabel: String { - return localizedString(for: "EnterYourEmail") + return localizedString(for: "Enter your email") } /// Password button action label /// found in: /// - EmailAuthView public var passwordButtonLabel: String { - return localizedString(for: "ForgotPasswordTitle") + return localizedString(for: "Trouble signing in?") } /// Password input label @@ -91,21 +100,28 @@ public class StringUtils { /// - PasswordPromptView /// - UpdatePassword public var passwordInputLabel: String { - return localizedString(for: "EnterYourPassword") + return localizedString(for: "Enter your password") + } + + /// Update password title + /// found in: + /// - UpdatePasswordView + public var updatePasswordTitle: String { + return localizedString(for: "UpdatePasswordTitle") } /// Password recovery title /// found in: /// - PasswordRecoveryView public var passwordRecoveryTitle: String { - return localizedString(for: "PasswordRecoveryTitle") + return localizedString(for: "Recover password") } /// Password recovery email sent title /// found in: /// - PasswordRecoveryView public var passwordRecoveryEmailSentTitle: String { - return localizedString(for: "PasswordRecoveryEmailSentTitle") + return localizedString(for: "Check your email") } /// Password recovery helper message @@ -126,14 +142,14 @@ public class StringUtils { /// found in: /// - PasswordRecoveryView public var forgotPasswordInputLabel: String { - return localizedString(for: "ForgotPassword") + return localizedString(for: "Send password recovery email") } /// Signed in title /// found in: /// - SignedInView public var signedInTitle: String { - return localizedString(for: "SignedIn") + return localizedString(for: "Signed in!") } /// Confirm password @@ -141,70 +157,70 @@ public class StringUtils { /// - EmailAuthView /// - UpdatePassword public var confirmPasswordInputLabel: String { - return localizedString(for: "ConfirmPasswordInputLabel") + return localizedString(for: "Confirm Password") } /// Sign in with email button label or can be used as title /// found in: /// - EmailAuthView public var signInWithEmailButtonLabel: String { - return localizedString(for: "SignInWithEmail") + return localizedString(for: "Sign in with email") } /// Sign up with email button label /// found in: /// - EmailAuthView public var signUpWithEmailButtonLabel: String { - return localizedString(for: "SignUpTitle") + return localizedString(for: "Create account") } /// Sign-in with email link button label to push user to email link view /// found in: /// - EmailAuthView public var signUpWithEmailLinkButtonLabel: String { - return localizedString(for: "EmailLinkSignInLabel") + return localizedString(for: "Prefer Email link sign-in?") } /// send email link sign-in button label /// found in: /// - EmailLinkView public var sendEmailLinkButtonLabel: String { - return localizedString(for: "SendEmailSignInLinkButtonLabel") + return localizedString(for: "Send email sign-in link") } /// Sign in with email link View title /// found in: /// - EmailLinkView public var signInWithEmailLinkViewTitle: String { - return localizedString(for: "EmailLinkSignInTitle") + return localizedString(for: "Sign in with email link") } /// Sign in with email link View message /// found in: /// - EmailLinkView public var signInWithEmailLinkViewMessage: String { - return localizedString(for: "SignInEmailSent") + return localizedString(for: "Sign-in email Sent") } /// Account settings - Delete button label /// found in: /// - SignedInView public var deleteAccountButtonLabel: String { - return localizedString(for: "AS_DeleteAccount") + return localizedString(for: "Delete Account") } /// Account settings - Email label /// found in: /// SignedInView public var accountSettingsEmailLabel: String { - return localizedString(for: "AS_Email") + return localizedString(for: "Email") } /// Account settings - sign out button label /// found in: /// - SignedInView public var signOutButtonLabel: String { - return localizedString(for: "AS_SignOut") + return localizedString(for: "Sign Out") } /// Account settings - update password button label @@ -217,14 +233,14 @@ public class StringUtils { /// Account settings - send email verification label /// found in: - /// VerifyEmailView + /// SignedInView public var sendEmailVerificationButtonLabel: String { return localizedString(for: "Verify email address?") } /// Account settings - verify email sheet message /// found in: - /// VerifyEmailView + /// SignedInView public var verifyEmailSheetMessage: String { return localizedString(for: "Verification email sent") } @@ -281,6 +297,34 @@ public class StringUtils { return localizedString(for: "Already have an account?") } + /// Google provider + /// found in: + /// - SignInWithGoogleButton + public var googleLoginButtonLabel: String { + return localizedString(for: "Sign in with Google") + } + + /// Apple provider + /// found in: + /// - SignInWithAppleButton + public var appleLoginButtonLabel: String { + return localizedString(for: "Sign in with Apple") + } + + /// Twitter/X provider + /// found in: + /// - SignInWithTwitterButton + public var twitterLoginButtonLabel: String { + return localizedString(for: "Sign in with X") + } + + /// Phone provider + /// found in: + /// - PhoneAuthButtonView + public var phoneLoginButtonLabel: String { + return localizedString(for: "Sign in with Phone") + } + /// Facebook provider /// found in: /// - SignInWithFacebookButton @@ -323,6 +367,55 @@ public class StringUtils { return localizedString(for: "Enter phone number") } + /// Phone provider + /// found in: + /// - PhoneAuthView + public var phoneSignInTitle: String { + return localizedString(for: "Sign in with Phone") + } + + /// Phone provider + /// found in: + /// - PhoneAuthView + public var enterPhoneNumberPlaceholder: String { + return localizedString(for: "Enter phone number") + } + + /// Phone provider + /// found in: + /// - PhoneAuthView + public var sendCodeButtonLabel: String { + return localizedString(for: "Send Code") + } + + /// Phone provider + /// found in: + /// - PhoneAuthView + public var processingLabel: String { + return localizedString(for: "Processing...") + } + + /// Phone provider + /// found in: + /// - PhoneAuthView + public var enterVerificationCodeTitle: String { + return localizedString(for: "Enter Verification Code") + } + + /// Phone provider + /// found in: + /// - PhoneAuthView + public var verificationCodePlaceholder: String { + return localizedString(for: "Verification Code") + } + + /// Phone provider + /// found in: + /// - PhoneAuthView + public var verifyAndSignInButtonLabel: String { + return localizedString(for: "Verify and Sign In") + } + /// Phone provider /// found in: /// - PhoneAuthButtonView @@ -348,7 +441,7 @@ public class StringUtils { /// found in: /// - PrivacyTOCsView public var termsOfServiceLabel: String { - return localizedString(for: "TermsOfService") + return localizedString(for: "Terms of Service") } /// Terms of Service message @@ -362,7 +455,7 @@ public class StringUtils { /// found in: /// - PrivacyTOCsView public var privacyPolicyLabel: String { - return localizedString(for: "PrivacyPolicy") + return localizedString(for: "Privacy Policy") } /// Alert Error title @@ -371,4 +464,504 @@ public class StringUtils { public var alertErrorTitle: String { return localizedString(for: "Error") } + + /// Authenticating overlay message + /// found in: + /// - AuthPickerView + public var authenticatingMessage: String { + return localizedString(for: "Authenticating...") + } + + /// Two-Factor Authentication + /// found in: + /// - MFAEnrolmentView + /// - MFAManagementView + public var twoFactorAuthenticationLabel: String { + return localizedString(for: "Two-Factor Authentication") + } + + /// Set Up Two-Factor Authentication + /// found in: + /// - MFAEnrolmentView + public var setUpTwoFactorAuthenticationLabel: String { + return localizedString(for: "Set Up Two-Factor Authentication") + } + + /// Manage Two-Factor Authentication + /// found in: + /// - MFAManagementView + public var manageTwoFactorAuthenticationLabel: String { + return localizedString(for: "Manage Two-Factor Authentication") + } + + /// Complete Sign-In + /// found in: + /// - MFAResolutionView + public var completeSignInLabel: String { + return localizedString(for: "Complete Sign-In") + } + + /// Complete Setup + /// found in: + /// - MFAEnrolmentView + public var completeSetupLabel: String { + return localizedString(for: "Complete Setup") + } + + /// Choose Authentication Method + /// found in: + /// - MFAEnrolmentView + /// - MFAResolutionView + public var chooseAuthenticationMethodLabel: String { + return localizedString(for: "Choose Authentication Method") + } + + /// SMS Authentication + /// found in: + /// - MFAEnrolmentView + /// - MFAResolutionView + public var smsAuthenticationLabel: String { + return localizedString(for: "SMS Authentication") + } + + /// Authenticator App + /// found in: + /// - MFAEnrolmentView + /// - MFAResolutionView + public var authenticatorAppLabel: String { + return localizedString(for: "Authenticator App") + } + + /// Enter Your Phone Number + /// found in: + /// - MFAEnrolmentView + /// - EnterPhoneNumberView + public var enterYourPhoneNumberLabel: String { + return localizedString(for: "Enter Your Phone Number") + } + + /// Phone Number + /// found in: + /// - MFAEnrolmentView + /// - EnterPhoneNumberView + public var phoneNumberLabel: String { + return localizedString(for: "Phone Number") + } + + /// Send Code + /// found in: + /// - MFAEnrolmentView + /// - EnterPhoneNumberView + public var sendCodeLabel: String { + return localizedString(for: "Send Code") + } + + /// Enter Verification Code + /// found in: + /// - MFAEnrolmentView + /// - MFAResolutionView + /// - EnterVerificationCodeView + public var enterVerificationCodeLabel: String { + return localizedString(for: "Enter Verification Code") + } + + /// Verification Code + /// found in: + /// - MFAEnrolmentView + /// - MFAResolutionView + /// - EnterVerificationCodeView + public var verificationCodeLabel: String { + return localizedString(for: "Verification Code") + } + + /// Scan QR Code + /// found in: + /// - MFAEnrolmentView + public var scanQRCodeLabel: String { + return localizedString(for: "Scan QR Code") + } + + /// Manual Entry Key: + /// found in: + /// - MFAEnrolmentView + public var manualEntryKeyLabel: String { + return localizedString(for: "Manual Entry Key:") + } + + /// Enter 6-digit code + /// found in: + /// - MFAEnrolmentView + public var enterSixDigitCodeLabel: String { + return localizedString(for: "Enter 6-digit code") + } + + /// Scan with your authenticator app or tap to open directly + /// found in: + /// - MFAEnrolmentView + public var scanWithAuthenticatorAppMessage: String { + return localizedString(for: "Scan with your authenticator app or tap to open directly") + } + + /// Tap to open in authenticator app + /// found in: + /// - MFAEnrolmentView + public var tapToOpenInAuthenticatorAppLabel: String { + return localizedString(for: "Tap to open in authenticator app") + } + + /// Use an authenticator app like Google Authenticator or Authy to generate verification codes. + /// found in: + /// - MFAEnrolmentView + public var authenticatorAppInstructionsMessage: String { + return localizedString( + for: "Use an authenticator app like Google Authenticator or Authy to generate verification codes." + ) + } + + /// Set up two-factor authentication to add an extra layer of security to your account. + /// found in: + /// - MFAEnrolmentView + public var setUpTwoFactorAuthMessage: String { + return localizedString( + for: "Set up two-factor authentication to add an extra layer of security to your account." + ) + } + + /// We'll send a verification code to this number + /// found in: + /// - MFAEnrolmentView + public var sendVerificationCodeToNumberMessage: String { + return localizedString(for: "We'll send a verification code to this number") + } + + /// We'll send a verification code to your phone + /// found in: + /// - MFAEnrolmentView + public var sendVerificationCodeToPhoneMessage: String { + return localizedString(for: "We'll send a verification code to your phone") + } + + /// We'll send a verification code to your phone number each time you sign in. + /// found in: + /// - MFAEnrolmentView + public var sendVerificationCodeEachSignInMessage: String { + return localizedString( + for: "We'll send a verification code to your phone number each time you sign in." + ) + } + + /// Unable to generate QR Code + /// found in: + /// - MFAEnrolmentView + public var unableToGenerateQRCodeMessage: String { + return localizedString(for: "Unable to generate QR Code") + } + + /// Copied to clipboard! + /// found in: + /// - MFAEnrolmentView + public var copiedToClipboardMessage: String { + return localizedString(for: "Copied to clipboard!") + } + + /// Multi-Factor Authentication Disabled + /// found in: + /// - MFAEnrolmentView + /// - MFAResolutionView + public var mfaDisabledLabel: String { + return localizedString(for: "Multi-Factor Authentication Disabled") + } + + /// MFA is not enabled in the current configuration. Please contact your administrator. + /// found in: + /// - MFAEnrolmentView + /// - MFAResolutionView + public var mfaNotEnabledMessage: String { + return localizedString( + for: "MFA is not enabled in the current configuration. Please contact your administrator." + ) + } + + /// No Authentication Methods Available + /// found in: + /// - MFAEnrolmentView + /// - MFAResolutionView + public var noAuthenticationMethodsAvailableLabel: String { + return localizedString(for: "No Authentication Methods Available") + } + + /// No MFA methods are configured as allowed. Please contact your administrator. + /// found in: + /// - MFAEnrolmentView + /// - MFAResolutionView + public var noMFAMethodsConfiguredMessage: String { + return localizedString( + for: "No MFA methods are configured as allowed. Please contact your administrator." + ) + } + + /// Complete sign-in with your second factor + /// found in: + /// - MFAResolutionView + public var completeSignInWithSecondFactorMessage: String { + return localizedString(for: "Complete sign-in with your second factor") + } + + /// Choose verification method: + /// found in: + /// - MFAResolutionView + public var chooseVerificationMethodLabel: String { + return localizedString(for: "Choose verification method:") + } + + /// SMS Verification + /// found in: + /// - MFAResolutionView + public var smsVerificationLabel: String { + return localizedString(for: "SMS Verification") + } + + /// We sent a code to %@ + /// found in: + /// - MFAResolutionView + public var sentCodeToNumberMessage: String { + return localizedString(for: "We sent a code to %@") + } + + /// We'll send a code to ••••••%@ + /// found in: + /// - MFAResolutionView + public var sendCodeToMaskedNumberMessage: String { + return localizedString(for: "We'll send a code to ••••••%@") + } + + /// Enter the 6-digit code from your authenticator app + /// found in: + /// - MFAResolutionView + public var enterCodeFromAuthenticatorAppMessage: String { + return localizedString(for: "Enter the 6-digit code from your authenticator app") + } + + /// Resend Code + /// found in: + /// - MFAResolutionView + /// - EnterVerificationCodeView + public var resendCodeLabel: String { + return localizedString(for: "Resend Code") + } + + /// Change number + /// found in: + /// - EnterVerificationCodeView + public var changeNumberLabel: String { + return localizedString(for: "Change number") + } + + /// Manage your authentication methods + /// found in: + /// - MFAManagementView + public var manageAuthenticationMethodsMessage: String { + return localizedString(for: "Manage your authentication methods") + } + + /// Enrolled Methods + /// found in: + /// - MFAManagementView + public var enrolledMethodsLabel: String { + return localizedString(for: "Enrolled Methods") + } + + /// No Authentication Methods + /// found in: + /// - MFAManagementView + public var noAuthenticationMethodsLabel: String { + return localizedString(for: "No Authentication Methods") + } + + /// Add an extra layer of security to your account + /// found in: + /// - MFAManagementView + public var addExtraSecurityLayerMessage: String { + return localizedString(for: "Add an extra layer of security to your account") + } + + /// Add Another Method + /// found in: + /// - MFAManagementView + public var addAnotherMethodLabel: String { + return localizedString(for: "Add Another Method") + } + + /// Get Started + /// found in: + /// - MFAManagementView + public var getStartedLabel: String { + return localizedString(for: "Get Started") + } + + /// Remove + /// found in: + /// - MFAManagementView + public var removeLabel: String { + return localizedString(for: "Remove") + } + + /// Authentication Method + /// found in: + /// - MFAManagementView + public var authenticationMethodLabel: String { + return localizedString(for: "Authentication Method") + } + + /// Enrolled: %@ + /// found in: + /// - MFAManagementView + public var enrolledDateLabel: String { + return localizedString(for: "Enrolled: %@") + } + + /// SMS: %@ + /// found in: + /// - MFAManagementView + public var smsPhoneLabel: String { + return localizedString(for: "SMS: %@") + } + + /// Delete Account + /// found in: + /// - SignedInView + public var deleteAccountLabel: String { + return localizedString(for: "Delete Account") + } + + /// Delete Account? + /// found in: + /// - SignedInView + public var deleteAccountConfirmationLabel: String { + return localizedString(for: "Delete Account?") + } + + /// This action cannot be undone. All your data will be permanently deleted. You may need to + /// reauthenticate to complete this action. + /// found in: + /// - SignedInView + public var deleteAccountWarningMessage: String { + return localizedString( + for: "This action cannot be undone. All your data will be permanently deleted. You may need to reauthenticate to complete this action." + ) + } + + /// Invalid OAuth Provider error + /// found in: + /// - GenericOAuthButton + public var invalidOAuthProviderError: String { + return localizedString(for: "Invalid OAuth Provider") + } + + // MARK: - Field Labels + + /// Email field label + /// found in: + /// - EmailAuthView + public var emailFieldLabel: String { + return localizedString(for: "Email") + } + + /// Password field label + /// found in: + /// - EmailAuthView + public var passwordFieldLabel: String { + return localizedString(for: "Password") + } + + /// Confirm Password field label + /// found in: + /// - EmailAuthView + public var confirmPasswordFieldLabel: String { + return localizedString(for: "Confirm Password") + } + + /// Phone Number field label + /// found in: + /// - MFAEnrolmentView + public var phoneNumberFieldLabel: String { + return localizedString(for: "Phone Number") + } + + /// Display Name field label + /// found in: + /// - MFAEnrolmentView + public var displayNameFieldLabel: String { + return localizedString(for: "Display Name") + } + + /// Verification Code field label + /// found in: + /// - MFAEnrolmentView + public var verificationCodeFieldLabel: String { + return localizedString(for: "Verification Code") + } + + /// Send a password recovery link to your email field label + /// found in: + /// - PasswordRecoveryView + public var passwordRecoveryEmailFieldLabel: String { + return localizedString(for: "Send a password recovery link to your email") + } + + /// Send a sign-in link to your email field label + /// found in: + /// - EmailLinkView + public var signInLinkEmailFieldLabel: String { + return localizedString(for: "Send a sign-in link to your email") + } + + /// Enter phone number prompt + /// found in: + /// - MFAEnrolmentView + public var enterPhoneNumberPrompt: String { + return localizedString(for: "Enter phone number") + } + + /// Enter display name for this device prompt + /// found in: + /// - MFAEnrolmentView + public var enterDisplayNameForDevicePrompt: String { + return localizedString(for: "Enter display name for this device") + } + + /// Enter display name for this authenticator prompt + /// found in: + /// - MFAEnrolmentView + public var enterDisplayNameForAuthenticatorPrompt: String { + return localizedString(for: "Enter display name for this authenticator") + } + + /// Enter code from app prompt + /// found in: + /// - MFAEnrolmentView + public var enterCodeFromAppPrompt: String { + return localizedString(for: "Enter code from app") + } + + /// Phone field label + /// found in: + /// - EnterPhoneNumberView + public var phoneFieldLabel: String { + return localizedString(for: "Phone") + } + + /// We sent a code to number message + /// found in: + /// - EnterVerificationCodeView + public func sentCodeMessage(phoneNumber: String) -> String { + return String(format: localizedString(for: "We sent a code to %@"), phoneNumber) + } + + /// Change number label + /// found in: + /// - EnterVerificationCodeView + public var changeNumberButtonLabel: String { + return localizedString(for: "Change number") + } } diff --git a/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Version.swift b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Version.swift new file mode 100644 index 00000000000..3b7cd58954f --- /dev/null +++ b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Version.swift @@ -0,0 +1,19 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Auto-generated, do not edit manually. +public enum FirebaseAuthSwiftUIVersion { + // Use the release-swift.sh script to bump this version number, commit and push a new tag. + public static let version = "15.1.0" +} diff --git a/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/AccountConflictModifier.swift b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/AccountConflictModifier.swift new file mode 100644 index 00000000000..5bea74ed293 --- /dev/null +++ b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/AccountConflictModifier.swift @@ -0,0 +1,102 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import FirebaseAuth +import SwiftUI + +/// Environment key for accessing the account conflict handler +public struct AccountConflictHandlerKey: @preconcurrency EnvironmentKey { + @MainActor public static let defaultValue: ((AccountConflictContext) -> Void)? = nil +} + +public extension EnvironmentValues { + var accountConflictHandler: ((AccountConflictContext) -> Void)? { + get { self[AccountConflictHandlerKey.self] } + set { self[AccountConflictHandlerKey.self] = newValue } + } +} + +/// View modifier that handles account conflicts at the view layer +/// Automatically resolves anonymous upgrade conflicts and stores credentials for other conflicts +@MainActor +struct AccountConflictModifier: ViewModifier { + @Environment(AuthService.self) private var authService + @Environment(\.mfaHandler) private var mfaHandler + @Environment(\.reportError) private var reportError + @State private var pendingCredentialForLinking: AuthCredential? + + func body(content: Content) -> some View { + content + .environment(\.accountConflictHandler, handleAccountConflict) + .onChange(of: authService.authenticationState) { _, newState in + // Auto-link pending credential after successful sign-in + if newState == .authenticated { + attemptAutoLinkPendingCredential() + } + } + } + + /// Handle account conflicts - auto-resolve anonymous upgrades, store others for linking + func handleAccountConflict(_ conflict: AccountConflictContext) { + // Only auto-handle anonymous upgrade conflicts + if conflict.conflictType == .anonymousUpgradeConflict { + Task { + do { + // Sign out the anonymous user + try await authService.signOut() + + // Sign in with the new credential + let outcome = try await authService.signIn(credentials: conflict.credential) + + // Handle MFA at view level + if case let .mfaRequired(mfaInfo) = outcome, + let onMFA = mfaHandler { + onMFA(mfaInfo) + } + } catch { + // Report error to parent view for display + reportError?(error) + } + } + } else { + // Other conflicts: store credential for potential linking after sign-in + pendingCredentialForLinking = conflict.credential + // Error modal will show for user to see and handle + } + } + + /// Attempt to link pending credential after successful sign-in + private func attemptAutoLinkPendingCredential() { + guard let credential = pendingCredentialForLinking else { return } + + Task { + do { + try await authService.linkAccounts(credentials: credential) + // Successfully linked, clear the pending credential + pendingCredentialForLinking = nil + } catch { + // Silently swallow linking errors - user is already signed in + pendingCredentialForLinking = nil + } + } + } +} + +extension View { + /// Adds account conflict handling to the view hierarchy + /// Should be applied at the NavigationStack level to handle conflicts throughout the auth flow + func accountConflictHandler() -> some View { + modifier(AccountConflictModifier()) + } +} diff --git a/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/AuthPickerView.swift b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/AuthPickerView.swift index e48b8ddc327..26754e6038e 100644 --- a/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/AuthPickerView.swift +++ b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/AuthPickerView.swift @@ -12,116 +12,157 @@ // See the License for the specific language governing permissions and // limitations under the License. +import FirebaseAuth +import FirebaseAuthUIComponents import FirebaseCore import SwiftUI @MainActor -public struct AuthPickerView { - @Environment(AuthService.self) private var authService - - public init() {} - - private func switchFlow() { - authService.authenticationFlow = authService - .authenticationFlow == .login ? .signUp : .login +public struct AuthPickerView { + public init(@ViewBuilder content: @escaping () -> Content = { EmptyView() }) { + self.content = content } - private var isAuthModalPresented: Binding { - Binding( - get: { authService.isShowingAuthModal }, - set: { authService.isShowingAuthModal = $0 } - ) - } + @Environment(AuthService.self) private var authService + private let content: () -> Content - @ViewBuilder - private var authPickerTitleView: some View { - if authService.authView == .authPicker { - Text(authService.string.authPickerTitle) - .font(.largeTitle) - .fontWeight(.bold) - .padding() - } - } + // View-layer error state + @State private var error: AlertError? } extension AuthPickerView: View { public var body: some View { - ScrollView { - VStack { - authPickerTitleView - if authService.authenticationState == .authenticated { - SignedInView() - } else { - switch authService.authView { - case .passwordRecovery: - PasswordRecoveryView() - case .emailLink: - EmailLinkView() - case .authPicker: - if authService.emailSignInEnabled { - Text(authService.authenticationFlow == .login ? authService.string - .emailLoginFlowLabel : authService.string.emailSignUpFlowLabel) - Divider() - EmailAuthView() + @Bindable var authService = authService + content() + .sheet(isPresented: $authService.isPresented) { + @Bindable var navigator = authService.navigator + @Bindable var passwordPrompt = authService.passwordPrompt + NavigationStack(path: $navigator.routes) { + authPickerViewInternal + .navigationTitle(authService.authenticationState == .unauthenticated ? authService + .string.authPickerTitle : "") + .navigationBarTitleDisplayMode(.large) + .toolbar { + toolbar } - VStack { - authService.renderButtons() - }.padding(.horizontal) - if authService.emailSignInEnabled { - Divider() - HStack { - Text(authService - .authenticationFlow == .login ? authService.string.dontHaveAnAccountYetLabel : - authService.string.alreadyHaveAnAccountLabel) - Button(action: { - withAnimation { - switchFlow() - } - }) { - Text(authService.authenticationFlow == .signUp ? authService.string - .emailLoginFlowLabel : authService.string.emailSignUpFlowLabel) - .fontWeight(.semibold) - .foregroundColor(.blue) - }.accessibilityIdentifier("switch-auth-flow") + .navigationDestination(for: AuthView.self) { view in + switch view { + case AuthView.passwordRecovery: + PasswordRecoveryView() + case AuthView.emailLink: + EmailLinkView() + case AuthView.updatePassword: + UpdatePasswordView() + case AuthView.mfaEnrollment: + MFAEnrolmentView() + case AuthView.mfaManagement: + MFAManagementView() + case let .mfaResolution(mfaRequired): + MFAResolutionView(mfaRequired: mfaRequired) + case AuthView.enterPhoneNumber: + EnterPhoneNumberView() + case let .enterVerificationCode(verificationID, fullPhoneNumber): + EnterVerificationCodeView( + verificationID: verificationID, + fullPhoneNumber: fullPhoneNumber + ) } } - PrivacyTOCsView(displayMode: .footer) - Text(authService.errorMessage).foregroundColor(.red) - default: - // TODO: - possibly refactor this, see: https://github.com/firebase/FirebaseUI-iOS/pull/1259#discussion_r2105473437 - EmptyView() - } } - }.sheet(isPresented: isAuthModalPresented) { - VStack(spacing: 0) { - HStack { - Button(action: { - authService.dismissModal() - }) { - HStack(spacing: 4) { - Image(systemName: "chevron.left") - .font(.system(size: 17, weight: .medium)) - Text(authService.string.backButtonLabel) - .font(.system(size: 17)) - } - .foregroundColor(.blue) - } - Spacer() - } - .padding() - .background(Color(.systemBackground)) + .environment(\.reportError, reportError) + .errorAlert( + error: $error, + okButtonLabel: authService.string.okButtonLabel + ) + .interactiveDismissDisabled(authService.configuration.interactiveDismissEnabled) + // Apply account conflict handling at NavigationStack level + .accountConflictHandler() + // Apply MFA handling at NavigationStack level + .mfaHandler() + // Centralized password prompt sheet inside auth flow + .sheet(isPresented: $passwordPrompt.isPromptingPassword) { + PasswordPromptSheet(coordinator: passwordPrompt) + } + } + } - Divider() + /// Closure for reporting errors from child views + private func reportError(_ error: Error) { + Task { @MainActor in + self.error = AlertError( + message: authService.string.localizedErrorMessage(for: error), + underlyingError: error + ) + } + } - if let view = authService.viewForCurrentModal() { - view - .frame(maxWidth: .infinity, maxHeight: .infinity) - .padding() + @ToolbarContentBuilder + var toolbar: some ToolbarContent { + ToolbarItem(placement: .topBarTrailing) { + if !authService.configuration.shouldHideCancelButton { + Button { + authService.isPresented = false + } label: { + Image(systemName: "xmark") + .foregroundStyle(Color(UIColor.label)) + } + } + } + } + + @ViewBuilder + var authPickerViewInternal: some View { + @Bindable var authService = authService + VStack { + if authService.authenticationState == .authenticated { + SignedInView() + } else { + authMethodPicker + .safeAreaPadding() + } + } + .overlay { + if authService.authenticationState == .authenticating { + VStack(spacing: 24) { + ProgressView() + .scaleEffect(1.25) + .tint(.white) + Text("Authenticating...") + .foregroundStyle(.white) + } + .frame(maxWidth: .infinity, maxHeight: .infinity) + .background(.black.opacity(0.7)) + } + } + } + + @ViewBuilder + var authMethodPicker: some View { + GeometryReader { proxy in + ScrollView { + VStack(spacing: 24) { + Image(authService.configuration.logo ?? Assets.firebaseAuthLogo) + .resizable() + .aspectRatio(contentMode: .fit) + .frame(width: 100, height: 100) + if authService.emailSignInEnabled { + EmailAuthView() } + Divider() + otherSignInOptions(proxy) + PrivacyTOCsView(displayMode: .full) } } } } + + @ViewBuilder + func otherSignInOptions(_ proxy: GeometryProxy) -> some View { + VStack { + authService.renderButtons() + } + .padding(.horizontal, proxy.size.width * 0.14) + } } #Preview { diff --git a/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/EmailAuthView.swift b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/EmailAuthView.swift index 739bbebe11a..b0c88a2ab30 100644 --- a/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/EmailAuthView.swift +++ b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/EmailAuthView.swift @@ -19,6 +19,7 @@ // Created by Russell Wheatley on 20/03/2025. // import FirebaseAuth +import FirebaseAuthUIComponents import FirebaseCore import SwiftUI @@ -31,6 +32,9 @@ private enum FocusableField: Hashable { @MainActor public struct EmailAuthView { @Environment(AuthService.self) private var authService + @Environment(\.accountConflictHandler) private var accountConflictHandler + @Environment(\.mfaHandler) private var mfaHandler + @Environment(\.reportError) private var reportError @State private var email = "" @State private var password = "" @@ -41,101 +45,154 @@ public struct EmailAuthView { public init() {} private var isValid: Bool { - return if authService.authenticationFlow == .login { - !email.isEmpty && !password.isEmpty + return if authService.authenticationFlow == .signIn { + FormValidators.email.isValid(input: email) && !password.isEmpty } else { - !email.isEmpty && !password.isEmpty && password == confirmPassword + FormValidators.email.isValid(input: email) && + FormValidators.atLeast6Characters.isValid(input: password) && + FormValidators.confirmPassword(password: password).isValid(input: confirmPassword) } } - private func signInWithEmailPassword() async { + private func signInWithEmailPassword() async throws { do { - try await authService.signIn(withEmail: email, password: password) - } catch {} + let outcome = try await authService.signIn(email: email, password: password) + + // Handle MFA at view level + if case let .mfaRequired(mfaInfo) = outcome, + let onMFA = mfaHandler { + onMFA(mfaInfo) + return + } + } catch { + reportError?(error) + + if case let AuthServiceError.accountConflict(ctx) = error, + let onConflict = accountConflictHandler { + onConflict(ctx) + return + } + + throw error + } } - private func createUserWithEmailPassword() async { + private func createUserWithEmailPassword() async throws { do { - try await authService.createUser(withEmail: email, password: password) - } catch {} + let outcome = try await authService.createUser(email: email, password: password) + + // Handle MFA at view level + if case let .mfaRequired(mfaInfo) = outcome, + let onMFA = mfaHandler { + onMFA(mfaInfo) + return + } + } catch { + reportError?(error) + + if case let AuthServiceError.accountConflict(ctx) = error, + let onConflict = accountConflictHandler { + onConflict(ctx) + return + } + + throw error + } } } extension EmailAuthView: View { public var body: some View { - VStack { - LabeledContent { - TextField(authService.string.emailInputLabel, text: $email) - .textInputAutocapitalization(.never) - .disableAutocorrection(true) - .focused($focus, equals: .email) - .submitLabel(.next) - .onSubmit { - self.focus = .password - } - } label: { - Image(systemName: "at") - } - .padding(.vertical, 6) - .background(Divider(), alignment: .bottom) - .padding(.bottom, 4) + VStack(spacing: 16) { + AuthTextField( + text: $email, + label: authService.string.emailFieldLabel, + prompt: authService.string.emailInputLabel, + keyboardType: .emailAddress, + contentType: .emailAddress, + validations: [ + FormValidators.email, + ], + maintainsValidationMessage: authService.authenticationFlow == .signUp, + onSubmit: { _ in + self.focus = .password + }, + leading: { + Image(systemName: "at") + } + ) + .focused($focus, equals: .email) .accessibilityIdentifier("email-field") - - LabeledContent { - SecureField(authService.string.passwordInputLabel, text: $password) - .focused($focus, equals: .password) - .textInputAutocapitalization(.never) - .disableAutocorrection(true) - .submitLabel(.go) - .onSubmit { - Task { await signInWithEmailPassword() } - } - } label: { - Image(systemName: "lock") - } - .padding(.vertical, 6) - .background(Divider(), alignment: .bottom) - .padding(.bottom, 8) + AuthTextField( + text: $password, + label: authService.string.passwordFieldLabel, + prompt: authService.string.passwordInputLabel, + contentType: .password, + isSecureTextField: true, + validations: authService.authenticationFlow == .signUp ? [ + FormValidators.atLeast6Characters + ] : [], + maintainsValidationMessage: authService.authenticationFlow == .signUp, + onSubmit: { _ in + Task { try await signInWithEmailPassword() } + }, + leading: { + Image(systemName: "lock") + } + ) + .submitLabel(.go) + .focused($focus, equals: .password) .accessibilityIdentifier("password-field") - - if authService.authenticationFlow == .login { - Button(action: { - authService.authView = .passwordRecovery - }) { + if authService.authenticationFlow == .signIn { + Button { + authService.navigator.push(.passwordRecovery) + } label: { Text(authService.string.passwordButtonLabel) - }.accessibilityIdentifier("password-recovery-button") + .frame(maxWidth: .infinity, alignment: .trailing) + } + .accessibilityIdentifier("password-recovery-button") } if authService.authenticationFlow == .signUp { - LabeledContent { - SecureField(authService.string.confirmPasswordInputLabel, text: $confirmPassword) - .focused($focus, equals: .confirmPassword) - .textInputAutocapitalization(.never) - .disableAutocorrection(true) - .submitLabel(.go) - .onSubmit { - Task { await createUserWithEmailPassword() } - } - } label: { - Image(systemName: "lock") - } - .padding(.vertical, 6) - .background(Divider(), alignment: .bottom) - .padding(.bottom, 8) + AuthTextField( + text: $confirmPassword, + label: authService.string.confirmPasswordFieldLabel, + prompt: authService.string.confirmPasswordInputLabel, + contentType: .password, + isSecureTextField: true, + validations: [ + FormValidators.confirmPassword(password: password), + ], + maintainsValidationMessage: true, + onSubmit: { _ in + Task { try await createUserWithEmailPassword() } + }, + leading: { + Image(systemName: "lock") + } + ) + .submitLabel(.go) + .focused($focus, equals: .confirmPassword) .accessibilityIdentifier("confirm-password-field") } Button(action: { Task { - if authService.authenticationFlow == .login { await signInWithEmailPassword() } - else { await createUserWithEmailPassword() } + if authService.authenticationFlow == .signIn { + try await signInWithEmailPassword() + } else { + try await createUserWithEmailPassword() + } } }) { if authService.authenticationState != .authenticating { - Text(authService.authenticationFlow == .login ? authService.string - .signInWithEmailButtonLabel : authService.string.signUpWithEmailButtonLabel) - .padding(.vertical, 8) - .frame(maxWidth: .infinity) + Text( + authService.authenticationFlow == .signIn + ? authService.string.signInWithEmailButtonLabel + : authService.string.signUpWithEmailButtonLabel + ) + .padding(.vertical, 8) + .frame(maxWidth: .infinity) } else { ProgressView() .progressViewStyle(CircularProgressViewStyle(tint: .white)) @@ -144,16 +201,36 @@ extension EmailAuthView: View { } } .disabled(!isValid) - .padding([.top, .bottom, .horizontal], 8) + .padding([.top, .bottom], 8) .frame(maxWidth: .infinity) .buttonStyle(.borderedProminent) .accessibilityIdentifier("sign-in-button") - Button(action: { - authService.authView = .emailLink - }) { - Text(authService.string.signUpWithEmailLinkButtonLabel) - }.accessibilityIdentifier("sign-in-with-email-link-button") } + Button(action: { + withAnimation { + authService.authenticationFlow = + authService + .authenticationFlow == .signIn ? .signUp : .signIn + } + }) { + HStack(spacing: 4) { + Text( + authService + .authenticationFlow == .signIn + ? authService.string.dontHaveAnAccountYetLabel + : authService.string.alreadyHaveAnAccountLabel + ) + .foregroundStyle(Color(.label)) + Text( + authService.authenticationFlow == .signUp + ? authService.string.emailLoginFlowLabel + : authService.string.emailSignUpFlowLabel + ) + .fontWeight(.semibold) + .foregroundColor(.blue) + } + } + .accessibilityIdentifier("switch-auth-flow") } } diff --git a/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/EmailLinkView.swift b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/EmailLinkView.swift index 5e242f8d623..2eca4ec7c57 100644 --- a/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/EmailLinkView.swift +++ b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/EmailLinkView.swift @@ -13,79 +13,94 @@ // limitations under the License. import FirebaseAuth +import FirebaseAuthUIComponents import FirebaseCore import SwiftUI public struct EmailLinkView { @Environment(AuthService.self) private var authService + @Environment(\.accountConflictHandler) private var accountConflictHandler + @Environment(\.reportError) private var reportError @State private var email = "" - @State private var showModal = false + @State private var showAlert = false public init() {} - private func sendEmailLink() async { + private func sendEmailLink() async throws { do { - try await authService.sendEmailSignInLink(to: email) - showModal = true - } catch {} + try await authService.sendEmailSignInLink(email: email) + showAlert = true + } catch { + if let errorHandler = reportError { + errorHandler(error) + } else { + throw error + } + } } } extension EmailLinkView: View { public var body: some View { - VStack { - Text(authService.string.signInWithEmailLinkViewTitle) - .accessibilityIdentifier("email-link-title-text") - LabeledContent { - TextField(authService.string.emailInputLabel, text: $email) - .textInputAutocapitalization(.never) - .disableAutocorrection(true) - .submitLabel(.next) - } label: { - Image(systemName: "at") - }.padding(.vertical, 6) - .background(Divider(), alignment: .bottom) - .padding(.bottom, 4) - Button(action: { + VStack(spacing: 24) { + AuthTextField( + text: $email, + label: authService.string.signInLinkEmailFieldLabel, + prompt: authService.string.emailInputLabel, + keyboardType: .emailAddress, + contentType: .emailAddress, + validations: [ + FormValidators.email, + ], + leading: { + Image(systemName: "at") + } + ) + Button { Task { - await sendEmailLink() + try await sendEmailLink() authService.emailLink = email } - }) { + } label: { Text(authService.string.sendEmailLinkButtonLabel) .padding(.vertical, 8) .frame(maxWidth: .infinity) } + .buttonStyle(.borderedProminent) .disabled(!CommonUtils.isValidEmail(email)) .padding([.top, .bottom], 8) .frame(maxWidth: .infinity) - .buttonStyle(.borderedProminent) - Text(authService.errorMessage).foregroundColor(.red) - }.sheet(isPresented: $showModal) { - VStack { - Text(authService.string.signInWithEmailLinkViewMessage) - .padding() - Button(authService.string.okButtonLabel) { - showModal = false - } - .padding() + } + .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .top) + .navigationTitle(authService.string.signInWithEmailLinkViewTitle) + .safeAreaPadding() + .alert( + authService.string.signInWithEmailLinkViewTitle, + isPresented: $showAlert + ) { + Button(authService.string.okButtonLabel) { + showAlert = false } - .padding() - }.onOpenURL { url in + } message: { + Text(authService.string.signInWithEmailLinkViewMessage) + } + .onOpenURL { url in Task { do { try await authService.handleSignInLink(url: url) - } catch {} + } catch { + reportError?(error) + + if case let AuthServiceError.accountConflict(ctx) = error, + let onConflict = accountConflictHandler { + onConflict(ctx) + return + } + + throw error + } } } - .navigationBarItems(leading: Button(action: { - authService.authView = .authPicker - }) { - Image(systemName: "chevron.left") - .foregroundColor(.blue) - Text(authService.string.backButtonLabel) - .foregroundColor(.blue) - }.accessibilityIdentifier("email-link-back-button")) } } diff --git a/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/EnterPhoneNumberView.swift b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/EnterPhoneNumberView.swift new file mode 100644 index 00000000000..95152335ca3 --- /dev/null +++ b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/EnterPhoneNumberView.swift @@ -0,0 +1,96 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import FirebaseAuth +import FirebaseAuthUIComponents +import FirebaseCore +import SwiftUI + +struct EnterPhoneNumberView: View { + @Environment(AuthService.self) private var authService + @Environment(\.reportError) private var reportError + @State private var phoneNumber: String = "" + @State private var selectedCountry: CountryData = .default + + var body: some View { + VStack(spacing: 16) { + Text(authService.string.enterPhoneNumberPlaceholder) + .font(.subheadline) + .foregroundStyle(.secondary) + .multilineTextAlignment(.center) + .frame(maxWidth: .infinity, alignment: .leading) + .padding(.top) + + AuthTextField( + text: $phoneNumber, + label: authService.string.phoneFieldLabel, + prompt: authService.string.enterPhoneNumberPlaceholder, + keyboardType: .phonePad, + contentType: .telephoneNumber, + validations: [ + FormValidators.phoneNumber, + ], + onChange: { _ in } + ) { + CountrySelector( + selectedCountry: $selectedCountry, + enabled: !(authService.authenticationState == .authenticating) + ) + } + + Button(action: { + Task { + do { + let fullPhoneNumber = selectedCountry.dialCode + phoneNumber + let id = try await authService.verifyPhoneNumber(phoneNumber: fullPhoneNumber) + authService.navigator.push(.enterVerificationCode( + verificationID: id, + fullPhoneNumber: fullPhoneNumber + )) + } catch { + if let errorHandler = reportError { + errorHandler(error) + } else { + throw error + } + } + } + }) { + if authService.authenticationState == .authenticating { + ProgressView() + .frame(height: 32) + .frame(maxWidth: .infinity) + } else { + Text(authService.string.sendCodeButtonLabel) + .frame(height: 32) + .frame(maxWidth: .infinity) + } + } + .buttonStyle(.borderedProminent) + .disabled(authService.authenticationState == .authenticating || phoneNumber.isEmpty) + .padding(.top, 8) + + Spacer() + } + .navigationTitle(authService.string.phoneSignInTitle) + .padding(.horizontal) + } +} + +#Preview { + FirebaseOptions.dummyConfigurationForPreview() + + return EnterPhoneNumberView() + .environment(AuthService()) +} diff --git a/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/EnterVerificationCodeView.swift b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/EnterVerificationCodeView.swift new file mode 100644 index 00000000000..74713990ee2 --- /dev/null +++ b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/EnterVerificationCodeView.swift @@ -0,0 +1,113 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import FirebaseAuth +import FirebaseAuthUIComponents +import FirebaseCore +import SwiftUI + +@MainActor +struct EnterVerificationCodeView: View { + @Environment(AuthService.self) private var authService + @Environment(\.accountConflictHandler) private var accountConflictHandler + @Environment(\.reportError) private var reportError + @State private var verificationCode: String = "" + + let verificationID: String + let fullPhoneNumber: String + + var body: some View { + @Bindable var authService = authService + VStack(spacing: 32) { + VStack(spacing: 16) { + VStack(spacing: 8) { + Text(authService.string.sentCodeMessage(phoneNumber: fullPhoneNumber)) + .font(.subheadline) + .foregroundStyle(.secondary) + .multilineTextAlignment(.center) + .frame(maxWidth: .infinity, alignment: .leading) + + Button { + authService.navigator.pop() + } label: { + Text(authService.string.changeNumberButtonLabel) + .font(.caption) + .frame(maxWidth: .infinity, alignment: .leading) + } + } + .padding(.bottom) + .frame(maxWidth: .infinity, alignment: .leading) + + VerificationCodeInputField( + code: $verificationCode, + validations: [ + FormValidators.verificationCode, + ], + maintainsValidationMessage: true + ) + + Button(action: { + Task { + do { + try await authService.signInWithPhoneNumber( + verificationID: verificationID, + verificationCode: verificationCode + ) + authService.navigator.clear() + } catch { + reportError?(error) + + if case let AuthServiceError.accountConflict(ctx) = error, + let onConflict = accountConflictHandler { + onConflict(ctx) + return + } + + throw error + } + } + }) { + if authService.authenticationState == .authenticating { + ProgressView() + .frame(height: 32) + .frame(maxWidth: .infinity) + } else { + Text(authService.string.verifyAndSignInButtonLabel) + .frame(height: 32) + .frame(maxWidth: .infinity) + } + } + .buttonStyle(.borderedProminent) + .disabled(authService.authenticationState == .authenticating || verificationCode.count != 6) + } + + Spacer() + } + .navigationTitle(authService.string.enterVerificationCodeTitle) + .navigationBarTitleDisplayMode(.large) + .padding(.horizontal) + } +} + +#Preview { + FirebaseOptions.dummyConfigurationForPreview() + + return NavigationStack { + EnterVerificationCodeView( + verificationID: "mock-id", + fullPhoneNumber: "+1 5551234567" + ) + .environment(AuthService()) + } +} diff --git a/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/ErrorAlertView.swift b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/ErrorAlertView.swift new file mode 100644 index 00000000000..ec9a1f0e15d --- /dev/null +++ b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/ErrorAlertView.swift @@ -0,0 +1,100 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import FirebaseAuth +import SwiftUI + +/// A reusable view modifier that displays error messages in an alert modal +struct ErrorAlertModifier: ViewModifier { + @Binding var error: AlertError? + let okButtonLabel: String + + private func shouldShowAlert(for error: AlertError?) -> Bool { + // View layer decides which errors should show an alert + guard let error = error else { return false } + + // Don't show alert for CancellationError + if error.underlyingError is CancellationError { + return false + } + + // Don't show alert for anonymous upgrade conflicts (they're auto-handled) + if let authError = error.underlyingError as? AuthServiceError, + case let .accountConflict(context) = authError, + context.conflictType == .anonymousUpgradeConflict { + return false + } + + return true + } + + func body(content: Content) -> some View { + let shouldShow = shouldShowAlert(for: error) + + return content + .alert(isPresented: Binding( + get: { shouldShow }, + set: { if !$0 { error = nil } } + )) { + Alert( + title: Text(error?.title ?? "Error"), + message: Text(error?.message ?? ""), + dismissButton: .default(Text(okButtonLabel)) { + error = nil + } + ) + } + } +} + +/// Extension to make it easy to apply the error alert modifier +public extension View { + func errorAlert(error: Binding, okButtonLabel: String = "OK") -> some View { + modifier(ErrorAlertModifier(error: error, okButtonLabel: okButtonLabel)) + } +} + +/// A struct to represent an error that should be displayed in an alert +public struct AlertError: Identifiable, Equatable { + public let id = UUID() + public let title: String + public let message: String + public let underlyingError: Error? + + public init(title: String = "Error", message: String, underlyingError: Error? = nil) { + self.title = title + self.message = message + self.underlyingError = underlyingError + } + + public static func == (lhs: AlertError, rhs: AlertError) -> Bool { + // Compare by id since each AlertError instance is unique + lhs.id == rhs.id + } +} + +// MARK: - Error Reporting Environment + +/// Environment key for error reporting closure +private struct ReportErrorKey: @preconcurrency EnvironmentKey { + @MainActor static let defaultValue: ((Error) -> Void)? = nil +} + +public extension EnvironmentValues { + /// Optional closure to report errors to the parent view for display + var reportError: ((Error) -> Void)? { + get { self[ReportErrorKey.self] } + set { self[ReportErrorKey.self] = newValue } + } +} diff --git a/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/MFAEnrolmentView.swift b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/MFAEnrolmentView.swift new file mode 100644 index 00000000000..6f11974503f --- /dev/null +++ b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/MFAEnrolmentView.swift @@ -0,0 +1,695 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import FirebaseAuth +import FirebaseAuthUIComponents +import FirebaseCore +import SwiftUI + +private enum FocusableField: Hashable { + case phoneNumber + case verificationCode + case totpCode +} + +@MainActor +public struct MFAEnrolmentView { + @Environment(AuthService.self) private var authService + @Environment(\.reportError) private var reportError + + @State private var selectedFactorType: SecondFactorType = .sms + @State private var phoneNumber = "" + @State private var selectedCountry: CountryData = .default + @State private var verificationCode = "" + @State private var totpCode = "" + @State private var currentSession: EnrollmentSession? + @State private var isLoading = false + @State private var displayName = "" + @State private var showCopiedFeedback = false + + @FocusState private var focus: FocusableField? + + public init() {} + + private var allowedFactorTypes: [SecondFactorType] { + return Array(authService.configuration.allowedSecondFactors).sorted { lhs, rhs in + // Sort SMS first, then TOTP + switch (lhs, rhs) { + case (.sms, .totp): return true + case (.totp, .sms): return false + default: return false + } + } + } + + private var canStartEnrollment: Bool { + !isLoading && currentSession == nil && authService.configuration.mfaEnabled + } + + private var canSendSMSVerification: Bool { + currentSession?.type == .sms && + currentSession?.status == .initiated && + !phoneNumber.isEmpty && + !displayName.isEmpty && + !isLoading + } + + private var canCompleteEnrollment: Bool { + guard let session = currentSession, !isLoading else { return false } + + switch session.type { + case .sms: + return session.status == .verificationSent && !verificationCode.isEmpty && !displayName + .isEmpty + case .totp: + return session.status == .initiated && !totpCode.isEmpty && !displayName.isEmpty + } + } + + private func startEnrollment() { + Task { + isLoading = true + defer { isLoading = false } + + do { + let session = try await authService.startMfaEnrollment( + type: selectedFactorType, + accountName: authService.currentUser?.email, + issuer: authService.configuration.mfaIssuer + ) + currentSession = session + } catch { + reportError?(error) + } + } + } + + private func sendSMSVerification() { + guard let session = currentSession else { return } + + Task { + isLoading = true + defer { isLoading = false } + + do { + let fullPhoneNumber = selectedCountry.dialCode + phoneNumber + let verificationId = try await authService.sendSmsVerificationForEnrollment( + session: session, + phoneNumber: fullPhoneNumber + ) + // Update session status + currentSession = EnrollmentSession( + id: session.id, + type: session.type, + session: session.session, + totpInfo: session.totpInfo, + phoneNumber: fullPhoneNumber, + verificationId: verificationId, + status: .verificationSent, + createdAt: session.createdAt, + expiresAt: session.expiresAt + ) + } catch { + reportError?(error) + } + } + } + + private func completeEnrollment() { + guard let session = currentSession else { return } + + Task { + isLoading = true + defer { isLoading = false } + + do { + let code = session.type == .sms ? verificationCode : totpCode + try await authService.completeEnrollment( + session: session, + verificationId: session.verificationId, + verificationCode: code, + displayName: displayName + ) + + // Reset form state on success + resetForm() + + authService.navigator.clear() + } catch { + reportError?(error) + } + } + } + + private func resetForm() { + currentSession = nil + phoneNumber = "" + selectedCountry = .default + verificationCode = "" + totpCode = "" + displayName = "" + focus = nil + } + + private func copyToClipboard(_ text: String) { + UIPasteboard.general.string = text + + // Show feedback + showCopiedFeedback = true + + // Quickly show it has been copied to the clipboard + Task { + try? await Task.sleep(nanoseconds: 500_000_000) + showCopiedFeedback = false + } + } + + private func generateQRCode(from string: String) -> UIImage? { + let data = Data(string.utf8) + + guard let filter = CIFilter(name: "CIQRCodeGenerator") else { return nil } + filter.setValue(data, forKey: "inputMessage") + filter.setValue("H", forKey: "inputCorrectionLevel") + + guard let ciImage = filter.outputImage else { return nil } + + // Scale up the QR code for better quality + let transform = CGAffineTransform(scaleX: 10, y: 10) + let scaledImage = ciImage.transformed(by: transform) + + let context = CIContext() + guard let cgImage = context.createCGImage(scaledImage, from: scaledImage.extent) else { + return nil + } + + return UIImage(cgImage: cgImage) + } +} + +extension MFAEnrolmentView: View { + public var body: some View { + VStack(spacing: 24) { + // Header (only shown when no session is active) + if currentSession == nil { + VStack(spacing: 8) { + Text("Set Up Two-Factor Authentication") + .font(.largeTitle) + .fontWeight(.bold) + .multilineTextAlignment(.center) + + Text("Add an extra layer of security to your account") + .font(.subheadline) + .foregroundColor(.secondary) + .multilineTextAlignment(.center) + } + } + + // Factor Type Selection (only if no session started) + if currentSession == nil { + if !authService.configuration.mfaEnabled { + VStack(spacing: 12) { + Image(systemName: "lock.slash") + .font(.system(size: 40)) + .foregroundColor(.orange) + + Text("Multi-Factor Authentication Disabled") + .font(.title2) + .fontWeight(.semibold) + + Text( + "MFA is not enabled in the current configuration. Please contact your administrator." + ) + .font(.body) + .foregroundColor(.secondary) + .multilineTextAlignment(.center) + } + .accessibilityIdentifier("mfa-disabled-message") + } else if allowedFactorTypes.isEmpty { + VStack(spacing: 12) { + Image(systemName: "exclamationmark.triangle") + .font(.system(size: 40)) + .foregroundColor(.orange) + + Text("No Authentication Methods Available") + .font(.title2) + .fontWeight(.semibold) + + Text("No MFA methods are configured as allowed. Please contact your administrator.") + .font(.body) + .foregroundColor(.secondary) + .multilineTextAlignment(.center) + } + .accessibilityIdentifier("no-factors-message") + } else { + VStack(alignment: .leading, spacing: 12) { + Text("Choose Authentication Method") + .font(.headline) + + Picker("Authentication Method", selection: $selectedFactorType) { + ForEach(allowedFactorTypes, id: \.self) { factorType in + switch factorType { + case .sms: + Image(systemName: "message").tag(SecondFactorType.sms) + case .totp: + Image(systemName: "qrcode").tag(SecondFactorType.totp) + } + } + } + .pickerStyle(.segmented) + .accessibilityIdentifier("factor-type-picker") + } + } + } + + // Content based on current state + if let session = currentSession { + enrollmentContent(for: session) + } else { + initialContent + } + } + .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .top) + .safeAreaPadding() + .navigationTitle("Two-Factor Authentication") + .onAppear { + // Initialize selected factor type to first allowed type + if !allowedFactorTypes.contains(selectedFactorType), + let firstAllowed = allowedFactorTypes.first { + selectedFactorType = firstAllowed + } + } + } + + @ViewBuilder + private var initialContent: some View { + VStack(spacing: 24) { + // Description based on selected type + if selectedFactorType == .sms { + VStack(spacing: 8) { + Image(systemName: "message.circle") + .font(.system(size: 40)) + .foregroundColor(.blue) + + Text("SMS Authentication") + .font(.title2) + .fontWeight(.semibold) + + Text("We'll send a verification code to your phone number each time you sign in.") + .font(.body) + .foregroundColor(.secondary) + .multilineTextAlignment(.center) + } + } else { + VStack(spacing: 8) { + Image(systemName: "qrcode") + .font(.system(size: 40)) + .foregroundColor(.green) + + Text("Authenticator App") + .font(.title2) + .fontWeight(.semibold) + + Text( + "Use an authenticator app like Google Authenticator or Authy to generate verification codes." + ) + .font(.body) + .foregroundColor(.secondary) + .multilineTextAlignment(.center) + } + } + + Button { + startEnrollment() + } label: { + HStack { + if isLoading { + ProgressView() + .scaleEffect(0.8) + } + Text("Get Started") + } + .padding(.vertical, 8) + .frame(maxWidth: .infinity) + } + .buttonStyle(.borderedProminent) + .disabled(!canStartEnrollment) + .padding([.top, .bottom], 8) + .frame(maxWidth: .infinity) + .accessibilityIdentifier("start-enrollment-button") + } + } + + @ViewBuilder + private func enrollmentContent(for session: EnrollmentSession) -> some View { + switch session.type { + case .sms: + smsEnrollmentContent(session: session) + case .totp: + totpEnrollmentContent(session: session) + } + } + + @ViewBuilder + private func smsEnrollmentContent(session: EnrollmentSession) -> some View { + VStack(spacing: 24) { + // SMS enrollment steps + if session.status == .initiated { + VStack(spacing: 24) { + VStack(spacing: 8) { + Image(systemName: "phone") + .font(.system(size: 48)) + .foregroundColor(.blue) + + Text("Enter Your Phone Number") + .font(.title2) + .fontWeight(.semibold) + + Text("We'll send a verification code to this number") + .font(.body) + .foregroundColor(.secondary) + .multilineTextAlignment(.center) + } + + AuthTextField( + text: $phoneNumber, + label: authService.string.phoneNumberFieldLabel, + prompt: authService.string.enterPhoneNumberPrompt, + keyboardType: .phonePad, + contentType: .telephoneNumber, + validations: [ + FormValidators.phoneNumber, + ], + maintainsValidationMessage: true, + onChange: { _ in } + ) { + CountrySelector( + selectedCountry: $selectedCountry, + enabled: !isLoading + ) + } + .focused($focus, equals: .phoneNumber) + .accessibilityIdentifier("phone-number-field") + + AuthTextField( + text: $displayName, + label: authService.string.displayNameFieldLabel, + prompt: authService.string.enterDisplayNameForDevicePrompt, + validations: [ + FormValidators.notEmpty(label: "Display name"), + ], + maintainsValidationMessage: true, + leading: { + Image(systemName: "person") + } + ) + .accessibilityIdentifier("display-name-field") + + Button { + sendSMSVerification() + } label: { + HStack { + if isLoading { + ProgressView() + .scaleEffect(0.8) + } + Text("Send Code") + } + .padding(.vertical, 8) + .frame(maxWidth: .infinity) + } + .buttonStyle(.borderedProminent) + .disabled(!canSendSMSVerification) + .padding([.top, .bottom], 8) + .frame(maxWidth: .infinity) + .accessibilityIdentifier("send-sms-button") + } + } else if session.status == .verificationSent { + VStack(spacing: 24) { + VStack(spacing: 8) { + Image(systemName: "checkmark.message") + .font(.system(size: 48)) + .foregroundColor(.green) + + Text("Enter Verification Code") + .font(.title2) + .fontWeight(.semibold) + + Text("We sent a code to \(session.phoneNumber ?? "your phone")") + .font(.body) + .foregroundColor(.secondary) + .multilineTextAlignment(.center) + } + + VerificationCodeInputField( + code: $verificationCode, + validations: [ + FormValidators.verificationCode, + ], + maintainsValidationMessage: true + ) + .accessibilityIdentifier("verification-code-field") + + Button { + completeEnrollment() + } label: { + HStack { + if isLoading { + ProgressView() + .scaleEffect(0.8) + } + Text("Complete Setup") + } + .padding(.vertical, 8) + .frame(maxWidth: .infinity) + } + .buttonStyle(.borderedProminent) + .disabled(!canCompleteEnrollment) + .padding([.top, .bottom], 8) + .frame(maxWidth: .infinity) + .accessibilityIdentifier("complete-enrollment-button") + + Button { + sendSMSVerification() + } label: { + Text("Resend Code") + .padding(.vertical, 8) + .frame(maxWidth: .infinity) + } + .buttonStyle(.bordered) + .padding([.top, .bottom], 8) + .frame(maxWidth: .infinity) + .accessibilityIdentifier("resend-code-button") + } + } + } + } + + @ViewBuilder + private func totpEnrollmentContent(session: EnrollmentSession) -> some View { + VStack(spacing: 16) { + if let totpInfo = session.totpInfo { + VStack(spacing: 16) { + VStack(spacing: 6) { + Image(systemName: "qrcode") + .font(.system(size: 40)) + .foregroundColor(.green) + + Text("Scan QR Code") + .font(.title2) + .fontWeight(.semibold) + + Text("Scan with your authenticator app or tap to open directly") + .font(.body) + .foregroundColor(.secondary) + .multilineTextAlignment(.center) + .lineLimit(nil) + .padding(.horizontal) + } + + // QR Code generated from the otpauth:// URI + if let qrURL = totpInfo.qrCodeURL, + let qrImage = generateQRCode(from: qrURL.absoluteString) { + Button(action: { + UIApplication.shared.open(qrURL) + }) { + VStack(spacing: 8) { + Image(uiImage: qrImage) + .interpolation(.none) + .resizable() + .aspectRatio(contentMode: .fit) + .frame(width: 180, height: 180) + .accessibilityIdentifier("qr-code-image") + + HStack(spacing: 6) { + Image(systemName: "arrow.up.forward.app.fill") + .font(.caption) + Text("Tap to open in authenticator app") + .font(.caption) + .fontWeight(.medium) + } + .foregroundColor(.blue) + } + } + .buttonStyle(.plain) + .accessibilityIdentifier("open-authenticator-button") + } else { + RoundedRectangle(cornerRadius: 8) + .fill(Color.gray.opacity(0.3)) + .frame(width: 180, height: 180) + .overlay( + VStack { + Image(systemName: "exclamationmark.triangle") + .font(.title) + .foregroundColor(.orange) + Text("Unable to generate QR Code") + .font(.caption) + } + ) + } + + VStack(spacing: 6) { + Text("Manual Entry Key:") + .font(.headline) + + Button(action: { + copyToClipboard(totpInfo.sharedSecretKey) + }) { + HStack { + Text(totpInfo.sharedSecretKey) + .font(.system(.body, design: .monospaced)) + .lineLimit(1) + .minimumScaleFactor(0.5) + + Spacer() + + Image(systemName: showCopiedFeedback ? "checkmark" : "doc.on.doc") + .foregroundColor(showCopiedFeedback ? .green : .blue) + } + .padding() + .background(Color.gray.opacity(0.1)) + .cornerRadius(8) + } + .buttonStyle(.plain) + .accessibilityIdentifier("totp-secret-key") + + if showCopiedFeedback { + Text("Copied to clipboard!") + .font(.caption) + .foregroundColor(.green) + .transition(.opacity) + } + } + .animation(.easeInOut(duration: 0.2), value: showCopiedFeedback) + + AuthTextField( + text: $displayName, + label: authService.string.displayNameFieldLabel, + prompt: authService.string.enterDisplayNameForAuthenticatorPrompt, + validations: [ + FormValidators.notEmpty(label: "Display name"), + ], + maintainsValidationMessage: true, + leading: { + Image(systemName: "person") + } + ) + .accessibilityIdentifier("display-name-field") + + VerificationCodeInputField( + code: $totpCode, + validations: [ + FormValidators.verificationCode, + ], + maintainsValidationMessage: true + ) + .accessibilityIdentifier("totp-code-field") + + Button { + completeEnrollment() + } label: { + HStack { + if isLoading { + ProgressView() + .scaleEffect(0.8) + } + Text("Complete Setup") + } + .padding(.vertical, 8) + .frame(maxWidth: .infinity) + } + .buttonStyle(.borderedProminent) + .disabled(!canCompleteEnrollment) + .padding([.top, .bottom], 8) + .frame(maxWidth: .infinity) + .accessibilityIdentifier("complete-enrollment-button") + } + } + } + } +} + +#Preview("MFA Enabled - Both Methods") { + FirebaseOptions.dummyConfigurationForPreview() + let config = AuthConfiguration( + mfaEnabled: true, + allowedSecondFactors: [.sms, .totp] + ) + let authService = AuthService(configuration: config) + return MFAEnrolmentView() + .environment(authService) +} + +#Preview("MFA Disabled") { + FirebaseOptions.dummyConfigurationForPreview() + let config = AuthConfiguration( + mfaEnabled: false, + allowedSecondFactors: [] + ) + let authService = AuthService(configuration: config) + return MFAEnrolmentView() + .environment(authService) +} + +#Preview("No Allowed Factors") { + FirebaseOptions.dummyConfigurationForPreview() + let config = AuthConfiguration( + mfaEnabled: true, + allowedSecondFactors: [] + ) + let authService = AuthService(configuration: config) + return MFAEnrolmentView() + .environment(authService) +} + +#Preview("SMS Only") { + FirebaseOptions.dummyConfigurationForPreview() + let config = AuthConfiguration( + mfaEnabled: true, + allowedSecondFactors: [.sms] + ) + let authService = AuthService(configuration: config) + return MFAEnrolmentView() + .environment(authService) +} + +#Preview("TOTP Only") { + FirebaseOptions.dummyConfigurationForPreview() + let config = AuthConfiguration( + mfaEnabled: true, + allowedSecondFactors: [.totp] + ) + let authService = AuthService(configuration: config) + return MFAEnrolmentView() + .environment(authService) +} diff --git a/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/MFAHandlerModifier.swift b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/MFAHandlerModifier.swift new file mode 100644 index 00000000000..d593ee7d44b --- /dev/null +++ b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/MFAHandlerModifier.swift @@ -0,0 +1,54 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import FirebaseAuth +import SwiftUI + +/// Environment key for accessing the MFA handler +public struct MFAHandlerKey: @preconcurrency EnvironmentKey { + @MainActor public static let defaultValue: ((MFARequired) -> Void)? = nil +} + +public extension EnvironmentValues { + var mfaHandler: ((MFARequired) -> Void)? { + get { self[MFAHandlerKey.self] } + set { self[MFAHandlerKey.self] = newValue } + } +} + +/// View modifier that handles MFA requirements at the view layer +/// Automatically navigates to MFA resolution when MFA is required +@MainActor +struct MFAHandlerModifier: ViewModifier { + @Environment(AuthService.self) private var authService + + func body(content: Content) -> some View { + content + .environment(\.mfaHandler, handleMFARequired) + } + + /// Handle MFA required - navigate to MFA resolution view + func handleMFARequired(_ mfaRequired: MFARequired) { + authService.navigator.push(.mfaResolution(mfaRequired)) + } +} + +extension View { + /// Adds MFA handling to the view hierarchy + /// Should be applied at the NavigationStack level to handle MFA requirements throughout the auth + /// flow + func mfaHandler() -> some View { + modifier(MFAHandlerModifier()) + } +} diff --git a/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/MFAManagementView.swift b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/MFAManagementView.swift new file mode 100644 index 00000000000..a79be1d2f32 --- /dev/null +++ b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/MFAManagementView.swift @@ -0,0 +1,208 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import FirebaseAuth +import FirebaseCore +import SwiftUI + +extension MultiFactorInfo: Identifiable { + public var id: String { uid } +} + +@MainActor +public struct MFAManagementView { + @Environment(AuthService.self) private var authService + @Environment(\.reportError) private var reportError + + @State private var enrolledFactors: [MultiFactorInfo] = [] + @State private var isLoading = false + + public init() {} + + private func loadEnrolledFactors() { + guard let user = authService.currentUser else { return } + enrolledFactors = user.multiFactor.enrolledFactors + } + + private func unenrollFactor(_ factorUid: String) { + Task { + isLoading = true + + do { + let freshFactors = try await authService.unenrollMFA(factorUid) + enrolledFactors = freshFactors + isLoading = false + } catch { + reportError?(error) + isLoading = false + } + } + } + + private func navigateToEnrollment() { + authService.navigator.push(.mfaEnrollment) + } +} + +extension MFAManagementView: View { + public var body: some View { + VStack(spacing: 20) { + // Title section + VStack { + Text("Two-Factor Authentication") + .font(.largeTitle) + .fontWeight(.bold) + .multilineTextAlignment(.center) + + Text("Manage your authentication methods") + .font(.subheadline) + .foregroundColor(.secondary) + .multilineTextAlignment(.center) + } + .padding(.horizontal) + + if enrolledFactors.isEmpty { + // No factors enrolled + VStack(spacing: 16) { + Image(systemName: "shield.slash") + .font(.system(size: 48)) + .foregroundColor(.orange) + + Text("No Authentication Methods") + .font(.title2) + .fontWeight(.semibold) + + Text( + "Set up two-factor authentication to add an extra layer of security to your account." + ) + .font(.body) + .foregroundColor(.secondary) + .multilineTextAlignment(.center) + .padding(.horizontal) + + Button { + navigateToEnrollment() + } label: { + Text("Set Up Two-Factor Authentication") + .padding(.vertical, 8) + .frame(maxWidth: .infinity) + } + .buttonStyle(.borderedProminent) + .padding([.top, .bottom], 8) + .frame(maxWidth: .infinity) + .accessibilityIdentifier("setup-mfa-button") + } + } else { + // Show enrolled factors + VStack(alignment: .leading, spacing: 16) { + Text("Enrolled Methods") + .font(.headline) + .padding(.horizontal) + + ForEach(enrolledFactors) { factor in + factorRow(factor: factor) + } + + Divider() + .padding(.horizontal) + + Button("Add Another Method") { + navigateToEnrollment() + } + .padding([.top, .bottom], 8) + .frame(maxWidth: .infinity) + .buttonStyle(.borderedProminent) + .accessibilityIdentifier("add-mfa-method-button") + } + } + + Spacer() + } + .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .top) + .safeAreaPadding() + .onAppear { + loadEnrolledFactors() + } + } + + @ViewBuilder + private func factorRow(factor: MultiFactorInfo) -> some View { + HStack { + // Factor type icon + Group { + if factor.factorID == PhoneMultiFactorID { + Image(systemName: "message") + .foregroundColor(.blue) + } else { + Image(systemName: "qrcode") + .foregroundColor(.green) + } + } + .font(.title2) + + VStack(alignment: .leading, spacing: 4) { + Text(factor.displayName ?? "Unnamed Method") + .font(.headline) + + if factor.factorID == PhoneMultiFactorID { + let phoneInfo = factor as! PhoneMultiFactorInfo + Text("SMS: \(phoneInfo.phoneNumber)") + .font(.caption) + .foregroundColor(.secondary) + } else { + Text("Authenticator App") + .font(.caption) + .foregroundColor(.secondary) + } + + Text("Enrolled: \(DateFormatter.shortDate.string(from: factor.enrollmentDate))") + .font(.caption2) + .foregroundColor(.secondary) + } + + Spacer() + + Button("Remove") { + unenrollFactor(factor.uid) + } + .buttonStyle(.bordered) + .foregroundColor(.red) + .disabled(isLoading) + .accessibilityIdentifier("remove-factor-\(factor.uid)") + } + .padding() + .background(Color(.systemGray6)) + .cornerRadius(8) + .padding(.horizontal) + } +} + +// MARK: - Date Formatter Extension + +private extension DateFormatter { + static let shortDate: DateFormatter = { + let formatter = DateFormatter() + formatter.dateStyle = .short + formatter.timeStyle = .none + return formatter + }() +} + +#Preview { + FirebaseOptions.dummyConfigurationForPreview() + return NavigationStack { + MFAManagementView() + .environment(AuthService()) + } +} diff --git a/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/MFAResolutionView.swift b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/MFAResolutionView.swift new file mode 100644 index 00000000000..8ffedbe885a --- /dev/null +++ b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/MFAResolutionView.swift @@ -0,0 +1,401 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import FirebaseAuth +import FirebaseCore +import SwiftUI + +private enum FocusableField: Hashable { + case verificationCode + case totpCode +} + +@MainActor +public struct MFAResolutionView { + let mfaRequired: MFARequired + + @Environment(AuthService.self) private var authService + @Environment(\.reportError) private var reportError + + @State private var verificationCode = "" + @State private var totpCode = "" + @State private var isLoading = false + @State private var selectedHintIndex = 0 + @State private var verificationId: String? + + @FocusState private var focus: FocusableField? + + public init(mfaRequired: MFARequired) { + self.mfaRequired = mfaRequired + } + + private var selectedHint: MFAHint? { + guard selectedHintIndex < mfaRequired.hints.count else { + return nil + } + return mfaRequired.hints[selectedHintIndex] + } + + private var canCompleteResolution: Bool { + guard !isLoading else { return false } + + switch selectedHint { + case .phone: + return !verificationCode.isEmpty + case .totp: + return !totpCode.isEmpty + case .none: + return false + } + } + + private func startSMSChallenge() { + guard selectedHintIndex < mfaRequired.hints.count else { return } + + Task { + isLoading = true + + do { + let verificationId = try await authService.resolveSmsChallenge(hintIndex: selectedHintIndex) + self.verificationId = verificationId + isLoading = false + } catch { + reportError?(error) + isLoading = false + } + } + } + + private func completeResolution() { + Task { + isLoading = true + + do { + let code = selectedHint?.isPhoneHint == true ? verificationCode : totpCode + try await authService.resolveSignIn( + code: code, + hintIndex: selectedHintIndex, + verificationId: verificationId + ) + // On success, the AuthService will update the authentication state + // and we should navigate back to the main app + authService.navigator.clear() + isLoading = false + } catch { + reportError?(error) + isLoading = false + } + } + } + + private func cancelResolution() { + authService.navigator.clear() + } +} + +extension MFAResolutionView: View { + public var body: some View { + VStack(spacing: 24) { + // Header + VStack(spacing: 12) { + Image(systemName: "lock.shield") + .font(.system(size: 50)) + .foregroundColor(.blue) + + Text("Two-Factor Authentication") + .font(.largeTitle) + .fontWeight(.bold) + .accessibilityIdentifier("mfa-resolution-title") + + Text("Complete sign-in with your second factor") + .font(.body) + .foregroundColor(.secondary) + .multilineTextAlignment(.center) + } + .padding(.horizontal) + + // MFA Hints Selection (if multiple available) + if mfaRequired.hints.count > 1 { + mfaHintsSelectionView(mfaRequired: mfaRequired) + } + + // Resolution Content + if let hint = selectedHint { + resolutionContent(for: hint) + } + + // Action buttons + VStack(spacing: 12) { + // Complete Resolution Button + Button(action: completeResolution) { + HStack { + if isLoading { + ProgressView() + .scaleEffect(0.8) + } + Text("Complete Sign-In") + } + .frame(maxWidth: .infinity) + .padding() + .background(canCompleteResolution ? Color.blue : Color.gray) + .foregroundColor(.white) + .cornerRadius(8) + } + .disabled(!canCompleteResolution) + .accessibilityIdentifier("complete-resolution-button") + + // Cancel Button + Button(action: cancelResolution) { + Text("Cancel") + .frame(maxWidth: .infinity) + .padding() + .background(Color.gray.opacity(0.2)) + .foregroundColor(.primary) + .cornerRadius(8) + } + .accessibilityIdentifier("cancel-button") + } + .padding(.horizontal) + } + .padding(.vertical, 20) + } + + @ViewBuilder + private func resolutionContent(for hint: MFAHint) -> some View { + switch hint { + case let .phone(displayName, _, phoneNumber): + phoneResolutionContent(displayName: displayName, phoneNumber: phoneNumber) + case let .totp(displayName, _): + totpResolutionContent(displayName: displayName) + } + } + + @ViewBuilder + private func phoneResolutionContent(displayName _: String?, phoneNumber: String?) -> some View { + VStack(spacing: 16) { + VStack(spacing: 8) { + Image(systemName: "message.circle.fill") + .font(.system(size: 40)) + .foregroundColor(.blue) + + Text("SMS Verification") + .font(.title2) + .fontWeight(.semibold) + + if let phoneNumber = phoneNumber { + Text("We'll send a code to ••••••\(String(phoneNumber.suffix(4)))") + .font(.body) + .foregroundColor(.secondary) + } else { + Text("We'll send a verification code to your phone") + .font(.body) + .foregroundColor(.secondary) + } + } + .padding(.horizontal) + + // Send SMS button (if verification ID not yet obtained) + if verificationId == nil { + Button(action: startSMSChallenge) { + HStack { + if isLoading { + ProgressView() + .scaleEffect(0.8) + } + Text("Send Code") + } + .frame(maxWidth: .infinity) + .padding() + .background(isLoading ? Color.gray : Color.blue) + .foregroundColor(.white) + .cornerRadius(8) + } + .disabled(isLoading) + .padding(.horizontal) + .accessibilityIdentifier("send-sms-button") + } else { + // Verification code input + VStack(alignment: .leading, spacing: 8) { + Text("Verification Code") + .font(.headline) + + TextField("Enter 6-digit code", text: $verificationCode) + .textFieldStyle(RoundedBorderTextFieldStyle()) + .keyboardType(.numberPad) + .focused($focus, equals: .verificationCode) + .accessibilityIdentifier("sms-verification-code-field") + } + .padding(.horizontal) + } + } + } + + @ViewBuilder + private func totpResolutionContent(displayName: String?) -> some View { + VStack(spacing: 16) { + VStack(spacing: 8) { + Image(systemName: "qrcode") + .font(.system(size: 40)) + .foregroundColor(.green) + + Text("Authenticator App") + .font(.title2) + .fontWeight(.semibold) + + Text("Enter the 6-digit code from your authenticator app") + .font(.body) + .foregroundColor(.secondary) + .multilineTextAlignment(.center) + + if let displayName = displayName { + Text("Account: \(displayName)") + .font(.caption) + .foregroundColor(.secondary) + } + } + .padding(.horizontal) + + // TOTP code input + VStack(alignment: .leading, spacing: 8) { + Text("Verification Code") + .font(.headline) + + TextField("Enter 6-digit code", text: $totpCode) + .textFieldStyle(RoundedBorderTextFieldStyle()) + .keyboardType(.numberPad) + .focused($focus, equals: .totpCode) + .accessibilityIdentifier("totp-verification-code-field") + } + .padding(.horizontal) + } + } + + @ViewBuilder + private func mfaHintsSelectionView(mfaRequired: MFARequired) -> some View { + VStack(alignment: .leading, spacing: 12) { + Text("Choose verification method:") + .font(.headline) + .padding(.horizontal) + + // More idiomatic approach using indices + ForEach(mfaRequired.hints.indices, id: \.self) { index in + let hint = mfaRequired.hints[index] + hintSelectionButton(hint: hint, index: index) + } + } + } + + @ViewBuilder + private func hintSelectionButton(hint: MFAHint, index: Int) -> some View { + Button(action: { + selectedHintIndex = index + // Clear previous input when switching methods + verificationCode = "" + totpCode = "" + verificationId = nil + }) { + HStack { + Image(systemName: hint.isPhoneHint ? "message.circle" : "qrcode") + .foregroundColor(.blue) + + VStack(alignment: .leading) { + Text(hintDisplayName(for: hint)) + .font(.body) + .foregroundColor(.primary) + + hintSubtitle(for: hint) + } + + Spacer() + + if selectedHintIndex == index { + Image(systemName: "checkmark.circle.fill") + .foregroundColor(.blue) + } + } + .padding() + .background(selectedHintIndex == index ? Color.blue.opacity(0.1) : Color.clear) + .cornerRadius(8) + .overlay( + RoundedRectangle(cornerRadius: 8) + .stroke(selectedHintIndex == index ? Color.blue : Color.gray.opacity(0.3), lineWidth: 1) + ) + } + .buttonStyle(PlainButtonStyle()) + .padding(.horizontal) + .accessibilityIdentifier("hint-\(index)") + } + + private func hintDisplayName(for hint: MFAHint) -> String { + hint.isPhoneHint ? "SMS" : "Authenticator App" + } + + @ViewBuilder + private func hintSubtitle(for hint: MFAHint) -> some View { + if case let .phone(_, _, phoneNumber) = hint, let phone = phoneNumber { + Text("••••••\(String(phone.suffix(4)))") + .font(.caption) + .foregroundColor(.secondary) + } + } +} + +// Helper extension for MFAHint +private extension MFAHint { + var isPhoneHint: Bool { + switch self { + case .phone: + return true + case .totp: + return false + } + } +} + +#Preview("Phone SMS Only") { + FirebaseOptions.dummyConfigurationForPreview() + let authService = AuthService() + let mfaRequired = MFARequired(hints: [ + .phone(displayName: "Work Phone", uid: "phone-uid-1", phoneNumber: "+15551234567"), + ]) + return MFAResolutionView(mfaRequired: mfaRequired).environment(authService) +} + +#Preview("TOTP Only") { + FirebaseOptions.dummyConfigurationForPreview() + let authService = AuthService() + let mfaRequired = MFARequired(hints: [ + .totp(displayName: "Authenticator App", uid: "totp-uid-1"), + ]) + return MFAResolutionView(mfaRequired: mfaRequired).environment(authService) +} + +#Preview("Multiple Methods") { + FirebaseOptions.dummyConfigurationForPreview() + let authService = AuthService() + let mfaRequired = MFARequired(hints: [ + .phone(displayName: "Mobile", uid: "phone-uid-1", phoneNumber: "+15551234567"), + .totp(displayName: "Google Authenticator", uid: "totp-uid-1"), + ]) + return MFAResolutionView(mfaRequired: mfaRequired).environment(authService) +} + +#Preview("Single TOTP") { + FirebaseOptions.dummyConfigurationForPreview() + let authService = AuthService() + let mfaRequired = MFARequired(hints: [ + .totp(displayName: "Authenticator", uid: "totp-uid-1"), + ]) + return MFAResolutionView(mfaRequired: mfaRequired).environment(authService) +} diff --git a/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/PasswordPromptView.swift b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/PasswordPromptView.swift index 539bf2484e6..0284de7b496 100644 --- a/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/PasswordPromptView.swift +++ b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/PasswordPromptView.swift @@ -12,6 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. +import FirebaseAuthUIComponents import FirebaseCore import SwiftUI @@ -31,16 +32,22 @@ extension PasswordPromptSheet: View { Divider() - LabeledContent { - TextField(authService.string.passwordInputLabel, text: $password) - .textInputAutocapitalization(.never) - .disableAutocorrection(true) - .submitLabel(.next) - } label: { - Image(systemName: "lock") - }.padding(.vertical, 10) - .background(Divider(), alignment: .bottom) - .padding(.bottom, 4) + AuthTextField( + text: $password, + label: authService.string.passwordFieldLabel, + prompt: authService.string.passwordInputLabel, + contentType: .password, + isSecureTextField: true, + onSubmit: { _ in + if !password.isEmpty { + coordinator.submit(password: password) + } + }, + leading: { + Image(systemName: "lock") + } + ) + .submitLabel(.next) Button(action: { coordinator.submit(password: password) diff --git a/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/PasswordRecoveryView.swift b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/PasswordRecoveryView.swift index d58f2be1f74..8b3a496d438 100644 --- a/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/PasswordRecoveryView.swift +++ b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/PasswordRecoveryView.swift @@ -12,56 +12,45 @@ // See the License for the specific language governing permissions and // limitations under the License. +import FirebaseAuthUIComponents import FirebaseCore import SwiftUI -private struct ResultWrapper: Identifiable { - let id = UUID() - let value: Result -} - public struct PasswordRecoveryView { @Environment(AuthService.self) private var authService @State private var email = "" - @State private var resultWrapper: ResultWrapper? + @State private var showSuccessSheet = false + @State private var sentEmail = "" public init() {} private func sendPasswordRecoveryEmail() async { - let recoveryResult: Result - do { - try await authService.sendPasswordRecoveryEmail(to: email) - resultWrapper = ResultWrapper(value: .success(())) + try await authService.sendPasswordRecoveryEmail(email: email) + sentEmail = email + showSuccessSheet = true } catch { - resultWrapper = ResultWrapper(value: .failure(error)) + // Error already displayed via modal by AuthService } } } extension PasswordRecoveryView: View { public var body: some View { - VStack { - Text(authService.string.passwordRecoveryTitle) - .font(.largeTitle) - .fontWeight(.bold) - .padding() - .accessibilityIdentifier("password-recovery-text") - - Divider() - - LabeledContent { - TextField(authService.string.emailInputLabel, text: $email) - .textInputAutocapitalization(.never) - .disableAutocorrection(true) - .submitLabel(.next) - } label: { - Image(systemName: "at") - } - .padding(.vertical, 6) - .background(Divider(), alignment: .bottom) - .padding(.bottom, 4) - + VStack(spacing: 24) { + AuthTextField( + text: $email, + label: authService.string.passwordRecoveryEmailFieldLabel, + prompt: authService.string.emailInputLabel, + keyboardType: .emailAddress, + contentType: .emailAddress, + validations: [ + FormValidators.email, + ], + leading: { + Image(systemName: "at") + } + ) Button(action: { Task { await sendPasswordRecoveryEmail() @@ -72,57 +61,39 @@ extension PasswordRecoveryView: View { .frame(maxWidth: .infinity) } .disabled(!CommonUtils.isValidEmail(email)) - .padding([.top, .bottom, .horizontal], 8) .frame(maxWidth: .infinity) .buttonStyle(.borderedProminent) } - .sheet(item: $resultWrapper) { wrapper in - resultSheet(wrapper.value) + .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .top) + .navigationTitle(authService.string.passwordRecoveryTitle) + .safeAreaPadding() + .sheet(isPresented: $showSuccessSheet) { + successSheet } - .navigationBarItems(leading: Button(action: { - authService.authView = .authPicker - }) { - Image(systemName: "chevron.left") - .foregroundColor(.blue) - Text(authService.string.backButtonLabel) - .foregroundColor(.blue) - }.accessibilityIdentifier("password-recovery-back-button")) } @ViewBuilder @MainActor - private func resultSheet(_ result: Result) -> some View { + private var successSheet: some View { VStack { - switch result { - case .success: - Text(authService.string.passwordRecoveryEmailSentTitle) - .font(.largeTitle) - .fontWeight(.bold) - .padding() - Text(authService.string.passwordRecoveryHelperMessage) - .padding() - - Divider() - - Text(String(format: authService.string.passwordRecoveryEmailSentMessage, email)) - .padding() - - case .failure: - Text(authService.string.alertErrorTitle) - .font(.title) - .fontWeight(.semibold) - .padding() + Text(authService.string.passwordRecoveryEmailSentTitle) + .font(.largeTitle) + .fontWeight(.bold) + .padding() + Text(authService.string.passwordRecoveryHelperMessage) + .padding() - Divider() + Divider() - Text(authService.errorMessage) - .padding() - } + Text(String(format: authService.string.passwordRecoveryEmailSentMessage, sentEmail)) + .padding() Divider() Button(authService.string.okButtonLabel) { - self.resultWrapper = nil + showSuccessSheet = false + email = "" + authService.navigator.clear() } .padding() } diff --git a/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/PrivacyTOCsView.swift b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/PrivacyTOCsView.swift index db7c1294bde..f5e6bfb6381 100644 --- a/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/PrivacyTOCsView.swift +++ b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/PrivacyTOCsView.swift @@ -30,7 +30,7 @@ struct PrivacyTOCsView { let displayMode: DisplayMode - public init(displayMode: DisplayMode = .full) { + init(displayMode: DisplayMode = .full) { self.displayMode = displayMode } @@ -61,14 +61,12 @@ struct PrivacyTOCsView { } extension PrivacyTOCsView: View { - public var body: some View { + var body: some View { Group { if let tosURL = authService.configuration.tosUrl, let privacyURL = authService.configuration.privacyPolicyUrl { Text(attributedMessage(tosURL: tosURL, privacyURL: privacyURL)) - .multilineTextAlignment(displayMode == .full ? .leading : .trailing) - .font(.footnote) - .foregroundColor(.primary) + .multilineTextAlignment(displayMode == .full ? .center : .trailing) .padding() } else { EmptyView() diff --git a/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/SignedInView.swift b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/SignedInView.swift index a8d3acca9f9..960ad1d376a 100644 --- a/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/SignedInView.swift +++ b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/SignedInView.swift @@ -18,57 +18,198 @@ import SwiftUI @MainActor public struct SignedInView { @Environment(AuthService.self) private var authService -} + @Environment(\.reportError) private var reportError + @State private var showDeleteConfirmation = false + @State private var showEmailVerificationSent = false -extension SignedInView: View { - private var isShowingPasswordPrompt: Binding { - Binding( - get: { authService.passwordPrompt.isPromptingPassword }, - set: { authService.passwordPrompt.isPromptingPassword = $0 } - ) + private func sendEmailVerification() async throws { + do { + try await authService.sendEmailVerification() + showEmailVerificationSent = true + } catch { + if let errorHandler = reportError { + errorHandler(error) + } else { + throw error + } + } } +} +extension SignedInView: View { public var body: some View { - if authService.authView == .updatePassword { - UpdatePasswordView() - } else { - VStack { - Text(authService.string.signedInTitle) - .font(.largeTitle) - .fontWeight(.bold) - .padding() - .accessibilityIdentifier("signed-in-text") - Text(authService.string.accountSettingsEmailLabel) - Text("\(authService.currentUser?.email ?? "Unknown")") - - if authService.currentUser?.isEmailVerified == false { - VerifyEmailView() - } - Divider() - Button(authService.string.updatePasswordButtonLabel) { - authService.authView = .updatePassword - } - Divider() - Button(authService.string.signOutButtonLabel) { + VStack { + Text(authService.string.signedInTitle) + .font(.largeTitle) + .fontWeight(.bold) + .padding() + .accessibilityIdentifier("signed-in-text") + Text( + "\(authService.currentUser?.email ?? authService.currentUser?.displayName ?? "Unknown")" + ) + if authService.currentUser?.isEmailVerified == false { + Button { Task { - do { - try await authService.signOut() - } catch {} + try await sendEmailVerification() + } + } label: { + Text(authService.string.sendEmailVerificationButtonLabel) + .padding(.vertical, 8) + .frame(maxWidth: .infinity) + } + .buttonStyle(.borderedProminent) + .padding([.top, .bottom], 8) + .frame(maxWidth: .infinity) + .accessibilityIdentifier("verify-email-button") + } + Button { + authService.navigator.push(.updatePassword) + } label: { + Text(authService.string.updatePasswordButtonLabel) + .padding(.vertical, 8) + .frame(maxWidth: .infinity) + } + .buttonStyle(.borderedProminent) + .padding([.top, .bottom], 8) + .frame(maxWidth: .infinity) + .accessibilityIdentifier("update-password-button") + + Button { + authService.navigator.push(.mfaManagement) + } label: { + Text("Manage Two-Factor Authentication") + .padding(.vertical, 8) + .frame(maxWidth: .infinity) + } + .buttonStyle(.borderedProminent) + .padding([.top, .bottom], 8) + .frame(maxWidth: .infinity) + .accessibilityIdentifier("mfa-management-button") + + Button { + showDeleteConfirmation = true + } label: { + Text(authService.string.deleteAccountButtonLabel) + .padding(.vertical, 8) + .frame(maxWidth: .infinity) + } + .buttonStyle(.borderedProminent) + .padding([.top, .bottom], 8) + .frame(maxWidth: .infinity) + .accessibilityIdentifier("delete-account-button") + + Button { + Task { + do { + try await authService.signOut() + } catch { + if let errorHandler = reportError { + errorHandler(error) + } else { + throw error + } } - }.accessibilityIdentifier("sign-out-button") - Divider() - Button(authService.string.deleteAccountButtonLabel) { + } + } label: { + Text(authService.string.signOutButtonLabel) + .padding(.vertical, 8) + .frame(maxWidth: .infinity) + } + .buttonStyle(.borderedProminent) + .padding([.top, .bottom], 8) + .frame(maxWidth: .infinity) + .accessibilityIdentifier("sign-out-button") + } + .safeAreaPadding() + .sheet(isPresented: $showDeleteConfirmation) { + DeleteAccountConfirmationSheet( + onConfirm: { + showDeleteConfirmation = false Task { do { try await authService.deleteUser() - } catch {} + } catch { + if let errorHandler = reportError { + errorHandler(error) + } else { + throw error + } + } } + }, + onCancel: { + showDeleteConfirmation = false + } + ) + .presentationDetents([.medium]) + } + .alert( + authService.string.verifyEmailSheetMessage, + isPresented: $showEmailVerificationSent + ) { + Button(authService.string.okButtonLabel) { + showEmailVerificationSent = false + } + } message: { + Text("Please tap on the link in your email to complete verification.") + } + } +} + +private struct DeleteAccountConfirmationSheet: View { + @Environment(AuthService.self) private var authService + let onConfirm: () -> Void + let onCancel: () -> Void + + var body: some View { + VStack(spacing: 24) { + VStack(spacing: 12) { + Image(systemName: "exclamationmark.triangle.fill") + .font(.system(size: 60)) + .foregroundColor(.red) + + Text("Delete Account?") + .font(.title) + .fontWeight(.bold) + + Text( + "This action cannot be undone. All your data will be permanently deleted. You may need to reauthenticate to complete this action." + ) + .font(.body) + .foregroundColor(.secondary) + .multilineTextAlignment(.center) + .padding(.horizontal) + } + + VStack(spacing: 12) { + Button { + onConfirm() + } label: { + Text("Delete Account") + .padding(.vertical, 8) + .frame(maxWidth: .infinity) + } + .buttonStyle(.borderedProminent) + .tint(.red) + .padding([.top, .bottom], 8) + .frame(maxWidth: .infinity) + .accessibilityIdentifier("confirm-delete-button") + + Button { + onCancel() + } label: { + Text("Cancel") + .padding(.vertical, 8) + .frame(maxWidth: .infinity) } - Text(authService.errorMessage).foregroundColor(.red) - }.sheet(isPresented: isShowingPasswordPrompt) { - PasswordPromptSheet(coordinator: authService.passwordPrompt) + .buttonStyle(.bordered) + .padding([.top, .bottom], 8) + .frame(maxWidth: .infinity) + .accessibilityIdentifier("cancel-delete-button") } } + .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .top) + .safeAreaPadding() } } diff --git a/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/UpdatePassword.swift b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/UpdatePassword.swift deleted file mode 100644 index c1a43d422ef..00000000000 --- a/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/UpdatePassword.swift +++ /dev/null @@ -1,103 +0,0 @@ -// Copyright 2025 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// -// UpdatePassword.swift -// FirebaseUI -// -// Created by Russell Wheatley on 24/04/2025. -// - -import FirebaseCore -import SwiftUI - -private enum FocusableField: Hashable { - case password - case confirmPassword -} - -@MainActor -public struct UpdatePasswordView { - @Environment(AuthService.self) private var authService - @State private var password = "" - @State private var confirmPassword = "" - - @FocusState private var focus: FocusableField? - private var isValid: Bool { - !password.isEmpty && password == confirmPassword - } -} - -extension UpdatePasswordView: View { - private var isShowingPasswordPrompt: Binding { - Binding( - get: { authService.passwordPrompt.isPromptingPassword }, - set: { authService.passwordPrompt.isPromptingPassword = $0 } - ) - } - - public var body: some View { - VStack { - LabeledContent { - SecureField(authService.string.passwordInputLabel, text: $password) - .focused($focus, equals: .password) - .submitLabel(.go) - } label: { - Image(systemName: "lock") - } - .padding(.vertical, 6) - .background(Divider(), alignment: .bottom) - .padding(.bottom, 8) - - Divider() - - LabeledContent { - SecureField(authService.string.confirmPasswordInputLabel, text: $confirmPassword) - .focused($focus, equals: .confirmPassword) - .submitLabel(.go) - } label: { - Image(systemName: "lock") - } - .padding(.vertical, 6) - .background(Divider(), alignment: .bottom) - .padding(.bottom, 8) - - Divider() - - Button(action: { - Task { - try await authService.updatePassword(to: confirmPassword) - authService.authView = .authPicker - } - }, label: { - Text(authService.string.updatePasswordButtonLabel) - .padding(.vertical, 8) - .frame(maxWidth: .infinity) - - }) - .disabled(!isValid) - .padding([.top, .bottom], 8) - .frame(maxWidth: .infinity) - .buttonStyle(.borderedProminent) - }.sheet(isPresented: isShowingPasswordPrompt) { - PasswordPromptSheet(coordinator: authService.passwordPrompt) - } - } -} - -#Preview { - FirebaseOptions.dummyConfigurationForPreview() - return UpdatePasswordView() - .environment(AuthService()) -} diff --git a/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/UpdatePasswordView.swift b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/UpdatePasswordView.swift new file mode 100644 index 00000000000..290f616262f --- /dev/null +++ b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/UpdatePasswordView.swift @@ -0,0 +1,126 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// +// UpdatePassword.swift +// FirebaseUI +// +// Created by Russell Wheatley on 24/04/2025. +// +import FirebaseAuthUIComponents +import FirebaseCore +import SwiftUI + +private enum FocusableField: Hashable { + case password + case confirmPassword +} + +@MainActor +public struct UpdatePasswordView { + @Environment(AuthService.self) private var authService + @State private var password = "" + @State private var confirmPassword = "" + @State private var showAlert = false + + @FocusState private var focus: FocusableField? + + private var isValid: Bool { + FormValidators.atLeast6Characters.isValid(input: password) && + FormValidators.confirmPassword(password: password).isValid(input: confirmPassword) + } + + private func updatePassword() { + Task { + do { + try await authService.updatePassword(to: confirmPassword) + showAlert = true + } catch {} + } + } +} + +extension UpdatePasswordView: View { + public var body: some View { + VStack(spacing: 24) { + AuthTextField( + text: $password, + label: "Type new password", + prompt: authService.string.passwordInputLabel, + contentType: .password, + isSecureTextField: true, + validations: [ + FormValidators.atLeast6Characters, + ], + maintainsValidationMessage: true, + leading: { + Image(systemName: "lock") + } + ) + .submitLabel(.go) + .focused($focus, equals: .password) + + AuthTextField( + text: $confirmPassword, + label: "Retype new password", + prompt: authService.string.confirmPasswordInputLabel, + contentType: .password, + isSecureTextField: true, + validations: [ + FormValidators.confirmPassword(password: password), + ], + maintainsValidationMessage: true, + leading: { + Image(systemName: "lock") + } + ) + .submitLabel(.go) + .focused($focus, equals: .confirmPassword) + + Button(action: { + updatePassword() + }, label: { + Text(authService.string.updatePasswordButtonLabel) + .padding(.vertical, 8) + .frame(maxWidth: .infinity) + }) + .disabled(!isValid) + .padding([.top, .bottom], 8) + .frame(maxWidth: .infinity) + .buttonStyle(.borderedProminent) + } + .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .top) + .safeAreaPadding() + .navigationTitle(authService.string.updatePasswordTitle) + .alert( + "Password Updated", + isPresented: $showAlert + ) { + Button(authService.string.okButtonLabel) { + showAlert = false + authService.navigator.clear() + } + } message: { + Text("Your password has been successfully updated.") + } + } +} + +#Preview { + FirebaseOptions.dummyConfigurationForPreview() + return NavigationStack { + UpdatePasswordView() + .environment(AuthService()) + } +} diff --git a/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/VerifyEmailView.swift b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/VerifyEmailView.swift deleted file mode 100644 index ac2c2f8be59..00000000000 --- a/FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/VerifyEmailView.swift +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2025 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -import FirebaseCore -import SwiftUI - -public struct VerifyEmailView { - @Environment(AuthService.self) private var authService - @State private var showModal = false - - private func sendEmailVerification() async { - do { - try await authService.sendEmailVerification() - showModal = true - } catch {} - } -} - -extension VerifyEmailView: View { - public var body: some View { - VStack { - Button(action: { - Task { - await sendEmailVerification() - } - }) { - Text(authService.string.sendEmailVerificationButtonLabel) - .padding(.vertical, 8) - .frame(maxWidth: .infinity) - } - .padding([.top, .bottom, .horizontal], 8) - .frame(maxWidth: .infinity) - .buttonStyle(.borderedProminent) - }.sheet(isPresented: $showModal) { - VStack { - Text(authService.string.verifyEmailSheetMessage) - .font(.headline) - Button(authService.string.okButtonLabel) { - showModal = false - } - .padding() - } - .padding() - } - } -} - -#Preview { - FirebaseOptions.dummyConfigurationForPreview() - return VerifyEmailView() - .environment(AuthService()) -} diff --git a/FirebaseSwiftUI/FirebaseAuthSwiftUI/Tests/FirebaseAuthSwiftUITests/MFAEnrolmentUnitTests.swift b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Tests/FirebaseAuthSwiftUITests/MFAEnrolmentUnitTests.swift new file mode 100644 index 00000000000..aa9d53beefb --- /dev/null +++ b/FirebaseSwiftUI/FirebaseAuthSwiftUI/Tests/FirebaseAuthSwiftUITests/MFAEnrolmentUnitTests.swift @@ -0,0 +1,93 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// +// MFAEnrollmentUnitTests.swift +// FirebaseAuthSwiftUITests +// +// Unit tests for MFA enrollment data structures +// + +import FirebaseAuth +import FirebaseAuthSwiftUI +import Foundation +import Testing + +// MARK: - TOTPEnrollmentInfo Tests + +@Suite("TOTPEnrollmentInfo Tests") +struct TOTPEnrollmentInfoTests { + @Test("Initialization with shared secret key") + func initializationWithSharedSecretKey() { + let validSecrets = [ + "JBSWY3DPEHPK3PXP", + "GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ", + "MFRGG43FMZQW4ZY=", + ] + + for secret in validSecrets { + let totpInfo = TOTPEnrollmentInfo(sharedSecretKey: secret) + #expect(totpInfo.sharedSecretKey == secret) + #expect(totpInfo.verificationStatus == .pending) + #expect(totpInfo.qrCodeURL == nil) + #expect(totpInfo.accountName == nil) + #expect(totpInfo.issuer == nil) + } + } + + @Test("Initialization with all parameters") + func initializationWithAllParameters() throws { + let totpInfo = TOTPEnrollmentInfo( + sharedSecretKey: "JBSWY3DPEHPK3PXP", + qrCodeURL: URL( + string: "otpauth://totp/Example:alice@example.com?secret=JBSWY3DPEHPK3PXP&issuer=Example" + ), + accountName: "alice@example.com", + issuer: "Example", + verificationStatus: .verified + ) + + #expect(totpInfo.sharedSecretKey == "JBSWY3DPEHPK3PXP") + #expect(totpInfo.accountName == "alice@example.com") + #expect(totpInfo.issuer == "Example") + #expect(totpInfo.verificationStatus == .verified) + + let qrURL = try #require(totpInfo.qrCodeURL) + #expect(qrURL.scheme == "otpauth") + #expect(qrURL.host == "totp") + #expect(qrURL.query?.contains("secret=JBSWY3DPEHPK3PXP") == true) + #expect(qrURL.query?.contains("issuer=Example") == true) + } + + @Test("Verification status transitions") + func verificationStatusTransitions() { + // Default status is pending + var totpInfo = TOTPEnrollmentInfo(sharedSecretKey: "JBSWY3DPEHPK3PXP") + #expect(totpInfo.verificationStatus == .pending) + + // Verified status + totpInfo = TOTPEnrollmentInfo( + sharedSecretKey: "JBSWY3DPEHPK3PXP", + verificationStatus: .verified + ) + #expect(totpInfo.verificationStatus == .verified) + + // Failed status + totpInfo = TOTPEnrollmentInfo( + sharedSecretKey: "JBSWY3DPEHPK3PXP", + verificationStatus: .failed + ) + #expect(totpInfo.verificationStatus == .failed) + } +} diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Assets.swift b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Assets.swift new file mode 100644 index 00000000000..3c551537570 --- /dev/null +++ b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Assets.swift @@ -0,0 +1,20 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import SwiftUI + +@MainActor +public struct Assets { + public static var firebaseAuthLogo: ImageResource = .firebaseAuthLogo +} diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Components/AuthProviderButton.swift b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Components/AuthProviderButton.swift new file mode 100644 index 00000000000..f8df18d14df --- /dev/null +++ b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Components/AuthProviderButton.swift @@ -0,0 +1,81 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import SwiftUI + +/// A styled button component for authentication providers +/// Used by all provider packages to maintain consistent UI +public struct AuthProviderButton: View { + let label: String + let style: ProviderStyle + let action: () -> Void + var enabled: Bool + var accessibilityId: String? + + public init(label: String, + style: ProviderStyle, + enabled: Bool = true, + accessibilityId: String? = nil, + action: @escaping () -> Void) { + self.label = label + self.style = style + self.enabled = enabled + self.accessibilityId = accessibilityId + self.action = action + } + + public var body: some View { + Button(action: action) { + HStack(spacing: 12) { + if let icon = style.icon { + providerIcon(for: icon, tint: style.iconTint) + } + Text(label) + .lineLimit(1) + .truncationMode(.tail) + .foregroundStyle(style.contentColor) + } + .padding(.horizontal, 8) + .frame(maxWidth: .infinity, alignment: .leading) + } + .buttonStyle(.borderedProminent) + .tint(style.backgroundColor) + .shadow( + color: Color.black.opacity(0.12), + radius: Double(style.elevation), + x: 0, + y: style.elevation > 0 ? 1 : 0 + ) + .disabled(!enabled) + .accessibilityIdentifier(accessibilityId ?? "auth-provider-button") + } + + @ViewBuilder + private func providerIcon(for image: Image, tint: Color?) -> some View { + if let tint { + image + .renderingMode(.template) + .resizable() + .scaledToFit() + .frame(width: 24, height: 24) + .foregroundStyle(tint) + } else { + image + .renderingMode(.original) + .resizable() + .scaledToFit() + .frame(width: 24, height: 24) + } + } +} diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Components/AuthTextField.swift b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Components/AuthTextField.swift new file mode 100644 index 00000000000..8e967113990 --- /dev/null +++ b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Components/AuthTextField.swift @@ -0,0 +1,163 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import SwiftUI + +public struct AuthTextField: View { + @FocusState private var isFocused: Bool + @State var obscured: Bool = true + @State var hasInteracted: Bool = false + + @Binding var text: String + let label: String + let prompt: String + var textAlignment: TextAlignment = .leading + var keyboardType: UIKeyboardType = .default + var contentType: UITextContentType? + var isSecureTextField: Bool = false + var validations: [FormValidator] = [] + var maintainsValidationMessage: Bool = false + var formState: ((Bool) -> Void)? + var onSubmit: ((String) -> Void)? + var onChange: ((String) -> Void)? + private let leading: () -> Leading? + + public init(text: Binding, + label: String, + prompt: String, + textAlignment: TextAlignment = .leading, + keyboardType: UIKeyboardType = .default, + contentType: UITextContentType? = nil, + isSecureTextField: Bool = false, + validations: [FormValidator] = [], + maintainsValidationMessage: Bool = false, + formState: ((Bool) -> Void)? = nil, + onSubmit: ((String) -> Void)? = nil, + onChange: ((String) -> Void)? = nil, + @ViewBuilder leading: @escaping () -> Leading? = { EmptyView() }) { + _text = text + self.label = label + self.prompt = prompt + self.textAlignment = textAlignment + self.keyboardType = keyboardType + self.contentType = contentType + self.isSecureTextField = isSecureTextField + self.validations = validations + self.maintainsValidationMessage = maintainsValidationMessage + self.formState = formState + self.onSubmit = onSubmit + self.onChange = onChange + self.leading = leading + } + + var allRequirementsMet: Bool { + validations.allSatisfy { $0.isValid(input: text) } + } + + public var body: some View { + VStack(alignment: .leading) { + Text(LocalizedStringResource(stringLiteral: label)) + HStack(spacing: 8) { + leading() + Group { + if isSecureTextField { + ZStack(alignment: .trailing) { + SecureField(label, text: $text, prompt: Text(prompt)) + .opacity(obscured ? 1 : 0) + .focused($isFocused) + .frame(height: 24) + TextField(label, text: $text, prompt: Text(prompt)) + .opacity(obscured ? 0 : 1) + .focused($isFocused) + .frame(height: 24) + if !text.isEmpty { + Button { + withAnimation(.easeInOut(duration: 0.2)) { + obscured.toggle() + } + // Reapply focus after toggling + DispatchQueue.main.async { + isFocused = true + } + } label: { + Image(systemName: obscured ? "eye" : "eye.slash") + } + .buttonStyle(.plain) + } + } + } else { + TextField( + label, + text: $text, + prompt: Text(prompt) + ) + .frame(height: 24) + } + } + } + .frame(maxWidth: .infinity) + .keyboardType(keyboardType) + .textContentType(contentType) + .autocapitalization(.none) + .disableAutocorrection(true) + .focused($isFocused) + .onSubmit { + onSubmit?(text) + } + .onChange(of: text) { _, newValue in + if !hasInteracted { + hasInteracted = true + } + onChange?(newValue) + } + .onChange(of: isFocused) { _, focused in + if !focused && !text.isEmpty { + hasInteracted = true + } + } + .multilineTextAlignment(textAlignment) + .textFieldStyle(.plain) + .padding(.vertical, 12) + .padding(.horizontal, 12) + .background { + RoundedRectangle(cornerRadius: 8) + .fill(Color.accentColor.opacity(0.05)) + .strokeBorder(lineWidth: isFocused ? 3 : 1) + .foregroundStyle(isFocused ? Color.accentColor : Color(.systemFill)) + } + .contentShape(Rectangle()) + .onTapGesture { + withAnimation { + isFocused = true + } + } + if !validations + .isEmpty && hasInteracted && (maintainsValidationMessage || !allRequirementsMet) { + VStack(alignment: .leading, spacing: 4) { + ForEach(validations) { validator in + let isValid = validator.isValid(input: text) + Text(validator.message) + .font(.caption) + .strikethrough(isValid, color: .gray) + .foregroundStyle(isValid ? .gray : .red) + .fixedSize(horizontal: false, vertical: true) + } + } + .onChange(of: allRequirementsMet) { _, newValue in + formState?(newValue) + } + } + } + } +} diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Components/CountrySelector.swift b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Components/CountrySelector.swift new file mode 100644 index 00000000000..050d3c37cea --- /dev/null +++ b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Components/CountrySelector.swift @@ -0,0 +1,108 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import SwiftUI + +public struct CountryData: Equatable { + public let name: String + public let dialCode: String + public let code: String + + public init(name: String, dialCode: String, code: String) { + self.name = name + self.dialCode = dialCode + self.code = code + } + + public var flag: String { + let base: UInt32 = 127_397 + var s = "" + for v in code.unicodeScalars { + s.unicodeScalars.append(UnicodeScalar(base + v.value)!) + } + return String(s) + } + + @MainActor public static let `default` = CountryData( + name: "United States", + dialCode: "+1", + code: "US" + ) +} + +public struct CountrySelector: View { + @Binding var selectedCountry: CountryData + var enabled: Bool = true + var allowedCountries: Set? + + public init(selectedCountry: Binding, + enabled: Bool = true, + allowedCountries: Set? = nil) { + _selectedCountry = selectedCountry + self.enabled = enabled + self.allowedCountries = allowedCountries + } + + // Common countries list + private let allCountries: [CountryData] = [ + CountryData(name: "United States", dialCode: "+1", code: "US"), + CountryData(name: "United Kingdom", dialCode: "+44", code: "GB"), + CountryData(name: "Canada", dialCode: "+1", code: "CA"), + CountryData(name: "Australia", dialCode: "+61", code: "AU"), + CountryData(name: "Germany", dialCode: "+49", code: "DE"), + CountryData(name: "France", dialCode: "+33", code: "FR"), + CountryData(name: "India", dialCode: "+91", code: "IN"), + CountryData(name: "Nigeria", dialCode: "+234", code: "NG"), + CountryData(name: "South Africa", dialCode: "+27", code: "ZA"), + CountryData(name: "Japan", dialCode: "+81", code: "JP"), + CountryData(name: "China", dialCode: "+86", code: "CN"), + CountryData(name: "Brazil", dialCode: "+55", code: "BR"), + CountryData(name: "Mexico", dialCode: "+52", code: "MX"), + CountryData(name: "Spain", dialCode: "+34", code: "ES"), + CountryData(name: "Italy", dialCode: "+39", code: "IT"), + ] + + private var filteredCountries: [CountryData] { + if let allowedCountries = allowedCountries { + return allCountries.filter { allowedCountries.contains($0.code) } + } + return allCountries + } + + public var body: some View { + Menu { + ForEach(filteredCountries, id: \.code) { country in + Button { + selectedCountry = country + } label: { + Text("\(country.flag) \(country.name) (\(country.dialCode))") + } + .accessibilityIdentifier("country-option-\(country.code)") + } + } label: { + HStack(spacing: 4) { + Text(selectedCountry.flag) + .font(.title3) + Text(selectedCountry.dialCode) + .font(.body) + .foregroundStyle(.primary) + Image(systemName: "chevron.down") + .font(.caption2) + .foregroundStyle(.secondary) + } + } + .accessibilityIdentifier("country-selector") + .disabled(!enabled) + } +} diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Components/VerificationCodeInputField.swift b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Components/VerificationCodeInputField.swift new file mode 100644 index 00000000000..cc226a33c32 --- /dev/null +++ b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Components/VerificationCodeInputField.swift @@ -0,0 +1,579 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import SwiftUI +import UIKit + +public struct VerificationCodeInputField: View { + public init(code: Binding, + codeLength: Int = 6, + isError: Bool = false, + errorMessage: String? = nil, + validations: [FormValidator] = [], + maintainsValidationMessage: Bool = false, + onCodeComplete: @escaping (String) -> Void = { _ in }, + onCodeChange: @escaping (String) -> Void = { _ in }) { + _code = code + self.codeLength = codeLength + self.isError = isError + self.errorMessage = errorMessage + self.validations = validations + self.maintainsValidationMessage = maintainsValidationMessage + self.onCodeComplete = onCodeComplete + self.onCodeChange = onCodeChange + _digitFields = State(initialValue: Array(repeating: "", count: codeLength)) + } + + @Binding var code: String + let codeLength: Int + let isError: Bool + let errorMessage: String? + let validations: [FormValidator] + let maintainsValidationMessage: Bool + let onCodeComplete: (String) -> Void + let onCodeChange: (String) -> Void + + @State private var digitFields: [String] = [] + @State private var focusedIndex: Int? = nil + @State private var pendingInternalCodeUpdates = 0 + @State private var hasInteracted: Bool = false + + private var allRequirementsMet: Bool { + validations.allSatisfy { $0.isValid(input: code) } + } + + public var body: some View { + VStack(spacing: 8) { + HStack(spacing: 8) { + ForEach(0 ..< codeLength, id: \.self) { index in + SingleDigitField( + digit: $digitFields[index], + isError: isError, + isFocused: focusedIndex == index, + maxDigits: codeLength - index, + position: index + 1, + totalDigits: codeLength, + onDigitChanged: { newDigit in + handleDigitChanged(at: index, newDigit: newDigit) + }, + onBackspace: { + handleBackspace(at: index) + }, + onFocusChanged: { isFocused in + DispatchQueue.main.async { + if isFocused { + if focusedIndex != index { + withAnimation(.easeInOut(duration: 0.2)) { + focusedIndex = index + } + } + } else if focusedIndex == index { + withAnimation(.easeInOut(duration: 0.2)) { + focusedIndex = nil + } + } + } + } + ) + } + } + + if isError, let errorMessage = errorMessage { + Text(errorMessage) + .font(.caption) + .foregroundColor(.red) + .frame(maxWidth: .infinity, alignment: .leading) + } + + if !validations + .isEmpty && hasInteracted && (maintainsValidationMessage || !allRequirementsMet) { + VStack(alignment: .leading, spacing: 4) { + ForEach(validations) { validator in + let isValid = validator.isValid(input: code) + Text(validator.message) + .font(.caption) + .strikethrough(isValid, color: .gray) + .foregroundStyle(isValid ? .gray : .red) + .fixedSize(horizontal: false, vertical: true) + } + } + .frame(maxWidth: .infinity, alignment: .leading) + } + } + .onAppear { + // Initialize digit fields from the code binding + updateDigitFieldsFromCode(shouldUpdateFocus: true, forceFocus: true) + } + .onChange(of: code) { _, _ in + if !hasInteracted && !code.isEmpty { + hasInteracted = true + } + if pendingInternalCodeUpdates > 0 { + pendingInternalCodeUpdates -= 1 + return + } + updateDigitFieldsFromCode(shouldUpdateFocus: true) + } + } + + private func updateDigitFieldsFromCode(shouldUpdateFocus: Bool, forceFocus: Bool = false) { + let sanitized = code.filter { $0.isNumber } + let truncated = String(sanitized.prefix(codeLength)) + var newFields = Array(repeating: "", count: codeLength) + + for (offset, character) in truncated.enumerated() { + newFields[offset] = String(character) + } + + let fieldsChanged = newFields != digitFields + if fieldsChanged { + digitFields = newFields + } + + if code != truncated { + commitCodeChange(truncated) + } + + if shouldUpdateFocus, fieldsChanged || forceFocus { + let newFocus = truncated.count < codeLength ? truncated.count : nil + DispatchQueue.main.async { + withAnimation(.easeInOut(duration: 0.2)) { + focusedIndex = newFocus + } + } + } + + if fieldsChanged, truncated.count == codeLength { + DispatchQueue.main.async { + onCodeComplete(truncated) + } + } + } + + private func commitCodeChange(_ newCode: String) { + if code != newCode { + pendingInternalCodeUpdates += 1 + code = newCode + } + } + + private func handleDigitChanged(at index: Int, newDigit: String) { + let sanitized = newDigit.filter { $0.isNumber } + + guard !sanitized.isEmpty else { + processSingleDigitInput(at: index, digit: "") + return + } + + let firstDigit = String(sanitized.prefix(1)) + processSingleDigitInput(at: index, digit: firstDigit) + + let remainder = String(sanitized.dropFirst()) + let availableSlots = max(codeLength - (index + 1), 0) + if availableSlots > 0 { + let trimmedRemainder = String(remainder.prefix(availableSlots)) + if !trimmedRemainder.isEmpty { + applyBulkInput(startingAt: index + 1, digits: trimmedRemainder) + } + } + } + + private func processSingleDigitInput(at index: Int, digit: String) { + if digitFields[index] != digit { + digitFields[index] = digit + } + + let newCode = digitFields.joined() + commitCodeChange(newCode) + onCodeChange(newCode) + + if !digit.isEmpty, let nextIndex = findNextEmptyField(startingFrom: index) { + DispatchQueue.main.async { + if focusedIndex != nextIndex { + withAnimation(.easeInOut(duration: 0.2)) { + focusedIndex = nextIndex + } + } + } + } + + if newCode.count == codeLength { + DispatchQueue.main.async { + onCodeComplete(newCode) + } + } + } + + private func handleBackspace(at index: Int) { + // If current field is empty, move to previous field and clear it + if digitFields[index].isEmpty, index > 0 { + digitFields[index - 1] = "" + DispatchQueue.main.async { + let previousIndex = index - 1 + if focusedIndex != previousIndex { + withAnimation(.easeInOut(duration: 0.2)) { + focusedIndex = previousIndex + } + } + } + } else { + // Clear current field + digitFields[index] = "" + } + + // Update the main code string + let newCode = digitFields.joined() + commitCodeChange(newCode) + onCodeChange(newCode) + } + + private func applyBulkInput(startingAt index: Int, digits: String) { + guard !digits.isEmpty, index < codeLength else { return } + + var updatedFields = digitFields + var currentIndex = index + + for digit in digits where currentIndex < codeLength { + updatedFields[currentIndex] = String(digit) + currentIndex += 1 + } + + if digitFields != updatedFields { + digitFields = updatedFields + } + + let newCode = updatedFields.joined() + commitCodeChange(newCode) + onCodeChange(newCode) + + if newCode.count == codeLength { + DispatchQueue.main.async { + onCodeComplete(newCode) + } + } else { + let clampedIndex = max(min(currentIndex - 1, codeLength - 1), 0) + if let nextIndex = findNextEmptyField(startingFrom: clampedIndex) { + DispatchQueue.main.async { + if focusedIndex != nextIndex { + withAnimation(.easeInOut(duration: 0.2)) { + focusedIndex = nextIndex + } + } + } + } + } + } + + private func findNextEmptyField(startingFrom index: Int) -> Int? { + // Look for the next empty field after the current index + for i in (index + 1) ..< codeLength { + if digitFields[i].isEmpty { + return i + } + } + // If no empty field found after current index, look from the beginning + for i in 0 ..< index { + if digitFields[i].isEmpty { + return i + } + } + return nil + } +} + +private struct SingleDigitField: View { + @Binding var digit: String + let isError: Bool + let isFocused: Bool + let maxDigits: Int + let position: Int + let totalDigits: Int + let onDigitChanged: (String) -> Void + let onBackspace: () -> Void + let onFocusChanged: (Bool) -> Void + + private var borderWidth: CGFloat { + if isError { return 2 } + if isFocused || !digit.isEmpty { return 3 } + return 1 + } + + private var borderColor: Color { + if isError { return .red } + if isFocused || !digit.isEmpty { return .accentColor } + return Color(.systemFill) + } + + var body: some View { + BackspaceAwareTextField( + text: $digit, + isFirstResponder: isFocused, + onDeleteBackwardWhenEmpty: { + if digit.isEmpty { + onBackspace() + } else { + digit = "" + } + }, + onFocusChanged: { isFocused in + onFocusChanged(isFocused) + }, + maxCharacters: maxDigits, + configuration: { textField in + textField.font = .systemFont(ofSize: 24, weight: .medium) + textField.textAlignment = .center + textField.keyboardType = .numberPad + textField.textContentType = .oneTimeCode + textField.autocapitalizationType = .none + textField.autocorrectionType = .no + }, + onTextChange: { newValue in + onDigitChanged(newValue) + } + ) + .frame(width: 48, height: 48) + .background( + RoundedRectangle(cornerRadius: 8) + .fill(Color.accentColor.opacity(0.05)) + .overlay( + RoundedRectangle(cornerRadius: 8) + .stroke(borderColor, lineWidth: borderWidth) + ) + ) + .frame(maxWidth: .infinity) + .accessibilityElement(children: .ignore) + .accessibilityLabel("Digit \(position) of \(totalDigits)") + .accessibilityValue(digit.isEmpty ? "Empty" : digit) + .accessibilityHint("Enter verification code digit") + .animation(.easeInOut(duration: 0.2), value: isFocused) + .animation(.easeInOut(duration: 0.2), value: digit) + } +} + +private struct BackspaceAwareTextField: UIViewRepresentable { + @Binding var text: String + var isFirstResponder: Bool + let onDeleteBackwardWhenEmpty: () -> Void + let onFocusChanged: (Bool) -> Void + let maxCharacters: Int + let configuration: (UITextField) -> Void + let onTextChange: (String) -> Void + + func makeUIView(context: Context) -> BackspaceUITextField { + context.coordinator.parent = self + let textField = BackspaceUITextField() + textField.delegate = context.coordinator + textField.addTarget( + context.coordinator, + action: #selector(Coordinator.editingChanged(_:)), + for: .editingChanged + ) + configuration(textField) + textField.onDeleteBackward = { [weak textField] in + guard let textField else { return } + if (textField.text ?? "").isEmpty { + onDeleteBackwardWhenEmpty() + } + } + return textField + } + + func updateUIView(_ uiView: BackspaceUITextField, context: Context) { + context.coordinator.parent = self + if uiView.text != text { + uiView.text = text + } + + uiView.onDeleteBackward = { [weak uiView] in + guard let uiView else { return } + if (uiView.text ?? "").isEmpty { + onDeleteBackwardWhenEmpty() + } + } + + if isFirstResponder { + if !context.coordinator.isFirstResponder { + context.coordinator.isFirstResponder = true + DispatchQueue.main.async { [weak uiView] in + guard let uiView, !uiView.isFirstResponder else { return } + uiView.becomeFirstResponder() + } + } + } else if context.coordinator.isFirstResponder { + context.coordinator.isFirstResponder = false + } + } + + func makeCoordinator() -> Coordinator { + Coordinator(parent: self) + } + + final class Coordinator: NSObject, UITextFieldDelegate { + var parent: BackspaceAwareTextField + var isFirstResponder = false + + init(parent: BackspaceAwareTextField) { + self.parent = parent + } + + @objc func editingChanged(_ sender: UITextField) { + let updatedText = sender.text ?? "" + parent.text = updatedText + parent.onTextChange(updatedText) + } + + func textFieldDidBeginEditing(_ textField: UITextField) { + isFirstResponder = true + animateFocusChange(for: textField, focused: true) + parent.onFocusChanged(true) + } + + func textFieldDidEndEditing(_ textField: UITextField) { + isFirstResponder = false + animateFocusChange(for: textField, focused: false) + parent.onFocusChanged(false) + } + + private func animateFocusChange(for textField: UITextField, focused: Bool) { + let targetTransform: CGAffineTransform = focused ? CGAffineTransform(scaleX: 1.05, y: 1.05) : + .identity + UIView.animate( + withDuration: 0.2, + delay: 0, + options: [.curveEaseInOut, .allowUserInteraction] + ) { + textField.transform = targetTransform + } + } + + func textField(_ textField: UITextField, + shouldChangeCharactersIn range: NSRange, + replacementString string: String) -> Bool { + if string.isEmpty { + return true + } + + let digitsOnly = string.filter { $0.isNumber } + guard !digitsOnly.isEmpty else { + return false + } + + let currentText = textField.text ?? "" + let nsCurrent = currentText as NSString + + if digitsOnly.count > 1 || string.count > 1 { + let limit = max(parent.maxCharacters, 1) + let truncated = String(digitsOnly.prefix(limit)) + let proposed = nsCurrent.replacingCharacters(in: range, with: truncated) + parent.onTextChange(String(proposed.prefix(limit))) + return false + } + + let updated = nsCurrent.replacingCharacters(in: range, with: digitsOnly) + return updated.count <= 1 + } + } +} + +private final class BackspaceUITextField: UITextField { + var onDeleteBackward: (() -> Void)? + + override func deleteBackward() { + let wasEmpty = (text ?? "").isEmpty + super.deleteBackward() + if wasEmpty { + onDeleteBackward?() + } + } +} + +// MARK: - Preview + +#Preview("Normal State") { + @Previewable @State var code = "" + + return VStack(spacing: 32) { + Text("Enter Verification Code") + .font(.title2) + .fontWeight(.semibold) + + VerificationCodeInputField( + code: $code, + onCodeComplete: { completedCode in + print("Code completed: \(completedCode)") + }, + onCodeChange: { newCode in + print("Code changed: \(newCode)") + } + ) + + Text("Current code: \(code)") + .font(.caption) + .foregroundColor(.secondary) + } + .padding() +} + +#Preview("Error State") { + @Previewable @State var code = "12345" + + return VStack(spacing: 32) { + Text("Enter Verification Code") + .font(.title2) + .fontWeight(.semibold) + + VerificationCodeInputField( + code: $code, + isError: true, + errorMessage: "Invalid verification code", + onCodeComplete: { completedCode in + print("Code completed: \(completedCode)") + }, + onCodeChange: { newCode in + print("Code changed: \(newCode)") + } + ) + + Text("Current code: \(code)") + .font(.caption) + .foregroundColor(.secondary) + } + .padding() +} + +#Preview("Custom Length") { + @Previewable @State var code = "" + + return VStack(spacing: 32) { + Text("Enter 4-Digit Code") + .font(.title2) + .fontWeight(.semibold) + + VerificationCodeInputField( + code: $code, + codeLength: 4, + onCodeComplete: { completedCode in + print("Code completed: \(completedCode)") + }, + onCodeChange: { newCode in + print("Code changed: \(newCode)") + } + ) + + Text("Current code: \(code)") + .font(.caption) + .foregroundColor(.secondary) + } + .padding() +} diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Extensions/Color+Hex.swift b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Extensions/Color+Hex.swift new file mode 100644 index 00000000000..1066edba52a --- /dev/null +++ b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Extensions/Color+Hex.swift @@ -0,0 +1,25 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import SwiftUI + +extension Color { + init(hex: UInt, alpha: Double = 1.0) { + let red = Double((hex >> 16) & 0xFF) / 255.0 + let green = Double((hex >> 8) & 0xFF) / 255.0 + let blue = Double(hex & 0xFF) / 255.0 + + self.init(.sRGB, red: red, green: green, blue: blue, opacity: alpha) + } +} diff --git a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/AccentColor.colorset/Contents.json b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/AccentColor.colorset/Contents.json similarity index 100% rename from samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/AccentColor.colorset/Contents.json rename to FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/AccentColor.colorset/Contents.json diff --git a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/AppIcon.appiconset/Contents.json b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/AppIcon.appiconset/Contents.json rename to FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json diff --git a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/Contents.json b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/Contents.json similarity index 100% rename from samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/Contents.json rename to FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/Contents.json diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/firebase-auth-logo.imageset/Contents.json b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/firebase-auth-logo.imageset/Contents.json new file mode 100644 index 00000000000..ec9b5e4a368 --- /dev/null +++ b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/firebase-auth-logo.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Product_Logomark_Authentication_Full_Color 1.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Product_Logomark_Authentication_Full_Color 1 (1).png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Product_Logomark_Authentication_Full_Color 1 (2).png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/firebase-auth-logo.imageset/Product_Logomark_Authentication_Full_Color 1 (1).png b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/firebase-auth-logo.imageset/Product_Logomark_Authentication_Full_Color 1 (1).png new file mode 100644 index 00000000000..fecbcb6dd41 Binary files /dev/null and b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/firebase-auth-logo.imageset/Product_Logomark_Authentication_Full_Color 1 (1).png differ diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/firebase-auth-logo.imageset/Product_Logomark_Authentication_Full_Color 1 (2).png b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/firebase-auth-logo.imageset/Product_Logomark_Authentication_Full_Color 1 (2).png new file mode 100644 index 00000000000..9df93f97a38 Binary files /dev/null and b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/firebase-auth-logo.imageset/Product_Logomark_Authentication_Full_Color 1 (2).png differ diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/firebase-auth-logo.imageset/Product_Logomark_Authentication_Full_Color 1.png b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/firebase-auth-logo.imageset/Product_Logomark_Authentication_Full_Color 1.png new file mode 100644 index 00000000000..bc9af3cc0c1 Binary files /dev/null and b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/firebase-auth-logo.imageset/Product_Logomark_Authentication_Full_Color 1.png differ diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-anonymous.imageset/Contents.json b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-anonymous.imageset/Contents.json new file mode 100644 index 00000000000..482a49b90ff --- /dev/null +++ b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-anonymous.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "fui_ic_anonymous_white_24dp 2.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "fui_ic_anonymous_white_24dp 1.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "fui_ic_anonymous_white_24dp.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-anonymous.imageset/fui_ic_anonymous_white_24dp 1.png b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-anonymous.imageset/fui_ic_anonymous_white_24dp 1.png new file mode 100644 index 00000000000..4867274485c Binary files /dev/null and b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-anonymous.imageset/fui_ic_anonymous_white_24dp 1.png differ diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-anonymous.imageset/fui_ic_anonymous_white_24dp 2.png b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-anonymous.imageset/fui_ic_anonymous_white_24dp 2.png new file mode 100644 index 00000000000..5c2f2bcd903 Binary files /dev/null and b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-anonymous.imageset/fui_ic_anonymous_white_24dp 2.png differ diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-anonymous.imageset/fui_ic_anonymous_white_24dp.png b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-anonymous.imageset/fui_ic_anonymous_white_24dp.png new file mode 100644 index 00000000000..9d57c10f7e0 Binary files /dev/null and b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-anonymous.imageset/fui_ic_anonymous_white_24dp.png differ diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-apple.imageset/Contents.json b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-apple.imageset/Contents.json new file mode 100644 index 00000000000..b8005dda548 --- /dev/null +++ b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-apple.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "fui_ic_apple_white_24dp 2.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "fui_ic_apple_white_24dp 1.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "fui_ic_apple_white_24dp.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-apple.imageset/fui_ic_apple_white_24dp 1.png b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-apple.imageset/fui_ic_apple_white_24dp 1.png new file mode 100644 index 00000000000..d251bbd78f5 Binary files /dev/null and b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-apple.imageset/fui_ic_apple_white_24dp 1.png differ diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-apple.imageset/fui_ic_apple_white_24dp 2.png b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-apple.imageset/fui_ic_apple_white_24dp 2.png new file mode 100644 index 00000000000..7c239197b30 Binary files /dev/null and b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-apple.imageset/fui_ic_apple_white_24dp 2.png differ diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-apple.imageset/fui_ic_apple_white_24dp.png b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-apple.imageset/fui_ic_apple_white_24dp.png new file mode 100644 index 00000000000..0914e183233 Binary files /dev/null and b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-apple.imageset/fui_ic_apple_white_24dp.png differ diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-facebook.imageset/Contents.json b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-facebook.imageset/Contents.json new file mode 100644 index 00000000000..daff1371565 --- /dev/null +++ b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-facebook.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "fui_ic_facebook_icon.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "fui_ic_facebook_icon_x2.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "fui_ic_facebook_icon_x3.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-facebook.imageset/fui_ic_facebook_icon.png b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-facebook.imageset/fui_ic_facebook_icon.png new file mode 100644 index 00000000000..b8562f4939f Binary files /dev/null and b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-facebook.imageset/fui_ic_facebook_icon.png differ diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-facebook.imageset/fui_ic_facebook_icon_x2.png b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-facebook.imageset/fui_ic_facebook_icon_x2.png new file mode 100644 index 00000000000..deb223d3f1e Binary files /dev/null and b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-facebook.imageset/fui_ic_facebook_icon_x2.png differ diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-facebook.imageset/fui_ic_facebook_icon_x3.png b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-facebook.imageset/fui_ic_facebook_icon_x3.png new file mode 100644 index 00000000000..054ffec0ad7 Binary files /dev/null and b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-facebook.imageset/fui_ic_facebook_icon_x3.png differ diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-github.imageset/Contents.json b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-github.imageset/Contents.json new file mode 100644 index 00000000000..6acf81f95a4 --- /dev/null +++ b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-github.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "fui_ic_github_white_24dp 2.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "fui_ic_github_white_24dp 1.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "fui_ic_github_white_24dp.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-github.imageset/fui_ic_github_white_24dp 1.png b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-github.imageset/fui_ic_github_white_24dp 1.png new file mode 100644 index 00000000000..bad7f150f9a Binary files /dev/null and b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-github.imageset/fui_ic_github_white_24dp 1.png differ diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-github.imageset/fui_ic_github_white_24dp 2.png b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-github.imageset/fui_ic_github_white_24dp 2.png new file mode 100644 index 00000000000..aa84b536ca2 Binary files /dev/null and b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-github.imageset/fui_ic_github_white_24dp 2.png differ diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-github.imageset/fui_ic_github_white_24dp.png b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-github.imageset/fui_ic_github_white_24dp.png new file mode 100644 index 00000000000..437f627122a Binary files /dev/null and b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-github.imageset/fui_ic_github_white_24dp.png differ diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-googleg.imageset/Contents.json b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-googleg.imageset/Contents.json new file mode 100644 index 00000000000..f6ede1b0b3b --- /dev/null +++ b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-googleg.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "fui_ic_googleg_color_24dp 2.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "fui_ic_googleg_color_24dp 1.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "fui_ic_googleg_color_24dp.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-googleg.imageset/fui_ic_googleg_color_24dp 1.png b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-googleg.imageset/fui_ic_googleg_color_24dp 1.png new file mode 100644 index 00000000000..c9f49bd31f5 Binary files /dev/null and b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-googleg.imageset/fui_ic_googleg_color_24dp 1.png differ diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-googleg.imageset/fui_ic_googleg_color_24dp 2.png b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-googleg.imageset/fui_ic_googleg_color_24dp 2.png new file mode 100644 index 00000000000..a3c7bf97cad Binary files /dev/null and b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-googleg.imageset/fui_ic_googleg_color_24dp 2.png differ diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-googleg.imageset/fui_ic_googleg_color_24dp.png b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-googleg.imageset/fui_ic_googleg_color_24dp.png new file mode 100644 index 00000000000..9df17f75fe8 Binary files /dev/null and b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-googleg.imageset/fui_ic_googleg_color_24dp.png differ diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-mail.imageset/Contents.json b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-mail.imageset/Contents.json new file mode 100644 index 00000000000..2401fa19fad --- /dev/null +++ b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-mail.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "fui_ic_mail_white_24dp 2.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "fui_ic_mail_white_24dp 1.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "fui_ic_mail_white_24dp.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-mail.imageset/fui_ic_mail_white_24dp 1.png b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-mail.imageset/fui_ic_mail_white_24dp 1.png new file mode 100644 index 00000000000..b8f42d5d781 Binary files /dev/null and b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-mail.imageset/fui_ic_mail_white_24dp 1.png differ diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-mail.imageset/fui_ic_mail_white_24dp 2.png b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-mail.imageset/fui_ic_mail_white_24dp 2.png new file mode 100644 index 00000000000..937721e2eb5 Binary files /dev/null and b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-mail.imageset/fui_ic_mail_white_24dp 2.png differ diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-mail.imageset/fui_ic_mail_white_24dp.png b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-mail.imageset/fui_ic_mail_white_24dp.png new file mode 100644 index 00000000000..273756411a4 Binary files /dev/null and b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-mail.imageset/fui_ic_mail_white_24dp.png differ diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-microsoft.imageset/Contents.json b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-microsoft.imageset/Contents.json new file mode 100644 index 00000000000..123e877f0a4 --- /dev/null +++ b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-microsoft.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "fui_ic_microsoft_24dp 2.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "fui_ic_microsoft_24dp 1.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "fui_ic_microsoft_24dp.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-microsoft.imageset/fui_ic_microsoft_24dp 1.png b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-microsoft.imageset/fui_ic_microsoft_24dp 1.png new file mode 100644 index 00000000000..b43f424a5de Binary files /dev/null and b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-microsoft.imageset/fui_ic_microsoft_24dp 1.png differ diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-microsoft.imageset/fui_ic_microsoft_24dp 2.png b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-microsoft.imageset/fui_ic_microsoft_24dp 2.png new file mode 100644 index 00000000000..5455ead2cfe Binary files /dev/null and b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-microsoft.imageset/fui_ic_microsoft_24dp 2.png differ diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-microsoft.imageset/fui_ic_microsoft_24dp.png b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-microsoft.imageset/fui_ic_microsoft_24dp.png new file mode 100644 index 00000000000..98ca3614c57 Binary files /dev/null and b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-microsoft.imageset/fui_ic_microsoft_24dp.png differ diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-phone.imageset/Contents.json b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-phone.imageset/Contents.json new file mode 100644 index 00000000000..14af6b80034 --- /dev/null +++ b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-phone.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "fui_ic_phone_white_24dp 2.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "fui_ic_phone_white_24dp 1.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "fui_ic_phone_white_24dp.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-phone.imageset/fui_ic_phone_white_24dp 1.png b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-phone.imageset/fui_ic_phone_white_24dp 1.png new file mode 100644 index 00000000000..e040bdf1a94 Binary files /dev/null and b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-phone.imageset/fui_ic_phone_white_24dp 1.png differ diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-phone.imageset/fui_ic_phone_white_24dp 2.png b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-phone.imageset/fui_ic_phone_white_24dp 2.png new file mode 100644 index 00000000000..70579d4aa65 Binary files /dev/null and b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-phone.imageset/fui_ic_phone_white_24dp 2.png differ diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-phone.imageset/fui_ic_phone_white_24dp.png b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-phone.imageset/fui_ic_phone_white_24dp.png new file mode 100644 index 00000000000..27a6b5438cc Binary files /dev/null and b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-phone.imageset/fui_ic_phone_white_24dp.png differ diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-twitter-x.imageset/Contents.json b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-twitter-x.imageset/Contents.json new file mode 100644 index 00000000000..24174d49ac4 --- /dev/null +++ b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-twitter-x.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "fui_ic_twitter_x.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "fui_ic_twitter_x_x2.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "fui_ic_twitter_x_x3.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-twitter-x.imageset/fui_ic_twitter_x.png b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-twitter-x.imageset/fui_ic_twitter_x.png new file mode 100644 index 00000000000..803b7a5e689 Binary files /dev/null and b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-twitter-x.imageset/fui_ic_twitter_x.png differ diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-twitter-x.imageset/fui_ic_twitter_x_x2.png b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-twitter-x.imageset/fui_ic_twitter_x_x2.png new file mode 100644 index 00000000000..dd26fab7baa Binary files /dev/null and b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-twitter-x.imageset/fui_ic_twitter_x_x2.png differ diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-twitter-x.imageset/fui_ic_twitter_x_x3.png b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-twitter-x.imageset/fui_ic_twitter_x_x3.png new file mode 100644 index 00000000000..dc5ad745643 Binary files /dev/null and b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-twitter-x.imageset/fui_ic_twitter_x_x3.png differ diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-yahoo.imageset/Contents.json b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-yahoo.imageset/Contents.json new file mode 100644 index 00000000000..9ae684f1b1a --- /dev/null +++ b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-yahoo.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "fui_ic_yahoo_24dp 2.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "fui_ic_yahoo_24dp 1.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "fui_ic_yahoo_24dp.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-yahoo.imageset/fui_ic_yahoo_24dp 1.png b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-yahoo.imageset/fui_ic_yahoo_24dp 1.png new file mode 100644 index 00000000000..0b733b01ae6 Binary files /dev/null and b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-yahoo.imageset/fui_ic_yahoo_24dp 1.png differ diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-yahoo.imageset/fui_ic_yahoo_24dp 2.png b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-yahoo.imageset/fui_ic_yahoo_24dp 2.png new file mode 100644 index 00000000000..be4fe60ce54 Binary files /dev/null and b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-yahoo.imageset/fui_ic_yahoo_24dp 2.png differ diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-yahoo.imageset/fui_ic_yahoo_24dp.png b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-yahoo.imageset/fui_ic_yahoo_24dp.png new file mode 100644 index 00000000000..9f6b1ec58b2 Binary files /dev/null and b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Resources/Assets.xcassets/fui-ic-yahoo.imageset/fui_ic_yahoo_24dp.png differ diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Theme/ProviderStyle.swift b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Theme/ProviderStyle.swift new file mode 100644 index 00000000000..e33c3f8694e --- /dev/null +++ b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Theme/ProviderStyle.swift @@ -0,0 +1,125 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import SwiftUI + +/// Styling configuration for authentication provider buttons +public struct ProviderStyle: Sendable { + public init(icon: Image? = nil, + backgroundColor: Color, + contentColor: Color, + iconTint: Color? = nil, + elevation: CGFloat = 2) { + self.icon = icon + self.backgroundColor = backgroundColor + self.contentColor = contentColor + self.iconTint = iconTint + self.elevation = elevation + } + + public let icon: Image? + public let backgroundColor: Color + public let contentColor: Color + public var iconTint: Color? + public let shape: AnyShape = .init(RoundedRectangle(cornerRadius: 4, style: .continuous)) + public let elevation: CGFloat + + public static let empty = ProviderStyle( + icon: nil, + backgroundColor: .white, + contentColor: .black + ) + + // MARK: - Predefined Styles + + public static var google: ProviderStyle { + ProviderStyle( + icon: Image(.fuiIcGoogleg), + backgroundColor: Color(hex: 0xFFFFFF), + contentColor: Color(hex: 0x757575) + ) + } + + public static var facebook: ProviderStyle { + ProviderStyle( + icon: Image(.fuiIcFacebook), + backgroundColor: Color(hex: 0x1877F2), + contentColor: Color(hex: 0xFFFFFF) + ) + } + + public static var twitter: ProviderStyle { + ProviderStyle( + icon: Image(.fuiIcTwitterX), + backgroundColor: Color.black, + contentColor: Color(hex: 0xFFFFFF) + ) + } + + public static var apple: ProviderStyle { + ProviderStyle( + icon: Image(.fuiIcApple), + backgroundColor: Color(hex: 0x000000), + contentColor: Color(hex: 0xFFFFFF) + ) + } + + public static var phone: ProviderStyle { + ProviderStyle( + icon: Image(.fuiIcPhone), + backgroundColor: Color(hex: 0x43C5A5), + contentColor: Color(hex: 0xFFFFFF) + ) + } + + public static var github: ProviderStyle { + ProviderStyle( + icon: Image(.fuiIcGithub), + backgroundColor: Color(hex: 0x24292E), + contentColor: Color(hex: 0xFFFFFF) + ) + } + + public static var microsoft: ProviderStyle { + ProviderStyle( + icon: Image(.fuiIcMicrosoft), + backgroundColor: Color(hex: 0x2F2F2F), + contentColor: Color(hex: 0xFFFFFF) + ) + } + + public static var yahoo: ProviderStyle { + ProviderStyle( + icon: Image(.fuiIcYahoo), + backgroundColor: Color(hex: 0x720E9E), + contentColor: Color(hex: 0xFFFFFF) + ) + } + + public static var anonymous: ProviderStyle { + ProviderStyle( + icon: Image(.fuiIcAnonymous), + backgroundColor: Color(hex: 0xF4B400), + contentColor: Color(hex: 0xFFFFFF) + ) + } + + public static var email: ProviderStyle { + ProviderStyle( + icon: Image(.fuiIcMail), + backgroundColor: Color(hex: 0xD0021B), + contentColor: Color(hex: 0xFFFFFF) + ) + } +} diff --git a/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Validation/FormValidator.swift b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Validation/FormValidator.swift new file mode 100644 index 00000000000..9326fc76d95 --- /dev/null +++ b/FirebaseSwiftUI/FirebaseAuthUIComponents/Sources/Validation/FormValidator.swift @@ -0,0 +1,91 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import Foundation + +public struct FormValidator: Identifiable { + public let id = UUID() + public let message: String + public let validate: (String?) -> Bool + + public init(message: String, validate: @escaping (String?) -> Bool) { + self.message = message + self.validate = validate + } + + public func isValid(input: String?) -> Bool { + return validate(input) + } +} + +@MainActor +public struct FormValidators { + public static let email = FormValidator( + message: "Email must contain @ and domain", + validate: { input in + guard let input else { return false } + let pattern = "^[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$" + let predicate = NSPredicate(format: "SELF MATCHES %@", pattern) + return predicate.evaluate(with: input) + } + ) + + public static func confirmPassword(password: @autoclosure @escaping () -> String) + -> FormValidator { + return FormValidator( + message: "Passwords must match", + validate: { input in + guard let input else { return false } + return input == password() + } + ) + } + + public static let atLeast6Characters = FormValidator( + message: "Password must be at least 6 characters", + validate: { input in + guard let input else { return false } + return input.count >= 6 + } + ) + + public static func notEmpty(label: String) -> FormValidator { + return FormValidator( + message: "\(label) cannot be empty", + validate: { input in + guard let input else { return false } + return !input.isEmpty + } + ) + } + + public static let phoneNumber = FormValidator( + message: "Phone number is not valid", + validate: { input in + guard let input else { return false } + // Basic phone number validation (digits only, at least 7 characters) + let digitsOnly = input.filter { $0.isNumber } + return digitsOnly.count >= 7 + } + ) + + public static let verificationCode = FormValidator( + message: "Verification code must be 6 digits", + validate: { input in + guard let input else { return false } + let digitsOnly = input.filter { $0.isNumber } + return digitsOnly.count == 6 + } + ) +} diff --git a/FirebaseSwiftUI/FirebaseFacebookSwiftUI/Sources/Services/AccountService+Facebook.swift b/FirebaseSwiftUI/FirebaseFacebookSwiftUI/Sources/Services/AccountService+Facebook.swift deleted file mode 100644 index 54f655dff2c..00000000000 --- a/FirebaseSwiftUI/FirebaseFacebookSwiftUI/Sources/Services/AccountService+Facebook.swift +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2025 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// -// AccountService+Facebook.swift -// FirebaseUI -// -// Created by Russell Wheatley on 14/05/2025. -// - -@preconcurrency import FirebaseAuth -import FirebaseAuthSwiftUI -import Observation - -protocol FacebookOperationReauthentication { - var facebookProvider: FacebookProviderAuthUI { get } -} - -extension FacebookOperationReauthentication { - @MainActor func reauthenticate() async throws -> AuthenticationToken { - guard let user = Auth.auth().currentUser else { - throw AuthServiceError.reauthenticationRequired("No user currently signed-in") - } - - do { - let credential = try await facebookProvider - .signInWithFacebook(isLimitedLogin: facebookProvider.isLimitedLogin) - try await user.reauthenticate(with: credential) - - return .firebase("") - } catch { - throw AuthServiceError.signInFailed(underlying: error) - } - } -} - -@MainActor -class FacebookDeleteUserOperation: AuthenticatedOperation, - @preconcurrency FacebookOperationReauthentication { - let facebookProvider: FacebookProviderAuthUI - init(facebookProvider: FacebookProviderAuthUI) { - self.facebookProvider = facebookProvider - } - - func callAsFunction(on user: User) async throws { - try await callAsFunction(on: user) { - try await user.delete() - } - } -} diff --git a/FirebaseSwiftUI/FirebaseFacebookSwiftUI/Sources/Services/AuthService+Facebook.swift b/FirebaseSwiftUI/FirebaseFacebookSwiftUI/Sources/Services/AuthService+Facebook.swift index 5aa84813408..68c201f2cd4 100644 --- a/FirebaseSwiftUI/FirebaseFacebookSwiftUI/Sources/Services/AuthService+Facebook.swift +++ b/FirebaseSwiftUI/FirebaseFacebookSwiftUI/Sources/Services/AuthService+Facebook.swift @@ -23,9 +23,9 @@ import FirebaseAuthSwiftUI public extension AuthService { @discardableResult - func withFacebookSignIn(scopes scopes: [String]? = nil) -> AuthService { - FacebookProviderAuthUI.configureProvider(scopes: scopes) - register(provider: FacebookProviderAuthUI.shared) + func withFacebookSignIn(_ provider: FacebookProviderSwift? = nil) -> AuthService { + registerProvider(providerWithButton: FacebookProviderAuthUI(provider: provider ?? + FacebookProviderSwift())) return self } } diff --git a/FirebaseSwiftUI/FirebaseFacebookSwiftUI/Sources/Services/FacebookProviderAuthUI.swift b/FirebaseSwiftUI/FirebaseFacebookSwiftUI/Sources/Services/FacebookProviderAuthUI.swift index 2501e506100..97abaa4c0f0 100644 --- a/FirebaseSwiftUI/FirebaseFacebookSwiftUI/Sources/Services/FacebookProviderAuthUI.swift +++ b/FirebaseSwiftUI/FirebaseFacebookSwiftUI/Sources/Services/FacebookProviderAuthUI.swift @@ -19,56 +19,22 @@ import FirebaseAuth import FirebaseAuthSwiftUI import SwiftUI -let kFacebookEmailScope = "email" -let kFacebookProfileScope = "public_profile" -let kDefaultFacebookScopes = [kFacebookEmailScope, kFacebookProfileScope] - -public enum FacebookProviderError: Error { - case signInCancelled(String) - case configurationInvalid(String) - case limitedLoginNonce(String) - case accessToken(String) - case authenticationToken(String) -} - -public class FacebookProviderAuthUI: FacebookProviderAuthUIProtocol { - public let id: String = "facebook" +public class FacebookProviderSwift: CredentialAuthProviderSwift { let scopes: [String] - let shortName = "Facebook" let providerId = "facebook.com" private let loginManager = LoginManager() private var rawNonce: String? private var shaNonce: String? // Needed for reauthentication - var isLimitedLogin: Bool = true - - @MainActor private static var _shared: FacebookProviderAuthUI = - .init(scopes: kDefaultFacebookScopes) - - @MainActor public static var shared: FacebookProviderAuthUI { - return _shared - } - - @MainActor public static func configureProvider(scopes: [String]? = nil) { - _shared = FacebookProviderAuthUI(scopes: scopes) - } - - private init(scopes: [String]? = nil) { - self.scopes = scopes ?? kDefaultFacebookScopes - } + private var isLimitedLogin: Bool = true - @MainActor public func authButton() -> AnyView { - AnyView(SignInWithFacebookButton()) - } - - public func deleteUser(user: User) async throws { - let operation = FacebookDeleteUserOperation(facebookProvider: self) - try await operation(on: user) + public init(scopes: [String] = ["email", "public_profile"]) { + self.scopes = scopes + isLimitedLogin = ATTrackingManager.trackingAuthorizationStatus != .authorized } - @MainActor public func signInWithFacebook(isLimitedLogin: Bool) async throws -> AuthCredential { + @MainActor public func createAuthCredential() async throws -> AuthCredential { let loginType: LoginTracking = isLimitedLogin ? .limited : .enabled - self.isLimitedLogin = isLimitedLogin guard let configuration: LoginConfiguration = { if loginType == .limited { @@ -86,8 +52,8 @@ public class FacebookProviderAuthUI: FacebookProviderAuthUIProtocol { ) } }() else { - throw FacebookProviderError - .configurationInvalid("Failed to create Facebook login configuration") + throw AuthServiceError + .providerAuthenticationFailed("Failed to create Facebook login configuration") } let result = try await withCheckedThrowingContinuation { (continuation: CheckedContinuation< @@ -100,7 +66,8 @@ public class FacebookProviderAuthUI: FacebookProviderAuthUIProtocol { switch result { case .cancelled: continuation - .resume(throwing: FacebookProviderError.signInCancelled("User cancelled sign-in")) + .resume(throwing: AuthServiceError + .signInCancelled("User cancelled sign-in for Facebook")) case let .failed(error): continuation.resume(throwing: error) case .success: @@ -123,8 +90,8 @@ public class FacebookProviderAuthUI: FacebookProviderAuthUIProtocol { return credential } else { - throw FacebookProviderError - .accessToken( + throw AuthServiceError + .providerAuthenticationFailed( "Access token has expired or not available. Please sign-in with Facebook before attempting to create a Facebook provider credential" ) } @@ -133,18 +100,34 @@ public class FacebookProviderAuthUI: FacebookProviderAuthUIProtocol { private func limitedLogin() throws -> AuthCredential { if let idToken = AuthenticationToken.current { guard let nonce = rawNonce else { - throw FacebookProviderError - .limitedLoginNonce("`rawNonce` has not been generated for Facebook limited login") + throw AuthServiceError + .providerAuthenticationFailed( + "`rawNonce` has not been generated for Facebook limited login" + ) } - let credential = OAuthProvider.credential(withProviderID: providerId, + let credential = OAuthProvider.credential(providerID: .facebook, idToken: idToken.tokenString, rawNonce: nonce) return credential } else { - throw FacebookProviderError - .authenticationToken( + throw AuthServiceError + .providerAuthenticationFailed( "Authentication is not available. Please sign-in with Facebook before attempting to create a Facebook provider credential" ) } } } + +public class FacebookProviderAuthUI: AuthProviderUI { + private let typedProvider: FacebookProviderSwift + public var provider: AuthProviderSwift { typedProvider } + public let id: String = "facebook.com" + + public init(provider: FacebookProviderSwift) { + typedProvider = provider + } + + @MainActor public func authButton() -> AnyView { + AnyView(SignInWithFacebookButton(facebookProvider: typedProvider)) + } +} diff --git a/FirebaseSwiftUI/FirebaseFacebookSwiftUI/Sources/Views/SignInWithFacebookButton.swift b/FirebaseSwiftUI/FirebaseFacebookSwiftUI/Sources/Views/SignInWithFacebookButton.swift index 6ddfc1d6815..d30a023bfbe 100644 --- a/FirebaseSwiftUI/FirebaseFacebookSwiftUI/Sources/Views/SignInWithFacebookButton.swift +++ b/FirebaseSwiftUI/FirebaseFacebookSwiftUI/Sources/Views/SignInWithFacebookButton.swift @@ -12,113 +12,54 @@ // See the License for the specific language governing permissions and // limitations under the License. -import AppTrackingTransparency -import FacebookCore -import FacebookLogin import FirebaseAuth import FirebaseAuthSwiftUI +import FirebaseAuthUIComponents import FirebaseCore import SwiftUI +/// A button for signing in with Facebook @MainActor public struct SignInWithFacebookButton { @Environment(AuthService.self) private var authService - @State private var errorMessage = "" - @State private var showCanceledAlert = false - @State private var limitedLogin = true - @State private var showUserTrackingAlert = false - @State private var trackingAuthorizationStatus: ATTrackingManager - .AuthorizationStatus = .notDetermined + @Environment(\.accountConflictHandler) private var accountConflictHandler + @Environment(\.mfaHandler) private var mfaHandler + @Environment(\.reportError) private var reportError + let facebookProvider: FacebookProviderSwift - public init() { - _trackingAuthorizationStatus = State(initialValue: ATTrackingManager - .trackingAuthorizationStatus) - } - - private var limitedLoginBinding: Binding { - Binding( - get: { self.limitedLogin }, - set: { newValue in - if trackingAuthorizationStatus == .authorized { - self.limitedLogin = newValue - } else { - self.limitedLogin = true - } - } - ) - } - - func requestTrackingPermission() { - ATTrackingManager.requestTrackingAuthorization { status in - Task { @MainActor in - trackingAuthorizationStatus = status - if status != .authorized { - showUserTrackingAlert = true - } - } - } + public init(facebookProvider: FacebookProviderSwift) { + self.facebookProvider = facebookProvider } } extension SignInWithFacebookButton: View { public var body: some View { - Button(action: { + AuthProviderButton( + label: authService.string.facebookLoginButtonLabel, + style: .facebook, + accessibilityId: "sign-in-with-facebook-button" + ) { Task { do { - try await authService.signInWithFacebook(limitedLogin: limitedLogin) + let outcome = try await authService.signIn(facebookProvider) + + // Handle MFA at view level + if case let .mfaRequired(mfaInfo) = outcome, + let onMFA = mfaHandler { + onMFA(mfaInfo) + return + } } catch { - switch error { - case FacebookProviderError.signInCancelled: - showCanceledAlert = true - default: - errorMessage = authService.string.localizedErrorMessage(for: error) + reportError?(error) + + if case let AuthServiceError.accountConflict(ctx) = error, + let onConflict = accountConflictHandler { + onConflict(ctx) + return } - } - } - }) { - HStack { - Image(systemName: "f.circle.fill") - .font(.title2) - .foregroundColor(.white) - Text(authService.string.facebookLoginButtonLabel) - .fontWeight(.semibold) - .foregroundColor(.white) - } - .frame(maxWidth: .infinity, alignment: .leading) - .padding() - .frame(maxWidth: .infinity) - .background(Color.blue) - .cornerRadius(8) - } - .alert(isPresented: $showCanceledAlert) { - Alert( - title: Text(authService.string.facebookLoginCancelledLabel), - dismissButton: .default(Text(authService.string.okButtonLabel)) - ) - } - HStack { - Text(authService.string.authorizeUserTrackingLabel) - .font(.footnote) - .foregroundColor(.blue) - .underline() - .onTapGesture { - requestTrackingPermission() + throw error } - Toggle(isOn: limitedLoginBinding) { - HStack { - Spacer() // This will push the text to the left of the toggle - Text(authService.string.facebookLimitedLoginLabel) - .foregroundColor(.blue) - } - } - .toggleStyle(SwitchToggleStyle(tint: .green)) - .alert(isPresented: $showUserTrackingAlert) { - Alert( - title: Text(authService.string.authorizeUserTrackingLabel), - message: Text(authService.string.facebookAuthorizeUserTrackingMessage), - dismissButton: .default(Text(authService.string.okButtonLabel)) - ) } } } @@ -126,6 +67,7 @@ extension SignInWithFacebookButton: View { #Preview { FirebaseOptions.dummyConfigurationForPreview() - return SignInWithFacebookButton() + let facebookProvider = FacebookProviderSwift() + return SignInWithFacebookButton(facebookProvider: facebookProvider) .environment(AuthService()) } diff --git a/FirebaseSwiftUI/FirebaseGoogleSwiftUI/Sources/Services/AccountService+Google.swift b/FirebaseSwiftUI/FirebaseGoogleSwiftUI/Sources/Services/AccountService+Google.swift deleted file mode 100644 index f51d1501c49..00000000000 --- a/FirebaseSwiftUI/FirebaseGoogleSwiftUI/Sources/Services/AccountService+Google.swift +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright 2025 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// -// AccountService+Google.swift -// FirebaseUI -// -// Created by Russell Wheatley on 22/05/2025. -// - -// -// AccountService+Facebook.swift -// FirebaseUI -// -// Created by Russell Wheatley on 14/05/2025. -// - -@preconcurrency import FirebaseAuth -import FirebaseAuthSwiftUI -import Observation - -protocol GoogleOperationReauthentication { - var googleProvider: GoogleProviderAuthUI { get } -} - -extension GoogleOperationReauthentication { - @MainActor func reauthenticate() async throws -> AuthenticationToken { - guard let user = Auth.auth().currentUser else { - throw AuthServiceError.reauthenticationRequired("No user currently signed-in") - } - - do { - let credential = try await googleProvider - .signInWithGoogle(clientID: googleProvider.clientID) - try await user.reauthenticate(with: credential) - - return .firebase("") - } catch { - throw AuthServiceError.signInFailed(underlying: error) - } - } -} - -@MainActor -class GoogleDeleteUserOperation: AuthenticatedOperation, - @preconcurrency GoogleOperationReauthentication { - let googleProvider: GoogleProviderAuthUI - init(googleProvider: GoogleProviderAuthUI) { - self.googleProvider = googleProvider - } - - func callAsFunction(on user: User) async throws { - try await callAsFunction(on: user) { - try await user.delete() - } - } -} diff --git a/FirebaseSwiftUI/FirebaseGoogleSwiftUI/Sources/Services/AuthService+Google.swift b/FirebaseSwiftUI/FirebaseGoogleSwiftUI/Sources/Services/AuthService+Google.swift index 2e51b84785c..d968e83b2f7 100644 --- a/FirebaseSwiftUI/FirebaseGoogleSwiftUI/Sources/Services/AuthService+Google.swift +++ b/FirebaseSwiftUI/FirebaseGoogleSwiftUI/Sources/Services/AuthService+Google.swift @@ -23,9 +23,9 @@ import FirebaseAuthSwiftUI public extension AuthService { @discardableResult - func withGoogleSignIn(scopes scopes: [String]? = nil) -> AuthService { - let clientID = auth.app?.options.clientID ?? "" - register(provider: GoogleProviderAuthUI(scopes: scopes, clientID: clientID)) + func withGoogleSignIn(_ provider: GoogleProviderSwift? = nil) -> AuthService { + registerProvider(providerWithButton: GoogleProviderAuthUI(provider: provider ?? + GoogleProviderSwift(clientID: auth.app?.options.clientID ?? ""))) return self } } diff --git a/FirebaseSwiftUI/FirebaseGoogleSwiftUI/Sources/Services/GoogleProviderAuthUI.swift b/FirebaseSwiftUI/FirebaseGoogleSwiftUI/Sources/Services/GoogleProviderAuthUI.swift index 236e66289f8..5c65e71b514 100644 --- a/FirebaseSwiftUI/FirebaseGoogleSwiftUI/Sources/Services/GoogleProviderAuthUI.swift +++ b/FirebaseSwiftUI/FirebaseGoogleSwiftUI/Sources/Services/GoogleProviderAuthUI.swift @@ -19,41 +19,24 @@ import GoogleSignIn import GoogleSignInSwift import SwiftUI -let kGoogleUserInfoEmailScope = "https://www.googleapis.com/auth/userinfo.email" -let kGoogleUserInfoProfileScope = "https://www.googleapis.com/auth/userinfo.profile" -let kDefaultScopes = [kGoogleUserInfoEmailScope, kGoogleUserInfoProfileScope] - -public enum GoogleProviderError: Error { - case rootViewControllerNotFound(String) - case authenticationToken(String) - case user(String) -} - -public class GoogleProviderAuthUI: @preconcurrency GoogleProviderAuthUIProtocol { - public let id: String = "google" +public class GoogleProviderSwift: CredentialAuthProviderSwift { let scopes: [String] - let shortName = "Google" + let clientID: String let providerId = "google.com" - public let clientID: String - public init(scopes: [String]? = nil, clientID: String = FirebaseApp.app()!.options.clientID!) { - self.scopes = scopes ?? kDefaultScopes - self.clientID = clientID - } - - @MainActor public func authButton() -> AnyView { - // Moved to SignInWithGoogleButton so we could sign in via AuthService - AnyView(SignInWithGoogleButton()) - } - public func deleteUser(user: User) async throws { - let operation = GoogleDeleteUserOperation(googleProvider: self) - try await operation(on: user) + public init(scopes: [String] = [ + "https://www.googleapis.com/auth/userinfo.email", + "https://www.googleapis.com/auth/userinfo.profile", + ], + clientID: String) { + self.clientID = clientID + self.scopes = scopes } - @MainActor public func signInWithGoogle(clientID: String) async throws -> AuthCredential { + @MainActor public func createAuthCredential() async throws -> AuthCredential { guard let presentingViewController = await (UIApplication.shared.connectedScenes .first as? UIWindowScene)?.windows.first?.rootViewController else { - throw GoogleProviderError + throw AuthServiceError .rootViewControllerNotFound( "Root View controller is not available to present Google sign-in View." ) @@ -74,7 +57,8 @@ public class GoogleProviderAuthUI: @preconcurrency GoogleProviderAuthUIProtocol guard let user = result?.user, let idToken = user.idToken?.tokenString else { continuation - .resume(throwing: GoogleProviderError.user("Failed to retrieve user or idToken.")) + .resume(throwing: AuthServiceError + .providerAuthenticationFailed("Failed to retrieve user or idToken.")) return } @@ -85,3 +69,17 @@ public class GoogleProviderAuthUI: @preconcurrency GoogleProviderAuthUIProtocol } } } + +public class GoogleProviderAuthUI: AuthProviderUI { + private let typedProvider: GoogleProviderSwift + public var provider: AuthProviderSwift { typedProvider } + public let id: String = "google.com" + + public init(provider: GoogleProviderSwift) { + typedProvider = provider + } + + @MainActor public func authButton() -> AnyView { + AnyView(SignInWithGoogleButton(googleProvider: typedProvider)) + } +} diff --git a/FirebaseSwiftUI/FirebaseGoogleSwiftUI/Sources/Views/SignInWithGoogleButton.swift b/FirebaseSwiftUI/FirebaseGoogleSwiftUI/Sources/Views/SignInWithGoogleButton.swift index 634f33cbdc2..13ed3e807ce 100644 --- a/FirebaseSwiftUI/FirebaseGoogleSwiftUI/Sources/Views/SignInWithGoogleButton.swift +++ b/FirebaseSwiftUI/FirebaseGoogleSwiftUI/Sources/Views/SignInWithGoogleButton.swift @@ -19,26 +19,51 @@ // Created by Russell Wheatley on 22/05/2025. // import FirebaseAuthSwiftUI +import FirebaseAuthUIComponents import FirebaseCore -import GoogleSignInSwift import SwiftUI @MainActor public struct SignInWithGoogleButton { @Environment(AuthService.self) private var authService + @Environment(\.accountConflictHandler) private var accountConflictHandler + @Environment(\.mfaHandler) private var mfaHandler + @Environment(\.reportError) private var reportError + let googleProvider: GoogleProviderSwift - let customViewModel = GoogleSignInButtonViewModel( - scheme: .light, - style: .wide, - state: .normal - ) + public init(googleProvider: GoogleProviderSwift) { + self.googleProvider = googleProvider + } } extension SignInWithGoogleButton: View { public var body: some View { - GoogleSignInButton(viewModel: customViewModel) { + AuthProviderButton( + label: authService.string.googleLoginButtonLabel, + style: .google, + accessibilityId: "sign-in-with-google-button" + ) { Task { - try await authService.signInWithGoogle() + do { + let outcome = try await authService.signIn(googleProvider) + + // Handle MFA at view level + if case let .mfaRequired(mfaInfo) = outcome, + let onMFA = mfaHandler { + onMFA(mfaInfo) + return + } + } catch { + reportError?(error) + + if case let AuthServiceError.accountConflict(ctx) = error, + let onConflict = accountConflictHandler { + onConflict(ctx) + return + } + + throw error + } } } } @@ -46,6 +71,7 @@ extension SignInWithGoogleButton: View { #Preview { FirebaseOptions.dummyConfigurationForPreview() - return SignInWithGoogleButton() + let googleProvider = GoogleProviderSwift(clientID: "") + return SignInWithGoogleButton(googleProvider: googleProvider) .environment(AuthService()) } diff --git a/FirebaseSwiftUI/FirebaseOAuthSwiftUI/Sources/Services/AuthService+OAuth.swift b/FirebaseSwiftUI/FirebaseOAuthSwiftUI/Sources/Services/AuthService+OAuth.swift new file mode 100644 index 00000000000..b4b6034af6b --- /dev/null +++ b/FirebaseSwiftUI/FirebaseOAuthSwiftUI/Sources/Services/AuthService+OAuth.swift @@ -0,0 +1,30 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// +// AuthService+OAuth.swift +// FirebaseUI +// +// Created by Russell Wheatley on 21/10/2025. +// + +import FirebaseAuthSwiftUI + +public extension AuthService { + @discardableResult + func withOAuthSignIn(_ provider: OAuthProviderSwift) -> AuthService { + registerProvider(providerWithButton: OAuthProviderAuthUI(provider: provider)) + return self + } +} diff --git a/FirebaseSwiftUI/FirebaseOAuthSwiftUI/Sources/Services/OAuthProviderSwift+Presets.swift b/FirebaseSwiftUI/FirebaseOAuthSwiftUI/Sources/Services/OAuthProviderSwift+Presets.swift new file mode 100644 index 00000000000..f87f3b1a34d --- /dev/null +++ b/FirebaseSwiftUI/FirebaseOAuthSwiftUI/Sources/Services/OAuthProviderSwift+Presets.swift @@ -0,0 +1,66 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import FirebaseAuthUIComponents +import SwiftUI + +/// Preset configurations for common OAuth providers +public extension OAuthProviderSwift { + /// GitHub OAuth provider + /// - Parameters: + /// - scopes: GitHub scopes (default: ["user"]) + /// - Returns: Configured GitHub provider + static func github(scopes: [String] = ["user"]) -> OAuthProviderSwift { + return OAuthProviderSwift( + providerId: "github.com", + scopes: scopes, + displayName: "Sign in with GitHub", + buttonIcon: ProviderStyle.github.icon!, + buttonBackgroundColor: ProviderStyle.github.backgroundColor, + buttonForegroundColor: ProviderStyle.github.contentColor + ) + } + + /// Microsoft OAuth provider + /// - Parameters: + /// - scopes: Microsoft scopes (default: ["user.readwrite"]) + /// - Returns: Configured Microsoft provider + static func microsoft(scopes: [String] = ["user.readwrite"]) -> OAuthProviderSwift { + return OAuthProviderSwift( + providerId: "microsoft.com", + scopes: scopes, + customParameters: ["prompt": "consent"], + displayName: "Sign in with Microsoft", + buttonIcon: ProviderStyle.microsoft.icon!, + buttonBackgroundColor: ProviderStyle.microsoft.backgroundColor, + buttonForegroundColor: ProviderStyle.microsoft.contentColor + ) + } + + /// Yahoo OAuth provider + /// - Parameters: + /// - scopes: Yahoo scopes (default: ["user.readwrite"]) + /// - Returns: Configured Yahoo provider + static func yahoo(scopes: [String] = ["user.readwrite"]) -> OAuthProviderSwift { + return OAuthProviderSwift( + providerId: "yahoo.com", + scopes: scopes, + customParameters: ["prompt": "consent"], + displayName: "Sign in with Yahoo", + buttonIcon: ProviderStyle.yahoo.icon!, + buttonBackgroundColor: ProviderStyle.yahoo.backgroundColor, + buttonForegroundColor: ProviderStyle.yahoo.contentColor + ) + } +} diff --git a/FirebaseSwiftUI/FirebaseOAuthSwiftUI/Sources/Services/OAuthProviderSwift.swift b/FirebaseSwiftUI/FirebaseOAuthSwiftUI/Sources/Services/OAuthProviderSwift.swift new file mode 100644 index 00000000000..e20b52913be --- /dev/null +++ b/FirebaseSwiftUI/FirebaseOAuthSwiftUI/Sources/Services/OAuthProviderSwift.swift @@ -0,0 +1,133 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import FirebaseAuth +import FirebaseAuthSwiftUI +import FirebaseCore +import SwiftUI + +/// Configuration for a generic OAuth provider +public class OAuthProviderSwift: CredentialAuthProviderSwift { + public let providerId: String + public let scopes: [String] + public let customParameters: [String: String] + // Button appearance + public let displayName: String + public let buttonIcon: Image + public let buttonBackgroundColor: Color + public let buttonForegroundColor: Color + /// Initialize a generic OAuth provider + /// - Parameters: + /// - providerId: The OAuth provider ID (e.g., "github.com", "microsoft.com") + /// - scopes: OAuth scopes to request + /// - customParameters: Additional OAuth parameters + /// - displayName: Button label (e.g., "Sign in with GitHub") + /// - buttonIcon: Button icon image + /// - buttonBackgroundColor: Button background color + /// - buttonForegroundColor: Button text/icon color + public init(providerId: String, + scopes: [String] = [], + customParameters: [String: String] = [:], + displayName: String, + buttonIcon: Image, + buttonBackgroundColor: Color = .black, + buttonForegroundColor: Color = .white) { + self.providerId = providerId + self.scopes = scopes + self.customParameters = customParameters + self.displayName = displayName + self.buttonIcon = buttonIcon + self.buttonBackgroundColor = buttonBackgroundColor + self.buttonForegroundColor = buttonForegroundColor + } + + /// Convenience initializer using SF Symbol + /// - Parameters: + /// - providerId: The OAuth provider ID (e.g., "github.com", "microsoft.com") + /// - scopes: OAuth scopes to request + /// - customParameters: Additional OAuth parameters + /// - displayName: Button label (e.g., "Sign in with GitHub") + /// - iconSystemName: SF Symbol name + /// - buttonBackgroundColor: Button background color + /// - buttonForegroundColor: Button text/icon color + public convenience init(providerId: String, + scopes: [String] = [], + customParameters: [String: String] = [:], + displayName: String, + iconSystemName: String, + buttonBackgroundColor: Color = .black, + buttonForegroundColor: Color = .white) { + self.init( + providerId: providerId, + scopes: scopes, + customParameters: customParameters, + displayName: displayName, + buttonIcon: Image(systemName: iconSystemName), + buttonBackgroundColor: buttonBackgroundColor, + buttonForegroundColor: buttonForegroundColor + ) + } + + @MainActor public func createAuthCredential() async throws -> AuthCredential { + let provider = OAuthProvider(providerID: providerId) + + // Set scopes if provided + if !scopes.isEmpty { + provider.scopes = scopes + } + // Set custom parameters if provided + if !customParameters.isEmpty { + provider.customParameters = customParameters + } + + return try await withCheckedThrowingContinuation { continuation in + provider.getCredentialWith(nil) { credential, error in + if let error = error { + continuation.resume( + throwing: AuthServiceError.signInFailed(underlying: error) + ) + return + } + + guard let credential = credential else { + continuation.resume( + throwing: AuthServiceError.invalidCredentials( + "\(self.providerId) did not provide a valid AuthCredential" + ) + ) + return + } + + continuation.resume(returning: credential) + } + } + } +} + +public class OAuthProviderAuthUI: AuthProviderUI { + private let typedProvider: OAuthProviderSwift + public var provider: AuthProviderSwift { typedProvider } + + public init(provider: OAuthProviderSwift) { + typedProvider = provider + } + + public var id: String { + return typedProvider.providerId + } + + @MainActor public func authButton() -> AnyView { + AnyView(GenericOAuthButton(provider: typedProvider)) + } +} diff --git a/FirebaseSwiftUI/FirebaseOAuthSwiftUI/Sources/Views/GenericOAuthButton.swift b/FirebaseSwiftUI/FirebaseOAuthSwiftUI/Sources/Views/GenericOAuthButton.swift new file mode 100644 index 00000000000..60e42ab3388 --- /dev/null +++ b/FirebaseSwiftUI/FirebaseOAuthSwiftUI/Sources/Views/GenericOAuthButton.swift @@ -0,0 +1,74 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import FirebaseAuthSwiftUI +import FirebaseAuthUIComponents +import SwiftUI + +/// A generic OAuth sign-in button that adapts to any provider's configuration +@MainActor +public struct GenericOAuthButton { + @Environment(AuthService.self) private var authService + @Environment(\.accountConflictHandler) private var accountConflictHandler + @Environment(\.mfaHandler) private var mfaHandler + @Environment(\.reportError) private var reportError + let provider: OAuthProviderSwift + public init(provider: OAuthProviderSwift) { + self.provider = provider + } +} + +extension GenericOAuthButton: View { + public var body: some View { + // Create custom style from provider configuration + var resolvedStyle: ProviderStyle { + ProviderStyle( + icon: provider.buttonIcon, + backgroundColor: provider.buttonBackgroundColor, + contentColor: provider.buttonForegroundColor + ) + } + + return AnyView( + AuthProviderButton( + label: provider.displayName, + style: resolvedStyle, + accessibilityId: "sign-in-with-\(provider.providerId)-button" + ) { + Task { + do { + let outcome = try await authService.signIn(provider) + + // Handle MFA at view level + if case let .mfaRequired(mfaInfo) = outcome, + let onMFA = mfaHandler { + onMFA(mfaInfo) + return + } + } catch { + reportError?(error) + + if case let AuthServiceError.accountConflict(ctx) = error, + let onConflict = accountConflictHandler { + onConflict(ctx) + return + } + + throw error + } + } + } + ) + } +} diff --git a/FirebaseSwiftUI/FirebaseOAuthSwiftUI/Tests/FirebaseOAuthSwiftUITests/FirebaseOAuthSwiftUITests.swift b/FirebaseSwiftUI/FirebaseOAuthSwiftUI/Tests/FirebaseOAuthSwiftUITests/FirebaseOAuthSwiftUITests.swift new file mode 100644 index 00000000000..31b3bfd5bf8 --- /dev/null +++ b/FirebaseSwiftUI/FirebaseOAuthSwiftUI/Tests/FirebaseOAuthSwiftUITests/FirebaseOAuthSwiftUITests.swift @@ -0,0 +1,20 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +@testable import FirebaseOAuthSwiftUI +import Testing + +@Test func example() async throws { + // Write your test here and use APIs like `#expect(...)` to check expected conditions. +} diff --git a/FirebaseSwiftUI/FirebasePhoneAuthSwiftUI/Sources/Services/AuthService+Phone.swift b/FirebaseSwiftUI/FirebasePhoneAuthSwiftUI/Sources/Services/AuthService+Phone.swift index 462eb9a96f7..fd92945830c 100644 --- a/FirebaseSwiftUI/FirebasePhoneAuthSwiftUI/Sources/Services/AuthService+Phone.swift +++ b/FirebaseSwiftUI/FirebasePhoneAuthSwiftUI/Sources/Services/AuthService+Phone.swift @@ -22,9 +22,18 @@ import FirebaseAuthSwiftUI public extension AuthService { + /// Register phone sign-in with default behavior (navigates to enter phone number view) @discardableResult func withPhoneSignIn() -> AuthService { - register(provider: PhoneAuthProviderAuthUI()) + return withPhoneSignIn { [weak self] in + self?.navigator.push(.enterPhoneNumber) + } + } + + /// Register phone sign-in with custom behavior + @discardableResult + func withPhoneSignIn(onTap: @escaping () -> Void) -> AuthService { + registerProvider(providerWithButton: PhoneAuthProviderAuthUI(onTap: onTap)) return self } } diff --git a/FirebaseSwiftUI/FirebasePhoneAuthSwiftUI/Sources/Services/PhoneAuthProviderAuthUI.swift b/FirebaseSwiftUI/FirebasePhoneAuthSwiftUI/Sources/Services/PhoneAuthProviderAuthUI.swift index 13bf1c79568..8ac54b9d163 100644 --- a/FirebaseSwiftUI/FirebasePhoneAuthSwiftUI/Sources/Services/PhoneAuthProviderAuthUI.swift +++ b/FirebaseSwiftUI/FirebasePhoneAuthSwiftUI/Sources/Services/PhoneAuthProviderAuthUI.swift @@ -12,29 +12,31 @@ // See the License for the specific language governing permissions and // limitations under the License. -@preconcurrency import FirebaseAuth import FirebaseAuthSwiftUI import SwiftUI -public typealias VerificationID = String +/// Simple provider marker for phone authentication +public class PhoneProviderSwift: AuthProviderSwift { + public init() {} +} -public class PhoneAuthProviderAuthUI: @preconcurrency PhoneAuthProviderAuthUIProtocol { +public class PhoneAuthProviderAuthUI: AuthProviderUI { + private let typedProvider: PhoneProviderSwift + public var provider: AuthProviderSwift { typedProvider } public let id: String = "phone" - @MainActor public func authButton() -> AnyView { - AnyView(PhoneAuthButtonView()) + // Callback for when the phone auth button is tapped + private let onTap: () -> Void + + public init(onTap: @escaping () -> Void) { + typedProvider = PhoneProviderSwift() + self.onTap = onTap } - @MainActor public func verifyPhoneNumber(phoneNumber: String) async throws -> VerificationID { - return try await withCheckedThrowingContinuation { continuation in - PhoneAuthProvider.provider() - .verifyPhoneNumber(phoneNumber, uiDelegate: nil) { verificationID, error in - if let error = error { - continuation.resume(throwing: error) - return - } - continuation.resume(returning: verificationID!) - } + @MainActor public func authButton() -> AnyView { + let mainActorClosure: @MainActor () -> Void = { + self.onTap() } + return AnyView(PhoneAuthButtonView(onTap: mainActorClosure)) } } diff --git a/FirebaseSwiftUI/FirebasePhoneAuthSwiftUI/Sources/Views/PhoneAuthButtonView.swift b/FirebaseSwiftUI/FirebasePhoneAuthSwiftUI/Sources/Views/PhoneAuthButtonView.swift index 528519809a3..6b1d30ab89f 100644 --- a/FirebaseSwiftUI/FirebasePhoneAuthSwiftUI/Sources/Views/PhoneAuthButtonView.swift +++ b/FirebaseSwiftUI/FirebasePhoneAuthSwiftUI/Sources/Views/PhoneAuthButtonView.swift @@ -13,36 +13,36 @@ // limitations under the License. import FirebaseAuthSwiftUI +import FirebaseAuthUIComponents import FirebaseCore import SwiftUI @MainActor public struct PhoneAuthButtonView { @Environment(AuthService.self) private var authService + private let onTap: @MainActor () -> Void - public init() {} + public init(onTap: @escaping @MainActor () -> Void) { + self.onTap = onTap + } } extension PhoneAuthButtonView: View { public var body: some View { - Button(action: { - authService.registerModalView(for: .phoneAuth) { - AnyView(PhoneAuthView().environment(authService)) - } - authService.presentModal(for: .phoneAuth) - }) { - Label("Sign in with Phone", systemImage: "phone.fill") - .foregroundColor(.white) - .padding() - .frame(maxWidth: .infinity, alignment: .leading) - .background(Color.green.opacity(0.8)) // Light green - .cornerRadius(8) + AuthProviderButton( + label: authService.string.phoneLoginButtonLabel, + style: .phone, + accessibilityId: "sign-in-with-phone-button" + ) { + onTap() } } } #Preview { FirebaseOptions.dummyConfigurationForPreview() - return PhoneAuthButtonView() - .environment(AuthService()) + return PhoneAuthButtonView { + print("Phone auth tapped") + } + .environment(AuthService()) } diff --git a/FirebaseSwiftUI/FirebasePhoneAuthSwiftUI/Sources/Views/PhoneAuthView.swift b/FirebaseSwiftUI/FirebasePhoneAuthSwiftUI/Sources/Views/PhoneAuthView.swift deleted file mode 100644 index 6483c3e0bbc..00000000000 --- a/FirebaseSwiftUI/FirebasePhoneAuthSwiftUI/Sources/Views/PhoneAuthView.swift +++ /dev/null @@ -1,120 +0,0 @@ -// Copyright 2025 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// -// PhoneAuthView.swift -// FirebaseUI -// -// Created by Russell Wheatley on 14/05/2025. -// - -import FirebaseAuthSwiftUI -import FirebaseCore -import SwiftUI - -@MainActor -public struct PhoneAuthView { - @Environment(AuthService.self) private var authService - @State private var errorMessage = "" - @State private var phoneNumber = "" - @State private var showVerificationCodeInput = false - @State private var verificationCode = "" - @State private var verificationID = "" - - public init() {} -} - -extension PhoneAuthView: View { - public var body: some View { - if authService.authenticationState != .authenticating { - VStack { - LabeledContent { - TextField(authService.string.enterPhoneNumberLabel, text: $phoneNumber) - .textInputAutocapitalization(.never) - .disableAutocorrection(true) - .submitLabel(.next) - } label: { - Image(systemName: "at") - }.padding(.vertical, 6) - .background(Divider(), alignment: .bottom) - .padding(.bottom, 4) - Button(action: { - Task { - do { - let id = try await authService.verifyPhoneNumber(phoneNumber: phoneNumber) - verificationID = id - showVerificationCodeInput = true - } catch { - errorMessage = authService.string.localizedErrorMessage( - for: error - ) - } - } - }) { - Text(authService.string.smsCodeSendButtonLabel) - .padding(.vertical, 8) - .frame(maxWidth: .infinity) - } - .disabled(!PhoneUtils.isValidPhoneNumber(phoneNumber)) - .padding([.top, .bottom], 8) - .frame(maxWidth: .infinity) - .buttonStyle(.borderedProminent) - Text(errorMessage).foregroundColor(.red) - }.sheet(isPresented: $showVerificationCodeInput) { - TextField(authService.string.phoneNumberVerificationCodeLabel, text: $verificationCode) - .keyboardType(.numberPad) - .padding() - .background(Color(.systemGray6)) - .cornerRadius(8) - .padding(.horizontal) - - Button(action: { - Task { - do { - try await authService.signInWithPhoneNumber( - verificationID: verificationID, - verificationCode: verificationCode - ) - } catch { - errorMessage = authService.string.localizedErrorMessage(for: error) - } - showVerificationCodeInput = false - authService.dismissModal() - } - }) { - Text(authService.string.verifyPhoneNumberAndSignInLabel) - .foregroundColor(.white) - .padding() - .frame(maxWidth: .infinity) - .background(Color.green) - .cornerRadius(8) - .padding(.horizontal) - } - }.onOpenURL { url in - authService.auth.canHandle(url) - } - } else { - ProgressView() - .progressViewStyle(CircularProgressViewStyle(tint: .white)) - .padding(.vertical, 8) - .frame(maxWidth: .infinity) - } - } -} - -#Preview { - FirebaseOptions.dummyConfigurationForPreview() - return PhoneAuthView() - .environment(AuthService()) -} diff --git a/FirebaseSwiftUI/FirebaseTwitterSwiftUI/Sources/Services/AuthService+Twitter.swift b/FirebaseSwiftUI/FirebaseTwitterSwiftUI/Sources/Services/AuthService+Twitter.swift new file mode 100644 index 00000000000..8a75e10369e --- /dev/null +++ b/FirebaseSwiftUI/FirebaseTwitterSwiftUI/Sources/Services/AuthService+Twitter.swift @@ -0,0 +1,31 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// +// AuthService+Twitter.swift +// FirebaseUI +// +// Created by Russell Wheatley on 01/05/2025. +// + +import FirebaseAuthSwiftUI + +public extension AuthService { + @discardableResult + func withTwitterSignIn(_ provider: TwitterProviderSwift? = nil) -> AuthService { + registerProvider(providerWithButton: TwitterProviderAuthUI(provider: provider ?? + TwitterProviderSwift())) + return self + } +} diff --git a/FirebaseSwiftUI/FirebaseTwitterSwiftUI/Sources/Services/TwitterProviderAuthUI.swift b/FirebaseSwiftUI/FirebaseTwitterSwiftUI/Sources/Services/TwitterProviderAuthUI.swift new file mode 100644 index 00000000000..5025676cd26 --- /dev/null +++ b/FirebaseSwiftUI/FirebaseTwitterSwiftUI/Sources/Services/TwitterProviderAuthUI.swift @@ -0,0 +1,59 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import FirebaseAuth +import FirebaseAuthSwiftUI +import FirebaseCore +import SwiftUI + +public class TwitterProviderSwift: CredentialAuthProviderSwift { + public let scopes: [String] + let providerId = "twitter.com" + + public init(scopes: [String] = ["user.readwrite"]) { + self.scopes = scopes + } + + @MainActor public func createAuthCredential() async throws -> AuthCredential { + let provider = OAuthProvider(providerID: providerId) + return try await withCheckedThrowingContinuation { continuation in + provider.getCredentialWith(nil) { credential, error in + if let error { + continuation + .resume(throwing: AuthServiceError.signInFailed(underlying: error)) + } else if let credential { + continuation.resume(returning: credential) + } else { + continuation + .resume(throwing: AuthServiceError + .invalidCredentials("Twitter did not provide a valid AuthCredential")) + } + } + } + } +} + +public class TwitterProviderAuthUI: AuthProviderUI { + private let typedProvider: TwitterProviderSwift + public var provider: AuthProviderSwift { typedProvider } + public let id: String = "twitter.com" + + public init(provider: TwitterProviderSwift) { + typedProvider = provider + } + + @MainActor public func authButton() -> AnyView { + AnyView(SignInWithTwitterButton(provider: typedProvider)) + } +} diff --git a/FirebaseSwiftUI/FirebaseTwitterSwiftUI/Sources/Views/SignInWithTwitterButton.swift b/FirebaseSwiftUI/FirebaseTwitterSwiftUI/Sources/Views/SignInWithTwitterButton.swift new file mode 100644 index 00000000000..2c7a75e916b --- /dev/null +++ b/FirebaseSwiftUI/FirebaseTwitterSwiftUI/Sources/Views/SignInWithTwitterButton.swift @@ -0,0 +1,63 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import FirebaseAuthSwiftUI +import FirebaseAuthUIComponents +import SwiftUI + +/// A button for signing in with Twitter/X +@MainActor +public struct SignInWithTwitterButton { + @Environment(AuthService.self) private var authService + @Environment(\.accountConflictHandler) private var accountConflictHandler + @Environment(\.mfaHandler) private var mfaHandler + @Environment(\.reportError) private var reportError + let provider: TwitterProviderSwift + public init(provider: TwitterProviderSwift) { + self.provider = provider + } +} + +extension SignInWithTwitterButton: View { + public var body: some View { + AuthProviderButton( + label: authService.string.twitterLoginButtonLabel, + style: .twitter, + accessibilityId: "sign-in-with-twitter-button" + ) { + Task { + do { + let outcome = try await authService.signIn(provider) + + // Handle MFA at view level + if case let .mfaRequired(mfaInfo) = outcome, + let onMFA = mfaHandler { + onMFA(mfaInfo) + return + } + } catch { + reportError?(error) + + if case let AuthServiceError.accountConflict(ctx) = error, + let onConflict = accountConflictHandler { + onConflict(ctx) + return + } + + throw error + } + } + } + } +} diff --git a/FirebaseSwiftUI/FirebaseTwitterSwiftUI/Tests/FirebaseTwitterSwiftUITests/FirebaseTwitterSwiftUITests.swift b/FirebaseSwiftUI/FirebaseTwitterSwiftUI/Tests/FirebaseTwitterSwiftUITests/FirebaseTwitterSwiftUITests.swift new file mode 100644 index 00000000000..f6bb2e3ec07 --- /dev/null +++ b/FirebaseSwiftUI/FirebaseTwitterSwiftUI/Tests/FirebaseTwitterSwiftUITests/FirebaseTwitterSwiftUITests.swift @@ -0,0 +1,20 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +@testable import FirebaseTwitterSwiftUI +import Testing + +@Test func example() async throws { + // Write your test here and use APIs like `#expect(...)` to check expected conditions. +} diff --git a/FirebaseUI.h b/FirebaseUI.h index 20df8aedb3a..ff689da43e6 100644 --- a/FirebaseUI.h +++ b/FirebaseUI.h @@ -24,11 +24,4 @@ FOUNDATION_EXPORT const unsigned char FirebaseUIVersionString[]; #import #import -#import -#import -#import -#import -#import -#import -#import #import diff --git a/FirebaseUI.podspec b/FirebaseUI.podspec index cc53251045a..c99b149b098 100644 --- a/FirebaseUI.podspec +++ b/FirebaseUI.podspec @@ -30,32 +30,4 @@ Pod::Spec.new do |s| storage.dependency 'FirebaseStorageUI', '~> 15.0' end - s.subspec 'Auth' do |auth| - auth.dependency 'FirebaseAuthUI', '~> 15.0' - end - - s.subspec 'Anonymous' do |anonymous| - anonymous.dependency 'FirebaseAnonymousAuthUI', '~> 15.0' - end - - s.subspec 'Email' do |email| - email.dependency 'FirebaseEmailAuthUI', '~> 15.0' - end - - s.subspec 'Facebook' do |facebook| - facebook.dependency 'FirebaseFacebookAuthUI', '~> 15.0' - end - - s.subspec 'Google' do |google| - google.dependency 'FirebaseGoogleAuthUI', '~> 15.0' - end - - s.subspec 'OAuth' do |oauth| - oauth.dependency 'FirebaseOAuthUI', '~> 15.0' - end - - s.subspec 'Phone' do |phone| - phone.dependency 'FirebasePhoneAuthUI', '~> 15.0' - end - end diff --git a/Package.swift b/Package.swift index d3cba1ce9d9..fbe4c3c147c 100644 --- a/Package.swift +++ b/Package.swift @@ -22,42 +22,14 @@ let package = Package( defaultLocalization: "en", platforms: [.iOS(.v17)], products: [ - .library( - name: "FirebaseAnonymousAuthUI", - targets: ["FirebaseAnonymousAuthUI"] - ), .library( name: "FirebaseDatabaseUI", targets: ["FirebaseDatabaseUI"] ), - .library( - name: "FirebaseAuthUI", - targets: ["FirebaseAuthUI"] - ), - .library( - name: "FirebaseEmailAuthUI", - targets: ["FirebaseEmailAuthUI"] - ), - .library( - name: "FirebaseFacebookAuthUI", - targets: ["FirebaseFacebookAuthUI"] - ), .library( name: "FirebaseFirestoreUI", targets: ["FirebaseFirestoreUI"] ), - .library( - name: "FirebaseGoogleAuthUI", - targets: ["FirebaseGoogleAuthUI"] - ), - .library( - name: "FirebaseOAuthUI", - targets: ["FirebaseOAuthUI"] - ), - .library( - name: "FirebasePhoneAuthUI", - targets: ["FirebasePhoneAuthUI"] - ), .library( name: "FirebaseStorageUI", targets: ["FirebaseStorageUI"] @@ -78,55 +50,61 @@ let package = Package( name: "FirebasePhoneAuthSwiftUI", targets: ["FirebasePhoneAuthSwiftUI"] ), + .library( + name: "FirebaseTwitterSwiftUI", + targets: ["FirebaseTwitterSwiftUI"] + ), + .library( + name: "FirebaseAppleSwiftUI", + targets: ["FirebaseAppleSwiftUI"] + ), + .library( + name: "FirebaseOAuthSwiftUI", + targets: ["FirebaseOAuthSwiftUI"] + ), ], dependencies: [ .package( - name: "Facebook", url: "https://github.com/facebook/facebook-ios-sdk.git", "17.0.0" ..< "18.0.0" ), .package( - name: "Firebase", url: "https://github.com/firebase/firebase-ios-sdk.git", "8.0.0" ..< "13.0.0" ), .package( - name: "GoogleSignIn", url: "https://github.com/google/GoogleSignIn-iOS", from: "7.0.0" ), .package( - name: "GoogleUtilities", url: "https://github.com/google/GoogleUtilities.git", "7.4.1" ..< "9.0.0" ), .package( - name: "SDWebImage", url: "https://github.com/SDWebImage/SDWebImage.git", from: "5.0.0" ), ], targets: [ .target( - name: "FirebaseAnonymousAuthUI", - dependencies: ["FirebaseAuthUI"], - path: "FirebaseAnonymousAuthUI/Sources", - exclude: ["Info.plist"], - resources: [ - .process("Resources"), - .process("Strings"), + name: "FirebaseDatabaseUI", + dependencies: [ + .product(name: "FirebaseDatabase", package: "firebase-ios-sdk"), ], + path: "FirebaseDatabaseUI/Sources", + exclude: ["Info.plist"], + resources: nil, publicHeadersPath: "Public", cSettings: [ .headerSearchPath("../../"), ] ), .target( - name: "FirebaseDatabaseUI", + name: "FirebaseFirestoreUI", dependencies: [ - .product(name: "FirebaseDatabase", package: "Firebase"), + .product(name: "FirebaseFirestore", package: "firebase-ios-sdk"), ], - path: "FirebaseDatabaseUI/Sources", + path: "FirebaseFirestoreUI/Sources", exclude: ["Info.plist"], resources: nil, publicHeadersPath: "Public", @@ -135,182 +113,166 @@ let package = Package( ] ), .target( - name: "FirebaseAuthUI", + name: "FirebaseStorageUI", dependencies: [ - .product(name: "FirebaseAuth", package: "Firebase"), - .product(name: "GULUserDefaults", package: "GoogleUtilities"), + .product(name: "FirebaseStorage", package: "firebase-ios-sdk"), + .product(name: "SDWebImage", package: "SDWebImage"), ], - path: "FirebaseAuthUI/Sources", + path: "FirebaseStorageUI/Sources", exclude: ["Info.plist"], - resources: [ - .process("Resources"), - .process("Strings"), - ], + resources: nil, publicHeadersPath: "Public", cSettings: [ .headerSearchPath("../../"), ] ), .target( - name: "FirebaseEmailAuthUI", - dependencies: ["FirebaseAuthUI"], - path: "FirebaseEmailAuthUI/Sources", - exclude: ["Info.plist"], + name: "FirebaseAuthUIComponents", + dependencies: [], + path: "FirebaseSwiftUI/FirebaseAuthUIComponents/Sources", resources: [ .process("Resources"), - ], - publicHeadersPath: "Public", - cSettings: [ - .headerSearchPath("../../"), ] ), .target( - name: "FirebaseFacebookAuthUI", + name: "FirebaseAuthSwiftUI", dependencies: [ - "FirebaseAuthUI", - .product(name: "FacebookLogin", package: "Facebook"), - .product(name: "FacebookCore", package: "Facebook"), + "FirebaseAuthUIComponents", + .product(name: "FirebaseAuth", package: "firebase-ios-sdk"), ], - path: "FirebaseFacebookAuthUI/Sources", - exclude: ["Info.plist"], + path: "FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources", resources: [ - .process("Resources"), .process("Strings"), ], - publicHeadersPath: "Public", - cSettings: [ - .headerSearchPath("../../"), + swiftSettings: [ + .swiftLanguageMode(.v6), ] ), - .target( - name: "FirebaseFirestoreUI", - dependencies: [ - .product(name: "FirebaseFirestore", package: "Firebase"), - ], - path: "FirebaseFirestoreUI/Sources", - exclude: ["Info.plist"], - resources: nil, - publicHeadersPath: "Public", - cSettings: [ - .headerSearchPath("../../"), + .testTarget( + name: "FirebaseAuthSwiftUITests", + dependencies: ["FirebaseAuthSwiftUI"], + path: "FirebaseSwiftUI/FirebaseAuthSwiftUI/Tests/", + swiftSettings: [ + .swiftLanguageMode(.v6), ] ), .target( - name: "FirebaseGoogleAuthUI", + name: "FirebaseGoogleSwiftUI", dependencies: [ - "FirebaseAuthUI", - "GoogleSignIn", - ], - path: "FirebaseGoogleAuthUI/Sources", - exclude: ["Info.plist"], - resources: [ - .process("Resources"), - .process("Strings"), + "FirebaseAuthSwiftUI", + "FirebaseAuthUIComponents", + .product(name: "GoogleSignIn", package: "GoogleSignIn-iOS"), + .product(name: "GoogleSignInSwift", package: "GoogleSignIn-iOS"), ], - publicHeadersPath: "Public", - cSettings: [ - .headerSearchPath("../../"), + path: "FirebaseSwiftUI/FirebaseGoogleSwiftUI/Sources", + swiftSettings: [ + .swiftLanguageMode(.v6), ] ), - .target( - name: "FirebaseOAuthUI", - dependencies: [ - "FirebaseAuthUI", - ], - path: "FirebaseOAuthUI/Sources", - exclude: ["Info.plist"], - resources: [ - .process("Resources"), - ], - publicHeadersPath: "Public", - cSettings: [ - .headerSearchPath("../../"), + .testTarget( + name: "FirebaseGoogleSwiftUITests", + dependencies: ["FirebaseGoogleSwiftUI"], + path: "FirebaseSwiftUI/FirebaseGoogleSwiftUI/Tests/", + swiftSettings: [ + .swiftLanguageMode(.v6), ] ), .target( - name: "FirebasePhoneAuthUI", + name: "FirebaseFacebookSwiftUI", dependencies: [ - "FirebaseAuthUI", - ], - path: "FirebasePhoneAuthUI/Sources", - exclude: ["Info.plist"], - resources: [ - .process("Resources"), - .process("Strings"), + "FirebaseAuthSwiftUI", + "FirebaseAuthUIComponents", + .product(name: "FacebookLogin", package: "facebook-ios-sdk"), + .product(name: "FacebookCore", package: "facebook-ios-sdk"), ], - publicHeadersPath: "Public", - cSettings: [ - .headerSearchPath("../../"), + path: "FirebaseSwiftUI/FirebaseFacebookSwiftUI/Sources", + swiftSettings: [ + .swiftLanguageMode(.v6), ] ), - .target( - name: "FirebaseStorageUI", - dependencies: [ - .product(name: "FirebaseStorage", package: "Firebase"), - .product(name: "SDWebImage", package: "SDWebImage"), - ], - path: "FirebaseStorageUI/Sources", - exclude: ["Info.plist"], - resources: nil, - publicHeadersPath: "Public", - cSettings: [ - .headerSearchPath("../../"), + .testTarget( + name: "FirebaseFacebookSwiftUITests", + dependencies: ["FirebaseFacebookSwiftUI"], + path: "FirebaseSwiftUI/FirebaseFacebookSwiftUI/Tests/", + swiftSettings: [ + .swiftLanguageMode(.v6), ] ), .target( - name: "FirebaseAuthSwiftUI", + name: "FirebasePhoneAuthSwiftUI", dependencies: [ - .product(name: "FirebaseAuth", package: "Firebase"), + "FirebaseAuthSwiftUI", + "FirebaseAuthUIComponents", ], - path: "FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources", - resources: [ - .process("Strings"), + path: "FirebaseSwiftUI/FirebasePhoneAuthSwiftUI/Sources", + swiftSettings: [ + .swiftLanguageMode(.v6), ] ), .testTarget( - name: "FirebaseAuthSwiftUITests", - dependencies: ["FirebaseAuthSwiftUI"], - path: "FirebaseSwiftUI/FirebaseAuthSwiftUI/Tests/" + name: "FirebasePhoneAuthSwiftUITests", + dependencies: ["FirebasePhoneAuthSwiftUI"], + path: "FirebaseSwiftUI/FirebasePhoneAuthSwiftUI/Tests/", + swiftSettings: [ + .swiftLanguageMode(.v6), + ] ), .target( - name: "FirebaseGoogleSwiftUI", + name: "FirebaseTwitterSwiftUI", dependencies: [ "FirebaseAuthSwiftUI", - "GoogleSignIn", - .product(name: "GoogleSignInSwift", package: "GoogleSignIn"), + "FirebaseAuthUIComponents", ], - path: "FirebaseSwiftUI/FirebaseGoogleSwiftUI/Sources" + path: "FirebaseSwiftUI/FirebaseTwitterSwiftUI/Sources", + swiftSettings: [ + .swiftLanguageMode(.v6), + ] ), .testTarget( - name: "FirebaseGoogleSwiftUITests", - dependencies: ["FirebaseGoogleSwiftUI"], - path: "FirebaseSwiftUI/FirebaseGoogleSwiftUI/Tests/" + name: "FirebaseTwitterSwiftUITests", + dependencies: ["FirebaseTwitterSwiftUI"], + path: "FirebaseSwiftUI/FirebaseTwitterSwiftUI/Tests/", + swiftSettings: [ + .swiftLanguageMode(.v6), + ] ), .target( - name: "FirebaseFacebookSwiftUI", + name: "FirebaseAppleSwiftUI", dependencies: [ "FirebaseAuthSwiftUI", - .product(name: "FacebookLogin", package: "Facebook"), - .product(name: "FacebookCore", package: "Facebook"), + "FirebaseAuthUIComponents", ], - path: "FirebaseSwiftUI/FirebaseFacebookSwiftUI/Sources" + path: "FirebaseSwiftUI/FirebaseAppleSwiftUI/Sources", + swiftSettings: [ + .swiftLanguageMode(.v6), + ] ), .testTarget( - name: "FirebaseFacebookSwiftUITests", - dependencies: ["FirebaseFacebookSwiftUI"], - path: "FirebaseSwiftUI/FirebaseFacebookSwiftUI/Tests/" + name: "FirebaseAppleSwiftUITests", + dependencies: ["FirebaseAppleSwiftUI"], + path: "FirebaseSwiftUI/FirebaseAppleSwiftUI/Tests/", + swiftSettings: [ + .swiftLanguageMode(.v6), + ] ), .target( - name: "FirebasePhoneAuthSwiftUI", + name: "FirebaseOAuthSwiftUI", dependencies: [ "FirebaseAuthSwiftUI", + "FirebaseAuthUIComponents", ], - path: "FirebaseSwiftUI/FirebasePhoneAuthSwiftUI/Sources" + path: "FirebaseSwiftUI/FirebaseOAuthSwiftUI/Sources", + swiftSettings: [ + .swiftLanguageMode(.v6), + ] ), .testTarget( - name: "FirebasePhoneAuthSwiftUITests", - dependencies: ["FirebasePhoneAuthSwiftUI"], - path: "FirebaseSwiftUI/FirebasePhoneAuthSwiftUI/Tests/" + name: "FirebaseOAuthSwiftUITests", + dependencies: ["FirebaseOAuthSwiftUI"], + path: "FirebaseSwiftUI/FirebaseOAuthSwiftUI/Tests/", + swiftSettings: [ + .swiftLanguageMode(.v6), + ] ), ] ) diff --git a/README.md b/README.md index 54776d67659..e116a9b6844 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@ # FirebaseUI for iOS — UI Bindings for Firebase -![Anonymous Auth](https://github.com/firebase/FirebaseUI-iOS/actions/workflows/anonymousauth.yml/badge.svg) ![Auth](https://github.com/firebase/FirebaseUI-iOS/actions/workflows/auth.yml/badge.svg) ![Database](https://github.com/firebase/FirebaseUI-iOS/actions/workflows/database.yml/badge.svg) ![Email Auth](https://github.com/firebase/FirebaseUI-iOS/actions/workflows/emailauth.yml/badge.svg) ![Facebook Auth](https://github.com/firebase/FirebaseUI-iOS/actions/workflows/facebookauth.yml/badge.svg) ![Firestore](https://github.com/firebase/FirebaseUI-iOS/actions/workflows/firestore.yml/badge.svg) ![Google Auth](https://github.com/firebase/FirebaseUI-iOS/actions/workflows/googleauth.yml/badge.svg) ![OAuth](https://github.com/firebase/FirebaseUI-iOS/actions/workflows/oauth.yml/badge.svg) ![Phone Auth](https://github.com/firebase/FirebaseUI-iOS/actions/workflows/phoneauth.yml/badge.svg) ![Storage](https://github.com/firebase/FirebaseUI-iOS/actions/workflows/storage.yml/badge.svg) ![Samples](https://github.com/firebase/FirebaseUI-iOS/actions/workflows/sample.yml/badge.svg) +![Database](https://github.com/firebase/FirebaseUI-iOS/actions/workflows/database.yml/badge.svg) ![Firestore](https://github.com/firebase/FirebaseUI-iOS/actions/workflows/firestore.yml/badge.svg) ![Storage](https://github.com/firebase/FirebaseUI-iOS/actions/workflows/storage.yml/badge.svg) ![SwiftUI Auth](https://github.com/firebase/FirebaseUI-iOS/actions/workflows/swiftui-auth.yml/badge.svg) ![Samples](https://github.com/firebase/FirebaseUI-iOS/actions/workflows/sample.yml/badge.svg) FirebaseUI is an open-source library for iOS that allows you to quickly connect common UI elements to the [Firebase](https://firebase.google.com?utm_source=FirebaseUI-iOS) database for data storage, allowing views to be updated in realtime as they change, and providing simple interfaces for common tasks like displaying lists or collections of items. -Additionally, FirebaseUI simplifies Firebase authentication by providing easy to use auth methods that integrate with common identity providers like Facebook, Twitter, and Google as well as allowing developers to use a built in headful UI for ease of development. +Additionally, FirebaseUI provides modern SwiftUI authentication components that simplify Firebase authentication by integrating with common identity providers like Facebook, Twitter, Google, and Apple. FirebaseUI clients are also available for [Android](https://github.com/firebase/FirebaseUI-Android) and [web](https://github.com/firebase/firebaseui-web). @@ -12,14 +12,26 @@ FirebaseUI clients are also available for [Android](https://github.com/firebase/ ## Installing FirebaseUI for iOS -FirebaseUI supports iOS 10.0+ and Xcode 11+. We recommend using [CocoaPods](https://cocoapods.org/pods/FirebaseUI), add -the following to your `Podfile`: +FirebaseUI supports iOS 17.0+ and Xcode 15+. -```ruby -pod 'FirebaseUI', '~> 8.0' # Pull in all Firebase UI features -``` +### Swift Package Manager (Recommended) + +For SwiftUI authentication and modern features, use Swift Package Manager: + +1. In Xcode, go to File > Add Package Dependencies +2. Enter the repository URL: `https://github.com/firebase/FirebaseUI-iOS` +3. Select the modules you need: + - `FirebaseAuthSwiftUI` - Core SwiftUI authentication + - `FirebaseGoogleSwiftUI` - Google Sign-In + - `FirebaseFacebookSwiftUI` - Facebook Login + - `FirebasePhoneAuthSwiftUI` - Phone Authentication + - `FirebaseAppleSwiftUI` - Sign in with Apple + - `FirebaseTwitterSwiftUI` - Twitter Login + - `FirebaseOAuthSwiftUI` - Generic OAuth providers + +### CocoaPods -If you don't want to use all of FirebaseUI, there are multiple subspecs which can selectively install subsets of the full feature set: +For UIKit data binding features (Database, Firestore, Storage), use [CocoaPods](https://cocoapods.org/pods/FirebaseUI): ```ruby # Only pull in Firestore features @@ -30,97 +42,71 @@ pod 'FirebaseUI/Database' # Only pull in Storage features pod 'FirebaseUI/Storage' - -# Only pull in Auth features -pod 'FirebaseUI/Auth' - -# Only pull in Facebook login features -pod 'FirebaseUI/Facebook' - -# Only pull in Google login features -pod 'FirebaseUI/Google' - -# Only pull in Phone Auth login features -pod 'FirebaseUI/Phone' ``` -If you're including FirebaseUI in a Swift project, make sure you also have: +If you're including FirebaseUI in a project, make sure you also have: ```ruby platform :ios, '13.0' use_frameworks! ``` -Otherwise, you can include the FirebaseUI Xcode project from this repo in -your project. You also need to -[add the Firebase framework](https://firebase.google.com/docs/ios/setup) -to your project. - ## Documentation -The READMEs for components of FirebaseUI can be found in their respective -project folders. +The READMEs for components of FirebaseUI can be found in their respective project folders. -- [Auth](FirebaseAuthUI/README.md) -- [PhoneAuth](FirebasePhoneAuthUI/README.md) +### SwiftUI Components +- [SwiftUI Authentication](FirebaseSwiftUI/README.md) + +### UIKit Data Binding Components - [Database](FirebaseDatabaseUI/README.md) - [Firestore](FirebaseFirestoreUI/README.md) - [Storage](FirebaseStorageUI/README.md) ## Local Setup -If you'd like to contribute to FirebaseUI for iOS, you'll need to run the -following commands to get your environment set up: +If you'd like to contribute to FirebaseUI for iOS, you'll need to run the following commands to get your environment set up: ```bash $ git clone https://github.com/firebase/FirebaseUI-iOS.git $ cd FirebaseUI-iOS -$ cd Auth # or PhoneAuth, Database, etc -$ pod install -``` - -Alternatively you can use `pod try FirebaseUI` to install the Objective-C or Swift sample projects. - -## Sample Project Configuration -You'll have to configure your Xcode project in order to run the samples. +# For SwiftUI components (uses Swift Package Manager) +$ cd samples/swiftui/FirebaseSwiftUISample +$ open FirebaseSwiftUISample.xcodeproj -1. Your Xcode project should contain a `GoogleService-Info.plist`, downloaded from [Firebase console](https://console.firebase.google.com) when you add your app to a Firebase project.
-Copy the `GoogleService-Info.plist` into the sample project folder (`samples/obj-c/GoogleService-Info.plist` or `samples/swift/GoogleService-Info.plist`). - -1. Update URL Types.
-Go to `Project Settings -> Info tab -> Url Types` and update values for: - + `REVERSED_CLIENT_ID` (get value from `GoogleService-Info.plist`) - + `fb{your-app-id}` (put Facebook App Id) - -1. Update `Info.plist` with Facebook configuration values - + `FacebookAppID -> {your-app-id}` (put Facebook App Id) - -1. Enable Keychain Sharing.
-Facebook SDK requires keychain sharing.
-This can be done here: `Project Settings -> Capabilities -> KeyChain Sharing -> ON` +# For UIKit data binding components (uses CocoaPods) +$ cd FirebaseDatabaseUI # or FirebaseFirestoreUI, FirebaseStorageUI +$ pod install +``` -1. Don't forget to configure your Firebase App Database using [Firebase console](https://console.firebase.google.com).
-Database should contain appropriate read/write permissions and folders (`objc_demo-chat` and `swift_demo-chat` respectively) +## Sample Projects -1. In Order to use `Phone Auth` provider you should [Configure Push Notifications](#configure-apple-push-notifications) +FirebaseUI includes several sample projects demonstrating different features: -#### Configure Apple Push Notifications +### SwiftUI Authentication Sample -##### Enable silent push notifications in Xcode +Located in `samples/swiftui/FirebaseSwiftUISample/`, this sample demonstrates the modern SwiftUI authentication components. - * `Push Notification` - Under `Capabilities` tab in your app target choose `Push Notifications` and put the switch to the `On` position. - * `Background Mode` - Under `Capabilities` tab in your app target choose `Background Modes` put the switch to the `On` position. In the list of available modes select `Background fetch` and `Remote notifications` (If available). +**Configuration:** +1. Download `GoogleService-Info.plist` from [Firebase Console](https://console.firebase.google.com) +2. Copy it to the sample project folder +3. Update URL Types (for OAuth providers) in `Project Settings -> Info tab -> Url Types`: + - `REVERSED_CLIENT_ID` (from `GoogleService-Info.plist`) - Required for Google Sign-In + - `fb{your-app-id}` - Required for Facebook Login +4. For Facebook Login, update `Info.plist` with `FacebookAppID` and enable Keychain Sharing -##### Upload APNS Certificate to Firebase +### UIKit Database & Storage Samples -1. Create your `Provisioning APNS SSL Certificates` by following the steps on the following link. -https://firebase.google.com/docs/cloud-messaging/ios/certs +Located in `samples/objc/` and `samples/swift/`, these samples demonstrate FirebaseUI's data binding capabilities for Realtime Database and Storage. -1. Upload your `APNS Certificate` to Firebase: - + Inside your project in the Firebase console, select the gear icon, select `Project Settings`, and then select the `Cloud Messaging` tab. - + Select the `Upload Certificate` button for your development certificate, your production certificate, or both. At least one is required. - + For each certificate, select the `.p12 file`, and provide the password, if any. Make sure the `bundle ID` for this certificate matches the `bundle ID` of your app. Select `Save`. +**Configuration:** +1. Download `GoogleService-Info.plist` from [Firebase Console](https://console.firebase.google.com) +2. Copy it to `samples/objc/GoogleService-Info.plist` or `samples/swift/GoogleService-Info.plist` +3. Run `pod install` in the sample directory +4. Configure your Firebase Database and Storage in the Firebase Console +5. For the Chat sample, enable anonymous authentication in Firebase Console +6. For the Storage sample, configure appropriate [Storage Security Rules](https://firebase.google.com/docs/storage/security/start#sample-rules) ## Contributing to FirebaseUI diff --git a/UITests/FirebaseUISample.xcodeproj/project.pbxproj b/UITests/FirebaseUISample.xcodeproj/project.pbxproj deleted file mode 100644 index 78129e0cdb5..00000000000 --- a/UITests/FirebaseUISample.xcodeproj/project.pbxproj +++ /dev/null @@ -1,1127 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 50; - objects = { - -/* Begin PBXBuildFile section */ - 384216B4B7F229763F82AB3A /* Pods_FirebaseUISample.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2D41B820459F0A00A8AD1596 /* Pods_FirebaseUISample.framework */; }; - 3BB48A4F055BE5C69B6BFF97 /* Pods_FirebaseUISampleUITests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D281C0AD34285FC512A5C7BF /* Pods_FirebaseUISampleUITests.framework */; }; - 8D69E6B621DEC97E00CFA49B /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8D69E6B421DEC97E00CFA49B /* Main.storyboard */; }; - 8D69E6B821DEC97F00CFA49B /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 8D69E6B721DEC97F00CFA49B /* Assets.xcassets */; }; - 8D69E6BB21DEC97F00CFA49B /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8D69E6B921DEC97F00CFA49B /* LaunchScreen.storyboard */; }; - 8D69E6BE21DEC98000CFA49B /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E6BD21DEC98000CFA49B /* main.m */; }; - 8D69E6C821DEC98000CFA49B /* FirebaseUISampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E6C721DEC98000CFA49B /* FirebaseUISampleTests.m */; }; - 8D69E6D321DEC98000CFA49B /* FirebaseUISampleUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E6D221DEC98000CFA49B /* FirebaseUISampleUITests.m */; }; - 8D69E6E421DECA6800CFA49B /* FUIViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E6E121DECA6800CFA49B /* FUIViewController.m */; }; - 8D69E6E521DECA6800CFA49B /* FUIAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D69E6E221DECA6800CFA49B /* FUIAppDelegate.m */; }; - 8D69E73E21DECA7000CFA49B /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 8D69E6E721DECA7000CFA49B /* Localizable.strings */; }; - 8D69E73F21DECA7000CFA49B /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8D69E6F621DECA7000CFA49B /* LaunchScreen.storyboard */; }; - 8D69E74021DECA7000CFA49B /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8D69E71721DECA7000CFA49B /* Main.storyboard */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 8D69E6C421DEC98000CFA49B /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 8D69E6A321DEC97E00CFA49B /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8D69E6AA21DEC97E00CFA49B; - remoteInfo = FirebaseUISample; - }; - 8D69E6CF21DEC98000CFA49B /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 8D69E6A321DEC97E00CFA49B /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8D69E6AA21DEC97E00CFA49B; - remoteInfo = FirebaseUISample; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 0956B704CE67A275CA6CAF73 /* Pods-FirebaseUISample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FirebaseUISample.debug.xcconfig"; path = "Target Support Files/Pods-FirebaseUISample/Pods-FirebaseUISample.debug.xcconfig"; sourceTree = ""; }; - 2D41B820459F0A00A8AD1596 /* Pods_FirebaseUISample.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_FirebaseUISample.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 31B8690B9EA722A89DF1BFBF /* Pods-FirebaseUISampleUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FirebaseUISampleUITests.debug.xcconfig"; path = "Target Support Files/Pods-FirebaseUISampleUITests/Pods-FirebaseUISampleUITests.debug.xcconfig"; sourceTree = ""; }; - 693E42C838C4CC5869E33629 /* Pods-FirebaseUISampleUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FirebaseUISampleUITests.release.xcconfig"; path = "Target Support Files/Pods-FirebaseUISampleUITests/Pods-FirebaseUISampleUITests.release.xcconfig"; sourceTree = ""; }; - 8D69E6AB21DEC97E00CFA49B /* FirebaseUISample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FirebaseUISample.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 8D69E6B521DEC97E00CFA49B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 8D69E6B721DEC97F00CFA49B /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 8D69E6BA21DEC97F00CFA49B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 8D69E6BC21DEC97F00CFA49B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 8D69E6BD21DEC98000CFA49B /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - 8D69E6C321DEC98000CFA49B /* FirebaseUISampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FirebaseUISampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 8D69E6C721DEC98000CFA49B /* FirebaseUISampleTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FirebaseUISampleTests.m; sourceTree = ""; }; - 8D69E6C921DEC98000CFA49B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 8D69E6CE21DEC98000CFA49B /* FirebaseUISampleUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FirebaseUISampleUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 8D69E6D221DEC98000CFA49B /* FirebaseUISampleUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FirebaseUISampleUITests.m; sourceTree = ""; }; - 8D69E6D421DEC98000CFA49B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 8D69E6E021DECA6800CFA49B /* FUIAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIAppDelegate.h; sourceTree = ""; }; - 8D69E6E121DECA6800CFA49B /* FUIViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUIViewController.m; sourceTree = ""; }; - 8D69E6E221DECA6800CFA49B /* FUIAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FUIAppDelegate.m; sourceTree = ""; }; - 8D69E6E321DECA6800CFA49B /* FUIViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FUIViewController.h; sourceTree = ""; }; - 8D69E6E821DECA7000CFA49B /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; - 8D69E6E921DECA7000CFA49B /* ur */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ur; path = ur.lproj/Localizable.strings; sourceTree = ""; }; - 8D69E6EA21DECA7000CFA49B /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/Localizable.strings; sourceTree = ""; }; - 8D69E6EB21DECA7000CFA49B /* es-SV */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-SV"; path = "es-SV.lproj/Localizable.strings"; sourceTree = ""; }; - 8D69E6EC21DECA7000CFA49B /* zh-Hant-TW */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant-TW"; path = "zh-Hant-TW.lproj/Localizable.strings"; sourceTree = ""; }; - 8D69E6ED21DECA7000CFA49B /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Localizable.strings; sourceTree = ""; }; - 8D69E6EE21DECA7000CFA49B /* el */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = el; path = el.lproj/Localizable.strings; sourceTree = ""; }; - 8D69E6EF21DECA7000CFA49B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; - 8D69E6F021DECA7000CFA49B /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; - 8D69E6F121DECA7000CFA49B /* fa */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fa; path = fa.lproj/Localizable.strings; sourceTree = ""; }; - 8D69E6F221DECA7000CFA49B /* mr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = mr; path = mr.lproj/Localizable.strings; sourceTree = ""; }; - 8D69E6F321DECA7000CFA49B /* es-GT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-GT"; path = "es-GT.lproj/Localizable.strings"; sourceTree = ""; }; - 8D69E6F421DECA7000CFA49B /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; - 8D69E6F521DECA7000CFA49B /* en-CA */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-CA"; path = "en-CA.lproj/Localizable.strings"; sourceTree = ""; }; - 8D69E6F621DECA7000CFA49B /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = ""; }; - 8D69E6F721DECA7000CFA49B /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/Localizable.strings; sourceTree = ""; }; - 8D69E6F821DECA7000CFA49B /* es-PY */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-PY"; path = "es-PY.lproj/Localizable.strings"; sourceTree = ""; }; - 8D69E6F921DECA7000CFA49B /* gu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = gu; path = gu.lproj/Localizable.strings; sourceTree = ""; }; - 8D69E6FA21DECA7000CFA49B /* kn */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = kn; path = kn.lproj/Localizable.strings; sourceTree = ""; }; - 8D69E6FB21DECA7000CFA49B /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/Localizable.strings; sourceTree = ""; }; - 8D69E6FC21DECA7000CFA49B /* es-US */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-US"; path = "es-US.lproj/Localizable.strings"; sourceTree = ""; }; - 8D69E6FD21DECA7000CFA49B /* en-GB */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-GB"; path = "en-GB.lproj/Localizable.strings"; sourceTree = ""; }; - 8D69E6FE21DECA7000CFA49B /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = ""; }; - 8D69E6FF21DECA7000CFA49B /* es-VE */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-VE"; path = "es-VE.lproj/Localizable.strings"; sourceTree = ""; }; - 8D69E70021DECA7000CFA49B /* es-CL */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-CL"; path = "es-CL.lproj/Localizable.strings"; sourceTree = ""; }; - 8D69E70121DECA7000CFA49B /* sl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sl; path = sl.lproj/Localizable.strings; sourceTree = ""; }; - 8D69E70221DECA7000CFA49B /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/Localizable.strings; sourceTree = ""; }; - 8D69E70321DECA7000CFA49B /* es-419 */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-419"; path = "es-419.lproj/Localizable.strings"; sourceTree = ""; }; - 8D69E70421DECA7000CFA49B /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Localizable.strings; sourceTree = ""; }; - 8D69E70521DECA7000CFA49B /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bg; path = bg.lproj/Localizable.strings; sourceTree = ""; }; - 8D69E70621DECA7000CFA49B /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/Localizable.strings; sourceTree = ""; }; - 8D69E70721DECA7000CFA49B /* sr-Latn */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "sr-Latn"; path = "sr-Latn.lproj/Localizable.strings"; sourceTree = ""; }; - 8D69E70821DECA7000CFA49B /* nn-NO */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "nn-NO"; path = "nn-NO.lproj/Localizable.strings"; sourceTree = ""; }; - 8D69E70921DECA7000CFA49B /* es-PA */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-PA"; path = "es-PA.lproj/Localizable.strings"; sourceTree = ""; }; - 8D69E70A21DECA7000CFA49B /* en-SG */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-SG"; path = "en-SG.lproj/Localizable.strings"; sourceTree = ""; }; - 8D69E70B21DECA7000CFA49B /* sr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sr; path = sr.lproj/Localizable.strings; sourceTree = ""; }; - 8D69E70C21DECA7000CFA49B /* ms */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ms; path = ms.lproj/Localizable.strings; sourceTree = ""; }; - 8D69E70D21DECA7000CFA49B /* es-CR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-CR"; path = "es-CR.lproj/Localizable.strings"; sourceTree = ""; }; - 8D69E70E21DECA7000CFA49B /* ta */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ta; path = ta.lproj/Localizable.strings; sourceTree = ""; }; - 8D69E70F21DECA7000CFA49B /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Localizable.strings; sourceTree = ""; }; - 8D69E71021DECA7000CFA49B /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/Localizable.strings; sourceTree = ""; }; - 8D69E71121DECA7000CFA49B /* es-AR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-AR"; path = "es-AR.lproj/Localizable.strings"; sourceTree = ""; }; - 8D69E71221DECA7000CFA49B /* es-PE */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-PE"; path = "es-PE.lproj/Localizable.strings"; sourceTree = ""; }; - 8D69E71321DECA7000CFA49B /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/Localizable.strings; sourceTree = ""; }; - 8D69E71421DECA7000CFA49B /* en-IE */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-IE"; path = "en-IE.lproj/Localizable.strings"; sourceTree = ""; }; - 8D69E71521DECA7000CFA49B /* fil */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fil; path = fil.lproj/Localizable.strings; sourceTree = ""; }; - 8D69E71621DECA7000CFA49B /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/Localizable.strings"; sourceTree = ""; }; - 8D69E71721DECA7000CFA49B /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = ""; }; - 8D69E71821DECA7000CFA49B /* es-CO */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-CO"; path = "es-CO.lproj/Localizable.strings"; sourceTree = ""; }; - 8D69E71921DECA7000CFA49B /* gsw */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = gsw; path = gsw.lproj/Localizable.strings; sourceTree = ""; }; - 8D69E71A21DECA7000CFA49B /* en-ZA */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-ZA"; path = "en-ZA.lproj/Localizable.strings"; sourceTree = ""; }; - 8D69E71B21DECA7000CFA49B /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/Localizable.strings; sourceTree = ""; }; - 8D69E71C21DECA7000CFA49B /* es-PR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-PR"; path = "es-PR.lproj/Localizable.strings"; sourceTree = ""; }; - 8D69E71D21DECA7000CFA49B /* de-AT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "de-AT"; path = "de-AT.lproj/Localizable.strings"; sourceTree = ""; }; - 8D69E71E21DECA7000CFA49B /* en-AU */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-AU"; path = "en-AU.lproj/Localizable.strings"; sourceTree = ""; }; - 8D69E71F21DECA7000CFA49B /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/Localizable.strings; sourceTree = ""; }; - 8D69E72021DECA7000CFA49B /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Localizable.strings; sourceTree = ""; }; - 8D69E72121DECA7000CFA49B /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Localizable.strings"; sourceTree = ""; }; - 8D69E72221DECA7000CFA49B /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/Localizable.strings; sourceTree = ""; }; - 8D69E72321DECA7000CFA49B /* lv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = lv; path = lv.lproj/Localizable.strings; sourceTree = ""; }; - 8D69E72421DECA7000CFA49B /* es-MX */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-MX"; path = "es-MX.lproj/Localizable.strings"; sourceTree = ""; }; - 8D69E72521DECA7000CFA49B /* lt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = lt; path = lt.lproj/Localizable.strings; sourceTree = ""; }; - 8D69E72621DECA7000CFA49B /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = ""; }; - 8D69E72721DECA7000CFA49B /* es-DO */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-DO"; path = "es-DO.lproj/Localizable.strings"; sourceTree = ""; }; - 8D69E72821DECA7000CFA49B /* fr-CH */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "fr-CH"; path = "fr-CH.lproj/Localizable.strings"; sourceTree = ""; }; - 8D69E72921DECA7000CFA49B /* es-NI */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-NI"; path = "es-NI.lproj/Localizable.strings"; sourceTree = ""; }; - 8D69E72A21DECA7000CFA49B /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = ""; }; - 8D69E72B21DECA7000CFA49B /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/Localizable.strings; sourceTree = ""; }; - 8D69E72C21DECA7000CFA49B /* id */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = id; path = id.lproj/Localizable.strings; sourceTree = ""; }; - 8D69E72D21DECA7000CFA49B /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Localizable.strings; sourceTree = ""; }; - 8D69E72E21DECA7000CFA49B /* th */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = th; path = th.lproj/Localizable.strings; sourceTree = ""; }; - 8D69E72F21DECA7000CFA49B /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = pt.lproj/Localizable.strings; sourceTree = ""; }; - 8D69E73021DECA7000CFA49B /* de-CH */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "de-CH"; path = "de-CH.lproj/Localizable.strings"; sourceTree = ""; }; - 8D69E73121DECA7000CFA49B /* bn */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bn; path = bn.lproj/Localizable.strings; sourceTree = ""; }; - 8D69E73221DECA7000CFA49B /* es-EC */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-EC"; path = "es-EC.lproj/Localizable.strings"; sourceTree = ""; }; - 8D69E73321DECA7000CFA49B /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-PT"; path = "pt-PT.lproj/Localizable.strings"; sourceTree = ""; }; - 8D69E73421DECA7000CFA49B /* es-BO */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-BO"; path = "es-BO.lproj/Localizable.strings"; sourceTree = ""; }; - 8D69E73521DECA7000CFA49B /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/Localizable.strings; sourceTree = ""; }; - 8D69E73621DECA7000CFA49B /* ln */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ln; path = ln.lproj/Localizable.strings; sourceTree = ""; }; - 8D69E73721DECA7000CFA49B /* es-UY */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-UY"; path = "es-UY.lproj/Localizable.strings"; sourceTree = ""; }; - 8D69E73821DECA7000CFA49B /* es-HN */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-HN"; path = "es-HN.lproj/Localizable.strings"; sourceTree = ""; }; - 8D69E73921DECA7000CFA49B /* hr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hr; path = hr.lproj/Localizable.strings; sourceTree = ""; }; - 8D69E73A21DECA7000CFA49B /* hi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hi; path = hi.lproj/Localizable.strings; sourceTree = ""; }; - 8D69E73B21DECA7000CFA49B /* ca */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ca; path = ca.lproj/Localizable.strings; sourceTree = ""; }; - 8D69E73C21DECA7000CFA49B /* zh */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = zh; path = zh.lproj/Localizable.strings; sourceTree = ""; }; - 8D69E73D21DECA7000CFA49B /* en-IN */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-IN"; path = "en-IN.lproj/Localizable.strings"; sourceTree = ""; }; - D281C0AD34285FC512A5C7BF /* Pods_FirebaseUISampleUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_FirebaseUISampleUITests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FD82E556B9F3A8847E367537 /* Pods-FirebaseUISample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FirebaseUISample.release.xcconfig"; path = "Target Support Files/Pods-FirebaseUISample/Pods-FirebaseUISample.release.xcconfig"; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 8D69E6A821DEC97E00CFA49B /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 384216B4B7F229763F82AB3A /* Pods_FirebaseUISample.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8D69E6C021DEC98000CFA49B /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8D69E6CB21DEC98000CFA49B /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 3BB48A4F055BE5C69B6BFF97 /* Pods_FirebaseUISampleUITests.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 74988A7C0F0D66CC81B546F1 /* Pods */ = { - isa = PBXGroup; - children = ( - 0956B704CE67A275CA6CAF73 /* Pods-FirebaseUISample.debug.xcconfig */, - FD82E556B9F3A8847E367537 /* Pods-FirebaseUISample.release.xcconfig */, - 31B8690B9EA722A89DF1BFBF /* Pods-FirebaseUISampleUITests.debug.xcconfig */, - 693E42C838C4CC5869E33629 /* Pods-FirebaseUISampleUITests.release.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; - 8D69E6A221DEC97E00CFA49B = { - isa = PBXGroup; - children = ( - 8D69E6AD21DEC97E00CFA49B /* FirebaseUISample */, - 8D69E6C621DEC98000CFA49B /* FirebaseUISampleTests */, - 8D69E6D121DEC98000CFA49B /* FirebaseUISampleUITests */, - 8D69E6AC21DEC97E00CFA49B /* Products */, - 74988A7C0F0D66CC81B546F1 /* Pods */, - BE3E2EB05043AA9C4D5AE8D7 /* Frameworks */, - ); - sourceTree = ""; - }; - 8D69E6AC21DEC97E00CFA49B /* Products */ = { - isa = PBXGroup; - children = ( - 8D69E6AB21DEC97E00CFA49B /* FirebaseUISample.app */, - 8D69E6C321DEC98000CFA49B /* FirebaseUISampleTests.xctest */, - 8D69E6CE21DEC98000CFA49B /* FirebaseUISampleUITests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - 8D69E6AD21DEC97E00CFA49B /* FirebaseUISample */ = { - isa = PBXGroup; - children = ( - 8D69E6E021DECA6800CFA49B /* FUIAppDelegate.h */, - 8D69E6E221DECA6800CFA49B /* FUIAppDelegate.m */, - 8D69E6E321DECA6800CFA49B /* FUIViewController.h */, - 8D69E6E121DECA6800CFA49B /* FUIViewController.m */, - 8D69E6B421DEC97E00CFA49B /* Main.storyboard */, - 8D69E6B721DEC97F00CFA49B /* Assets.xcassets */, - 8D69E6B921DEC97F00CFA49B /* LaunchScreen.storyboard */, - 8D69E6BC21DEC97F00CFA49B /* Info.plist */, - 8D69E6BD21DEC98000CFA49B /* main.m */, - 8D69E6E621DECA7000CFA49B /* Resources */, - ); - path = FirebaseUISample; - sourceTree = ""; - }; - 8D69E6C621DEC98000CFA49B /* FirebaseUISampleTests */ = { - isa = PBXGroup; - children = ( - 8D69E6C721DEC98000CFA49B /* FirebaseUISampleTests.m */, - 8D69E6C921DEC98000CFA49B /* Info.plist */, - ); - path = FirebaseUISampleTests; - sourceTree = ""; - }; - 8D69E6D121DEC98000CFA49B /* FirebaseUISampleUITests */ = { - isa = PBXGroup; - children = ( - 8D69E6D221DEC98000CFA49B /* FirebaseUISampleUITests.m */, - 8D69E6D421DEC98000CFA49B /* Info.plist */, - ); - path = FirebaseUISampleUITests; - sourceTree = ""; - }; - 8D69E6E621DECA7000CFA49B /* Resources */ = { - isa = PBXGroup; - children = ( - 8D69E6E721DECA7000CFA49B /* Localizable.strings */, - 8D69E6F621DECA7000CFA49B /* LaunchScreen.storyboard */, - 8D69E71721DECA7000CFA49B /* Main.storyboard */, - ); - path = Resources; - sourceTree = ""; - }; - BE3E2EB05043AA9C4D5AE8D7 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 2D41B820459F0A00A8AD1596 /* Pods_FirebaseUISample.framework */, - D281C0AD34285FC512A5C7BF /* Pods_FirebaseUISampleUITests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 8D69E6AA21DEC97E00CFA49B /* FirebaseUISample */ = { - isa = PBXNativeTarget; - buildConfigurationList = 8D69E6D721DEC98000CFA49B /* Build configuration list for PBXNativeTarget "FirebaseUISample" */; - buildPhases = ( - 0DF63DA2354EB44F5A2D2D61 /* [CP] Check Pods Manifest.lock */, - 8D69E6A721DEC97E00CFA49B /* Sources */, - 8D69E6A821DEC97E00CFA49B /* Frameworks */, - 8D69E6A921DEC97E00CFA49B /* Resources */, - 9770CA281FA9338EAAD7A794 /* [CP] Embed Pods Frameworks */, - 51DE22925CB8340B0AD8760A /* [CP] Copy Pods Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = FirebaseUISample; - productName = FirebaseUISample; - productReference = 8D69E6AB21DEC97E00CFA49B /* FirebaseUISample.app */; - productType = "com.apple.product-type.application"; - }; - 8D69E6C221DEC98000CFA49B /* FirebaseUISampleTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 8D69E6DA21DEC98000CFA49B /* Build configuration list for PBXNativeTarget "FirebaseUISampleTests" */; - buildPhases = ( - 8D69E6BF21DEC98000CFA49B /* Sources */, - 8D69E6C021DEC98000CFA49B /* Frameworks */, - 8D69E6C121DEC98000CFA49B /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 8D69E6C521DEC98000CFA49B /* PBXTargetDependency */, - ); - name = FirebaseUISampleTests; - productName = FirebaseUISampleTests; - productReference = 8D69E6C321DEC98000CFA49B /* FirebaseUISampleTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; - 8D69E6CD21DEC98000CFA49B /* FirebaseUISampleUITests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 8D69E6DD21DEC98000CFA49B /* Build configuration list for PBXNativeTarget "FirebaseUISampleUITests" */; - buildPhases = ( - EEBB22A4A2D9891F4E4EADCD /* [CP] Check Pods Manifest.lock */, - 8D69E6CA21DEC98000CFA49B /* Sources */, - 8D69E6CB21DEC98000CFA49B /* Frameworks */, - 8D69E6CC21DEC98000CFA49B /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 8D69E6D021DEC98000CFA49B /* PBXTargetDependency */, - ); - name = FirebaseUISampleUITests; - productName = FirebaseUISampleUITests; - productReference = 8D69E6CE21DEC98000CFA49B /* FirebaseUISampleUITests.xctest */; - productType = "com.apple.product-type.bundle.ui-testing"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 8D69E6A321DEC97E00CFA49B /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 1010; - ORGANIZATIONNAME = Firebase; - TargetAttributes = { - 8D69E6AA21DEC97E00CFA49B = { - CreatedOnToolsVersion = 10.1; - }; - 8D69E6C221DEC98000CFA49B = { - CreatedOnToolsVersion = 10.1; - TestTargetID = 8D69E6AA21DEC97E00CFA49B; - }; - 8D69E6CD21DEC98000CFA49B = { - CreatedOnToolsVersion = 10.1; - TestTargetID = 8D69E6AA21DEC97E00CFA49B; - }; - }; - }; - buildConfigurationList = 8D69E6A621DEC97E00CFA49B /* Build configuration list for PBXProject "FirebaseUISample" */; - compatibilityVersion = "Xcode 9.3"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - de, - ur, - he, - "es-SV", - "zh-Hant-TW", - ar, - el, - "zh-Hans", - ja, - fa, - mr, - "es-GT", - "en-CA", - uk, - "es-PY", - gu, - kn, - nb, - "es-US", - "en-GB", - es, - "es-VE", - "es-CL", - sl, - da, - "es-419", - it, - bg, - sk, - "sr-Latn", - "nn-NO", - "es-PA", - "en-SG", - sr, - ms, - "es-CR", - ta, - sv, - cs, - "es-AR", - "es-PE", - ko, - "en-IE", - fil, - "zh-Hant", - "es-CO", - gsw, - "en-ZA", - hu, - "es-PR", - "de-AT", - "en-AU", - tr, - pl, - "pt-BR", - vi, - lv, - "es-MX", - lt, - ru, - "es-DO", - "fr-CH", - "es-NI", - fr, - fi, - id, - nl, - th, - pt, - "de-CH", - bn, - "es-EC", - "pt-PT", - "es-BO", - ro, - ln, - "es-UY", - "es-HN", - hr, - hi, - ca, - zh, - "en-IN", - ); - mainGroup = 8D69E6A221DEC97E00CFA49B; - productRefGroup = 8D69E6AC21DEC97E00CFA49B /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 8D69E6AA21DEC97E00CFA49B /* FirebaseUISample */, - 8D69E6C221DEC98000CFA49B /* FirebaseUISampleTests */, - 8D69E6CD21DEC98000CFA49B /* FirebaseUISampleUITests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 8D69E6A921DEC97E00CFA49B /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8D69E6BB21DEC97F00CFA49B /* LaunchScreen.storyboard in Resources */, - 8D69E73E21DECA7000CFA49B /* Localizable.strings in Resources */, - 8D69E6B821DEC97F00CFA49B /* Assets.xcassets in Resources */, - 8D69E74021DECA7000CFA49B /* Main.storyboard in Resources */, - 8D69E73F21DECA7000CFA49B /* LaunchScreen.storyboard in Resources */, - 8D69E6B621DEC97E00CFA49B /* Main.storyboard in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8D69E6C121DEC98000CFA49B /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8D69E6CC21DEC98000CFA49B /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 0DF63DA2354EB44F5A2D2D61 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-FirebaseUISample-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - 51DE22925CB8340B0AD8760A /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-FirebaseUISample/Pods-FirebaseUISample-resources-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Copy Pods Resources"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-FirebaseUISample/Pods-FirebaseUISample-resources-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-FirebaseUISample/Pods-FirebaseUISample-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; - 9770CA281FA9338EAAD7A794 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-FirebaseUISample/Pods-FirebaseUISample-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-FirebaseUISample/Pods-FirebaseUISample-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-FirebaseUISample/Pods-FirebaseUISample-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - EEBB22A4A2D9891F4E4EADCD /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-FirebaseUISampleUITests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 8D69E6A721DEC97E00CFA49B /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8D69E6BE21DEC98000CFA49B /* main.m in Sources */, - 8D69E6E521DECA6800CFA49B /* FUIAppDelegate.m in Sources */, - 8D69E6E421DECA6800CFA49B /* FUIViewController.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8D69E6BF21DEC98000CFA49B /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8D69E6C821DEC98000CFA49B /* FirebaseUISampleTests.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8D69E6CA21DEC98000CFA49B /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8D69E6D321DEC98000CFA49B /* FirebaseUISampleUITests.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 8D69E6C521DEC98000CFA49B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 8D69E6AA21DEC97E00CFA49B /* FirebaseUISample */; - targetProxy = 8D69E6C421DEC98000CFA49B /* PBXContainerItemProxy */; - }; - 8D69E6D021DEC98000CFA49B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 8D69E6AA21DEC97E00CFA49B /* FirebaseUISample */; - targetProxy = 8D69E6CF21DEC98000CFA49B /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - 8D69E6B421DEC97E00CFA49B /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 8D69E6B521DEC97E00CFA49B /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; - 8D69E6B921DEC97F00CFA49B /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 8D69E6BA21DEC97F00CFA49B /* Base */, - ); - name = LaunchScreen.storyboard; - sourceTree = ""; - }; - 8D69E6E721DECA7000CFA49B /* Localizable.strings */ = { - isa = PBXVariantGroup; - children = ( - 8D69E6E821DECA7000CFA49B /* de */, - 8D69E6E921DECA7000CFA49B /* ur */, - 8D69E6EA21DECA7000CFA49B /* he */, - 8D69E6EB21DECA7000CFA49B /* es-SV */, - 8D69E6EC21DECA7000CFA49B /* zh-Hant-TW */, - 8D69E6ED21DECA7000CFA49B /* ar */, - 8D69E6EE21DECA7000CFA49B /* el */, - 8D69E6EF21DECA7000CFA49B /* zh-Hans */, - 8D69E6F021DECA7000CFA49B /* ja */, - 8D69E6F121DECA7000CFA49B /* fa */, - 8D69E6F221DECA7000CFA49B /* mr */, - 8D69E6F321DECA7000CFA49B /* es-GT */, - 8D69E6F421DECA7000CFA49B /* en */, - 8D69E6F521DECA7000CFA49B /* en-CA */, - 8D69E6F721DECA7000CFA49B /* uk */, - 8D69E6F821DECA7000CFA49B /* es-PY */, - 8D69E6F921DECA7000CFA49B /* gu */, - 8D69E6FA21DECA7000CFA49B /* kn */, - 8D69E6FB21DECA7000CFA49B /* nb */, - 8D69E6FC21DECA7000CFA49B /* es-US */, - 8D69E6FD21DECA7000CFA49B /* en-GB */, - 8D69E6FE21DECA7000CFA49B /* es */, - 8D69E6FF21DECA7000CFA49B /* es-VE */, - 8D69E70021DECA7000CFA49B /* es-CL */, - 8D69E70121DECA7000CFA49B /* sl */, - 8D69E70221DECA7000CFA49B /* da */, - 8D69E70321DECA7000CFA49B /* es-419 */, - 8D69E70421DECA7000CFA49B /* it */, - 8D69E70521DECA7000CFA49B /* bg */, - 8D69E70621DECA7000CFA49B /* sk */, - 8D69E70721DECA7000CFA49B /* sr-Latn */, - 8D69E70821DECA7000CFA49B /* nn-NO */, - 8D69E70921DECA7000CFA49B /* es-PA */, - 8D69E70A21DECA7000CFA49B /* en-SG */, - 8D69E70B21DECA7000CFA49B /* sr */, - 8D69E70C21DECA7000CFA49B /* ms */, - 8D69E70D21DECA7000CFA49B /* es-CR */, - 8D69E70E21DECA7000CFA49B /* ta */, - 8D69E70F21DECA7000CFA49B /* sv */, - 8D69E71021DECA7000CFA49B /* cs */, - 8D69E71121DECA7000CFA49B /* es-AR */, - 8D69E71221DECA7000CFA49B /* es-PE */, - 8D69E71321DECA7000CFA49B /* ko */, - 8D69E71421DECA7000CFA49B /* en-IE */, - 8D69E71521DECA7000CFA49B /* fil */, - 8D69E71621DECA7000CFA49B /* zh-Hant */, - 8D69E71821DECA7000CFA49B /* es-CO */, - 8D69E71921DECA7000CFA49B /* gsw */, - 8D69E71A21DECA7000CFA49B /* en-ZA */, - 8D69E71B21DECA7000CFA49B /* hu */, - 8D69E71C21DECA7000CFA49B /* es-PR */, - 8D69E71D21DECA7000CFA49B /* de-AT */, - 8D69E71E21DECA7000CFA49B /* en-AU */, - 8D69E71F21DECA7000CFA49B /* tr */, - 8D69E72021DECA7000CFA49B /* pl */, - 8D69E72121DECA7000CFA49B /* pt-BR */, - 8D69E72221DECA7000CFA49B /* vi */, - 8D69E72321DECA7000CFA49B /* lv */, - 8D69E72421DECA7000CFA49B /* es-MX */, - 8D69E72521DECA7000CFA49B /* lt */, - 8D69E72621DECA7000CFA49B /* ru */, - 8D69E72721DECA7000CFA49B /* es-DO */, - 8D69E72821DECA7000CFA49B /* fr-CH */, - 8D69E72921DECA7000CFA49B /* es-NI */, - 8D69E72A21DECA7000CFA49B /* fr */, - 8D69E72B21DECA7000CFA49B /* fi */, - 8D69E72C21DECA7000CFA49B /* id */, - 8D69E72D21DECA7000CFA49B /* nl */, - 8D69E72E21DECA7000CFA49B /* th */, - 8D69E72F21DECA7000CFA49B /* pt */, - 8D69E73021DECA7000CFA49B /* de-CH */, - 8D69E73121DECA7000CFA49B /* bn */, - 8D69E73221DECA7000CFA49B /* es-EC */, - 8D69E73321DECA7000CFA49B /* pt-PT */, - 8D69E73421DECA7000CFA49B /* es-BO */, - 8D69E73521DECA7000CFA49B /* ro */, - 8D69E73621DECA7000CFA49B /* ln */, - 8D69E73721DECA7000CFA49B /* es-UY */, - 8D69E73821DECA7000CFA49B /* es-HN */, - 8D69E73921DECA7000CFA49B /* hr */, - 8D69E73A21DECA7000CFA49B /* hi */, - 8D69E73B21DECA7000CFA49B /* ca */, - 8D69E73C21DECA7000CFA49B /* zh */, - 8D69E73D21DECA7000CFA49B /* en-IN */, - ); - name = Localizable.strings; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 8D69E6D521DEC98000CFA49B /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.1; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - }; - name = Debug; - }; - 8D69E6D621DEC98000CFA49B /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.1; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 8D69E6D821DEC98000CFA49B /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 0956B704CE67A275CA6CAF73 /* Pods-FirebaseUISample.debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_STYLE = Automatic; - INFOPLIST_FILE = FirebaseUISample/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.firebase.FirebaseUISample; - PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 8D69E6D921DEC98000CFA49B /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = FD82E556B9F3A8847E367537 /* Pods-FirebaseUISample.release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_STYLE = Automatic; - INFOPLIST_FILE = FirebaseUISample/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.firebase.FirebaseUISample; - PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; - 8D69E6DB21DEC98000CFA49B /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CODE_SIGN_STYLE = Automatic; - INFOPLIST_FILE = FirebaseUISampleTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.firebase.FirebaseUISampleTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/FirebaseUISample.app/FirebaseUISample"; - }; - name = Debug; - }; - 8D69E6DC21DEC98000CFA49B /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CODE_SIGN_STYLE = Automatic; - INFOPLIST_FILE = FirebaseUISampleTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.firebase.FirebaseUISampleTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/FirebaseUISample.app/FirebaseUISample"; - }; - name = Release; - }; - 8D69E6DE21DEC98000CFA49B /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 31B8690B9EA722A89DF1BFBF /* Pods-FirebaseUISampleUITests.debug.xcconfig */; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - INFOPLIST_FILE = FirebaseUISampleUITests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - "$(PODS_CONFIGURATION_BUILD_DIR)/FirebaseUISample.app/Frameworks", - ); - OTHER_LDFLAGS = ( - "$(inherited)", - "-l\"c++\"", - "-l\"icucore\"", - "-framework", - "\"AVFoundation\"", - "-framework", - "\"Accounts\"", - "-framework", - "\"CFNetwork\"", - "-framework", - "\"CoreData\"", - "-framework", - "\"CoreGraphics\"", - "-framework", - "\"CoreMedia\"", - "-framework", - "\"CoreText\"", - "-framework", - "\"FBSDKCoreKit\"", - "-framework", - "\"FBSDKLoginKit\"", - "-framework", - "\"FirebaseAuth\"", - "-framework", - "\"FirebaseCore\"", - "-framework", - "\"FirebaseDatabase\"", - "-framework", - "\"FirebaseFirestore\"", - "-framework", - "\"FirebaseStorage\"", - "-framework", - "\"FirebaseUI\"", - "-framework", - "\"Foundation\"", - "-framework", - "\"GTMSessionFetcher\"", - "-framework", - "\"GoogleToolboxForMac\"", - "-framework", - "\"GoogleUtilities\"", - "-framework", - "\"LocalAuthentication\"", - "-framework", - "\"MobileCoreServices\"", - "-framework", - "\"OCMock\"", - "-framework", - "\"Protobuf\"", - "-framework", - "\"QuartzCore\"", - "-framework", - "\"SDWebImage\"", - "-framework", - "\"SafariServices\"", - "-framework", - "\"Security\"", - "-framework", - "\"Social\"", - "-framework", - "\"SystemConfiguration\"", - "-framework", - "\"UIKit\"", - "-framework", - "\"grpc\"", - "-framework", - "\"grpcpp\"", - "-framework", - "\"leveldb\"", - "-framework", - "\"nanopb\"", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.firebase.FirebaseUISampleUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = FirebaseUISample; - }; - name = Debug; - }; - 8D69E6DF21DEC98000CFA49B /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 693E42C838C4CC5869E33629 /* Pods-FirebaseUISampleUITests.release.xcconfig */; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - INFOPLIST_FILE = FirebaseUISampleUITests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - "$(PODS_CONFIGURATION_BUILD_DIR)/FirebaseUISample.app/Frameworks", - ); - OTHER_LDFLAGS = ( - "$(inherited)", - "-l\"c++\"", - "-l\"icucore\"", - "-framework", - "\"AVFoundation\"", - "-framework", - "\"Accounts\"", - "-framework", - "\"CFNetwork\"", - "-framework", - "\"CoreData\"", - "-framework", - "\"CoreGraphics\"", - "-framework", - "\"CoreMedia\"", - "-framework", - "\"CoreText\"", - "-framework", - "\"FBSDKCoreKit\"", - "-framework", - "\"FBSDKLoginKit\"", - "-framework", - "\"FirebaseAuth\"", - "-framework", - "\"FirebaseCore\"", - "-framework", - "\"FirebaseDatabase\"", - "-framework", - "\"FirebaseFirestore\"", - "-framework", - "\"FirebaseStorage\"", - "-framework", - "\"FirebaseUI\"", - "-framework", - "\"Foundation\"", - "-framework", - "\"GTMSessionFetcher\"", - "-framework", - "\"GoogleToolboxForMac\"", - "-framework", - "\"GoogleUtilities\"", - "-framework", - "\"LocalAuthentication\"", - "-framework", - "\"MobileCoreServices\"", - "-framework", - "\"OCMock\"", - "-framework", - "\"Protobuf\"", - "-framework", - "\"QuartzCore\"", - "-framework", - "\"SDWebImage\"", - "-framework", - "\"SafariServices\"", - "-framework", - "\"Security\"", - "-framework", - "\"Social\"", - "-framework", - "\"SystemConfiguration\"", - "-framework", - "\"UIKit\"", - "-framework", - "\"grpc\"", - "-framework", - "\"grpcpp\"", - "-framework", - "\"leveldb\"", - "-framework", - "\"nanopb\"", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.firebase.FirebaseUISampleUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = FirebaseUISample; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 8D69E6A621DEC97E00CFA49B /* Build configuration list for PBXProject "FirebaseUISample" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 8D69E6D521DEC98000CFA49B /* Debug */, - 8D69E6D621DEC98000CFA49B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 8D69E6D721DEC98000CFA49B /* Build configuration list for PBXNativeTarget "FirebaseUISample" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 8D69E6D821DEC98000CFA49B /* Debug */, - 8D69E6D921DEC98000CFA49B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 8D69E6DA21DEC98000CFA49B /* Build configuration list for PBXNativeTarget "FirebaseUISampleTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 8D69E6DB21DEC98000CFA49B /* Debug */, - 8D69E6DC21DEC98000CFA49B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 8D69E6DD21DEC98000CFA49B /* Build configuration list for PBXNativeTarget "FirebaseUISampleUITests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 8D69E6DE21DEC98000CFA49B /* Debug */, - 8D69E6DF21DEC98000CFA49B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 8D69E6A321DEC97E00CFA49B /* Project object */; -} diff --git a/UITests/FirebaseUISample.xcodeproj/xcshareddata/xcschemes/FirebaseUISample.xcscheme b/UITests/FirebaseUISample.xcodeproj/xcshareddata/xcschemes/FirebaseUISample.xcscheme deleted file mode 100644 index 56464193a70..00000000000 --- a/UITests/FirebaseUISample.xcodeproj/xcshareddata/xcschemes/FirebaseUISample.xcscheme +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/UITests/FirebaseUISample/Assets.xcassets/AppIcon.appiconset/Contents.json b/UITests/FirebaseUISample/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index d8db8d65fd7..00000000000 --- a/UITests/FirebaseUISample/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "images" : [ - { - "idiom" : "iphone", - "size" : "20x20", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "20x20", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "3x" - }, - { - "idiom" : "ipad", - "size" : "20x20", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "20x20", - "scale" : "2x" - }, - { - "idiom" : "ipad", - "size" : "29x29", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "29x29", - "scale" : "2x" - }, - { - "idiom" : "ipad", - "size" : "40x40", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "40x40", - "scale" : "2x" - }, - { - "idiom" : "ipad", - "size" : "76x76", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "76x76", - "scale" : "2x" - }, - { - "idiom" : "ipad", - "size" : "83.5x83.5", - "scale" : "2x" - }, - { - "idiom" : "ios-marketing", - "size" : "1024x1024", - "scale" : "1x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/UITests/FirebaseUISample/Base.lproj/LaunchScreen.storyboard b/UITests/FirebaseUISample/Base.lproj/LaunchScreen.storyboard deleted file mode 100644 index bfa36129419..00000000000 --- a/UITests/FirebaseUISample/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/UITests/FirebaseUISample/Base.lproj/Main.storyboard b/UITests/FirebaseUISample/Base.lproj/Main.storyboard deleted file mode 100644 index 942f0bc452d..00000000000 --- a/UITests/FirebaseUISample/Base.lproj/Main.storyboard +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/UITests/FirebaseUISample/FUIAppDelegate.h b/UITests/FirebaseUISample/FUIAppDelegate.h deleted file mode 100644 index f30bd05a543..00000000000 --- a/UITests/FirebaseUISample/FUIAppDelegate.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -@interface FUIAppDelegate : UIResponder - -@property (strong, nonatomic) UIWindow *window; - - -@end - diff --git a/UITests/FirebaseUISample/FUIAppDelegate.m b/UITests/FirebaseUISample/FUIAppDelegate.m deleted file mode 100644 index a18d0085eba..00000000000 --- a/UITests/FirebaseUISample/FUIAppDelegate.m +++ /dev/null @@ -1,33 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FUIAppDelegate.h" - -#import -@import FirebaseCore; - -@implementation FUIAppDelegate - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - FIROptions *options = [[FIROptions alloc] initWithGoogleAppID:@"0:000000000000:ios:0000000000000000" - GCMSenderID:@"testGCMSenderIDValue"]; - [FIRApp configureWithOptions:options]; - - return YES; -} - - -@end diff --git a/UITests/FirebaseUISample/FUIViewController.h b/UITests/FirebaseUISample/FUIViewController.h deleted file mode 100644 index 5906641d30c..00000000000 --- a/UITests/FirebaseUISample/FUIViewController.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -@interface FUIViewController : UITableViewController - -@end diff --git a/UITests/FirebaseUISample/FUIViewController.m b/UITests/FirebaseUISample/FUIViewController.m deleted file mode 100644 index 58a7aea91a4..00000000000 --- a/UITests/FirebaseUISample/FUIViewController.m +++ /dev/null @@ -1,612 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FUIViewController.h" - -#import - -#import - -typedef NS_ENUM(NSUInteger, UISections) { - kSectionsSignedInAs = 0, - kSectionsSimulationBehavior, - kSectionsProviders, - kSectionsAccountManager -}; - -typedef NS_ENUM(NSUInteger, FIRSimulationChoise) { - kSimulationNoMocks = 0, - kSimulationExistingUser, - kSimulationNewUser, - kSimulationEmailRecovery, - kSimulationUnknown, -}; - -typedef NS_ENUM(NSUInteger, FIRProviders) { - kIDPEmail = 0, - kIDPGoogle, - kIDPFacebook, - kIDPTwitter, - kIDPPhone -}; - -@interface FUIViewController () -@property (weak, nonatomic) IBOutlet UIBarButtonItem *btnAuthorization; -@property (weak, nonatomic) IBOutlet UILabel *labelUserEmail; -@property (nonatomic, assign) FIRSimulationChoise selectedSimulationChoise; - -@property (nonatomic) id authMock; -@property (nonatomic) id authUIMock; -@property (nonatomic) FIRAuthStateDidChangeListenerHandle authStateDidChangeHandle; - -@end - -@implementation FUIViewController { - NSMutableArray> *_authProviders; -} - -- (void)viewDidLoad { - [super viewDidLoad]; - - _authProviders = [NSMutableArray new]; - - [self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:kSimulationNoMocks - inSection:kSectionsSimulationBehavior] - animated:NO - scrollPosition:UITableViewScrollPositionNone]; - - [self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:kIDPEmail - inSection:kSectionsProviders] - animated:NO - scrollPosition:UITableViewScrollPositionNone]; - -} - -- (IBAction)onAuthorization:(id)sender { - [self prepareAuthUIMocks]; - [self mockPhoneAuthServerRequests]; - - [self prepareStubs]; - - NSString *firstProviderID = _authProviders.firstObject.providerID; - BOOL shouldSkipPhoneAuthPicker = _authProviders.count == 1 && - ([firstProviderID isEqualToString:FIRPhoneAuthProviderID] || - [firstProviderID isEqualToString:@ -@"password"]); - if (!shouldSkipPhoneAuthPicker) { - UIViewController *controller = [self.authUIMock authViewController]; - [self presentViewController:controller animated:YES completion:nil]; - } else if ([firstProviderID isEqualToString:FIRPhoneAuthProviderID]) { - FUIPhoneAuth *provider = _authProviders.firstObject; - [provider signInWithPresentingViewController:self phoneNumber:nil]; - } else if ([firstProviderID isEqualToString:@ -@"password"]) { - FUIEmailAuth *provider = _authProviders.firstObject; - [provider signInWithPresentingViewController:self email:nil]; - } - -} - -- (void)setAuthUIMock:(id)authUIMock { - _authUIMock = authUIMock; - [self configureFirAuthUIProviders]; -} - -#pragma mark - FUIAuthSignInUIDelegate - -- (UIViewController *)presentingSignInController { - return self; -} - -#pragma mark - UITableViewControllerDelegate methods - -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { - if (indexPath.section != kSectionsProviders) { - _selectedSimulationChoise = indexPath.row; - [self deselectAllCellsExcept:indexPath]; - } - - if (indexPath.section == kSectionsAccountManager) { - switch (indexPath.row) { - case 0: - [self prepareForAccountManagerWithPasswordWithoutLinkedAccount]; - break; - case 1: - [self prepareForAccountManagerWithPasswordWithLinkedAccountWithEmail]; - break; - case 2: - [self prepareForAccountManagerWithPasswordWithLinkedAccountWithoutEmail]; - break; - case 3: - [self prepareForAccountManagerWithoutPasswordWithLinkedAccountWithoutEmail]; - break; - case 4: - [self prepareForAccountManagerWithoutPasswordWithLinkedAccountWithEmail]; - break; - - default: - break; - } - - [self mockServerOperations]; - - [tableView deselectRowAtIndexPath:indexPath animated:NO]; - [self showAccountManager]; - } -} - -- (void)deselectAllCellsExcept:(NSIndexPath *)indexPath { - - NSInteger count = [self tableView:self.tableView numberOfRowsInSection:indexPath.section]; - for (NSInteger index = 0; index < count; index++) { - if (index != indexPath.row) { - [self.tableView deselectRowAtIndexPath:[NSIndexPath indexPathForRow:index - inSection:indexPath.section] - animated:YES]; - } - } -} - -#pragma mark - FUIAuthDelegate methods - -- (void)authUI:(FUIAuth *)authUI - didSignInWithAuthDataResult:(nullable FIRAuthDataResult *)authDataResult - error:(nullable NSError *)error { - if (error) { - if (error.code == FUIAuthErrorCodeUserCancelledSignIn) { - [self showAlert:@"User cancelled sign-in"]; - } else { - NSError *detailedError = error.userInfo[NSUnderlyingErrorKey]; - if (!detailedError) { - detailedError = error; - } - [self showAlert:detailedError.localizedDescription]; - } - } else { - _labelUserEmail.text = authDataResult.user.email; - [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:kSectionsSignedInAs] - withRowAnimation:UITableViewRowAnimationNone]; - } -} - -- (void)showAlert:(NSString *)message { - UIAlertController *alert = - [UIAlertController alertControllerWithTitle:@"Error" - message:message - preferredStyle:UIAlertControllerStyleAlert]; - UIAlertAction* closeButton = - [UIAlertAction actionWithTitle:@"Close" - style:UIAlertActionStyleDefault - handler:nil]; - [alert addAction:closeButton]; - [self presentViewController:alert animated:YES completion:nil]; - -} - -#pragma mark - helper methods - -- (void)prepareStubs { - [self populateListOfIDPs]; -// OCMStub([self.authUIMock isSignInWithEmailHidden]).andReturn(![self isEmailEnabled]); - - switch (_selectedSimulationChoise) { - case kSimulationNoMocks: - case kSimulationUnknown: - break; - case kSimulationExistingUser: - [self prepareStubsForSimulationExistingUser]; - break; - case kSimulationNewUser: - [self prepareStubsForSimulationNewUser]; - break; - case kSimulationEmailRecovery: - [self prepareStubsForEmailRecovery]; - break; - - default: - break; - } -} - -- (void)prepareAuthUIMocks { - [self.authMock stopMocking]; - self.authMock = OCMPartialMock([FIRAuth auth]); - - id mockedAuth = OCMClassMock([FIRAuth class]); - OCMStub(ClassMethod([mockedAuth auth])).andReturn(self.authMock); - - [self.authUIMock stopMocking]; - self.authUIMock = OCMPartialMock([self configureFirAuthUI]); - id mockedAuthUI = OCMClassMock([FUIAuth class]); - OCMStub(ClassMethod([mockedAuthUI defaultAuthUI])).andReturn(self.authUIMock); -} - -- (void)prepareStubsForSimulationExistingUser { - OCMStub([self.authMock fetchProvidersForEmail:OCMOCK_ANY completion:OCMOCK_ANY]). - andDo(^(NSInvocation *invocation) { - FIRProviderQueryCallback mockedCallback; - [invocation getArgument:&mockedCallback atIndex:3]; - mockedCallback(@[@"password"], nil); - }); - - - [self mockSignInWithCredential]; -} - -- (void)prepareStubsForSimulationNewUser { - OCMStub([self.authMock fetchProvidersForEmail:OCMOCK_ANY completion:OCMOCK_ANY]). - andDo(^(NSInvocation *invocation) { - FIRProviderQueryCallback mockedResponse; - [invocation getArgument:&mockedResponse atIndex:3]; - mockedResponse(nil, nil); - }); - - - OCMStub([self.authMock createUserWithEmail:OCMOCK_ANY - password:OCMOCK_ANY - completion:OCMOCK_ANY]). - andDo(^(NSInvocation *invocation) { - FIRAuthDataResultCallback mockedCallback; - [invocation getArgument:&mockedCallback atIndex:4]; - - NSString *responseEmail; - [invocation getArgument:&responseEmail atIndex:2]; - - id mockDataResult = OCMClassMock([FIRAuthDataResult class]); - id mockUser = OCMClassMock([FIRUser class]); - OCMStub([mockUser email]).andReturn(responseEmail); - OCMStub([mockDataResult user]).andReturn(mockUser); - [self mockUpdateUserRequest:mockUser]; - - mockedCallback(mockDataResult, nil); - }); - -} - -- (void)prepareStubsForEmailRecovery { - OCMStub([self.authMock fetchProvidersForEmail:OCMOCK_ANY completion:OCMOCK_ANY]). - andDo(^(NSInvocation *invocation) { - FIRProviderQueryCallback mockedCallback; - [invocation getArgument:&mockedCallback atIndex:3]; - mockedCallback(@[@"password"], nil); - }); - - OCMStub([self.authMock sendPasswordResetWithEmail:OCMOCK_ANY completion:OCMOCK_ANY]). - andDo(^(NSInvocation *invocation) { - FIRSendPasswordResetCallback mockedCallback; - [invocation getArgument:&mockedCallback atIndex:3]; - mockedCallback(nil); - }); - -} - -- (void)populateListOfIDPs { - NSArray *selectedRows = [self.tableView indexPathsForSelectedRows]; - [_authProviders removeAllObjects]; - - for (NSIndexPath *indexPath in selectedRows) { - if (indexPath.section == kSectionsProviders) { - switch (indexPath.row) { - case kIDPEmail: - [_authProviders addObject:[[FUIEmailAuth alloc] init]]; - break; - case kIDPGoogle: - [_authProviders addObject:[[FUIGoogleAuth alloc] init]]; - break; - case kIDPFacebook: - [_authProviders addObject:[[FUIFacebookAuth alloc] init]]; - break; - case kIDPTwitter: - { - UIColor *buttonColor = [UIColor colorWithRed:71.0f/255.0f - green:154.0f/255.0f - blue:234.0f/255.0f - alpha:1.0f]; - NSString *iconPath = - [[NSBundle mainBundle] pathForResource:@"twtrsymbol" ofType:@"png"]; - if (!iconPath) { - NSLog(@"Warning: Unable to find twitter icon."); - } - [_authProviders addObject:[[FUIOAuth alloc] initWithAuthUI:[FUIAuth defaultAuthUI] - providerID:@"twitter.com" - buttonLabelText:@"Sign in with Twitter" - shortName:@"Twitter" - buttonColor:buttonColor - iconImage:nil - scopes:@[@"user.readwrite"] - customParameters:@{@"prompt" : @"consent"} - loginHintKey:nil]]; - } - break; - case kIDPPhone: - [_authProviders addObject:[[FUIPhoneAuth alloc] initWithAuthUI:self.authUIMock]]; - break; - - default: - break; - } - } - } -} - -- (BOOL)isEmailEnabled { - NSArray *selectedRows = [self.tableView indexPathsForSelectedRows]; - return [selectedRows containsObject:[NSIndexPath - indexPathForRow:kIDPEmail - inSection:kSectionsProviders]]; -} - -- (FUIAuth *)configureFirAuthUI { - FUIAuth *authUI = [FUIAuth defaultAuthUI]; - authUI.delegate = self; - return authUI; -} - -- (void)configureFirAuthUIProviders { - [self populateListOfIDPs]; - OCMStub([self.authUIMock providers]).andReturn(_authProviders); -} - -- (void)showAccountManager { - UIViewController *controller = - [[FUIAccountSettingsViewController alloc] initWithAuthUI:self.authUIMock]; - [self.navigationController pushViewController:controller animated:YES]; -} - -- (void)prepareForAccountManagerWithPasswordWithoutLinkedAccount { - id mockUser = [self mockUserWhichHasEmail:YES]; - - // Add EmailPassword provider - id emailPasswordProviderMock = [self createPasswordProvider]; - - // Stub providerData - NSArray *providers = [NSArray arrayWithObject:emailPasswordProviderMock]; - OCMStub([mockUser providerData]).andReturn(providers); - -} - -- (void)prepareForAccountManagerWithPasswordWithLinkedAccountWithEmail { - id mockUser = [self mockUserWhichHasEmail:YES]; - - //Add EmailPassword provider - id emailPasswordProviderMock = [self createPasswordProvider]; - - //Add third party provider with email - id linkedProviderMock = [self createThirdPartyProvider:@ -@"google.com" hasEmail:YES]; - - // Stub providerData - NSArray *providers = - [NSArray arrayWithObjects:emailPasswordProviderMock, linkedProviderMock, nil]; - OCMStub([mockUser providerData]).andReturn(providers); -} - -- (void)prepareForAccountManagerWithPasswordWithLinkedAccountWithoutEmail { - id mockUser = [self mockUserWhichHasEmail:YES]; - - //Add third party provider without email - id linkedProviderMock = [self createThirdPartyProvider:@ -@"google.com" hasEmail:NO]; - - //Add EmailPassword provider - id emailPasswordProviderMock = [self createPasswordProvider]; - - // Stub providerData - NSArray *providers = - [NSArray arrayWithObjects:emailPasswordProviderMock, linkedProviderMock, nil]; - OCMStub([mockUser providerData]).andReturn(providers); -} - -- (void)prepareForAccountManagerWithoutPasswordWithLinkedAccountWithoutEmail { - id mockUser = [self mockUserWhichHasEmail:NO]; - - //Add third party provider without email - id linkedProviderMock = [self createThirdPartyProvider:@ -@"google.com" hasEmail:NO]; - - // Stub providerData - NSArray *providers = [NSArray arrayWithObject:linkedProviderMock]; - OCMStub([mockUser providerData]).andReturn(providers); -} - -- (void)prepareForAccountManagerWithoutPasswordWithLinkedAccountWithEmail { - id mockUser = [self mockUserWhichHasEmail:YES]; - - //Add third party provider with email - id linkedProviderMock = [self createThirdPartyProvider:@ -@"google.com" hasEmail:YES]; - - // Stub providerData - NSArray *providers = [NSArray arrayWithObject:linkedProviderMock]; - OCMStub([mockUser providerData]).andReturn(providers); -} - -#pragma mark - stubbing methods - -- (id)createPasswordProvider { - id emailPasswordProviderMock = OCMProtocolMock(@protocol(FIRUserInfo)); - OCMStub([emailPasswordProviderMock providerID]).andReturn(@ -@"password"); - OCMStub([emailPasswordProviderMock email]).andReturn(@"password@email.com"); - OCMStub([emailPasswordProviderMock displayName]).andReturn(@"password displayName"); - - return emailPasswordProviderMock; -} - -- (id)createThirdPartyProvider:(NSString *)providerId hasEmail:(BOOL)hasEmail { - id linkedProviderMock = OCMProtocolMock(@protocol(FIRUserInfo)); - OCMStub([linkedProviderMock providerID]).andReturn(providerId); - OCMStub([linkedProviderMock displayName]).andReturn(@"linked displayName"); - if (hasEmail) { - OCMStub([linkedProviderMock email]).andReturn(@"linked@email.com"); - } - return linkedProviderMock; -} - -- (id)mockUserWhichHasEmail:(BOOL)hasEmail { - id mockUser = OCMClassMock([FIRUser class]); - OCMStub([self.authMock currentUser]).andReturn(mockUser); - - // Mock User display values - if (hasEmail) { - OCMStub([mockUser email]).andReturn(@"email@email.com"); - } - OCMStub([mockUser displayName]).andReturn(@"user displayName"); - - return mockUser; -} - -- (void)mockUpdateUserRequest:(id)mockUser { - id mockRequest = OCMClassMock([FIRUserProfileChangeRequest class]); - OCMStub([mockUser profileChangeRequest]).andReturn(mockRequest); - OCMStub([mockRequest commitChangesWithCompletion:OCMOCK_ANY]).andDo(^(NSInvocation *invocation) { - FIRUserProfileChangeCallback mockedCallBack; - [invocation getArgument:&mockedCallBack atIndex:2]; - mockedCallBack(nil); - }); -} - -- (void)mockSignInWithCredential { - OCMStub([self.authMock signInAndRetrieveDataWithCredential:OCMOCK_ANY completion:OCMOCK_ANY]). - andDo(^(NSInvocation *invocation) { - FIRAuthDataResultCallback mockedResponse; - [invocation getArgument:&mockedResponse atIndex:3]; - id mockDataResult = OCMClassMock([FIRAuthDataResult class]); - mockedResponse(mockDataResult, nil); - }); -} -- (void)mockUpdatePasswordRequest:(id)mockUser { - OCMStub([mockUser updatePassword:OCMOCK_ANY completion:OCMOCK_ANY]). - andDo(^(NSInvocation *invocation) { - FIRUserProfileChangeCallback mockedCallBack; - [invocation getArgument:&mockedCallBack atIndex:3]; - mockedCallBack(nil); - }); -} - -- (void)mockSignOut { - OCMStub([self.authUIMock signOutWithError:[OCMArg setTo:nil]]); -} - -- (void)mockDeleteUserRequest:(id)mockUser { - OCMStub([mockUser deleteWithCompletion:OCMOCK_ANY]). - andDo(^(NSInvocation *invocation) { - FIRUserProfileChangeCallback mockedCallBack; - [invocation getArgument:&mockedCallBack atIndex:2]; - mockedCallBack(nil); - }); -} - -- (void)mockUpdateEmail:(id)mockUser { - OCMStub([mockUser updateEmail:OCMOCK_ANY completion:OCMOCK_ANY]). - andDo(^(NSInvocation *invocation) { - FIRUserProfileChangeCallback mockedCallBack; - [invocation getArgument:&mockedCallBack atIndex:3]; - mockedCallBack(nil); - }); -} - -- (void)mockSignInWithProvider:(NSString *)providerId user:(id)mockUser { - id mockProviderUI = OCMProtocolMock(@protocol(FUIAuthProvider)); - NSArray *providers = [NSArray arrayWithObject:mockProviderUI]; - OCMStub([self.authUIMock providers]).andReturn(providers); - - OCMStub([mockProviderUI signOut]); - OCMStub([mockProviderUI providerID]).andReturn(providerId); - - OCMStub([mockUser reauthenticateAndRetrieveDataWithCredential:OCMOCK_ANY completion:OCMOCK_ANY]). - andDo(^(NSInvocation *invocation) { - FIRUserProfileChangeCallback mockedCallBack; - [invocation getArgument:&mockedCallBack atIndex:3]; - - mockedCallBack(nil); - }); - - OCMStub([mockProviderUI signInWithDefaultValue:OCMOCK_ANY - presentingViewController:OCMOCK_ANY - completion:OCMOCK_ANY]). - andDo(^(NSInvocation *invocation) { - FUIAuthProviderSignInCompletionBlock mockedResponse; - [invocation getArgument:&mockedResponse atIndex:4]; - - id mockCredential = OCMClassMock([FIRAuthCredential class]); - mockedResponse(mockCredential, nil, nil, nil); - }); -} - -- (void)mockUnlinkOperation:(id)mockUser { - OCMStub([mockUser unlinkFromProvider:OCMOCK_ANY completion:OCMOCK_ANY]). - andDo(^(NSInvocation *invocation) { - FIRAuthResultCallback mockedCallBack; - [invocation getArgument:&mockedCallBack atIndex:3]; - - mockedCallBack(mockUser, nil); - }); -} - -- (void)mockServerOperations { - id mockUser = [self.authMock currentUser]; - - // Mock update name request - [self mockUpdateUserRequest:mockUser]; - - // Mock udpate email operation - [self mockUpdateEmail:mockUser]; - - // mock re-authentication with credential - [self mockSignInWithCredential]; - - // mock update password - [self mockUpdatePasswordRequest:mockUser]; - - // mock sign out - [self mockSignOut]; - - // mock delete user - [self mockDeleteUserRequest:mockUser]; - - // mock re-authentication with 3P provider - [self mockSignInWithProvider:@ -@"google.com" user:mockUser]; - - // mock unlinking 3P provider - [self mockUnlinkOperation:mockUser]; -} - -#pragma mark - Phone Auth mocks - -- (void)mockPhoneAuthServerRequests { - id mockedProvider = OCMClassMock([FIRPhoneAuthProvider class]); - OCMStub(ClassMethod([mockedProvider provider])).andReturn(mockedProvider); - OCMStub(ClassMethod([mockedProvider providerWithAuth:OCMOCK_ANY])).andReturn(mockedProvider); - - OCMStub([mockedProvider verifyPhoneNumber:OCMOCK_ANY - UIDelegate:OCMOCK_ANY - completion:OCMOCK_ANY]). - andDo(^(NSInvocation *invocation) { - FIRVerificationResultCallback mockedCallback; - [invocation getArgument:&mockedCallback atIndex:4]; - mockedCallback(@"verificationID", nil); - }); - - id mockedCredential = OCMClassMock([FIRPhoneAuthCredential class]); - OCMStub([mockedProvider credentialWithVerificationID:OCMOCK_ANY verificationCode:OCMOCK_ANY]). - andReturn(mockedCredential); - - [self mockSignInWithCredential]; -} - -@end diff --git a/UITests/FirebaseUISample/Info.plist b/UITests/FirebaseUISample/Info.plist deleted file mode 100644 index e5d82108923..00000000000 --- a/UITests/FirebaseUISample/Info.plist +++ /dev/null @@ -1,45 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en_US - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UILaunchStoryboardName - LaunchScreen - UIMainStoryboardFile - Main - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/UITests/FirebaseUISample/Resources/LaunchScreen.storyboard b/UITests/FirebaseUISample/Resources/LaunchScreen.storyboard deleted file mode 100644 index fdf3f97d1b6..00000000000 --- a/UITests/FirebaseUISample/Resources/LaunchScreen.storyboard +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/UITests/FirebaseUISample/Resources/Main.storyboard b/UITests/FirebaseUISample/Resources/Main.storyboard deleted file mode 100644 index d07f75cab6b..00000000000 --- a/UITests/FirebaseUISample/Resources/Main.storyboard +++ /dev/null @@ -1,341 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/UITests/FirebaseUISample/Resources/ar.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/ar.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/bg.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/bg.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/bn.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/bn.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/ca.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/ca.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/cs.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/cs.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/da.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/da.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/de-AT.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/de-AT.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/de-CH.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/de-CH.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/de.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/de.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/el.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/el.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/en-AU.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/en-AU.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/en-CA.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/en-CA.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/en-GB.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/en-GB.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/en-IE.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/en-IE.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/en-IN.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/en-IN.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/en-SG.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/en-SG.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/en-ZA.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/en-ZA.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/en.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/en.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/es-419.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/es-419.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/es-AR.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/es-AR.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/es-BO.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/es-BO.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/es-CL.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/es-CL.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/es-CO.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/es-CO.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/es-CR.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/es-CR.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/es-DO.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/es-DO.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/es-EC.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/es-EC.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/es-GT.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/es-GT.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/es-HN.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/es-HN.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/es-MX.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/es-MX.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/es-NI.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/es-NI.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/es-PA.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/es-PA.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/es-PE.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/es-PE.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/es-PR.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/es-PR.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/es-PY.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/es-PY.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/es-SV.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/es-SV.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/es-US.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/es-US.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/es-UY.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/es-UY.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/es-VE.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/es-VE.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/es.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/es.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/fa.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/fa.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/fi.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/fi.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/fil.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/fil.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/fr-CH.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/fr-CH.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/fr.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/fr.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/gsw.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/gsw.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/gu.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/gu.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/he.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/he.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/hi.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/hi.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/hr.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/hr.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/hu.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/hu.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/id.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/id.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/it.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/it.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/ja.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/ja.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/kn.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/kn.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/ko.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/ko.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/ln.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/ln.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/lt.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/lt.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/lv.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/lv.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/mr.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/mr.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/ms.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/ms.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/nb.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/nb.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/nl.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/nl.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/nn-NO.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/nn-NO.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/pl.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/pl.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/pt-BR.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/pt-BR.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/pt-PT.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/pt-PT.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/pt.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/pt.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/ro.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/ro.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/ru.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/ru.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/sk.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/sk.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/sl.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/sl.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/sr-Latn.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/sr-Latn.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/sr.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/sr.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/sv.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/sv.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/ta.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/ta.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/th.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/th.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/tr.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/tr.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/uk.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/uk.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/ur.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/ur.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/vi.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/vi.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/zh-Hans.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/zh-Hans.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/zh-Hant-TW.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/zh-Hant-TW.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/zh-Hant.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/zh-Hant.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/Resources/zh.lproj/Localizable.strings b/UITests/FirebaseUISample/Resources/zh.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/UITests/FirebaseUISample/main.m b/UITests/FirebaseUISample/main.m deleted file mode 100644 index 5ca11561a6e..00000000000 --- a/UITests/FirebaseUISample/main.m +++ /dev/null @@ -1,24 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import -#import "FUIAppDelegate.h" - -int main(int argc, char * argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([FUIAppDelegate class])); - } -} diff --git a/UITests/FirebaseUISampleTests/FirebaseUISampleTests.m b/UITests/FirebaseUISampleTests/FirebaseUISampleTests.m deleted file mode 100644 index 908019ec354..00000000000 --- a/UITests/FirebaseUISampleTests/FirebaseUISampleTests.m +++ /dev/null @@ -1,37 +0,0 @@ -// -// FirebaseUISampleTests.m -// FirebaseUISampleTests -// -// Created by Morgan Chen on 1/3/19. -// Copyright © 2019 Firebase. All rights reserved. -// - -#import - -@interface FirebaseUISampleTests : XCTestCase - -@end - -@implementation FirebaseUISampleTests - -- (void)setUp { - // Put setup code here. This method is called before the invocation of each test method in the class. -} - -- (void)tearDown { - // Put teardown code here. This method is called after the invocation of each test method in the class. -} - -- (void)testExample { - // This is an example of a functional test case. - // Use XCTAssert and related functions to verify your tests produce the correct results. -} - -- (void)testPerformanceExample { - // This is an example of a performance test case. - [self measureBlock:^{ - // Put the code you want to measure the time of here. - }]; -} - -@end diff --git a/UITests/FirebaseUISampleTests/Info.plist b/UITests/FirebaseUISampleTests/Info.plist deleted file mode 100644 index 6c40a6cd0c4..00000000000 --- a/UITests/FirebaseUISampleTests/Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - - diff --git a/UITests/FirebaseUISampleUITests/FirebaseUISampleUITests.m b/UITests/FirebaseUISampleUITests/FirebaseUISampleUITests.m deleted file mode 100644 index 997b18aae8f..00000000000 --- a/UITests/FirebaseUISampleUITests/FirebaseUISampleUITests.m +++ /dev/null @@ -1,218 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -@implementation XCUIElement (ForceTap) -- (void) forceTap { - if (self.hittable) { - [self tap]; - } else { - XCUICoordinate *coordinate = [self coordinateWithNormalizedOffset:CGVectorMake(0.0, 0.0)]; - [coordinate tap]; - } -} -@end - -@interface FirebaseUISampleUITests : XCTestCase -@property (nonatomic, strong) XCUIApplication *app; -@end - -@implementation FirebaseUISampleUITests - -- (void)setUp { - [super setUp]; - self.continueAfterFailure = NO; - self.app = [[XCUIApplication alloc] init]; - - // force US locale on travis - self.app.launchArguments = @[ - @"-inUITest", - @"-AppleLanguages", @"(en)", - @"-AppleLocale", @"en_US", - ]; - - [self.app launch]; -} - -- (void)tearDown { - [self.app terminate]; - [super tearDown]; -} - -- (void)testSuccessSignIn { - XCUIElementQuery *tablesQuery = self.app.tables; - [tablesQuery.cells.staticTexts[@"Simulate Existing User"] tap]; - [self.app.toolbars.buttons[@"Sign In"] tap]; - [tablesQuery.cells[@"EmailCellAccessibilityID"].textFields[@"Enter your email"] tap]; - [[tablesQuery.cells[@"EmailCellAccessibilityID"] childrenMatchingType:XCUIElementTypeTextField].element typeText:@"test@test.com"]; - [self.app.navigationBars[@"Enter your email"].buttons[@"NextButtonAccessibilityID"] tap]; - [tablesQuery.secureTextFields[@"Enter your password"] tap]; - [[[tablesQuery.cells containingType:XCUIElementTypeStaticText identifier:@"Password"] childrenMatchingType:XCUIElementTypeSecureTextField].element typeText:@"test"]; - [self.app.navigationBars[@"Sign in"].buttons[@"Sign in"] tap]; - [self.app.toolbars.buttons[@"Sign In"] isHittable]; -} - -- (void)testSuccessSignUp { - XCUIElementQuery *tablesQuery = self.app.tables; - [tablesQuery.staticTexts[@"Simulate New User"] tap]; - [self.app.toolbars.buttons[@"Sign In"] tap]; - - [tablesQuery.cells[@"EmailCellAccessibilityID"].textFields[@"Enter your email"] tap]; - [[tablesQuery.cells[@"EmailCellAccessibilityID"] childrenMatchingType:XCUIElementTypeTextField].element typeText:@"test2@test2.com"]; - [self.app.navigationBars[@"Enter your email"].buttons[@"NextButtonAccessibilityID"] tap]; - [tablesQuery.cells[@"NameSignUpCellAccessibilityID"].textFields[@"First & last name"] tap]; - [[tablesQuery.cells[@"NameSignUpCellAccessibilityID"] childrenMatchingType:XCUIElementTypeTextField].element typeText:@"test2"]; - - [tablesQuery.cells[@"PasswordSignUpCellAccessibilityID"].secureTextFields[@"Choose password"] tap]; - [[tablesQuery.secureTextFields containingType:XCUIElementTypeButton identifier:@"ic visibility"].element typeText:@"test"]; - [tablesQuery.buttons[@"ic visibility"] tap]; - [tablesQuery.buttons[@"ic visibility off"] tap]; - [self.app.navigationBars[@"Create account"].buttons[@"SaveButtonAccessibilityID"] tap]; - [self.app.toolbars.buttons[@"Sign In"] isHittable]; -} - -- (void)testSeveralIDPs { - XCUIElementQuery *tablesQuery = self.app.tables; - [tablesQuery.cells.staticTexts[@"Google"] tap]; - [tablesQuery.cells.staticTexts[@"Simulate Existing User"] tap]; - [self.app.toolbars.buttons[@"Sign In"] tap]; - [self.app.buttons[@"Sign in with email"] tap]; - [tablesQuery.cells[@"EmailCellAccessibilityID"].textFields[@"Enter your email"] tap]; - [[tablesQuery.cells[@"EmailCellAccessibilityID"] childrenMatchingType:XCUIElementTypeTextField].element typeText:@"test@test.com"]; - - XCUIElement *signInWithEmailNavigationBar = self.app.navigationBars[@"Enter your email"]; - [signInWithEmailNavigationBar.buttons[@"Next"] tap]; - [[[[self.app.navigationBars[@"Sign in"] childrenMatchingType:XCUIElementTypeButton] matchingIdentifier:@"Back"] elementBoundByIndex:0] tap]; - [[[[signInWithEmailNavigationBar childrenMatchingType:XCUIElementTypeButton] matchingIdentifier:@"Back"] elementBoundByIndex:0] tap]; - [self.app.navigationBars[@"Welcome"].buttons[@"Cancel"] tap]; - [self.app.alerts[@"Error"].buttons[@"Close"] tap]; - - [self.app.toolbars.buttons[@"Sign In"] isHittable]; -} - -- (void)testEmailRecovery { - XCUIElementQuery *tablesQuery = self.app.tables; - [tablesQuery.cells.staticTexts[@"Simulate Email Recovery"] tap]; - [self.app.toolbars.buttons[@"Sign In"] tap]; - - XCUIElement *enterYourEmailTextField = tablesQuery.cells[@"EmailCellAccessibilityID"].textFields[@"Enter your email"]; - [enterYourEmailTextField tap]; - [enterYourEmailTextField tap]; - [[tablesQuery.cells[@"EmailCellAccessibilityID"] childrenMatchingType:XCUIElementTypeTextField].element typeText:@"test@test.com"]; - - XCUIElement *signInWithEmailNavigationBar = self.app.navigationBars[@"Enter your email"]; - [signInWithEmailNavigationBar.buttons[@"NextButtonAccessibilityID"] tap]; - [tablesQuery.secureTextFields[@"Enter your password"] tap]; - [tablesQuery.buttons[@"Trouble signing in?"] tap]; - - XCUIElement *recoverPasswordNavigationBar = self.app.navigationBars[@"Recover password"]; - [recoverPasswordNavigationBar.buttons[@"Send"] tap]; - XCUIElement *okButton = self.app.alerts.buttons[@"OK"]; - [okButton tap]; - [[[[recoverPasswordNavigationBar childrenMatchingType:XCUIElementTypeButton] matchingIdentifier:@"Back"] elementBoundByIndex:0] tap]; - [[[[self.app.navigationBars[@"Sign in"] childrenMatchingType:XCUIElementTypeButton] matchingIdentifier:@"Back"] elementBoundByIndex:0] tap]; - [signInWithEmailNavigationBar.buttons[@"Cancel"] tap]; - [self.app.alerts[@"Error"].buttons[@"Close"] tap]; - - [self.app.toolbars.buttons[@"Sign In"] isHittable]; -} - -- (void)testPhoneAuthCountryPicker { - XCUIElementQuery *tablesQuery = self.app.tables; - - [tablesQuery.cells.staticTexts[@"Phone"] tap]; - [self.app.toolbars.buttons[@"Sign In"] tap]; - [self.app.buttons[@"Sign in with phone"] tap]; - - [tablesQuery.staticTexts[@"Country"] tap]; - - [self.app.tables.cells.staticTexts[@"\U0001F1E6\U0001F1F8 American Samoa"] tap]; - - [tablesQuery.staticTexts[@"Country"] tap]; - [self.app.tables.searchFields[@"Search"] tap]; - [self.app.searchFields[@"Search"] typeText:@"united"]; - - [self.app.tables.cells.staticTexts[@"\U0001F1FA\U0001F1F8 United States"] forceTap]; - - [self.app.navigationBars[@"Enter phone number"].buttons[@"Back"] tap]; - [self.app.navigationBars[@"Welcome"].buttons[@"Cancel"] tap]; - [self.app.alerts[@"Error"].buttons[@"Close"] tap]; - - [self.app.toolbars.buttons[@"Sign In"] isHittable]; -} - -- (void)testPhoneAuthFlow { - XCUIElementQuery *tablesQuery = self.app.tables; - - [tablesQuery.cells.staticTexts[@"Phone"] tap]; - [self.app.toolbars.buttons[@"Sign In"] tap]; - [self.app.buttons[@"Sign in with phone"] tap]; - - [tablesQuery.cells[@"PhoneNumberCellAccessibilityID"].textFields[@"Phone number"] tap]; - [[tablesQuery.cells[@"PhoneNumberCellAccessibilityID"] - childrenMatchingType:XCUIElementTypeTextField].element typeText:@"123456789"]; - [self.app.navigationBars[@"Enter phone number"].buttons[@"Verify"] tap]; - - [self.app.keyboards.keys[@"1"] tap]; - [self.app.keyboards.keys[@"2"] tap]; - [self.app.keyboards.keys[@"3"] tap]; - [self.app.keyboards.keys[@"4"] tap]; - [self.app.keyboards.keys[@"5"] tap]; - - XCUIElement *nextbuttonaccessibilityidButton = - self.app.navigationBars[@"Verify phone number"].buttons[@"NextButtonAccessibilityID"]; - [nextbuttonaccessibilityidButton tap]; - [self.app.keyboards.keys[@"6"] tap]; - [nextbuttonaccessibilityidButton tap]; - - [self.app.toolbars.buttons[@"Sign In"] isHittable]; -} - -- (void)testDirectPhoneAuthSignIn { - XCUIElementQuery *tablesQuery = self.app.tables; - [tablesQuery.cells.staticTexts[@"Phone"] tap]; - [tablesQuery.cells.staticTexts[@"Email"] tap]; - - XCUIElement *signInButton = self.app.toolbars.buttons[@"Sign In"]; - [signInButton tap]; - - XCUIElement *textField = [tablesQuery.cells[@"PhoneNumberCellAccessibilityID"] - childrenMatchingType:XCUIElementTypeTextField].element; - [textField typeText:@"1"]; - - XCUIElement *enterPhoneNumberNavigationBar = self.app.navigationBars[@"Enter phone number"]; - XCUIElement *nextbuttonaccessibilityidButton = - enterPhoneNumberNavigationBar.buttons[@"NextButtonAccessibilityID"]; - [nextbuttonaccessibilityidButton tap]; - [self.app.buttons[@"+11"] tap]; - [enterPhoneNumberNavigationBar.buttons[@"Cancel"] tap]; - [self.app.alerts[@"Error"].buttons[@"Close"] tap]; - [signInButton tap]; - [textField typeText:@"2"]; - [nextbuttonaccessibilityidButton tap]; - [self.app.keyboards.keys[@"1"] tap]; - [self.app.keyboards.keys[@"2"] tap]; - [self.app.keyboards.keys[@"3"] tap]; - [self.app.keyboards.keys[@"4"] tap]; - [self.app.keyboards.keys[@"5"] tap]; - [self.app.keyboards.keys[@"6"] tap]; - [self.app.navigationBars[@"Verify phone number"].buttons[@"NextButtonAccessibilityID"] tap]; - - [self.app.toolbars.buttons[@"Sign In"] isHittable]; -} - -@end diff --git a/UITests/FirebaseUISampleUITests/Info.plist b/UITests/FirebaseUISampleUITests/Info.plist deleted file mode 100644 index 50707ab35c4..00000000000 --- a/UITests/FirebaseUISampleUITests/Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en_US - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - - diff --git a/UITests/Podfile b/UITests/Podfile deleted file mode 100644 index aa945080360..00000000000 --- a/UITests/Podfile +++ /dev/null @@ -1,16 +0,0 @@ -source 'sso://cpdc-internal/firebase' -source 'https://github.com/CocoaPods/Specs.git' - -platform :ios, '13.0' - -target 'FirebaseUISample' do - use_frameworks! - platform :ios, '13.0' - - pod 'OCMock' - pod 'FirebaseUI', :path => '../' - - target 'FirebaseUISampleUITests' do - inherit! :search_paths - end -end diff --git a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample.xcodeproj/project.pbxproj b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample.xcodeproj/project.pbxproj similarity index 88% rename from samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample.xcodeproj/project.pbxproj rename to e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample.xcodeproj/project.pbxproj index 812f7b770cf..c24cabddd6d 100644 --- a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample.xcodeproj/project.pbxproj +++ b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample.xcodeproj/project.pbxproj @@ -14,8 +14,13 @@ 46CB7B252D773F2100F1FD0A /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 46CB7B242D773F2100F1FD0A /* GoogleService-Info.plist */; }; 46F89C392D64B04E000F8BC0 /* FirebaseAuthSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 46F89C382D64B04E000F8BC0 /* FirebaseAuthSwiftUI */; }; 46F89C4D2D64BB9B000F8BC0 /* FirebaseAuthSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 46F89C4C2D64BB9B000F8BC0 /* FirebaseAuthSwiftUI */; }; - 8D808CB72DB0811900D2293F /* FirebaseFacebookSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 8D808CB62DB0811900D2293F /* FirebaseFacebookSwiftUI */; }; - 8D808CB92DB081F900D2293F /* FirebasePhoneAuthSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 8D808CB82DB081F900D2293F /* FirebasePhoneAuthSwiftUI */; }; + 7EBF264D2EBE10DB000F0BB3 /* FirebaseAppleSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 7EBF264C2EBE10DB000F0BB3 /* FirebaseAppleSwiftUI */; }; + 7EBF264F2EBE10DB000F0BB3 /* FirebaseAuthSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 7EBF264E2EBE10DB000F0BB3 /* FirebaseAuthSwiftUI */; }; + 7EBF26512EBE10DB000F0BB3 /* FirebaseFacebookSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 7EBF26502EBE10DB000F0BB3 /* FirebaseFacebookSwiftUI */; }; + 7EBF26532EBE10DB000F0BB3 /* FirebaseGoogleSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 7EBF26522EBE10DB000F0BB3 /* FirebaseGoogleSwiftUI */; }; + 7EBF26552EBE10DB000F0BB3 /* FirebaseOAuthSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 7EBF26542EBE10DB000F0BB3 /* FirebaseOAuthSwiftUI */; }; + 7EBF26572EBE10DB000F0BB3 /* FirebasePhoneAuthSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 7EBF26562EBE10DB000F0BB3 /* FirebasePhoneAuthSwiftUI */; }; + 7EBF26592EBE10DB000F0BB3 /* FirebaseTwitterSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 7EBF26582EBE10DB000F0BB3 /* FirebaseTwitterSwiftUI */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -78,12 +83,17 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 8D808CB72DB0811900D2293F /* FirebaseFacebookSwiftUI in Frameworks */, + 7EBF26572EBE10DB000F0BB3 /* FirebasePhoneAuthSwiftUI in Frameworks */, 46F89C392D64B04E000F8BC0 /* FirebaseAuthSwiftUI in Frameworks */, + 7EBF26512EBE10DB000F0BB3 /* FirebaseFacebookSwiftUI in Frameworks */, + 7EBF264D2EBE10DB000F0BB3 /* FirebaseAppleSwiftUI in Frameworks */, 46F89C4D2D64BB9B000F8BC0 /* FirebaseAuthSwiftUI in Frameworks */, 4607CC9E2D9BFE29009EC3F5 /* FirebaseGoogleSwiftUI in Frameworks */, - 8D808CB92DB081F900D2293F /* FirebasePhoneAuthSwiftUI in Frameworks */, + 7EBF26592EBE10DB000F0BB3 /* FirebaseTwitterSwiftUI in Frameworks */, 4607CC9C2D9BFE29009EC3F5 /* FirebaseAuthSwiftUI in Frameworks */, + 7EBF26532EBE10DB000F0BB3 /* FirebaseGoogleSwiftUI in Frameworks */, + 7EBF264F2EBE10DB000F0BB3 /* FirebaseAuthSwiftUI in Frameworks */, + 7EBF26552EBE10DB000F0BB3 /* FirebaseOAuthSwiftUI in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -159,8 +169,13 @@ 46F89C4C2D64BB9B000F8BC0 /* FirebaseAuthSwiftUI */, 4607CC9B2D9BFE29009EC3F5 /* FirebaseAuthSwiftUI */, 4607CC9D2D9BFE29009EC3F5 /* FirebaseGoogleSwiftUI */, - 8D808CB62DB0811900D2293F /* FirebaseFacebookSwiftUI */, - 8D808CB82DB081F900D2293F /* FirebasePhoneAuthSwiftUI */, + 7EBF264C2EBE10DB000F0BB3 /* FirebaseAppleSwiftUI */, + 7EBF264E2EBE10DB000F0BB3 /* FirebaseAuthSwiftUI */, + 7EBF26502EBE10DB000F0BB3 /* FirebaseFacebookSwiftUI */, + 7EBF26522EBE10DB000F0BB3 /* FirebaseGoogleSwiftUI */, + 7EBF26542EBE10DB000F0BB3 /* FirebaseOAuthSwiftUI */, + 7EBF26562EBE10DB000F0BB3 /* FirebasePhoneAuthSwiftUI */, + 7EBF26582EBE10DB000F0BB3 /* FirebaseTwitterSwiftUI */, ); productName = FirebaseSwiftUIExample; productReference = 46F89C082D64A86C000F8BC0 /* FirebaseSwiftUIExample.app */; @@ -247,8 +262,8 @@ mainGroup = 46F89BFF2D64A86C000F8BC0; minimizedProjectReferenceProxies = 1; packageReferences = ( - 8D808CB52DB07EBD00D2293F /* XCLocalSwiftPackageReference "../../../../FirebaseUI-iOS" */, 4600E5502DD777BE00EED5F3 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */, + 7EBF264B2EBE10DB000F0BB3 /* XCLocalSwiftPackageReference "../../../FirebaseUI-iOS" */, ); preferredProjectObjectVersion = 77; productRefGroup = 46F89C092D64A86C000F8BC0 /* Products */; @@ -472,7 +487,7 @@ PRODUCT_BUNDLE_IDENTIFIER = io.flutter.plugins.firebase.auth.example; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; + SWIFT_VERSION = 6.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; @@ -505,7 +520,7 @@ PRODUCT_BUNDLE_IDENTIFIER = io.flutter.plugins.firebase.auth.example; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; + SWIFT_VERSION = 6.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; @@ -523,7 +538,7 @@ PRODUCT_BUNDLE_IDENTIFIER = io.invertase.testing.FirebaseSwiftUIExampleTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; + SWIFT_VERSION = 6.0; TARGETED_DEVICE_FAMILY = "1,2"; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/FirebaseSwiftUIExample.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/FirebaseSwiftUIExample"; }; @@ -542,7 +557,7 @@ PRODUCT_BUNDLE_IDENTIFIER = io.invertase.testing.FirebaseSwiftUIExampleTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; + SWIFT_VERSION = 6.0; TARGETED_DEVICE_FAMILY = "1,2"; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/FirebaseSwiftUIExample.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/FirebaseSwiftUIExample"; }; @@ -559,7 +574,7 @@ PRODUCT_BUNDLE_IDENTIFIER = io.invertase.testing.FirebaseSwiftUIExampleUITests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; + SWIFT_VERSION = 6.0; TARGETED_DEVICE_FAMILY = "1,2"; TEST_TARGET_NAME = FirebaseSwiftUIExample; }; @@ -576,7 +591,7 @@ PRODUCT_BUNDLE_IDENTIFIER = io.invertase.testing.FirebaseSwiftUIExampleUITests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; + SWIFT_VERSION = 6.0; TARGETED_DEVICE_FAMILY = "1,2"; TEST_TARGET_NAME = FirebaseSwiftUIExample; }; @@ -624,9 +639,9 @@ /* End XCConfigurationList section */ /* Begin XCLocalSwiftPackageReference section */ - 8D808CB52DB07EBD00D2293F /* XCLocalSwiftPackageReference "../../../../FirebaseUI-iOS" */ = { + 7EBF264B2EBE10DB000F0BB3 /* XCLocalSwiftPackageReference "../../../FirebaseUI-iOS" */ = { isa = XCLocalSwiftPackageReference; - relativePath = "../../../../FirebaseUI-iOS"; + relativePath = "../../../FirebaseUI-iOS"; }; /* End XCLocalSwiftPackageReference section */ @@ -668,16 +683,34 @@ isa = XCSwiftPackageProductDependency; productName = FirebaseAuthSwiftUI; }; - 8D808CB62DB0811900D2293F /* FirebaseFacebookSwiftUI */ = { + 7EBF264C2EBE10DB000F0BB3 /* FirebaseAppleSwiftUI */ = { + isa = XCSwiftPackageProductDependency; + productName = FirebaseAppleSwiftUI; + }; + 7EBF264E2EBE10DB000F0BB3 /* FirebaseAuthSwiftUI */ = { + isa = XCSwiftPackageProductDependency; + productName = FirebaseAuthSwiftUI; + }; + 7EBF26502EBE10DB000F0BB3 /* FirebaseFacebookSwiftUI */ = { isa = XCSwiftPackageProductDependency; - package = 8D808CB52DB07EBD00D2293F /* XCLocalSwiftPackageReference "../../../../FirebaseUI-iOS" */; productName = FirebaseFacebookSwiftUI; }; - 8D808CB82DB081F900D2293F /* FirebasePhoneAuthSwiftUI */ = { + 7EBF26522EBE10DB000F0BB3 /* FirebaseGoogleSwiftUI */ = { + isa = XCSwiftPackageProductDependency; + productName = FirebaseGoogleSwiftUI; + }; + 7EBF26542EBE10DB000F0BB3 /* FirebaseOAuthSwiftUI */ = { + isa = XCSwiftPackageProductDependency; + productName = FirebaseOAuthSwiftUI; + }; + 7EBF26562EBE10DB000F0BB3 /* FirebasePhoneAuthSwiftUI */ = { isa = XCSwiftPackageProductDependency; - package = 8D808CB52DB07EBD00D2293F /* XCLocalSwiftPackageReference "../../../../FirebaseUI-iOS" */; productName = FirebasePhoneAuthSwiftUI; }; + 7EBF26582EBE10DB000F0BB3 /* FirebaseTwitterSwiftUI */ = { + isa = XCSwiftPackageProductDependency; + productName = FirebaseTwitterSwiftUI; + }; /* End XCSwiftPackageProductDependency section */ }; rootObject = 46F89C002D64A86C000F8BC0 /* Project object */; diff --git a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample.xcodeproj/xcshareddata/xcschemes/FirebaseSwiftUIExample.xcscheme b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample.xcodeproj/xcshareddata/xcschemes/FirebaseSwiftUIExample.xcscheme similarity index 79% rename from samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample.xcodeproj/xcshareddata/xcschemes/FirebaseSwiftUIExample.xcscheme rename to e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample.xcodeproj/xcshareddata/xcschemes/FirebaseSwiftUIExample.xcscheme index 30faacec200..6ee478a6b12 100644 --- a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample.xcodeproj/xcshareddata/xcschemes/FirebaseSwiftUIExample.xcscheme +++ b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample.xcodeproj/xcshareddata/xcschemes/FirebaseSwiftUIExample.xcscheme @@ -28,7 +28,25 @@ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" shouldUseLaunchSchemeArgsEnv = "YES" - shouldAutocreateTestPlan = "YES"> + shouldAutocreateTestPlan = "YES" + codeCoverageEnabled = "NO" + onlyGenerateCoverageForSpecifiedTargets = "NO"> + + + + + + + + Bool { FirebaseApp.configure() - if uiAuthEmulator { - Auth.auth().useEmulator(withHost: "localhost", port: 9099) - } ApplicationDelegate.shared.application( application, @@ -58,6 +55,8 @@ class AppDelegate: NSObject, UIApplicationDelegate { func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool { + if Auth.auth().canHandle(url) { return true } + if ApplicationDelegate.shared.application( app, open: url, @@ -76,15 +75,13 @@ class AppDelegate: NSObject, UIApplicationDelegate { struct FirebaseSwiftUIExampleApp: App { @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate - init() { - Task { - try await testCreateUser() - } - } + init() {} var body: some Scene { WindowGroup { - NavigationView { + if testRunner { + TestView() + } else { ContentView() } } diff --git a/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/AccentColor.colorset/Contents.json b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 00000000000..eb878970081 --- /dev/null +++ b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/AppIcon.appiconset/Contents.json b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000000..2305880107d --- /dev/null +++ b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,35 @@ +{ + "images" : [ + { + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "tinted" + } + ], + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Preview Content/Preview Assets.xcassets/Contents.json b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/Contents.json similarity index 100% rename from samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Preview Content/Preview Assets.xcassets/Contents.json rename to e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/Contents.json diff --git a/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/ic-line-logo.imageset/Contents.json b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/ic-line-logo.imageset/Contents.json new file mode 100644 index 00000000000..216d35cbecc --- /dev/null +++ b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/ic-line-logo.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "fui-ic-line-logo.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "fui-ic-line-logo-x2.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "fui-ic-line-logo-x3.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/ic-line-logo.imageset/fui-ic-line-logo-x2.png b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/ic-line-logo.imageset/fui-ic-line-logo-x2.png new file mode 100644 index 00000000000..924fd4adbc5 Binary files /dev/null and b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/ic-line-logo.imageset/fui-ic-line-logo-x2.png differ diff --git a/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/ic-line-logo.imageset/fui-ic-line-logo-x3.png b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/ic-line-logo.imageset/fui-ic-line-logo-x3.png new file mode 100644 index 00000000000..77131141d7f Binary files /dev/null and b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/ic-line-logo.imageset/fui-ic-line-logo-x3.png differ diff --git a/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/ic-line-logo.imageset/fui-ic-line-logo.png b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/ic-line-logo.imageset/fui-ic-line-logo.png new file mode 100644 index 00000000000..3e58a91d7f4 Binary files /dev/null and b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/ic-line-logo.imageset/fui-ic-line-logo.png differ diff --git a/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/line-button.colorset/Contents.json b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/line-button.colorset/Contents.json new file mode 100644 index 00000000000..f3dcfcaa71f --- /dev/null +++ b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Assets.xcassets/line-button.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x55", + "green" : "0xC7", + "red" : "0x06" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x55", + "green" : "0xC7", + "red" : "0x06" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/FirebaseSwiftUIExample.entitlements b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/FirebaseSwiftUIExample.entitlements similarity index 72% rename from samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/FirebaseSwiftUIExample.entitlements rename to e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/FirebaseSwiftUIExample.entitlements index ea83d33fa90..58e1cda1f41 100644 --- a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/FirebaseSwiftUIExample.entitlements +++ b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/FirebaseSwiftUIExample.entitlements @@ -4,9 +4,14 @@ aps-environment development + com.apple.developer.applesignin + + Default + com.apple.developer.associated-domains applinks:flutterfire-e2e-tests.firebaseapp.com + applinks:flutterfiretests.page.link diff --git a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Info.plist b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Info.plist similarity index 85% rename from samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Info.plist rename to e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Info.plist index 968fe3cff80..972c78a5b8c 100644 --- a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Info.plist +++ b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Info.plist @@ -2,6 +2,13 @@ + CFBundleLocalizations + + en + es + de + fr + CFBundleURLTypes @@ -29,6 +36,8 @@ 16dbbdf0cfb309034a6ad98ac2a21688 FacebookDisplayName Firebase Swift UI App + FirebaseAppDelegateProxyEnabled + LSApplicationQueriesSchemes fbapi @@ -39,7 +48,5 @@ fetch remote-notification - FirebaseAppDelegateProxyEnabled - diff --git a/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Preview Content/Preview Assets.xcassets/Contents.json b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Preview Content/Preview Assets.xcassets/Contents.json new file mode 100644 index 00000000000..73c00596a7f --- /dev/null +++ b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/Preview Content/Preview Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/ContentView.swift b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/TestView.swift similarity index 67% rename from samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/ContentView.swift rename to e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/TestView.swift index e51ef876cda..44a229ebc57 100644 --- a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/ContentView.swift +++ b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/TestView.swift @@ -19,18 +19,29 @@ // Created by Russell Wheatley on 23/04/2025. // +import FirebaseAppleSwiftUI import FirebaseAuth import FirebaseAuthSwiftUI import FirebaseFacebookSwiftUI import FirebaseGoogleSwiftUI +import FirebaseOAuthSwiftUI import FirebasePhoneAuthSwiftUI +import FirebaseTwitterSwiftUI import SwiftUI -struct ContentView: View { +struct TestView: View { let authService: AuthService init() { - Auth.auth().signInAnonymously() + Auth.auth().useEmulator(withHost: "localhost", port: 9099) + Task { + try signOut() + } + if anonymousSignInEnabled { + Auth.auth().signInAnonymously() + } + + let isMfaEnabled = ProcessInfo.processInfo.arguments.contains("--mfa-enabled") let actionCodeSettings = ActionCodeSettings() actionCodeSettings.handleCodeInApp = true @@ -39,10 +50,10 @@ struct ContentView: View { actionCodeSettings.linkDomain = "flutterfire-e2e-tests.firebaseapp.com" actionCodeSettings.setIOSBundleID(Bundle.main.bundleIdentifier!) let configuration = AuthConfiguration( - shouldAutoUpgradeAnonymousUsers: !uiAuthEmulator, tosUrl: URL(string: "https://example.com/tos"), privacyPolicyUrl: URL(string: "https://example.com/privacy"), - emailLinkSignInActionCodeSettings: actionCodeSettings + emailLinkSignInActionCodeSettings: actionCodeSettings, + mfaEnabled: isMfaEnabled ) authService = AuthService( @@ -50,11 +61,20 @@ struct ContentView: View { ) .withGoogleSignIn() .withPhoneSignIn() + .withAppleSignIn() + .withTwitterSignIn() + .withOAuthSignIn(OAuthProviderSwift.github()) + .withOAuthSignIn(OAuthProviderSwift.microsoft()) + .withOAuthSignIn(OAuthProviderSwift.yahoo()) .withFacebookSignIn() .withEmailSignIn() + authService.isPresented = true } var body: some View { - AuthPickerView().environment(authService) + AuthPickerView { + Text("Hello, world!") + } + .environment(authService) } } diff --git a/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/UITestUtils.swift b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/UITestUtils.swift new file mode 100644 index 00000000000..938d207dc4c --- /dev/null +++ b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/UITestUtils.swift @@ -0,0 +1,17 @@ +// +// UITestUtils.swift +// FirebaseSwiftUIExample +// +// Created by Russell Wheatley on 16/05/2025. +// +import FirebaseAuth +import SwiftUI + +// UI Test Runner keys +public let testRunner = CommandLine.arguments.contains("--test-view-enabled") + +public let anonymousSignInEnabled = CommandLine.arguments.contains("--anonymous-sign-in-enabled") + +func signOut() throws { + try Auth.auth().signOut() +} diff --git a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/firebase.json b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/firebase.json similarity index 100% rename from samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/firebase.json rename to e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/firebase.json diff --git a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/start-firebase-emulator.sh b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/start-firebase-emulator.sh similarity index 97% rename from samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/start-firebase-emulator.sh rename to e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/start-firebase-emulator.sh index fb1280e4380..d5ee3dec677 100755 --- a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/start-firebase-emulator.sh +++ b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExample/start-firebase-emulator.sh @@ -14,7 +14,7 @@ if ! [ -x "$(command -v npm)" ]; then exit 1 fi -EMU_START_COMMAND="firebase emulators:start --only auth --project flutterfire-e2e-tests" +EMU_START_COMMAND="firebase emulators:start --only auth --project flutterfire-e2e-tests --debug" MAX_RETRIES=3 MAX_CHECKATTEMPTS=60 diff --git a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExampleTests/FirebaseSwiftUIExampleTests.swift b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExampleTests/FirebaseSwiftUIExampleTests.swift similarity index 75% rename from samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExampleTests/FirebaseSwiftUIExampleTests.swift rename to e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExampleTests/FirebaseSwiftUIExampleTests.swift index e43a002927c..3fb4c908572 100644 --- a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExampleTests/FirebaseSwiftUIExampleTests.swift +++ b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExampleTests/FirebaseSwiftUIExampleTests.swift @@ -40,7 +40,7 @@ struct FirebaseSwiftUIExampleTests { @Test @MainActor - func testDefaultAuthConfigurationInjection() async throws { + func defaultAuthConfigurationInjection() async throws { let config = AuthConfiguration() let service = AuthService(configuration: config) @@ -58,7 +58,7 @@ struct FirebaseSwiftUIExampleTests { @Test @MainActor - func testCustomAuthConfigurationInjection() async throws { + func customAuthConfigurationInjection() async throws { let emailSettings = ActionCodeSettings() emailSettings.handleCodeInApp = true emailSettings.url = URL(string: "https://example.com/email-link") @@ -97,45 +97,56 @@ struct FirebaseSwiftUIExampleTests { @Test @MainActor - func testCreateEmailPasswordUser() async throws { + func createEmailPasswordUser() async throws { let service = try await prepareFreshAuthService() #expect(service.authenticationState == .unauthenticated) - #expect(service.authView == .authPicker) - #expect(service.errorMessage.isEmpty) - #expect(service.signedInCredential == nil) + #expect(service.authView == nil) #expect(service.currentUser == nil) - try await service.createUser(withEmail: createEmail(), password: kPassword) - try await Task.sleep(nanoseconds: 4_000_000_000) + try await service.createUser(email: createEmail(), password: kPassword) + + try await waitForStateChange { + service.authenticationState == .authenticated + } #expect(service.authenticationState == .authenticated) - #expect(service.authView == .authPicker) - #expect(service.errorMessage.isEmpty) + + try await waitForStateChange { + service.currentUser != nil + } #expect(service.currentUser != nil) - // TODO: - reinstate once this PR is merged: https://github.com/firebase/FirebaseUI-iOS/pull/1256 -// #expect(service.signedInCredential is AuthCredential) + #expect(service.authView == nil) } @Test @MainActor - func testSignInUser() async throws { + func signInUser() async throws { let service = try await prepareFreshAuthService() let email = createEmail() - try await service.createUser(withEmail: email, password: kPassword) + try await service.createUser(email: email, password: kPassword) try await service.signOut() - try await Task.sleep(nanoseconds: 2_000_000_000) + + try await waitForStateChange { + service.authenticationState == .unauthenticated + } #expect(service.authenticationState == .unauthenticated) - #expect(service.authView == .authPicker) - #expect(service.errorMessage.isEmpty) - #expect(service.signedInCredential == nil) + + try await waitForStateChange { + service.currentUser == nil + } #expect(service.currentUser == nil) + #expect(service.authView == nil) - try await service.signIn(withEmail: email, password: kPassword) + try await service.signIn(email: email, password: kPassword) + try await waitForStateChange { + service.authenticationState == .authenticated + } #expect(service.authenticationState == .authenticated) - #expect(service.authView == .authPicker) - #expect(service.errorMessage.isEmpty) + + try await waitForStateChange { + service.currentUser != nil + } #expect(service.currentUser != nil) - // TODO: - reinstate once this PR is merged: https://github.com/firebase/FirebaseUI-iOS/pull/1256 - // #expect(service.signedInCredential is AuthCredential) + #expect(service.authView == nil) } } diff --git a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExampleTests/TestHarness.swift b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExampleTests/TestHarness.swift similarity index 80% rename from samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExampleTests/TestHarness.swift rename to e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExampleTests/TestHarness.swift index 1b474daf80c..7645e56d032 100644 --- a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExampleTests/TestHarness.swift +++ b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExampleTests/TestHarness.swift @@ -15,6 +15,7 @@ func configureFirebaseIfNeeded() { } } +@MainActor private var hasCheckedEmulatorAvailability = false @MainActor @@ -61,3 +62,21 @@ func createEmail() -> String { let after = UUID().uuidString.prefix(6) return "\(before)@\(after).com" } + +@MainActor +func waitForStateChange(timeout: TimeInterval = 10.0, + condition: @escaping () -> Bool) async throws { + let startTime = Date() + + while !condition() { + if Date().timeIntervalSince(startTime) > timeout { + throw TestError.timeout("Timeout waiting for condition to be met") + } + + try await Task.sleep(nanoseconds: 50_000_000) // 50ms + } +} + +enum TestError: Error { + case timeout(String) +} diff --git a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/FirebaseSwiftUIExampleUITests.swift b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/FirebaseSwiftUIExampleUITests.swift similarity index 77% rename from samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/FirebaseSwiftUIExampleUITests.swift rename to e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/FirebaseSwiftUIExampleUITests.swift index 1252d35519e..3e00a1d1ad9 100644 --- a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/FirebaseSwiftUIExampleUITests.swift +++ b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/FirebaseSwiftUIExampleUITests.swift @@ -19,22 +19,8 @@ // Created by Russell Wheatley on 18/02/2025. // -import FirebaseAuth -import FirebaseCore import XCTest -func createEmail() -> String { - let before = UUID().uuidString.prefix(8) - let after = UUID().uuidString.prefix(6) - return "\(before)@\(after).com" -} - -func dismissAlert(app: XCUIApplication) { - if app.scrollViews.otherElements.buttons["Not Now"].waitForExistence(timeout: 2) { - app.scrollViews.otherElements.buttons["Not Now"].tap() - } -} - final class FirebaseSwiftUIExampleUITests: XCTestCase { override func setUpWithError() throws { continueAfterFailure = false @@ -59,11 +45,15 @@ final class FirebaseSwiftUIExampleUITests: XCTestCase { @MainActor func testSignInDisplaysSignedInView() async throws { - let app = XCUIApplication() let email = createEmail() - app.launchArguments.append("--auth-emulator") - app.launchArguments.append("--create-user") - app.launchArguments.append("\(email)") + let password = "123456" + + // Create user in test runner BEFORE launching app + // User will exist in emulator, but app starts unauthenticated + try await createTestUser(email: email, password: password) + + // Now launch the app - it connects to emulator but isn't signed in + let app = createTestApp() app.launch() let emailField = app.textFields["email-field"] @@ -74,15 +64,16 @@ final class FirebaseSwiftUIExampleUITests: XCTestCase { let passwordField = app.secureTextFields["password-field"] XCTAssertTrue(passwordField.exists, "Password field should exist") passwordField.tap() - passwordField.typeText("123456") + passwordField.typeText(password) let signInButton = app.buttons["sign-in-button"] XCTAssertTrue(signInButton.exists, "Sign-In button should exist") signInButton.tap() + // Wait for authentication to complete and signed-in view to appear let signedInText = app.staticTexts["signed-in-text"] XCTAssertTrue( - signedInText.waitForExistence(timeout: 10), + signedInText.waitForExistence(timeout: 30), "SignedInView should be visible after login" ) @@ -103,13 +94,14 @@ final class FirebaseSwiftUIExampleUITests: XCTestCase { let passwordRecoveryButton = app.buttons["password-recovery-button"] XCTAssertTrue(passwordRecoveryButton.exists, "Password recovery button should exist") passwordRecoveryButton.tap() - let passwordRecoveryText = app.staticTexts["password-recovery-text"] + let passwordRecoveryText = app.staticTexts["Send a password recovery link to your email"] + .firstMatch XCTAssertTrue( passwordRecoveryText.waitForExistence(timeout: 10), "Password recovery text should exist after routing to PasswordRecoveryView" ) - let passwordRecoveryBackButton = app.buttons["password-recovery-back-button"] + let passwordRecoveryBackButton = app.navigationBars.buttons.element(boundBy: 0) XCTAssertTrue(passwordRecoveryBackButton.exists, "Password back button should exist") passwordRecoveryBackButton.tap() @@ -123,14 +115,14 @@ final class FirebaseSwiftUIExampleUITests: XCTestCase { XCTAssertTrue(emailLinkSignInButton.exists, "Email link sign-in button should exist") emailLinkSignInButton.tap() - let emailLinkText = app.staticTexts["email-link-title-text"] + let emailLinkText = app.staticTexts["Send a sign-in link to your email"].firstMatch XCTAssertTrue( emailLinkText.waitForExistence(timeout: 10), "Email link text should exist after pressing email link button in AuthPickerView" ) - let emailLinkBackButton = app.buttons["email-link-back-button"] + let emailLinkBackButton = app.navigationBars.buttons.element(boundBy: 0) XCTAssertTrue(emailLinkBackButton.exists, "Email link back button should exist") emailLinkBackButton.tap() @@ -143,12 +135,17 @@ final class FirebaseSwiftUIExampleUITests: XCTestCase { @MainActor func testCreateUserDisplaysSignedInView() throws { - let app = XCUIApplication() let email = createEmail() let password = "qwerty321@" - app.launchArguments.append("--auth-emulator") + let app = createTestApp() app.launch() + // Check the Views are updated + let signOutButton = app.buttons["sign-out-button"] + if signOutButton.exists { + signOutButton.tap() + } + let switchFlowButton = app.buttons["switch-auth-flow"] switchFlowButton.tap() @@ -172,14 +169,17 @@ final class FirebaseSwiftUIExampleUITests: XCTestCase { confirmPasswordField.press(forDuration: 1.2) app.menuItems["Paste"].tap() - let signInButton = app.buttons["sign-in-button"] - XCTAssertTrue(signInButton.exists, "Sign-In button should exist") - signInButton.tap() + // Create the user (sign up) + let signUpButton = app + .buttons["sign-in-button"] // This button changes context after switch-auth-flow + XCTAssertTrue(signUpButton.exists, "Sign-Up button should exist") + signUpButton.tap() + // Wait for user creation and signed-in view to appear let signedInText = app.staticTexts["signed-in-text"] XCTAssertTrue( - signedInText.waitForExistence(timeout: 20), - "SignedInView should be visible after login" + signedInText.waitForExistence(timeout: 30), + "SignedInView should be visible after user creation" ) } } diff --git a/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/MFAEnrolmentUITests.swift b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/MFAEnrolmentUITests.swift new file mode 100644 index 00000000000..c5563be16ea --- /dev/null +++ b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/MFAEnrolmentUITests.swift @@ -0,0 +1,549 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// +// MFAEnrollmentUITests.swift +// FirebaseSwiftUIExampleUITests +// +// UI tests for MFA enrollment workflows including SMS and TOTP enrollment +// + +import XCTest + +final class MFAEnrollmentUITests: XCTestCase { + var app: XCUIApplication! + + override func setUpWithError() throws { + continueAfterFailure = false + } + + override func tearDownWithError() throws { + // Clean up: Terminate app + if let app = app { + app.terminate() + } + app = nil + + // Small delay between tests to allow emulator to settle + Thread.sleep(forTimeInterval: 0.5) + + try super.tearDownWithError() + } + + // MARK: - MFA Management Navigation Tests + + @MainActor + func testMFAManagementButtonExistsAndIsTappable() async throws { + let email = createEmail() + + // Create user in test runner before launching app + try await createTestUser(email: email) + + app = createTestApp(mfaEnabled: true) + app.launch() + + // Sign in first to access MFA management + try signInToApp(app: app, email: email) + + // Check MFA management button exists + let mfaManagementButton = app.buttons["mfa-management-button"] + XCTAssertTrue( + mfaManagementButton.waitForExistence(timeout: 5), + "MFA management button should exist" + ) + XCTAssertTrue(mfaManagementButton.isEnabled, "MFA management button should be enabled") + + // Tap the button + mfaManagementButton.tap() + + // Verify we navigated to MFA management view + let managementTitle = app.staticTexts["Two-Factor Authentication"] + XCTAssertTrue( + managementTitle.waitForExistence(timeout: 5), + "Should navigate to MFA management view" + ) + } + + @MainActor + func testMFAEnrollmentNavigationFromManagement() async throws { + let email = createEmail() + + // Create user in test runner before launching app + try await createTestUser(email: email) + + app = createTestApp(mfaEnabled: true) + app.launch() + + // Sign in and navigate to MFA management + try signInToApp(app: app, email: email) + app.buttons["mfa-management-button"].tap() + + // Tap setup MFA button (for users with no enrolled factors) + let setupButton = app.buttons["setup-mfa-button"] + if setupButton.waitForExistence(timeout: 3) { + setupButton.tap() + } else { + // If factors are already enrolled, tap add another method + let addMethodButton = app.buttons["add-mfa-method-button"] + XCTAssertTrue(addMethodButton.waitForExistence(timeout: 3), "Add method button should exist") + addMethodButton.tap() + } + + // Verify we navigated to MFA enrollment view + let enrollmentTitle = app.staticTexts["Set Up Two-Factor Authentication"] + XCTAssertTrue( + enrollmentTitle.waitForExistence(timeout: 5), + "Should navigate to MFA enrollment view" + ) + } + + // MARK: - MFA Enrollment Factor Selection Tests + + @MainActor + func testFactorTypePickerExistsAndWorks() async throws { + let email = createEmail() + + // Create user in test runner before launching app + try await createTestUser(email: email) + + app = createTestApp(mfaEnabled: true) + app.launch() + + // Navigate to MFA enrollment + try signInToApp(app: app, email: email) + try navigateToMFAEnrollment(app: app) + + // Check factor type picker exists + let factorPicker = app.segmentedControls["factor-type-picker"] + XCTAssertTrue(factorPicker.waitForExistence(timeout: 5), "Factor type picker should exist") + + // Test selecting SMS + let smsOption = factorPicker.buttons.element(boundBy: 0) + smsOption.tap() + XCTAssertTrue(smsOption.isSelected, "SMS option should be selected") + + // Test selecting TOTP + let totpOption = factorPicker.buttons.element(boundBy: 1) + totpOption.tap() + XCTAssertTrue(totpOption.isSelected, "TOTP option should be selected") + } + + @MainActor + func testStartEnrollmentButtonExistsAndWorks() async throws { + let email = createEmail() + + // Create user in test runner before launching app + try await createTestUser(email: email) + + app = createTestApp(mfaEnabled: true) + app.launch() + + // Navigate to MFA enrollment + try signInToApp(app: app, email: email) + try navigateToMFAEnrollment(app: app) + + // Check start enrollment button exists and is enabled + let startButton = app.buttons["start-enrollment-button"] + XCTAssertTrue(startButton.waitForExistence(timeout: 5), "Start enrollment button should exist") + XCTAssertTrue(startButton.isEnabled, "Start enrollment button should be enabled") + + // Tap the button + startButton.tap() + + // Verify the form changes (either phone input for SMS or QR code for TOTP) + let phoneField = app.textFields["phone-number-field"] + let qrCode = app.images["qr-code-image"] + + // Either phone field or QR code should appear + let phoneFieldExists = phoneField.waitForExistence(timeout: 5) + let qrCodeExists = qrCode.waitForExistence(timeout: 5) + + XCTAssertTrue( + phoneFieldExists || qrCodeExists, + "Either phone field or QR code should appear after starting enrollment" + ) + } + + // MARK: - SMS Enrollment Flow Tests + + @MainActor + func testEndToEndSMSEnrollmentAndRemovalFlow() async throws { + // 1) Create user in test runner before launching app (with email verification) + let email = createEmail() + try await createTestUser(email: email, verifyEmail: true) + + app = createTestApp(mfaEnabled: true) + app.launch() + + // 2) Sign in to reach SignedInView + try signInToApp(app: app, email: email) + + // 3) From SignedInView, open MFA Management + let mfaManagementButton = app.buttons["mfa-management-button"] + XCTAssertTrue(mfaManagementButton.waitForExistence(timeout: 10)) + mfaManagementButton.tap() + + // 4) In MFAManagementView, tap "Set Up Two-Factor Authentication" + let setupButton = app.buttons["setup-mfa-button"] + XCTAssertTrue(setupButton.waitForExistence(timeout: 10)) + setupButton.tap() + + // 5) In MFAEnrollmentView, select SMS factor and start the flow + let factorPicker = app.segmentedControls["factor-type-picker"] + XCTAssertTrue(factorPicker.waitForExistence(timeout: 10)) + factorPicker.buttons.element(boundBy: 0).tap() // SMS + + let startButton = app.buttons["start-enrollment-button"] + XCTAssertTrue(startButton.waitForExistence(timeout: 10)) + startButton.tap() + + // 6) Select UK country code and enter phone number (without dial code) + // Find and tap the country selector - try multiple approaches since it's embedded in the + // TextField + let countrySelector = app.buttons["phone-number-field"].firstMatch + XCTAssertTrue(countrySelector.waitForExistence(timeout: 5)) + + countrySelector.tap() + + // Select United Kingdom (+44) - try multiple element types + let ukOption = app.buttons["country-option-GB"] + XCTAssertTrue(ukOption.waitForExistence(timeout: 5)) + + ukOption.tap() + + // Enter phone number (without dial code) + let phoneField = app.textFields["phone-number-field"] + XCTAssertTrue(phoneField.waitForExistence(timeout: 10)) + // Generate unique phone number using timestamp to avoid conflicts between tests + let uniqueId = Int(Date().timeIntervalSince1970 * 1000) % 1_000_000 + let phoneNumberWithoutDialCode = "7\(String(format: "%09d", uniqueId))" + UIPasteboard.general.string = phoneNumberWithoutDialCode + phoneField.tap() + phoneField.press(forDuration: 1.2) + app.menuItems["Paste"].tap() + + let displayNameField = app.textFields["display-name-field"] + XCTAssertTrue(displayNameField.waitForExistence(timeout: 10)) + try pasteIntoField(displayNameField, text: "test user", app: app) + + let sendCodeButton = app.buttons["send-sms-button"] + XCTAssertTrue(sendCodeButton.waitForExistence(timeout: 10)) + XCTAssertTrue(sendCodeButton.isEnabled) + sendCodeButton.tap() + + // 7) Retrieve verification code from the Auth Emulator and complete setup + let verificationCodeField1 = app.otherElements["Digit 1 of 6"].textFields.firstMatch + let verificationCodeField2 = app.otherElements["Digit 2 of 6"].textFields.firstMatch + let verificationCodeField3 = app.otherElements["Digit 3 of 6"].textFields.firstMatch + let verificationCodeField4 = app.otherElements["Digit 4 of 6"].textFields.firstMatch + let verificationCodeField5 = app.otherElements["Digit 5 of 6"].textFields.firstMatch + let verificationCodeField6 = app.otherElements["Digit 6 of 6"].textFields.firstMatch + XCTAssertTrue(verificationCodeField1.waitForExistence(timeout: 15)) + + // Fetch the latest SMS verification code generated by the emulator for this phone number + // The emulator stores the full phone number with dial code + let fullPhoneNumber = "+44\(phoneNumberWithoutDialCode)" + let code = try await getLastSmsCode(specificPhone: fullPhoneNumber) + + // Paste each digit into the corresponding text field + let codeDigits = Array(code) + let fields = [verificationCodeField1, verificationCodeField2, verificationCodeField3, + verificationCodeField4, verificationCodeField5, verificationCodeField6] + + for (index, digit) in codeDigits.enumerated() where index < fields.count { + let field = fields[index] + UIPasteboard.general.string = String(digit) + field.tap() + field.press(forDuration: 1.2) + app.menuItems["Paste"].tap() + } + + // Test resend code button exists + let resendButton = app.buttons["resend-code-button"] + XCTAssertTrue(resendButton.exists, "Resend code button should exist") + + let completeSetupButton = app.buttons["complete-enrollment-button"] + XCTAssertTrue(completeSetupButton.waitForExistence(timeout: 10)) + XCTAssertTrue(completeSetupButton.isEnabled) + completeSetupButton.tap() + + // 8) Verify we've returned to SignedInView + let signedInText = app.staticTexts["signed-in-text"] + XCTAssertTrue(signedInText.waitForExistence(timeout: 15)) + + // 9) Open MFA Management again and verify SMS factor is enrolled + XCTAssertTrue(mfaManagementButton.waitForExistence(timeout: 10)) + mfaManagementButton.tap() + + let enrolledMethodsHeader = app.staticTexts["Enrolled Methods"] + XCTAssertTrue(enrolledMethodsHeader.waitForExistence(timeout: 10)) + + // Find a "Remove" button for any enrolled factor (identifier starts with "remove-factor-") + let removeButton = app.buttons.matching(NSPredicate( + format: "identifier BEGINSWITH %@", + "remove-factor-" + )).firstMatch + XCTAssertTrue(removeButton.waitForExistence(timeout: 10)) + + // 10) Remove the enrolled SMS factor and verify we're back to setup state + removeButton.tap() + + // After removal, the setup button should reappear for an empty list + XCTAssertTrue(setupButton.waitForExistence(timeout: 15)) + } + + // MARK: - TOTP Enrollment Flow Tests + + @MainActor + func testTOTPEnrollmentFlowUI() async throws { + let email = createEmail() + + // Create user in test runner before launching app (with email verification) + try await createTestUser(email: email, verifyEmail: true) + + app = createTestApp(mfaEnabled: true) + app.launch() + + // Navigate to MFA enrollment and select TOTP + try signInToApp(app: app, email: email) + try navigateToMFAEnrollment(app: app) + + // Select TOTP factor type + let factorPicker = app.segmentedControls["factor-type-picker"] + factorPicker.buttons.element(boundBy: 1).tap() // TOTP option + + // Start enrollment + app.buttons["start-enrollment-button"].tap() + + // Test QR code image (might not load in test environment) + let qrCodeImage = app.images["qr-code-image"] + if qrCodeImage.waitForExistence(timeout: 5) { + XCTAssertTrue(qrCodeImage.exists, "QR code image should appear") + } + + // TOTP enrollment isn't testable via emulator, so this is commented out for the moment + // Test TOTP secret key display +// let secretKey = app.staticTexts["totp-secret-key"] + +// XCTAssertTrue(secretKey.waitForExistence(timeout: 5), "TOTP secret key should be displayed") +// +// // Test display name field +// let displayNameField = app.textFields["display-name-field"] +// XCTAssertTrue(displayNameField.exists, "Display name field should exist") +// +// // Test TOTP code input field +// let totpCodeField = app.textFields["totp-code-field"] +// XCTAssertTrue(totpCodeField.exists, "TOTP code field should exist") +// XCTAssertTrue(totpCodeField.isEnabled, "TOTP code field should be enabled") +// +// // Test complete enrollment button +// let completeButton = app.buttons["complete-enrollment-button"] +// XCTAssertTrue(completeButton.exists, "Complete enrollment button should exist") +// +// // Button should be disabled without code +// XCTAssertFalse(completeButton.isEnabled, "Complete button should be disabled without code") +// +// // Enter TOTP code +// totpCodeField.tap() +// totpCodeField.typeText("123456") +// +// // Button should be enabled with code +// XCTAssertTrue(completeButton.isEnabled, "Complete button should be enabled with code") + } + + // MARK: - Error Handling Tests + + @MainActor + func testErrorMessageDisplay() async throws { + let email = createEmail() + + // Create user in test runner before launching app + try await createTestUser(email: email) + + app = createTestApp(mfaEnabled: true) + app.launch() + + // Navigate to MFA enrollment + try signInToApp(app: app, email: email) + try navigateToMFAEnrollment(app: app) + + // Start enrollment to trigger potential errors + app.buttons["start-enrollment-button"].tap() + } + + // MARK: - Navigation Tests + + @MainActor + func testBackButtonNavigation() async throws { + let email = createEmail() + + // Create user in test runner before launching app + try await createTestUser(email: email) + + app = createTestApp(mfaEnabled: true) + app.launch() + + // Navigate to MFA enrollment + try signInToApp(app: app, email: email) + try navigateToMFAEnrollment(app: app) + + // Test back button exists + let backButton = app.navigationBars.buttons.element(boundBy: 0) + XCTAssertTrue(backButton.exists, "Back button should exist") + + // Tap cancel button + backButton.tap() + + // Should navigate back to manage MFA View + let signedInText = app.buttons["setup-mfa-button"] + XCTAssertTrue( + signedInText.waitForExistence(timeout: 5), + "Should navigate back to setup MFA view" + ) + } + + // MARK: - Helper Methods + + @MainActor + private func signInToApp(app: XCUIApplication, email: String) throws { + let password = "123456" + + // Fill email field + let emailField = app.textFields["email-field"] + XCTAssertTrue(emailField.waitForExistence(timeout: 10), "Email field should exist") + // Workaround for updating SecureFields with ConnectHardwareKeyboard enabled + try pasteIntoField(emailField, text: email, app: app) + + // Fill password field + let passwordField = app.secureTextFields["password-field"] + XCTAssertTrue(passwordField.exists, "Password field should exist") + try pasteIntoField(passwordField, text: password, app: app) + + // Create the user (sign up) + let signUpButton = app + .buttons["sign-in-button"] // This button changes context after switch-auth-flow + XCTAssertTrue(signUpButton.exists, "Sign-up button should exist") + signUpButton.tap() + + let notNowButton = app.scrollViews.containing(.button, identifier: "Not Now").firstMatch + if notNowButton.waitForExistence(timeout: 5) { + notNowButton.tap() + } + + // Wait for signed-in state + // Wait for signed-in state + let signedInText = app.staticTexts["signed-in-text"] + XCTAssertTrue( + signedInText.waitForExistence(timeout: 30), + "SignedInView should be visible after login" + ) + XCTAssertTrue(signedInText.exists, "SignedInView should be visible after login") + } + + @MainActor + private func navigateToMFAEnrollment(app: XCUIApplication) throws { + // Navigate to MFA management + app.buttons["mfa-management-button"].tap() + + // Navigate to MFA enrollment + let setupButton = app.buttons["setup-mfa-button"] + if setupButton.waitForExistence(timeout: 3) { + setupButton.tap() + } else { + let addMethodButton = app.buttons["add-mfa-method-button"] + XCTAssertTrue(addMethodButton.waitForExistence(timeout: 3), "Add method button should exist") + addMethodButton.tap() + } + + // Verify we're in MFA enrollment view + let enrollmentTitle = app.staticTexts["Set Up Two-Factor Authentication"] + XCTAssertTrue(enrollmentTitle.waitForExistence(timeout: 5), "Should be in MFA enrollment view") + } +} + +struct VerificationCodesResponse: Codable { + let verificationCodes: [VerificationCode]? +} + +struct VerificationCode: Codable { + let phoneNumber: String + let code: String +} + +/// Retrieves the last SMS verification code from Firebase Auth Emulator +/// - Parameter specificPhone: Optional phone number to filter codes for a specific phone +/// - Returns: The verification code as a String +/// - Throws: Error if unable to retrieve codes +private func getLastSmsCode(specificPhone: String? = nil) async throws -> String { + let getSmsCodesUrl = + "http://127.0.0.1:9099/emulator/v1/projects/flutterfire-e2e-tests/verificationCodes" + + guard let url = URL(string: getSmsCodesUrl) else { + throw NSError( + domain: "getLastSmsCode", + code: -1, + userInfo: [NSLocalizedDescriptionKey: "Failed to create URL for SMS codes endpoint"] + ) + } + + do { + let (data, _) = try await URLSession.shared.data(from: url) + + let decoder = JSONDecoder() + let codesResponse = try decoder.decode(VerificationCodesResponse.self, from: data) + + guard let codes = codesResponse.verificationCodes, !codes.isEmpty else { + throw NSError( + domain: "getLastSmsCode", + code: -1, + userInfo: [NSLocalizedDescriptionKey: "No SMS verification codes found in emulator"] + ) + } + + if let specificPhone = specificPhone { + // Search backwards through codes for the specific phone number + for code in codes.reversed() { + if code.phoneNumber == specificPhone { + return code.code + } + } + throw NSError( + domain: "getLastSmsCode", + code: -1, + userInfo: [ + NSLocalizedDescriptionKey: "No SMS verification code found for phone number: \(specificPhone)", + ] + ) + } else { + // Return the last code in the array + return codes.last!.code + } + } catch let error as DecodingError { + throw NSError( + domain: "getLastSmsCode", + code: -1, + userInfo: [ + NSLocalizedDescriptionKey: "Failed to parse SMS codes response: \(error.localizedDescription)", + ] + ) + } catch { + throw NSError( + domain: "getLastSmsCode", + code: -1, + userInfo: [ + NSLocalizedDescriptionKey: "Network request failed: \(error.localizedDescription)", + ] + ) + } +} diff --git a/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/MFAResolutionUITests.swift b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/MFAResolutionUITests.swift new file mode 100644 index 00000000000..12ce4235e4e --- /dev/null +++ b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/MFAResolutionUITests.swift @@ -0,0 +1,512 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// +// MFAResolutionUITests.swift +// FirebaseSwiftUIExampleUITests +// +// UI tests for MFA resolution workflows during sign-in +// + +import XCTest + +final class MFAResolutionUITests: XCTestCase { + override func setUpWithError() throws { + continueAfterFailure = false + } + + // MARK: - MFA Resolution UI Tests + + // MARK: - Complete MFA Resolution Flow + + @MainActor + func testCompleteMFAResolutionFlowWithAPIEnrollment() async throws { + let app = createTestApp(mfaEnabled: true) + app.launch() + + let email = createEmail() + let password = "12345678" + let phoneNumber = "+15551234567" + + // Sign up the user + try await signUpUser(email: email, password: password) + + // Get ID token and enable MFA via API + guard let idToken = await getIDTokenFromEmulator(email: email, password: password) else { + XCTFail("Failed to get ID token from emulator") + return + } + + try await verifyEmailInEmulator(email: email, idToken: idToken) + + let mfaEnabled = await enableSMSMFAViaEmulator( + idToken: idToken, + phoneNumber: phoneNumber, + displayName: "Test Phone" + ) + + XCTAssertTrue(mfaEnabled, "MFA should be enabled successfully via API") + + // Wait for sign out to complete + let emailField = app.textFields["email-field"] + XCTAssertTrue(emailField.waitForExistence(timeout: 10), "Should return to auth picker") + + try signInUser(app: app, email: email, password: password) + + let mfaResolutionTitle = app.staticTexts["mfa-resolution-title"] + XCTAssertTrue( + mfaResolutionTitle.waitForExistence(timeout: 10), + "MFA resolution view should appear" + ) + + let smsButton = app.buttons["sms-method-button"] + if smsButton.exists, smsButton.isEnabled { + smsButton.tap() + } + dismissAlert(app: app) + + // Wait for SMS to be sent + try await Task.sleep(nanoseconds: 2_000_000_000) + + let sendSMSButton = app.buttons["send-sms-button"] + + sendSMSButton.tap() + + try await Task.sleep(nanoseconds: 3_000_000_000) + + guard let verificationCode = await getSMSVerificationCode( + for: phoneNumber, + codeType: "verification" + ) else { + XCTFail("Failed to retrieve SMS verification code from emulator") + return + } + + let codeField = app.textFields["sms-verification-code-field"] + XCTAssertTrue(codeField.waitForExistence(timeout: 10), "Code field should exist") + codeField.tap() + codeField.typeText(verificationCode) + + let completeButton = app.buttons["complete-resolution-button"] + XCTAssertTrue(completeButton.exists, "Complete button should exist") + completeButton.tap() + + // Wait for sign-in to complete + // Resolution always fails due to ERROR_MULTI_FACTOR_INFO_NOT_FOUND exception. See below issue + // for more information. + // TODO(russellwheatley): uncomment below when this firebase-ios-sdk issue has been resolved: https://github.com/firebase/firebase-ios-sdk/issues/11079 + + // let signedInText = app.staticTexts["signed-in-text"] + // XCTAssertTrue( + // signedInText.waitForExistence(timeout: 10), + // "User should be signed in after MFA resolution" + // ) + } + + // MARK: - Helper Methods + + /// Programmatically enables SMS MFA for a user via the Auth emulator REST API + /// - Parameters: + /// - idToken: The user's Firebase ID token + /// - phoneNumber: The phone number to enroll for SMS MFA (e.g., "+15551234567") + /// - displayName: Optional display name for the MFA factor + /// - Returns: True if MFA was successfully enabled, false otherwise + @MainActor + private func enableSMSMFAViaEmulator(idToken: String, + phoneNumber: String, + displayName: String = "Test Phone") async -> Bool { + let emulatorUrl = + "http://127.0.0.1:9099/identitytoolkit.googleapis.com/v2/accounts/mfaEnrollment:start?key=fake-api-key" + + guard let url = URL(string: emulatorUrl) else { + XCTFail("Invalid emulator URL") + return false + } + + var request = URLRequest(url: url) + request.httpMethod = "POST" + request.setValue("application/json", forHTTPHeaderField: "Content-Type") + + let requestBody: [String: Any] = [ + "idToken": idToken, + "phoneEnrollmentInfo": [ + "phoneNumber": phoneNumber, + "recaptchaToken": "fake-recaptcha-token", + ], + ] + + guard let httpBody = try? JSONSerialization.data(withJSONObject: requestBody) else { + XCTFail("Failed to serialize request body") + return false + } + + request.httpBody = httpBody + + // Step 1: Start MFA enrollment + do { + let (data, _) = try await URLSession.shared.data(for: request) + + // Step 1: Parse JSON + guard let jsonObject = try? JSONSerialization.jsonObject(with: data) else { + print("❌ Failed to parse JSON from response data") + return false + } + + guard let json = jsonObject as? [String: Any] else { + print("❌ JSON is not a dictionary. Type: \(type(of: jsonObject))") + return false + } + + // Step 2: Extract phoneSessionInfo + guard let info = json["phoneSessionInfo"] as? [String: Any] else { + print("❌ Failed to extract 'phoneSessionInfo' from JSON") + print("Available keys: \(json.keys.joined(separator: ", "))") + if let phoneSessionInfo = json["phoneSessionInfo"] { + print("phoneSessionInfo exists but wrong type: \(type(of: phoneSessionInfo))") + } + return false + } + + // Step 3: Extract sessionInfo + guard let sessionInfo = info["sessionInfo"] as? String else { + print("❌ Failed to extract 'sessionInfo' from phoneSessionInfo") + print("Available keys in phoneSessionInfo: \(info.keys.joined(separator: ", "))") + if let sessionInfoValue = info["sessionInfo"] { + print("sessionInfo exists but wrong type: \(type(of: sessionInfoValue))") + } + return false + } + + // Step 2: Get verification code from emulator + try await Task.sleep(nanoseconds: 1_000_000_000) // 1 second + guard let verificationCode = await getSMSVerificationCode(for: phoneNumber) else { + XCTFail("Failed to retrieve SMS verification code") + return false + } + + // Step 3: Finalize MFA enrollment + let finalizeUrl = + "http://127.0.0.1:9099/identitytoolkit.googleapis.com/v2/accounts/mfaEnrollment:finalize?key=fake-api-key" + guard let finalizeURL = URL(string: finalizeUrl) else { + return false + } + + var finalizeRequest = URLRequest(url: finalizeURL) + finalizeRequest.httpMethod = "POST" + finalizeRequest.setValue("application/json", forHTTPHeaderField: "Content-Type") + + let finalizeBody: [String: Any] = [ + "idToken": idToken, + "phoneVerificationInfo": [ + "sessionInfo": sessionInfo, + "code": verificationCode, + ], + "displayName": displayName, + ] + + guard let finalizeHttpBody = try? JSONSerialization.data(withJSONObject: finalizeBody) else { + return false + } + + finalizeRequest.httpBody = finalizeHttpBody + + let (finalizeData, finalizeResponse) = try await URLSession.shared.data(for: finalizeRequest) + + // Check HTTP status + if let httpResponse = finalizeResponse as? HTTPURLResponse { + print("📡 Finalize HTTP Status: \(httpResponse.statusCode)") + } + + guard let json = try? JSONSerialization.jsonObject(with: finalizeData) as? [String: Any] + else { + print("❌ Failed to parse finalize response as JSON") + return false + } + + // Check if we have the new idToken and MFA info + guard let newIdToken = json["idToken"] as? String else { + print("❌ Missing 'idToken' in finalize response") + return false + } + + // Check if refreshToken is present + if let refreshToken = json["refreshToken"] as? String { + print("✅ Got refreshToken: \(refreshToken.prefix(20))...") + } + + // Check for MFA info in response + if let mfaInfo = json["mfaInfo"] { + print("✅ MFA info in response: \(mfaInfo)") + } + + return true + + } catch { + print("Failed to enable MFA: \(error.localizedDescription)") + return false + } + } + + /// Retrieves SMS verification codes from the Firebase Auth emulator + /// - Parameters: + /// - phoneNumber: The phone number to retrieve the code for + /// - codeType: The type of code - "enrollment" for MFA enrollment, "verification" for phone + /// verification during resolution + @MainActor + private func getSMSVerificationCode(for phoneNumber: String, + codeType: String = "enrollment") async -> String? { + let emulatorUrl = + "http://127.0.0.1:9099/emulator/v1/projects/flutterfire-e2e-tests/verificationCodes" + + guard let url = URL(string: emulatorUrl) else { + return nil + } + + do { + let (data, _) = try await URLSession.shared.data(from: url) + + guard let json = try? JSONSerialization.jsonObject(with: data) as? [String: Any], + let codes = json["verificationCodes"] as? [[String: Any]] else { + print("❌ Failed to parse verification codes") + return nil + } + + // Filter codes by phone number and type, then get the most recent one + let matchingCodes = codes.filter { codeInfo in + guard let phone = codeInfo["phoneNumber"] as? String else { + print("❌ Code missing phoneNumber field") + return false + } + + // The key difference between enrollment and verification codes: + // - Enrollment codes have full phone numbers (e.g., "+15551234567") + // - Verification codes have masked phone numbers (e.g., "+*******4567") + let isMasked = phone.contains("*") + + // Match phone number + let phoneMatches: Bool + if isMasked { + // Extract last 4 digits from both numbers + let last4OfResponse = String(phone.suffix(4)) + let last4OfTarget = String(phoneNumber.suffix(4)) + phoneMatches = last4OfResponse == last4OfTarget + } else { + // Full phone number match + phoneMatches = phone == phoneNumber + } + + guard phoneMatches else { + return false + } + + if codeType == "enrollment" { + // Enrollment codes have unmasked phone numbers + return !isMasked + } else { // "verification" + // Verification codes have masked phone numbers + return isMasked + } + } + + // Get the last matching code (most recent) + if let lastCode = matchingCodes.last, + let code = lastCode["code"] as? String { + return code + } + + print("❌ No matching code found") + return nil + + } catch { + print("Failed to fetch verification codes: \(error.localizedDescription)") + return nil + } + } + + /// Gets an ID token for a user from the Auth emulator by signing in with email/password + /// This works independently of the app's current auth state + /// - Parameters: + /// - email: The user's email address + /// - password: The user's password (defaults to "123456") + /// - Returns: The user's ID token, or nil if the sign-in failed + @MainActor + private func getIDTokenFromEmulator(email: String, password: String = "123456") async -> String? { + let signInUrl = + "http://127.0.0.1:9099/identitytoolkit.googleapis.com/v1/accounts:signInWithPassword?key=fake-api-key" + + guard let url = URL(string: signInUrl) else { + print("Invalid emulator URL") + return nil + } + + var request = URLRequest(url: url) + request.httpMethod = "POST" + request.setValue("application/json", forHTTPHeaderField: "Content-Type") + + let requestBody: [String: Any] = [ + "email": email, + "password": password, + "returnSecureToken": true, + ] + + guard let httpBody = try? JSONSerialization.data(withJSONObject: requestBody) else { + print("Failed to serialize sign-in request body") + return nil + } + + request.httpBody = httpBody + + do { + let (data, _) = try await URLSession.shared.data(for: request) + + guard let json = try? JSONSerialization.jsonObject(with: data) as? [String: Any], + let idToken = json["idToken"] as? String else { + print("Failed to parse sign-in response") + return nil + } + + print("Successfully got ID token from emulator: \(idToken.prefix(20))...") + return idToken + + } catch { + print("Failed to get ID token from emulator: \(error.localizedDescription)") + return nil + } + } + + @MainActor + private func signUpUser(email: String, password: String = "12345678") async throws { + // Create user via Auth Emulator REST API + let url = + URL( + string: "http://127.0.0.1:9099/identitytoolkit.googleapis.com/v1/accounts:signUp?key=fake-api-key" + )! + var request = URLRequest(url: url) + request.httpMethod = "POST" + request.setValue("application/json", forHTTPHeaderField: "Content-Type") + + let body: [String: Any] = [ + "email": email, + "password": password, + "returnSecureToken": true, + ] + request.httpBody = try JSONSerialization.data(withJSONObject: body) + + let (data, response) = try await URLSession.shared.data(for: request) + + guard let httpResponse = response as? HTTPURLResponse else { + XCTFail("Invalid response") + return + } + + guard (200 ... 299).contains(httpResponse.statusCode) else { + let errorMessage = String(data: data, encoding: .utf8) ?? "Unknown error" + XCTFail("Failed to create user. Status: \(httpResponse.statusCode), Error: \(errorMessage)") + return + } + } + + @MainActor private func signInUser(app: XCUIApplication, email: String, + password: String = "123456") throws { + // Ensure we're in sign in flow + let switchFlowButton = app.buttons["switch-auth-flow"] + if switchFlowButton.exists, switchFlowButton.label.contains("Sign In") { + switchFlowButton.tap() + } + + // Fill email field + let emailField = app.textFields["email-field"] + XCTAssertTrue(emailField.waitForExistence(timeout: 6)) + emailField.tap() + emailField.clearAndEnterText(email) + + // Fill password field + let passwordField = app.secureTextFields["password-field"] + passwordField.tap() + passwordField.clearAndEnterText(password) + + // Tap sign in button + let signInButton = app.buttons["sign-in-button"] + signInButton.tap() + } + + @MainActor private func enrollSMSMFA(app: XCUIApplication) throws { + // Navigate to MFA management + let mfaManagementButton = app.buttons["mfa-management-button"] + XCTAssertTrue(mfaManagementButton.waitForExistence(timeout: 5)) + mfaManagementButton.tap() + + // Tap add factor button + let addFactorButton = app.buttons["add-factor-button"] + XCTAssertTrue(addFactorButton.waitForExistence(timeout: 5)) + addFactorButton.tap() + + // Select SMS factor + let factorPicker = app.segmentedControls["factor-type-picker"] + XCTAssertTrue(factorPicker.waitForExistence(timeout: 5)) + factorPicker.buttons["SMS"].tap() + + // Start enrollment + let startButton = app.buttons["start-enrollment-button"] + startButton.tap() + + // Enter phone number + let phoneField = app.textFields["phone-number-field"] + XCTAssertTrue(phoneField.waitForExistence(timeout: 5)) + phoneField.tap() + phoneField.typeText("+15551234567") + + // Send SMS + let sendSMSButton = app.buttons["send-sms-button"] + sendSMSButton.tap() + + // Enter verification code + let codeField = app.textFields["sms-verification-code-field"] + XCTAssertTrue(codeField.waitForExistence(timeout: 10)) + codeField.tap() + codeField.typeText("123456") // This will work in emulator + + // Complete enrollment + let completeButton = app.buttons["complete-enrollment-button"] + completeButton.tap() + + // Wait for completion + let successMessage = app.staticTexts + .containing(NSPredicate(format: "label CONTAINS[cd] 'successfully enrolled'")) + XCTAssertTrue(successMessage.firstMatch.waitForExistence(timeout: 10)) + + // Go back to signed in view + let backButton = app.buttons["back-button"] + if backButton.exists { + backButton.tap() + } + } +} + +// MARK: - XCUIElement Extensions + +extension XCUIElement { + func clearAndEnterText(_ text: String) { + guard let stringValue = value as? String else { + XCTFail("Tried to clear and enter text into a non-string value") + return + } + + tap() + + let deleteString = String(repeating: XCUIKeyboardKey.delete.rawValue, count: stringValue.count) + typeText(deleteString) + typeText(text) + } +} diff --git a/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/ProviderUITests.swift b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/ProviderUITests.swift new file mode 100644 index 00000000000..cda57f0c29f --- /dev/null +++ b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/ProviderUITests.swift @@ -0,0 +1,151 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// +// FirebaseSwiftUIExampleUITests.swift +// FirebaseSwiftUIExampleUITests +// +// Created by Russell Wheatley on 18/02/2025. +// + +import XCTest + +final class ProviderUITests: XCTestCase { + override func setUpWithError() throws { + continueAfterFailure = false + } + + override func tearDownWithError() throws {} + + @MainActor + func testProviderButtons() throws { + let app = createTestApp() + app.launch() + + // MARK: - Check existence of provider buttons + + // Check for Twitter/X sign-in button + let twitterButton = app.buttons["sign-in-with-twitter-button"] + XCTAssertTrue( + twitterButton.waitForExistence(timeout: 5), + "Twitter/X sign-in button should exist" + ) + + // Check for Apple sign-in button + let appleButton = app.buttons["sign-in-with-apple-button"] + XCTAssertTrue( + appleButton.waitForExistence(timeout: 5), + "Apple sign-in button should exist" + ) + + // Check for Github sign-in button + let githubButton = app.buttons["sign-in-with-github.com-button"] + XCTAssertTrue( + githubButton.waitForExistence(timeout: 5), + "Github sign-in button should exist" + ) + + // Check for Microsoft sign-in button + let microsoftButton = app.buttons["sign-in-with-microsoft.com-button"] + XCTAssertTrue( + microsoftButton.waitForExistence(timeout: 5), + "Microsoft sign-in button should exist" + ) + + // Check for Yahoo sign-in button + let yahooButton = app.buttons["sign-in-with-yahoo.com-button"] + XCTAssertTrue( + yahooButton.waitForExistence(timeout: 5), + "Yahoo sign-in button should exist" + ) + + // Check for Google sign-in button + let googleButton = app.buttons["sign-in-with-google-button"] + XCTAssertTrue( + googleButton.waitForExistence(timeout: 5), + "Google sign-in button should exist" + ) + + // Check for Facebook sign-in button + let facebookButton = app.buttons["sign-in-with-facebook-button"] + XCTAssertTrue( + facebookButton.waitForExistence(timeout: 5), + "Facebook sign-in button should exist" + ) + + // Check for Phone sign-in button + let phoneButton = app.buttons["sign-in-with-phone-button"] + XCTAssertTrue( + phoneButton.waitForExistence(timeout: 5), + "Phone sign-in button should exist" + ) + } + + @MainActor + func testErrorModal() throws { + let app = createTestApp() + app.launch() + // Just test email + external provider for error modal on failure to ensure provider button + // sign-in flow fails along with failures within AuthPickerView + let emailField = app.textFields["email-field"] + XCTAssertTrue(emailField.waitForExistence(timeout: 6), "Email field should exist") + emailField.tap() + emailField.typeText("fake-email@example.com") + + let passwordField = app.secureTextFields["password-field"] + XCTAssertTrue(passwordField.exists, "Password field should exist") + passwordField.tap() + passwordField.typeText("12345678") + + let signInButton = app.buttons["sign-in-button"] + XCTAssertTrue(signInButton.exists, "Sign-In button should exist") + signInButton.tap() + + // Wait for the alert to appear + let alert1 = app.alerts.firstMatch + XCTAssertTrue( + alert1.waitForExistence(timeout: 5), + "Alert should appear after canceling Facebook sign-in" + ) + + alert1.buttons["OK"].firstMatch.tap() + + let facebookButton = app.buttons["sign-in-with-facebook-button"] + XCTAssertTrue( + facebookButton.waitForExistence(timeout: 5), + "Facebook sign-in button should exist" + ) + + facebookButton.tap() + + // Wait for Facebook modal to appear and tap Cancel + // The Facebook SDK modal is presented by the system/Safari + let springboard = XCUIApplication(bundleIdentifier: "com.apple.springboard") + + // Access the Cancel button from Springboard + let cancelButton = springboard.buttons["Cancel"] + XCTAssertTrue( + cancelButton.waitForExistence(timeout: 10), + "Cancel button should appear in Springboard authentication modal" + ) + cancelButton.tap() + + // Wait for the alert to appear + let alert2 = app.alerts.firstMatch + XCTAssertTrue( + alert2.waitForExistence(timeout: 5), + "Alert should appear after canceling Facebook sign-in" + ) + } +} diff --git a/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/TestUtils.swift b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/TestUtils.swift new file mode 100644 index 00000000000..b1e6e5df533 --- /dev/null +++ b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/TestUtils.swift @@ -0,0 +1,220 @@ +import Foundation +import XCTest + +// MARK: - Email Generation + +func createEmail() -> String { + let before = UUID().uuidString.prefix(8) + let after = UUID().uuidString.prefix(6) + return "\(before)@\(after).com" +} + +// MARK: - App Configuration + +/// Creates and configures an XCUIApplication with default test launch arguments +@MainActor func createTestApp(mfaEnabled: Bool = false) -> XCUIApplication { + let app = XCUIApplication() + app.launchArguments.append("--test-view-enabled") + if mfaEnabled { + app.launchArguments.append("--mfa-enabled") + } + return app +} + +// MARK: - Alert Handling + +@MainActor func dismissAlert(app: XCUIApplication) { + if app.scrollViews.otherElements.buttons["Not Now"].waitForExistence(timeout: 2) { + app.scrollViews.otherElements.buttons["Not Now"].tap() + } +} + +// MARK: - Text Input Helpers + +/// Pastes text into a text field using the system paste menu +/// - Parameters: +/// - field: The XCUIElement representing the text field +/// - text: The text to paste +/// - app: The XCUIApplication instance +@MainActor func pasteIntoField(_ field: XCUIElement, text: String, app: XCUIApplication) throws { + UIPasteboard.general.string = text + field.tap() + + // Give field time to become first responder + usleep(200_000) // 0.2 seconds + + // Press and hold to bring up paste menu + field.press(forDuration: 1.5) + + let pasteMenuItem = app.menuItems["Paste"] + + // Wait for paste menu to appear + if !pasteMenuItem.waitForExistence(timeout: 3) { + // Fallback: try double tap approach + field.doubleTap() + usleep(300_000) // 0.3 seconds + + if !pasteMenuItem.waitForExistence(timeout: 2) { + throw NSError( + domain: "TestError", + code: 1, + userInfo: [ + NSLocalizedDescriptionKey: "Failed to show paste menu for field. Text was: \(text)", + ] + ) + } + } + + pasteMenuItem.tap() +} + +// MARK: - User Creation + +/// Helper to create a test user in the emulator via REST API (avoids keychain issues) +@MainActor func createTestUser(email: String, password: String = "123456", + verifyEmail: Bool = false) async throws { + // Use Firebase Auth emulator REST API directly to avoid keychain access issues in UI tests + let signUpUrl = + "http://127.0.0.1:9099/identitytoolkit.googleapis.com/v1/accounts:signUp?key=fake-api-key" + + guard let url = URL(string: signUpUrl) else { + throw NSError(domain: "TestError", code: 1, + userInfo: [NSLocalizedDescriptionKey: "Invalid emulator URL"]) + } + + var request = URLRequest(url: url) + request.httpMethod = "POST" + request.setValue("application/json", forHTTPHeaderField: "Content-Type") + + let body: [String: Any] = [ + "email": email, + "password": password, + "returnSecureToken": true, + ] + + request.httpBody = try JSONSerialization.data(withJSONObject: body) + + let (data, response) = try await URLSession.shared.data(for: request) + + guard let httpResponse = response as? HTTPURLResponse, + httpResponse.statusCode == 200 else { + let errorBody = String(data: data, encoding: .utf8) ?? "Unknown error" + throw NSError(domain: "TestError", code: 2, + userInfo: [NSLocalizedDescriptionKey: "Failed to create user: \(errorBody)"]) + } + + // If email verification is requested, verify the email + if verifyEmail { + // Parse the response to get the idToken + if let json = try? JSONSerialization.jsonObject(with: data) as? [String: Any], + let idToken = json["idToken"] as? String { + try await verifyEmailInEmulator(email: email, idToken: idToken) + } + } +} + +// MARK: - Email Verification + +/// Verifies an email address in the emulator using the OOB code mechanism +@MainActor func verifyEmailInEmulator(email: String, + idToken: String, + projectID: String = "flutterfire-e2e-tests", + emulatorHost: String = "127.0.0.1:9099") async throws { + let base = "http://\(emulatorHost)" + + // Step 1: Trigger email verification (creates OOB code in emulator) + var sendReq = URLRequest( + url: URL( + string: "\(base)/identitytoolkit.googleapis.com/v1/accounts:sendOobCode?key=fake-api-key" + )! + ) + sendReq.httpMethod = "POST" + sendReq.setValue("application/json", forHTTPHeaderField: "Content-Type") + sendReq.httpBody = try JSONSerialization.data(withJSONObject: [ + "requestType": "VERIFY_EMAIL", + "idToken": idToken, + ]) + + let (sendData, sendResp) = try await URLSession.shared.data(for: sendReq) + guard let http = sendResp as? HTTPURLResponse, http.statusCode == 200 else { + let errorBody = String(data: sendData, encoding: .utf8) ?? "Unknown error" + throw NSError(domain: "EmulatorError", code: 1, + userInfo: [ + NSLocalizedDescriptionKey: "Failed to send verification email: \(errorBody)", + ]) + } + + // Add a small delay to ensure the OOB code is registered in the emulator + try await Task.sleep(nanoseconds: 500_000_000) // 0.5 seconds + + // Define structs for OOB response parsing + struct OobEnvelope: Decodable { let oobCodes: [OobItem] } + struct OobItem: Decodable { + let oobCode: String + let email: String + let requestType: String + let creationTime: String? + } + + // Step 2: Fetch OOB codes from emulator with retry logic + let oobURL = URL(string: "\(base)/emulator/v1/projects/\(projectID)/oobCodes")! + + var codeItem: OobItem? + var attempts = 0 + let maxAttempts = 5 + + while codeItem == nil, attempts < maxAttempts { + let (oobData, oobResp) = try await URLSession.shared.data(from: oobURL) + guard (oobResp as? HTTPURLResponse)?.statusCode == 200 else { + throw NSError(domain: "EmulatorError", code: 2, + userInfo: [NSLocalizedDescriptionKey: "Failed to fetch OOB codes"]) + } + + let envelope = try JSONDecoder().decode(OobEnvelope.self, from: oobData) + + // Step 3: Find most recent VERIFY_EMAIL code for this email + let iso = ISO8601DateFormatter() + codeItem = envelope.oobCodes + .filter { + $0.email.caseInsensitiveCompare(email) == .orderedSame && $0.requestType == "VERIFY_EMAIL" + } + .sorted { + let d0 = $0.creationTime.flatMap { iso.date(from: $0) } ?? .distantPast + let d1 = $1.creationTime.flatMap { iso.date(from: $0) } ?? .distantPast + return d0 > d1 + } + .first + + if codeItem == nil { + attempts += 1 + if attempts < maxAttempts { + // Wait before retrying + try await Task.sleep(nanoseconds: 500_000_000) // 0.5 seconds + } else { + // Log available codes for debugging + let availableCodes = envelope.oobCodes.map { "Email: \($0.email), Type: \($0.requestType)" } + .joined(separator: "; ") + throw NSError(domain: "EmulatorError", code: 3, + userInfo: [ + NSLocalizedDescriptionKey: "No VERIFY_EMAIL OOB code found for \(email) after \(maxAttempts) attempts. Available codes: \(availableCodes)", + ]) + } + } + } + + guard let oobCode = codeItem?.oobCode else { + throw NSError(domain: "EmulatorError", code: 3, + userInfo: [ + NSLocalizedDescriptionKey: "No VERIFY_EMAIL OOB code found for \(email)", + ]) + } + + // Step 4: Apply the OOB code (simulate clicking verification link) + let verifyURL = + URL(string: "\(base)/emulator/action?mode=verifyEmail&oobCode=\(oobCode)&apiKey=fake-api-key")! + let (_, verifyResp) = try await URLSession.shared.data(from: verifyURL) + guard (verifyResp as? HTTPURLResponse)?.statusCode == 200 else { + throw NSError(domain: "EmulatorError", code: 4, + userInfo: [NSLocalizedDescriptionKey: "Failed to apply OOB code"]) + } +} diff --git a/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/UpgradeAccountUITests.swift b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/UpgradeAccountUITests.swift new file mode 100644 index 00000000000..5ed9b27e0ba --- /dev/null +++ b/e2eTest/FirebaseSwiftUIExample/FirebaseSwiftUIExampleUITests/UpgradeAccountUITests.swift @@ -0,0 +1,66 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// +// UpgradeAccountUITests.swift +// UpgradeAccountUITests +// +// Created by Russell Wheatley on 05/11/2025. +// + +import XCTest + +final class UpgradeAccountUITests: XCTestCase { + override func setUpWithError() throws { + continueAfterFailure = false + } + + override func tearDownWithError() throws {} + + @MainActor + func testUpgradeAnonymousAccountWithEmailPassword() async throws { + // Create a test user first + let email = createEmail() + let password = "123456" + try await createTestUser(email: email, password: password) + + // Launch app with anonymous sign-in enabled + let app = createTestApp() + app.launchArguments.append("--anonymous-sign-in-enabled") + app.launch() + + // Wait for sign-in screen to appear + let emailField = app.textFields["email-field"] + XCTAssertTrue(emailField.waitForExistence(timeout: 6), "Email field should exist") + emailField.tap() + emailField.typeText(email) + + let passwordField = app.secureTextFields["password-field"] + XCTAssertTrue(passwordField.exists, "Password field should exist") + passwordField.tap() + passwordField.typeText(password) + + let signInButton = app.buttons["sign-in-button"] + XCTAssertTrue(signInButton.exists, "Sign-In button should exist") + signInButton.tap() + + let signedInText = app.staticTexts["signed-in-text"] + + // Wait for authentication to complete and signed-in view to appear + XCTAssertTrue( + signedInText.waitForExistence(timeout: 30), + "SignedInView should be visible after signing in with email/password" + ) + } +} diff --git a/samples/swiftui/FirebaseSwiftUIExample/GoogleService-Info.plist b/e2eTest/FirebaseSwiftUIExample/GoogleService-Info.plist similarity index 100% rename from samples/swiftui/FirebaseSwiftUIExample/GoogleService-Info.plist rename to e2eTest/FirebaseSwiftUIExample/GoogleService-Info.plist diff --git a/format-swift.sh b/format-swift.sh index 0aec197f4a9..50777451a51 100755 --- a/format-swift.sh +++ b/format-swift.sh @@ -4,5 +4,7 @@ swiftformat ./FirebaseSwiftUI swiftformat ./samples/swiftui/FirebaseSwiftUIExample +swiftformat ./e2eTest + +swiftformat ./Package.swift -swiftformat ./Package.swift \ No newline at end of file diff --git a/lint-swift.sh b/lint-swift.sh new file mode 100755 index 00000000000..eecd5d1b8f9 --- /dev/null +++ b/lint-swift.sh @@ -0,0 +1,7 @@ +swiftformat --lint ./FirebaseSwiftUI + +swiftformat --lint ./samples/swiftui/FirebaseSwiftUIExample + +swiftformat --lint ./e2eTest + +swiftformat --lint ./Package.swift \ No newline at end of file diff --git a/local_test.sh b/local_test.sh index a3699ab1ba5..3f77347abd1 100755 --- a/local_test.sh +++ b/local_test.sh @@ -4,9 +4,7 @@ set -euxo pipefail EXIT_STATUS=0 -schemes=( "FirebaseAnonymousAuthUI" "FirebaseAuthUI" "FirebaseDatabaseUI" \ - "FirebaseEmailAuthUI" "FirebaseFacebookAuthUI" "FirebaseFirestoreUI" \ - "FirebaseGoogleAuthUI" "FirebaseOAuthUI" "FirebasePhoneAuthUI" "FirebaseStorageUI" ) +schemes=( "FirebaseDatabaseUI" "FirebaseFirestoreUI" "FirebaseStorageUI" ) bundle exec pod repo update; @@ -18,7 +16,7 @@ do -workspace "${schemes[i]}.xcworkspace" \ -scheme "${schemes[i]}" \ -sdk iphonesimulator \ - -destination 'platform=iOS Simulator,OS=latest,name=iPhone 11 Pro' \ + -destination 'platform=iOS Simulator,OS=latest,name=iPhone 16 Pro' \ clean build test \ ONLY_ACTIVE_ARCH=YES \ | xcpretty) || EXIT_STATUS=$?; diff --git a/release-swift.sh b/release-swift.sh new file mode 100755 index 00000000000..07c38bf8146 --- /dev/null +++ b/release-swift.sh @@ -0,0 +1,198 @@ +#!/usr/bin/env bash + +# Script to version FirebaseAuthSwiftUI package +# This script will: +# 1. Check we're on main branch with clean working directory +# 2. Get latest git tag +# 3. Prompt for new version +# 4. Update Version.swift +# 5. Commit, tag, and push changes +# +# Usage: +# ./release-swift.sh # Normal mode (actually commits and pushes) +# ./release-swift.sh --dry-run # Dry run mode (simulates without pushing) + +set -euo pipefail + +# Check for dry-run flag +DRY_RUN=false +if [ "${1:-}" = "--dry-run" ]; then + DRY_RUN=true + echo -e "\033[1;33m⚠️ DRY RUN MODE - No changes will be pushed to remote ⚠️\033[0m" + echo "" +fi + +# Colors for output +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +NC='\033[0m' # No Color + +VERSION_FILE="FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Version.swift" + +echo -e "${GREEN}=== FirebaseAuthSwiftUI Version Release Script ===${NC}" +echo "" + +# Check if we're on main branch +echo "Checking current branch..." +CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD) +if [ "$CURRENT_BRANCH" != "main" ]; then + echo -e "${RED}Error: Not on main branch (currently on: $CURRENT_BRANCH)${NC}" + echo "Please switch to main branch before running this script." + exit 1 +fi +echo -e "${GREEN}✓ On main branch${NC}" +echo "" + +# Check if working directory is clean +echo "Checking working directory status..." +if ! git diff-index --quiet HEAD --; then + echo -e "${RED}Error: Working directory is not clean${NC}" + echo "Please commit or stash your changes before running this script." + echo "" + echo "Current status:" + git status --short + exit 1 +fi +echo -e "${GREEN}✓ Working directory is clean${NC}" +echo "" + +# Get the latest tag +echo "Fetching latest tags from remote..." +git fetch --tags --quiet + +LATEST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "") +if [ -z "$LATEST_TAG" ]; then + echo -e "${YELLOW}No existing tags found${NC}" + LATEST_VERSION="none" +else + echo "Latest tag: $LATEST_TAG" + # Remove 'v' prefix if present + LATEST_VERSION="${LATEST_TAG#v}" +fi +echo "" + +# Prompt for new version +echo -e "${YELLOW}Enter the new version number (e.g., 15.0.2):${NC}" +read -r NEW_VERSION + +# Validate semantic versioning format +if ! [[ "$NEW_VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + echo -e "${RED}Error: Invalid version format${NC}" + echo "Version must follow semantic versioning (X.Y.Z where X, Y, Z are numbers)" + exit 1 +fi +echo -e "${GREEN}✓ Valid semantic version format${NC}" +echo "" + +# Add 'v' prefix and confirm +NEW_TAG="v${NEW_VERSION}" +echo -e "${YELLOW}Version will be tagged as: ${GREEN}${NEW_TAG}${NC}" +echo "Previous version: ${LATEST_VERSION}" +echo "" +echo -e "${YELLOW}Confirm this version? (y/n):${NC}" +read -r CONFIRM + +if [ "$CONFIRM" != "y" ] && [ "$CONFIRM" != "Y" ]; then + echo -e "${RED}Version release cancelled${NC}" + exit 0 +fi +echo "" + +# Check if tag already exists +if git rev-parse "$NEW_TAG" >/dev/null 2>&1; then + echo -e "${RED}Error: Tag $NEW_TAG already exists${NC}" + echo "Please choose a different version number." + exit 1 +fi +echo -e "${GREEN}✓ Tag $NEW_TAG does not exist${NC}" +echo "" + +# Update Version.swift file +echo "Updating $VERSION_FILE..." +if [ ! -f "$VERSION_FILE" ]; then + echo -e "${RED}Error: $VERSION_FILE not found${NC}" + exit 1 +fi + +# Create backup +cp "$VERSION_FILE" "${VERSION_FILE}.bak" + +# Update the version in the file +sed -i.tmp "s/public static let version = \".*\"/public static let version = \"${NEW_VERSION}\"/" "$VERSION_FILE" +rm "${VERSION_FILE}.tmp" + +# Show the changes +echo "" +echo -e "${YELLOW}Changes to be committed:${NC}" +echo "---" +git diff "$VERSION_FILE" +echo "---" +echo "" + +echo -e "${YELLOW}Proceed with commit, tag, and push? (y/n):${NC}" +read -r FINAL_CONFIRM + +if [ "$FINAL_CONFIRM" != "y" ] && [ "$FINAL_CONFIRM" != "Y" ]; then + echo -e "${YELLOW}Restoring backup and cancelling...${NC}" + mv "${VERSION_FILE}.bak" "$VERSION_FILE" + exit 0 +fi + +# Remove backup +rm "${VERSION_FILE}.bak" + +# Commit the changes +echo "" +echo "Committing changes..." +git add "$VERSION_FILE" +git commit -m "chore: update FirebaseAuthSwiftUI version" +echo -e "${GREEN}✓ Changes committed${NC}" +echo "" + +# Create annotated tag +echo "Creating annotated tag $NEW_TAG..." +git tag -a "$NEW_TAG" -m "Release $NEW_TAG" +echo -e "${GREEN}✓ Tag created${NC}" +echo "" + +if [ "$DRY_RUN" = true ]; then + echo -e "${YELLOW}DRY RUN: Skipping push operations${NC}" + echo "" + echo "Would push:" + echo " - Commit to origin/main" + echo " - Tag $NEW_TAG to origin" + echo "" + echo -e "${YELLOW}Cleaning up (removing commit and tag)...${NC}" + git tag -d "$NEW_TAG" + git reset --soft HEAD~1 + git restore --staged "$VERSION_FILE" + echo -e "${GREEN}✓ Local changes cleaned up${NC}" + echo "" + echo -e "${GREEN}=== Dry Run Complete ===${NC}" + echo "Version: $NEW_VERSION" + echo "Tag: $NEW_TAG" + echo "" + echo "Everything looks good! Run without --dry-run to actually release." +else + # Push commit + echo "Pushing commit to remote..." + git push origin main + echo -e "${GREEN}✓ Commit pushed${NC}" + echo "" + + # Push tag + echo "Pushing tag to remote..." + git push origin "$NEW_TAG" + echo -e "${GREEN}✓ Tag pushed${NC}" + echo "" + + echo -e "${GREEN}=== Release Complete ===${NC}" + echo "Version: $NEW_VERSION" + echo "Tag: $NEW_TAG" + echo "" + echo "Next steps:" + echo "1. Verify the tag on GitHub: https://github.com/firebase/FirebaseUI-iOS/releases" + echo "2. Create release notes if needed" +fi + diff --git a/release.sh b/release.sh index 1effe72cfc3..37345676578 100755 --- a/release.sh +++ b/release.sh @@ -3,28 +3,12 @@ set -euxo pipefail pod spec lint FirebaseDatabaseUI.podspec && \ - pod spec lint --allow-warnings FirebaseAuthUI.podspec && \ pod spec lint FirebaseStorageUI.podspec && \ pod spec lint FirebaseFirestoreUI.podspec pod trunk push FirebaseDatabaseUI.podspec && \ - pod trunk push --allow-warnings FirebaseAuthUI.podspec && \ pod trunk push FirebaseStorageUI.podspec && \ pod trunk push FirebaseFirestoreUI.podspec -pod spec lint FirebaseAnonymousAuthUI.podspec && \ - pod spec lint --allow-warnings FirebaseEmailAuthUI.podspec && \ - pod spec lint FirebaseFacebookAuthUI.podspec && \ - pod spec lint FirebaseGoogleAuthUI.podspec && \ - pod spec lint FirebaseOAuthUI.podspec && \ - pod spec lint --allow-warnings FirebasePhoneAuthUI.podspec - -pod trunk push FirebaseAnonymousAuthUI.podspec && \ - pod trunk push --allow-warnings FirebaseEmailAuthUI.podspec && \ - pod trunk push FirebaseFacebookAuthUI.podspec && \ - pod trunk push FirebaseGoogleAuthUI.podspec && \ - pod trunk push FirebaseOAuthUI.podspec && \ - pod trunk push --allow-warnings FirebasePhoneAuthUI.podspec - pod spec lint FirebaseUI.podspec && \ pod trunk push FirebaseUI.podspec diff --git a/samples/demo.gif b/samples/demo.gif deleted file mode 100644 index 199528be463..00000000000 Binary files a/samples/demo.gif and /dev/null differ diff --git a/samples/objc/FirebaseUI-demo-objc/FUIAppDelegate.m b/samples/objc/FirebaseUI-demo-objc/FUIAppDelegate.m index 4532cdd22f5..87242c309f9 100644 --- a/samples/objc/FirebaseUI-demo-objc/FUIAppDelegate.m +++ b/samples/objc/FirebaseUI-demo-objc/FUIAppDelegate.m @@ -17,58 +17,13 @@ #import "FUIAppDelegate.h" @import FirebaseCore; -@import FirebaseAuthUI; -@import FirebaseDynamicLinks; -@import FBSDKCoreKit; -#import @implementation FUIAppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [FIRApp configure]; - [GTMSessionFetcher setLoggingEnabled:YES]; - [[FBSDKApplicationDelegate sharedInstance] application:application - didFinishLaunchingWithOptions:launchOptions]; return YES; } -- (BOOL)application:(UIApplication *)app - openURL:(NSURL *)url - options:(NSDictionary *)options { - NSString *sourceApplication = options[UIApplicationOpenURLOptionsSourceApplicationKey]; - [[FBSDKApplicationDelegate sharedInstance] application:app - openURL:url - options:options]; - return [self handleOpenUrl:url sourceApplication:sourceApplication]; -} - -- (BOOL)application:(UIApplication *)application -continueUserActivity:(nonnull NSUserActivity *)userActivity - restorationHandler: -#if defined(__IPHONE_12_0) && (__IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_12_0) - (nonnull void (^)(NSArray> *_Nullable))restorationHandler { -#else - (nonnull void (^)(NSArray *_Nullable))restorationHandler { -#endif // __IPHONE_12_0 - BOOL handled = [[FIRDynamicLinks dynamicLinks] - handleUniversalLink:userActivity.webpageURL - completion:^(FIRDynamicLink * _Nullable dynamicLink, - NSError * _Nullable error) { - if (error) { - NSLog(@"%@", error.description); - } else { - [self handleOpenUrl:dynamicLink.url sourceApplication:nil]; - } - }]; - return handled; - } - -- (BOOL)handleOpenUrl:(NSURL *)url sourceApplication:(nullable NSString *)sourceApplication { - if ([FUIAuth.defaultAuthUI handleOpenURL:url sourceApplication:sourceApplication]) { - return YES; - } - return NO; -} - @end diff --git a/samples/objc/FirebaseUI-demo-objc/FUISamplesViewController.m b/samples/objc/FirebaseUI-demo-objc/FUISamplesViewController.m index b15083e1cd8..5b2ac4b5b15 100644 --- a/samples/objc/FirebaseUI-demo-objc/FUISamplesViewController.m +++ b/samples/objc/FirebaseUI-demo-objc/FUISamplesViewController.m @@ -20,7 +20,6 @@ #import "FUISamplesViewController.h" -#import "FUIAuthViewController.h" #import "FUIChatViewController.h" #import "FUISample.h" @@ -45,16 +44,9 @@ - (void)populateSamples { UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:NULL]; NSArray *samples = @[ - [FUISample sampleWithTitle:@"Auth" - sampleDescription:@"Demonstrates the FirebaseAuthUI flow with customization options" - controller:^UIViewController *{ - UIViewController *controller = - [storyboard instantiateViewControllerWithIdentifier:@"FUIAuthViewController"]; - return controller; - }], [FUISample sampleWithTitle:@"Chat" - sampleDescription:@"Demonstrates using a FUICollectionViewDataSource to load data from " - "Firebase Database into a UICollectionView for a basic chat app." + sampleDescription:@"Demonstrates using a FUITableViewDataSource to load data from " + "Firebase Database into a UITableView for a basic chat app." controller:^UIViewController *{ UIViewController *controller = [storyboard instantiateViewControllerWithIdentifier:@"ViewController"]; diff --git a/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUIAuthViewController.h b/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUIAuthViewController.h deleted file mode 100644 index d133f4201e3..00000000000 --- a/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUIAuthViewController.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// AuthViewController.h -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -@interface FUIAuthViewController : UITableViewController - -@end diff --git a/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUIAuthViewController.m b/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUIAuthViewController.m deleted file mode 100644 index 9a09875df14..00000000000 --- a/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUIAuthViewController.m +++ /dev/null @@ -1,469 +0,0 @@ -// -// AuthViewController.m -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -@import FirebaseAuth; -@import FirebaseOAuthUI; -@import FirebaseEmailAuthUI; -@import FirebaseAnonymousAuthUI; -@import FirebaseGoogleAuthUI; -@import FirebaseFacebookAuthUI; -@import FirebasePhoneAuthUI; - -#import "FUIAuthViewController.h" -#import "FUIAppDelegate.h" -#import "FUICustomAuthDelegate.h" - -#import "FUICustomAuthPickerViewController.h" - -NS_ENUM(NSUInteger, UISections) { - kSectionsSettings = 0, - kSectionsProviders, - kSectionsAnonymousSignIn, - kSectionsName, - kSectionsEmail, - kSectionsPhoneNumber, - kSectionsUID, - kSectionsAccessToken, - kSectionsIDToken -}; - -NS_ENUM(NSUInteger, FIRProviders) { - kIDPEmail = 0, - kIDPGoogle, - kIDPFacebook, - kIDPTwitter, - kIDPPhone, - kIDPAnonymous, - kIDPMicrosoft, - kIDPGitHub, - kIDPYahoo, - kIDPApple, -}; - -static NSString *const kFirebaseTermsOfService = @"https://firebase.google.com/terms/"; -static NSString *const kFirebasePrivacyPolicy = @"https://firebase.google.com/support/privacy/"; - -@interface FUIAuthViewController () -@property (weak, nonatomic) IBOutlet UITableViewCell *cellSignIn; -@property (weak, nonatomic) IBOutlet UITableViewCell *cellName; -@property (weak, nonatomic) IBOutlet UITableViewCell *cellEmail; -@property (weak, nonatomic) IBOutlet UISwitch *emailSwitch; -@property (weak, nonatomic) IBOutlet UILabel *emailLabel; -@property (weak, nonatomic) IBOutlet UISwitch *facebookSwitch; -@property (weak, nonatomic) IBOutlet UITableViewCell *cellUID; -@property (weak, nonatomic) IBOutlet UITableViewCell *anonymousSignIn; -@property (weak, nonatomic) IBOutlet UIBarButtonItem *buttonAuthorization; -@property (weak, nonatomic) IBOutlet UITableViewCell *cellAccessToken; -@property (weak, nonatomic) IBOutlet UITableViewCell *cellIdToken; -@property (weak, nonatomic) IBOutlet UITableViewCell *cellPhoneNumber; -@property (weak, nonatomic) IBOutlet UISwitch *customScopeSwitch; - -@property (nonatomic) FIRAuth *auth; -@property (nonatomic) FUIAuth *authUI; -// retain customAuthUIDelegate so it can be used when needed -@property (nonatomic) id customAuthUIDelegate; -@property (nonatomic, assign) BOOL isCustomAuthDelegateSelected; - -@property (nonatomic) FIRAuthStateDidChangeListenerHandle authStateDidChangeHandle; - -@end - -@implementation FUIAuthViewController { - NSInteger _activityCount; -} - -#pragma mark - UIViewController methods - -- (void)viewDidLoad { - [super viewDidLoad]; - - self.tableView.rowHeight = UITableViewAutomaticDimension; - self.tableView.estimatedRowHeight = 240; - - self.customAuthUIDelegate = [[FUICustomAuthDelegate alloc] init]; - - self.auth = [FIRAuth auth]; - self.authUI = [FUIAuth defaultAuthUI]; - - self.authUI.TOSURL = [NSURL URLWithString:kFirebaseTermsOfService]; - self.authUI.privacyPolicyURL = [NSURL URLWithString:kFirebasePrivacyPolicy]; - - //set AuthUI Delegate - [self onAuthUIDelegateChanged:nil]; - - //select all Identety providers - [self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:kIDPEmail - inSection:kSectionsProviders] - animated:NO - scrollPosition:UITableViewScrollPositionNone]; - [self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:kIDPGoogle - inSection:kSectionsProviders] - animated:NO - scrollPosition:UITableViewScrollPositionNone]; - [self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:kIDPFacebook - inSection:kSectionsProviders] - animated:NO - scrollPosition:UITableViewScrollPositionNone]; - [self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:kIDPTwitter - inSection:kSectionsProviders] - animated:NO - scrollPosition:UITableViewScrollPositionNone]; - [self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:kIDPPhone - inSection:kSectionsProviders] - animated:NO - scrollPosition:UITableViewScrollPositionNone]; - [self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:kIDPAnonymous - inSection:kSectionsProviders] - animated:NO - scrollPosition:UITableViewScrollPositionNone]; - [self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:kIDPMicrosoft - inSection:kSectionsProviders] - animated:NO - scrollPosition:UITableViewScrollPositionNone]; - [self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:kIDPGitHub - inSection:kSectionsProviders] - animated:NO - scrollPosition:UITableViewScrollPositionNone]; - [self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:kIDPYahoo - inSection:kSectionsProviders] - animated:NO - scrollPosition:UITableViewScrollPositionNone]; - [self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:kIDPApple - inSection:kSectionsProviders] - animated:NO - scrollPosition:UITableViewScrollPositionNone]; -} - -- (void)viewWillAppear:(BOOL)animated { - [super viewWillAppear:animated]; - - __weak FUIAuthViewController *weakSelf = self; - self.authStateDidChangeHandle = - [self.auth addAuthStateDidChangeListener:^(FIRAuth *_Nonnull auth, FIRUser *_Nullable user) { - [weakSelf updateUI:auth withUser:user]; - }]; - - self.navigationController.toolbarHidden = NO; -} - --(void)viewWillDisappear:(BOOL)animated { - [super viewWillDisappear:animated]; - [self.auth removeAuthStateDidChangeListener:self.authStateDidChangeHandle]; - - self.navigationController.toolbarHidden = YES; -} - -#pragma mark - UITableViewController methods - -- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { - return UITableViewAutomaticDimension; -} - -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { - if (indexPath.section == kSectionsAnonymousSignIn && indexPath.row == 0) { - FIRUser *currentUser = self.authUI.auth.currentUser; - if (currentUser.isAnonymous) { - // If the user is anonymous, delete the user to avoid dangling anonymous users. - if (currentUser.isAnonymous) { - [currentUser deleteWithCompletion:^(NSError * _Nullable error) { - if (error) { - [self showAlertWithTitlte:@"Error" message:error.localizedDescription]; - return; - } - [self showAlertWithTitlte:@"" message:@"Anonymous user deleted"]; - }]; - } - [tableView deselectRowAtIndexPath:indexPath animated:NO]; - return; - } - [self signOut]; - [FUIAuth.defaultAuthUI.auth signInAnonymouslyWithCompletion:^(FIRAuthDataResult *_Nullable authResult, - NSError *_Nullable error) { - if (error) { - NSError *detailedError = error.userInfo[NSUnderlyingErrorKey]; - if (!detailedError) { - detailedError = error; - } - NSLog(@"ERROR: %@", detailedError.localizedDescription); - } - }]; - [tableView deselectRowAtIndexPath:indexPath animated:NO]; - } -} - -#pragma mark - UI methods - -- (void)updateUI:(FIRAuth * _Nonnull) auth withUser:(FIRUser *_Nullable) user { - if (user) { - self.cellSignIn.textLabel.text = @"Signed-in"; - self.cellName.textLabel.text = user.displayName; - self.cellEmail.textLabel.text = user.email; - self.cellPhoneNumber.textLabel.text = user.phoneNumber; - self.cellUID.textLabel.text = user.uid; - - // If the user is anonymous, delete the user to avoid dangling anonymous users. - if (auth.currentUser.isAnonymous) { - [_anonymousSignIn.textLabel setText:@"Delete Anonymous User"]; - } - else { - [_anonymousSignIn.textLabel setText:@"Sign In Anonymously"]; - self.buttonAuthorization.title = @"Sign Out"; - } - } else { - [_anonymousSignIn.textLabel setText:@"Sign In Anonymously"]; - self.cellSignIn.textLabel.text = @"Not signed-in"; - self.cellName.textLabel.text = @""; - self.cellEmail.textLabel.text = @""; - self.cellPhoneNumber.textLabel.text = @""; - self.cellUID.textLabel.text = @""; - - self.buttonAuthorization.title = @"Sign In"; - } - - self.cellAccessToken.textLabel.text = [self getAllAccessTokens]; - self.cellIdToken.textLabel.text = [self getAllIdTokens]; - - NSArray *selectedRows = [self.tableView indexPathsForSelectedRows]; - [self.tableView reloadData]; - for (NSIndexPath *path in selectedRows) { - [self.tableView selectRowAtIndexPath:path - animated:NO - scrollPosition:UITableViewScrollPositionNone]; - } -} -- (IBAction)onAuthUIDelegateChanged:(UISwitch *)sender { - _isCustomAuthDelegateSelected = sender ? sender.isOn : NO; - if (_isCustomAuthDelegateSelected) { - self.authUI.delegate = self.customAuthUIDelegate; - } else { - self.authUI.delegate = self; - } -} - -- (IBAction)onAuthorization:(id)sender { - if (!_auth.currentUser || _auth.currentUser.isAnonymous) { - FUIAuth.defaultAuthUI.autoUpgradeAnonymousUsers = YES; - _authUI.providers = [self getListOfIDPs]; - - NSString *providerID = self.authUI.providers.firstObject.providerID; - BOOL isPhoneAuth = [providerID isEqualToString:FIRPhoneAuthProviderID]; - BOOL isEmailAuth = [providerID isEqualToString: -@"password"]; - BOOL shouldSkipAuthPicker = self.authUI.providers.count == 1 && (isPhoneAuth || isEmailAuth); - if (shouldSkipAuthPicker) { - if (isPhoneAuth) { - FUIPhoneAuth *provider = self.authUI.providers.firstObject; - [provider signInWithPresentingViewController:self phoneNumber:nil]; - } else if (isEmailAuth) { - FUIEmailAuth *provider = self.authUI.providers.firstObject; - [provider signInWithPresentingViewController:self email:nil]; - } - } else { - UINavigationController *controller = [self.authUI authViewController]; - if (_isCustomAuthDelegateSelected) { - controller.navigationBar.hidden = YES; - } - [self presentViewController:controller animated:YES completion:nil]; - } - } else { - [self signOut]; - } -} - -- (IBAction)onEmailSwitchValueChanged:(UISwitch *)sender { - if (sender.isOn) { - self.emailLabel.text = @"Password"; - } else { - self.emailLabel.text = @"Link"; - } -} - -#pragma mark - FUIAuthDelegate methods - -// this method is called only when FUIAuthViewController is delgate of AuthUI -- (void)authUI:(FUIAuth *)authUI - didSignInWithAuthDataResult:(nullable FIRAuthDataResult *)authDataResult - URL:(nullable NSURL *)url - error:(nullable NSError *)error { - if (error) { - if (error.code == FUIAuthErrorCodeUserCancelledSignIn) { - [self showAlertWithTitlte:@"Error" message:error.localizedDescription]; - return; - } - if (error.code == FUIAuthErrorCodeMergeConflict) { - FIRAuthCredential *credential = error.userInfo[FUIAuthCredentialKey]; - [[FUIAuth defaultAuthUI].auth - signInWithCredential:credential - completion:^(FIRAuthDataResult *_Nullable authResult, - NSError *_Nullable error) { - if (error) { - [self showAlertWithTitlte:@"Sign-In error" message:error.description]; - NSLog(@"%@",error.description); - return; - } - NSString *anonymousUserID = authUI.auth.currentUser.uid; - NSString *messsage = [NSString stringWithFormat:@"A merge conflict occurred. The old user" - " ID was: %@. You are now signed in with the following credential type: %@", - anonymousUserID, [credential.provider uppercaseString]]; - [self showAlertWithTitlte:@"Merge Conflict" message:messsage]; - NSLog(@"%@", messsage); - }]; - return; - } - NSError *detailedError = error.userInfo[NSUnderlyingErrorKey]; - if (!detailedError) { - detailedError = error; - } - NSLog(@"ERROR: %@", detailedError.localizedDescription); - } -} - -#pragma mark - Helper Methods - -- (NSString *)getAllAccessTokens { - NSMutableString *result = [NSMutableString new]; - for (id provider in _authUI.providers) { - [result appendFormat:@"%@: %@\n", provider.shortName, provider.accessToken]; - } - - return result; -} - -- (NSString *)getAllIdTokens { - NSMutableString *result = [NSMutableString new]; - for (id provider in _authUI.providers) { - [result appendFormat:@"%@: %@\n", provider.shortName, provider.idToken]; - } - - return result; -} - -- (void)signOut { - NSError *error; - [self.authUI signOutWithError:&error]; - if (error) { - [self showAlertWithTitlte:@"Error" message:error.localizedDescription]; - } -} - -- (void)showAlertWithTitlte:(NSString *)title message:(NSString *)message { - UIAlertController *alert = [UIAlertController alertControllerWithTitle:title - message:message - preferredStyle:UIAlertControllerStyleAlert]; - UIAlertAction* closeButton = [UIAlertAction - actionWithTitle:@"Close" - style:UIAlertActionStyleDefault - handler:nil]; - [alert addAction:closeButton]; - [self presentViewController:alert animated:YES completion:nil]; - -} - -- (NSArray *)getListOfIDPs { - return [[self class] getListOfIDPs:[self.tableView indexPathsForSelectedRows] - useCustomScopes:_customScopeSwitch.isOn - useEmailLink:_emailSwitch.isOn - useFacebookLimitedLogin:_facebookSwitch.isOn]; -} - -+ (NSArray *)getListOfIDPs:(NSArray *)selectedRows - useCustomScopes:(BOOL)useCustomScopes - useEmailLink:(BOOL)useEmaiLink - useFacebookLimitedLogin:(BOOL)useLimitedLogin { - NSMutableArray *providers = [NSMutableArray new]; - - for (NSIndexPath *indexPath in selectedRows) { - if (indexPath.section == kSectionsProviders) { - id provider; - switch (indexPath.row) { - case kIDPEmail: - if (useEmaiLink) { - // ActionCodeSettings for email link sign-in. - FIRActionCodeSettings *actionCodeSettings = [[FIRActionCodeSettings alloc] init]; - actionCodeSettings.URL = [NSURL URLWithString:@"https://fb-sa-1211.appspot.com"]; - actionCodeSettings.handleCodeInApp = YES; - [actionCodeSettings setAndroidPackageName:@"com.firebase.uidemo" - installIfNotAvailable:NO - minimumVersion:@"12"]; - - provider = [[FUIEmailAuth alloc] initAuthAuthUI:[FUIAuth defaultAuthUI] - signInMethod:FIREmailLinkAuthSignInMethod - forceSameDevice:NO - allowNewEmailAccounts:YES - requireDisplayName:YES - actionCodeSetting:actionCodeSettings]; - } else { - provider = [[FUIEmailAuth alloc] initAuthAuthUI:[FUIAuth defaultAuthUI] - signInMethod:FIREmailPasswordAuthSignInMethod - forceSameDevice:NO - allowNewEmailAccounts:YES - requireDisplayName:NO - actionCodeSetting:[[FIRActionCodeSettings alloc] init]]; - } - break; - case kIDPGoogle: - provider = useCustomScopes ? [[FUIGoogleAuth alloc] initWithAuthUI:[FUIAuth defaultAuthUI] - scopes:@[kGoogleUserInfoEmailScope, - kGoogleUserInfoProfileScope, - kGoogleGamesScope, - kGooglePlusMeScope]] - : [[FUIGoogleAuth alloc] initWithAuthUI:[FUIAuth defaultAuthUI]]; - break; - case kIDPFacebook: - provider = useCustomScopes ? [[FUIFacebookAuth alloc] initWithAuthUI:[FUIAuth defaultAuthUI] - permissions:@[@"email", - @"user_friends", - @"ads_read"]] - :[[FUIFacebookAuth alloc] initWithAuthUI:[FUIAuth defaultAuthUI]]; - ((FUIFacebookAuth *)provider).useLimitedLogin = useLimitedLogin; - break; - case kIDPTwitter: - provider = [FUIOAuth twitterAuthProvider]; - break; - case kIDPPhone: - provider = [[FUIPhoneAuth alloc] initWithAuthUI:[FUIAuth defaultAuthUI]]; - break; - case kIDPAnonymous: - provider = [[FUIAnonymousAuth alloc] initWithAuthUI:[FUIAuth defaultAuthUI]]; - break; - case kIDPMicrosoft: - provider = [FUIOAuth microsoftAuthProvider]; - break; - case kIDPGitHub: - provider = [FUIOAuth githubAuthProvider]; - break; - case kIDPYahoo: - provider = [FUIOAuth yahooAuthProvider]; - break; - case kIDPApple: - provider = [FUIOAuth appleAuthProvider]; - break; - default: - break; - } - if (provider) { - [providers addObject:provider]; - } - - } - } - - return providers; -} - -@end diff --git a/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomAuthDelegate.h b/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomAuthDelegate.h deleted file mode 100644 index f7298dfd695..00000000000 --- a/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomAuthDelegate.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// AuthViewController.m -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -@import FirebaseAuthUI; - -@interface FUICustomAuthDelegate : NSObject - -@end diff --git a/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomAuthDelegate.m b/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomAuthDelegate.m deleted file mode 100644 index 606fbe6eb93..00000000000 --- a/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomAuthDelegate.m +++ /dev/null @@ -1,100 +0,0 @@ -// -// AuthViewController.m -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FUICustomAuthDelegate.h" -#import "FUICustomAuthPickerViewController.h" -#import "FUICustomEmailEntryViewController.h" -#import "FUICustomPasswordSignInViewController.h" -#import "FUICustomPasswordSignUpViewController.h" -#import "FUICustomPasswordRecoveryViewController.h" -#import "FUICustomPasswordVerificationViewController.h" - -@implementation FUICustomAuthDelegate - -- (void)authUI:(FUIAuth *)authUI - didSignInWithAuthDataResult:(nullable FIRAuthDataResult *)authDataResult - error:(nullable NSError *)error { - if (error) { - if (error.code == FUIAuthErrorCodeUserCancelledSignIn) { - NSLog(@"User cancelled sign-in"); - } else { - NSError *detailedError = error.userInfo[NSUnderlyingErrorKey]; - if (!detailedError) { - detailedError = error; - } - NSLog(@"Login error: %@", detailedError.localizedDescription); - } - } -} - -- (FUIAuthPickerViewController *)authPickerViewControllerForAuthUI:(FUIAuth *)authUI { - return [[FUICustomAuthPickerViewController alloc] - initWithNibName:@"FUICustomAuthPickerViewController" - bundle:[NSBundle mainBundle] - authUI:authUI]; -} - -- (FUIEmailEntryViewController *)emailEntryViewControllerForAuthUI:(FUIAuth *)authUI { - return [[FUICustomEmailEntryViewController alloc] - initWithNibName:@"FUICustomEmailEntryViewController" - bundle:[NSBundle mainBundle] - authUI:authUI]; -} - -- (FUIPasswordSignInViewController *)passwordSignInViewControllerForAuthUI:(FUIAuth *)authUI - email:(NSString *)email { - return [[FUICustomPasswordSignInViewController alloc] - initWithNibName:@"FUICustomPasswordSignInViewController" - bundle:[NSBundle mainBundle] - authUI:authUI - email:email]; -} - -- (FUIPasswordSignUpViewController *)passwordSignUpViewControllerForAuthUI:(FUIAuth *)authUI - email:(NSString *)email { - return [[FUICustomPasswordSignUpViewController alloc] - initWithNibName:@"FUICustomPasswordSignUpViewController" - bundle:[NSBundle mainBundle] - authUI:authUI - email:email - requireDisplayName:YES]; -} - -- (FUIPasswordRecoveryViewController *) - passwordRecoveryViewControllerForAuthUI:(FUIAuth *)authUI - email:(NSString *)email { - return [[FUICustomPasswordRecoveryViewController alloc] - initWithNibName:@"FUICustomPasswordRecoveryViewController" - bundle:[NSBundle mainBundle] - authUI:authUI - email:email]; -} - -- (FUIPasswordVerificationViewController *) - passwordVerificationViewControllerForAuthUI:(FUIAuth *)authUI - email:(NSString *)email - newCredential:(FIRAuthCredential *)newCredential { - return [[FUICustomPasswordVerificationViewController alloc] - initWithNibName:@"FUICustomPasswordVerificationViewController" - bundle:[NSBundle mainBundle] - authUI:authUI - email:email - newCredential:newCredential]; -} - -@end diff --git a/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomAuthPickerViewController.h b/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomAuthPickerViewController.h deleted file mode 100644 index 8fd1fd9823a..00000000000 --- a/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomAuthPickerViewController.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// AuthViewController.m -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -@import FirebaseAuthUI; - -@interface FUICustomAuthPickerViewController : FUIAuthPickerViewController - -@end diff --git a/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomAuthPickerViewController.m b/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomAuthPickerViewController.m deleted file mode 100644 index 8910eddc6fc..00000000000 --- a/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomAuthPickerViewController.m +++ /dev/null @@ -1,35 +0,0 @@ -// -// AuthViewController.m -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FUICustomAuthPickerViewController.h" - -@implementation FUICustomAuthPickerViewController - -- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil authUI:(FUIAuth *)authUI { - - self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil authUI:authUI]; - if (self) { - // Custom initialization - } - return self; -} -- (IBAction)onClose:(id)sender { - [self cancelAuthorization]; -} - -@end diff --git a/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomAuthPickerViewController.xib b/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomAuthPickerViewController.xib deleted file mode 100644 index 836c215b842..00000000000 --- a/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomAuthPickerViewController.xib +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomEmailEntryViewController.h b/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomEmailEntryViewController.h deleted file mode 100644 index 31a529e2484..00000000000 --- a/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomEmailEntryViewController.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// AuthViewController.m -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -@import FirebaseEmailAuthUI; - -@interface FUICustomEmailEntryViewController : FUIEmailEntryViewController - -@end diff --git a/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomEmailEntryViewController.m b/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomEmailEntryViewController.m deleted file mode 100644 index eba6d59ffec..00000000000 --- a/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomEmailEntryViewController.m +++ /dev/null @@ -1,70 +0,0 @@ -// -// AuthViewController.m -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FUICustomEmailEntryViewController.h" - -@interface FUICustomEmailEntryViewController () -@property (weak, nonatomic) IBOutlet UITextField *emailTextField; -@property (weak, nonatomic) IBOutlet UIBarButtonItem *nextButton; -@end - -@implementation FUICustomEmailEntryViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - - //override action of default 'Next' button to use custom layout elements - self.navigationItem.rightBarButtonItem.target = self; - self.navigationItem.rightBarButtonItem.action = @selector(onNextButton:); -} - -- (void)viewWillAppear:(BOOL)animated { - [super viewWillAppear:animated]; - - //update state of all UI elements (e g disable 'Next' buttons) - [self updateEmailValue:_emailTextField]; -} - -- (IBAction)onBack:(id)sender { - [self onBack]; -} -- (IBAction)onNextButton:(id)sender { - [self onNext:_emailTextField.text]; -} -- (IBAction)onCancel:(id)sender { - [self cancelAuthorization]; -} -- (IBAction)updateEmailValue:(UITextField *)sender { - BOOL enableActionButton = sender.text.length > 0; - self.nextButton.enabled = enableActionButton; - - [self didChangeEmail:sender.text]; -} - -- (IBAction)onViewSelected:(id)sender { - [_emailTextField resignFirstResponder]; -} - -#pragma mark - UITextFieldDelegate methods -- (BOOL)textFieldShouldReturn:(UITextField *)textField { - [self onNext:textField.text]; - - return NO; -} - -@end diff --git a/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomEmailEntryViewController.xib b/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomEmailEntryViewController.xib deleted file mode 100644 index 5d79643cd52..00000000000 --- a/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomEmailEntryViewController.xib +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomPasswordRecoveryViewController.h b/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomPasswordRecoveryViewController.h deleted file mode 100644 index 327ce90e039..00000000000 --- a/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomPasswordRecoveryViewController.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// AuthViewController.m -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -@import FirebaseEmailAuthUI; - -@interface FUICustomPasswordRecoveryViewController : FUIPasswordRecoveryViewController - -@end diff --git a/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomPasswordRecoveryViewController.m b/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomPasswordRecoveryViewController.m deleted file mode 100644 index ea05d68d84e..00000000000 --- a/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomPasswordRecoveryViewController.m +++ /dev/null @@ -1,82 +0,0 @@ -// -// AuthViewController.m -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FUICustomPasswordRecoveryViewController.h" - -@interface FUICustomPasswordRecoveryViewController () -@property (weak, nonatomic) IBOutlet UITextField *emailTextField; -@property (weak, nonatomic) IBOutlet UIBarButtonItem *recoverButton; - -@end - -@implementation FUICustomPasswordRecoveryViewController - -- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil - bundle:(nullable NSBundle *)nibBundleOrNil - authUI:(FUIAuth *)authUI - email:(NSString *_Nullable)email { - self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil authUI:authUI email:email]; - - if (self) { - _emailTextField.text = email; - } - return self; -} - -- (void)viewDidLoad { - [super viewDidLoad]; - - //override action of default 'Next' button to use custom layout elements - self.navigationItem.rightBarButtonItem.target = self; - self.navigationItem.rightBarButtonItem.action = @selector(onRecoverButton:); -} - -- (void)viewWillAppear:(BOOL)animated { - [super viewWillAppear:animated]; - - //update state of all UI elements (e g disable 'Next' buttons) - [self updateEmailValue:_emailTextField]; -} - -- (IBAction)onBackButton:(id)sender { - [self onBack]; -} -- (IBAction)onRecoverButton:(id)sender { - [self recoverEmail:_emailTextField.text]; -} -- (IBAction)onCancel:(id)sender { - [self cancelAuthorization]; -} -- (IBAction)updateEmailValue:(UITextField *)sender { - BOOL enableActionButton = sender.text.length > 0; - self.recoverButton.enabled = enableActionButton; - - [self didChangeEmail:sender.text]; -} - -- (IBAction)onViewSelected:(id)sender { - [_emailTextField resignFirstResponder]; -} - -#pragma mark - UITextFieldDelegate methods -- (BOOL)textFieldShouldReturn:(UITextField *)textField { - [self recoverEmail:textField.text]; - - return NO; -} -@end diff --git a/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomPasswordRecoveryViewController.xib b/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomPasswordRecoveryViewController.xib deleted file mode 100644 index d4fae5920a6..00000000000 --- a/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomPasswordRecoveryViewController.xib +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomPasswordSignInViewController.h b/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomPasswordSignInViewController.h deleted file mode 100644 index b5a1c571670..00000000000 --- a/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomPasswordSignInViewController.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// AuthViewController.m -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -@import FirebaseEmailAuthUI; - -@interface FUICustomPasswordSignInViewController : FUIPasswordSignInViewController - -@end diff --git a/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomPasswordSignInViewController.m b/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomPasswordSignInViewController.m deleted file mode 100644 index 077ea241ea5..00000000000 --- a/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomPasswordSignInViewController.m +++ /dev/null @@ -1,97 +0,0 @@ -// -// AuthViewController.m -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FUICustomPasswordSignInViewController.h" - -@interface FUICustomPasswordSignInViewController () -@property (weak, nonatomic) IBOutlet UITextField *emailTextField; -@property (weak, nonatomic) IBOutlet UITextField *passwordTextField; -@property (weak, nonatomic) IBOutlet UIBarButtonItem *nextButton; - -@end - -@implementation FUICustomPasswordSignInViewController - -- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil - bundle:(nullable NSBundle *)nibBundleOrNil - authUI:(FUIAuth *)authUI - email:(NSString *_Nullable)email { - self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil authUI:authUI email:email]; - - if (self) { - _emailTextField.text = email; - } - return self; -} - -- (void)viewDidLoad { - [super viewDidLoad]; - - //override action of default 'Next' button to use custom layout elements - self.navigationItem.rightBarButtonItem.target = self; - self.navigationItem.rightBarButtonItem.action = @selector(onNextPressed:); -} - -- (void)viewWillAppear:(BOOL)animated { - [super viewWillAppear:animated]; - - //update state of all UI elements (e g disable 'Next' buttons) - [self updateTextFieldValue:nil]; -} - -- (IBAction)onForgotPasswordPressed:(id)sender { - [self forgotPasswordForEmail:_emailTextField.text]; -} - -- (IBAction)onNextPressed:(id)sender { - [self signInWithDefaultValue:_emailTextField.text andPassword:_passwordTextField.text]; -} - -- (IBAction)onCancelPressed:(id)sender { - [self cancelAuthorization]; -} - -- (IBAction)onBackPressed:(id)sender { - [self onBack]; -} - -- (IBAction)onViewSelected:(id)sender { - [_emailTextField resignFirstResponder]; - [_passwordTextField resignFirstResponder]; -} - -#pragma mark - UITextFieldDelegate methods -- (IBAction)updateTextFieldValue:(id)sender { - BOOL enableActionButton = _emailTextField.text.length > 0 && _passwordTextField.text.length; - self.nextButton.enabled = enableActionButton; - - [self didChangeEmail:_emailTextField.text andPassword:_passwordTextField.text]; - -} - -- (BOOL)textFieldShouldReturn:(UITextField *)textField { - if (textField == _emailTextField) { - [_passwordTextField becomeFirstResponder]; - } else if (textField == _passwordTextField) { - [self onNextPressed:nil]; - } - - return NO; -} - -@end diff --git a/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomPasswordSignInViewController.xib b/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomPasswordSignInViewController.xib deleted file mode 100644 index 0739fe2bfc2..00000000000 --- a/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomPasswordSignInViewController.xib +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomPasswordSignUpViewController.h b/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomPasswordSignUpViewController.h deleted file mode 100644 index 06179fc3530..00000000000 --- a/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomPasswordSignUpViewController.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// AuthViewController.m -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -@import FirebaseEmailAuthUI; - -@interface FUICustomPasswordSignUpViewController : FUIPasswordSignUpViewController - -@end diff --git a/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomPasswordSignUpViewController.m b/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomPasswordSignUpViewController.m deleted file mode 100644 index 7d9ac4ea395..00000000000 --- a/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomPasswordSignUpViewController.m +++ /dev/null @@ -1,103 +0,0 @@ -// -// AuthViewController.m -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - - -#import "FUICustomPasswordSignUpViewController.h" - -@interface FUICustomPasswordSignUpViewController () -@property (weak, nonatomic) IBOutlet UITextField *emailTextField; -@property (weak, nonatomic) IBOutlet UITextField *passwordTextField; -@property (weak, nonatomic) IBOutlet UITextField *usernameTextField; -@property (weak, nonatomic) IBOutlet UIBarButtonItem *nextButton; - -@end - -@implementation FUICustomPasswordSignUpViewController - -- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil - bundle:(nullable NSBundle *)nibBundleOrNil - authUI:(FUIAuth *)authUI - email:(NSString *_Nullable)email { - self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil authUI:authUI email:email requireDisplayName:YES]; - - if (self) { - _emailTextField.text = email; - } - return self; -} - -- (void)viewDidLoad { - [super viewDidLoad]; - - //override action of default 'Next' button to use custom layout elements - self.navigationItem.rightBarButtonItem.target = self; - self.navigationItem.rightBarButtonItem.action = @selector(onNextPressed:); -} - -- (void)viewWillAppear:(BOOL)animated { - [super viewWillAppear:animated]; - - //update state of all UI elements (e g disable 'Next' buttons) - [self updateTextFieldValue:nil]; -} - - -- (IBAction)onNextPressed:(id)sender { - [self signUpWithEmail:_emailTextField.text - andPassword:_passwordTextField.text - andUsername:_usernameTextField.text]; -} - -- (IBAction)onCancelPressed:(id)sender { - [self cancelAuthorization]; -} - -- (IBAction)onBackPressed:(id)sender { - [self onBack]; -} - -- (IBAction)onViewSelected:(id)sender { - [_emailTextField resignFirstResponder]; - [_passwordTextField resignFirstResponder]; - [_usernameTextField resignFirstResponder]; -} - -#pragma mark - UITextFieldDelegate methods - -- (IBAction)updateTextFieldValue:(id)sender { - BOOL enableActionButton = _emailTextField.text.length > 0 && _passwordTextField.text.length && _usernameTextField.text.length; - self.nextButton.enabled = enableActionButton; - - [self didChangeEmail:_emailTextField.text - orPassword:_passwordTextField.text - orUserName:_usernameTextField.text]; -} - -- (BOOL)textFieldShouldReturn:(UITextField *)textField { - if (textField == _emailTextField) { - [_usernameTextField becomeFirstResponder]; - } else if (textField == _usernameTextField) { - [_passwordTextField becomeFirstResponder]; - } else if (textField == _passwordTextField) { - [self onNextPressed:nil]; - } - - return NO; -} - -@end diff --git a/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomPasswordSignUpViewController.xib b/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomPasswordSignUpViewController.xib deleted file mode 100644 index e9f471930af..00000000000 --- a/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomPasswordSignUpViewController.xib +++ /dev/null @@ -1,151 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomPasswordVerificationViewController.h b/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomPasswordVerificationViewController.h deleted file mode 100644 index f442af63ee5..00000000000 --- a/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomPasswordVerificationViewController.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// AuthViewController.m -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -@interface FUICustomPasswordVerificationViewController : FUIPasswordVerificationViewController - -@end diff --git a/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomPasswordVerificationViewController.m b/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomPasswordVerificationViewController.m deleted file mode 100644 index 115b4fe061b..00000000000 --- a/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomPasswordVerificationViewController.m +++ /dev/null @@ -1,104 +0,0 @@ -// -// AuthViewController.m -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FUICustomPasswordVerificationViewController.h" - -@interface FUICustomPasswordVerificationViewController () -{ - NSString *userEmail; -} -@property (weak, nonatomic) IBOutlet UILabel *infoLabel; -@property (weak, nonatomic) IBOutlet UITextField *passwordTextField; -@property (weak, nonatomic) IBOutlet UIBarButtonItem *nextButton; - -@end - -@implementation FUICustomPasswordVerificationViewController - -- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil - bundle:(nullable NSBundle *)nibBundleOrNil - authUI:(FUIAuth *)authUI - email:(NSString *_Nullable)email - newCredential:(nonnull FIRAuthCredential *)newCredential{ - self = [super initWithNibName:nibNameOrNil - bundle:nibBundleOrNil - authUI:authUI - email:email - newCredential:newCredential]; - - if (self) { - userEmail = [email copy]; - _infoLabel.text = [NSString stringWithFormat:@"You’ve already used %@. " - "Enter your password for that account to sign in.", email]; - } - return self; -} - -- (void)viewDidLoad { - [super viewDidLoad]; - - //override action of default 'Next' button to use custom layout elements - self.navigationItem.rightBarButtonItem.target = self; - self.navigationItem.rightBarButtonItem.action = @selector(onNextPressed:); -} - -- (void)viewWillAppear:(BOOL)animated { - [super viewWillAppear:animated]; - - //update state of all UI elements (e g disable 'Next' buttons) - [self updateTextFieldValue:nil]; -} - -- (IBAction)onForgotPasswordPressed:(id)sender { - [self forgotPassword]; -} - -- (IBAction)onNextPressed:(id)sender { - [self verifyPassword:_passwordTextField.text]; -} - -- (IBAction)onCancelPressed:(id)sender { - [self cancelAuthorization]; -} - -- (IBAction)onBackPressed:(id)sender { - [self onBack]; -} - -- (IBAction)onViewSelected:(id)sender { - [_passwordTextField resignFirstResponder]; -} - -#pragma mark - UITextFieldDelegate methods - -- (IBAction)updateTextFieldValue:(id)sender { - BOOL enableActionButton = _passwordTextField.text.length; - self.nextButton.enabled = enableActionButton; - - [self didChangePassword:_passwordTextField.text]; -} - -- (BOOL)textFieldShouldReturn:(UITextField *)textField { - if (textField == _passwordTextField) { - [self onNextPressed:nil]; - } - - return NO; -} - -@end diff --git a/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomPasswordVerificationViewController.xib b/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomPasswordVerificationViewController.xib deleted file mode 100644 index e145bd131b0..00000000000 --- a/samples/objc/FirebaseUI-demo-objc/Samples/Auth/FUICustomPasswordVerificationViewController.xib +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/samples/objc/Podfile b/samples/objc/Podfile index 2e3686d4352..79324520711 100644 --- a/samples/objc/Podfile +++ b/samples/objc/Podfile @@ -4,16 +4,9 @@ target 'FirebaseUI-demo-objc' do use_frameworks! pod 'FirebaseUI', :path => '../../' - pod 'FirebaseAuthUI', :path => '../../' pod 'FirebaseDatabaseUI', :path => '../../' pod 'FirebaseFirestoreUI', :path => '../../' - pod 'FirebaseOAuthUI', :path => '../../' - pod 'FirebasePhoneAuthUI', :path => '../../' - pod 'FirebaseAnonymousAuthUI', :path => '../../' - pod 'FirebaseEmailAuthUI', :path => '../../' - pod 'FirebaseFacebookAuthUI', :path => '../../' - pod 'FirebaseGoogleAuthUI', :path => '../../' pod 'FirebaseStorageUI', :path => '../../' - - pod 'Firebase/DynamicLinks' + + pod 'Firebase/Auth' # For anonymous auth in Chat sample end diff --git a/samples/objc/README.md b/samples/objc/README.md index 7a6292fd7bd..650a029c316 100644 --- a/samples/objc/README.md +++ b/samples/objc/README.md @@ -1,47 +1,38 @@ -FirebaseUI Chat Demo in Objective C +FirebaseUI Demo in Objective-C =================================== -This is a super simple FirebaseUI Chat demo in Objective C. It shows: +This is a simple FirebaseUI demo in Objective-C showcasing Database and Storage features. It demonstrates: 1. The ease of integrating with FirebaseUI 1. Using a `UITableView` outside of a `UITableViewController` 1. Using custom XIBs in FirebaseUI to achieve a custom look and feel 1. Using a model object to get strongly typed objects from Firebase 1. Using a custom `FUITableViewDataSource` to add deletion - 1. Using `FirebaseLoginViewController` to add authentication -In order to install and run: +## Installation + ``` bash git clone https://github.com/firebase/FirebaseUI-iOS.git cd FirebaseUI-iOS/samples/objc pod install open FirebaseUI-demo-objc.xcworkspace ``` -Once you've opened the workspace, go into `Supporting Files/Info.plist` and either fill in the social provider information currently commented out, or delete extra providers you're not interested in. For providers you choose to keep, enable them in your Firebase Dashboard according to the [user authentication docs](https://www.firebase.com/docs/ios/guide/user-auth.html). In `ViewController.m` make sure to only enable providers that you've configured properly. - -### Project configuration -Please follow steps described [here](https://github.com/firebase/FirebaseUI-iOS#mandatory-sample-project-configuration) in order to run the sample project. +## Project Configuration -### Chat Sample +1. Download `GoogleService-Info.plist` from [Firebase Console](https://console.firebase.google.com) +2. Copy it to `samples/objc/` directory +3. Configure your Firebase Database and Storage in the Firebase Console -This sample uses [anonymous authentication](https://firebase.google.com/docs/auth/ios/anonymous-auth), -so make sure anonymous auth is enabled in Firebase console. +## Samples -### Auth Sample +### Chat Sample -This sample uses [email/password](https://firebase.google.com/docs/auth/ios/password-auth), -[Google](https://firebase.google.com/docs/auth/ios/google-signin), -[Facebook](https://firebase.google.com/docs/auth/ios/facebook-login), -[Twitter](https://firebase.google.com/docs/auth/ios/twitter-login) -and [Phone](https://firebase.google.com/docs/auth/ios/phone-auth) -auth so make sure those are enabled in Firebase console. +This sample demonstrates real-time database functionality using `FUITableViewDataSource` to bind a Firebase query to a `UITableView`. The chat messages are stored in the Firebase Realtime Database and updated in real-time. -The auth example requires a little more setup (adding url schemes, etc) -since it depends on the various keys and tokens for the different auth -services your app will support. Take a look at the [Auth README](../../FirebaseAuthUI/README.md) -for more information. +Note: This sample uses [anonymous authentication](https://firebase.google.com/docs/auth/ios/anonymous-auth), so make sure anonymous auth is enabled in Firebase Console. ### Storage Sample -This sample does not use a logged-in user, so make to set up the [Storage Security Rules](https://firebase.google.com/docs/storage/security/start#sample-rules) -for your bucket to allow that. \ No newline at end of file +This sample demonstrates Firebase Storage integration, showing how to upload and display images stored in Firebase Storage. + +Note: Make sure to set up the [Storage Security Rules](https://firebase.google.com/docs/storage/security/start#sample-rules) for your bucket. \ No newline at end of file diff --git a/samples/swift/FirebaseUI-demo-swift.xcodeproj/project.pbxproj b/samples/swift/FirebaseUI-demo-swift.xcodeproj/project.pbxproj index dabd26609d7..d236027bae3 100644 --- a/samples/swift/FirebaseUI-demo-swift.xcodeproj/project.pbxproj +++ b/samples/swift/FirebaseUI-demo-swift.xcodeproj/project.pbxproj @@ -7,6 +7,8 @@ objects = { /* Begin PBXBuildFile section */ + 4617B75BF5701E48387F35F6 /* Pods_FirebaseUI_demo_swift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 25F197CFBB06559F4B537E37 /* Pods_FirebaseUI_demo_swift.framework */; }; + 6096FEF87E5B53C0792BC146 /* Pods_FirebaseUI_demo_swiftTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 637019691D9C301621749DE1 /* Pods_FirebaseUI_demo_swiftTests.framework */; }; 89B2924722568B1C00CEF7D7 /* twtrsymbol.png in Resources */ = {isa = PBXBuildFile; fileRef = 89B2924622568B1C00CEF7D7 /* twtrsymbol.png */; }; 8D5F93B01D9B192D00D5A2E4 /* StorageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D5F93AF1D9B192D00D5A2E4 /* StorageViewController.swift */; }; 8DABC9891D3D82D600453807 /* FUIAppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DABC9881D3D82D600453807 /* FUIAppDelegate.swift */; }; @@ -49,6 +51,9 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 25F197CFBB06559F4B537E37 /* Pods_FirebaseUI_demo_swift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_FirebaseUI_demo_swift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 637019691D9C301621749DE1 /* Pods_FirebaseUI_demo_swiftTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_FirebaseUI_demo_swiftTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6F5993EFB11CBA0003C0DE94 /* Pods-FirebaseUI-demo-swiftTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FirebaseUI-demo-swiftTests.release.xcconfig"; path = "Target Support Files/Pods-FirebaseUI-demo-swiftTests/Pods-FirebaseUI-demo-swiftTests.release.xcconfig"; sourceTree = ""; }; 89B2924622568B1C00CEF7D7 /* twtrsymbol.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = twtrsymbol.png; sourceTree = ""; }; 8D5F93AF1D9B192D00D5A2E4 /* StorageViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StorageViewController.swift; sourceTree = ""; }; 8DABC9851D3D82D600453807 /* FirebaseUI-demo-swift.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "FirebaseUI-demo-swift.app"; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -59,6 +64,8 @@ 8DABC99D1D3D82D600453807 /* FirebaseUI-demo-swiftTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "FirebaseUI-demo-swiftTests.swift"; sourceTree = ""; }; 8DABC99F1D3D82D600453807 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 8DD51E361D873B0D00E2CA51 /* UIStoryboardExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIStoryboardExtension.swift; sourceTree = ""; }; + 8E009A2D4461F77B9CEB0C4D /* Pods-FirebaseUI-demo-swiftTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FirebaseUI-demo-swiftTests.debug.xcconfig"; path = "Target Support Files/Pods-FirebaseUI-demo-swiftTests/Pods-FirebaseUI-demo-swiftTests.debug.xcconfig"; sourceTree = ""; }; + A885F4D8D84B72ADACBE725B /* Pods-FirebaseUI-demo-swift.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FirebaseUI-demo-swift.release.xcconfig"; path = "Target Support Files/Pods-FirebaseUI-demo-swift/Pods-FirebaseUI-demo-swift.release.xcconfig"; sourceTree = ""; }; C302C1D51D91CC7B00ADBD41 /* FUIAuthViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FUIAuthViewController.swift; sourceTree = ""; }; C302C1D71D91CC7B00ADBD41 /* ChatCollectionViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatCollectionViewCell.swift; sourceTree = ""; }; C302C1D81D91CC7B00ADBD41 /* ChatViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatViewController.swift; sourceTree = ""; }; @@ -166,6 +173,7 @@ C39BC04F1DB812330060F6AF /* FUICustomPasswordVerificationViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FUICustomPasswordVerificationViewController.swift; sourceTree = ""; }; C39BC0501DB812330060F6AF /* FUICustomPasswordVerificationViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = FUICustomPasswordVerificationViewController.xib; sourceTree = ""; }; C3F23ECC1D80F3300020509F /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; + DB206ACE5B8C8DC3A2E47E00 /* Pods-FirebaseUI-demo-swift.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FirebaseUI-demo-swift.debug.xcconfig"; path = "Target Support Files/Pods-FirebaseUI-demo-swift/Pods-FirebaseUI-demo-swift.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -173,6 +181,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 4617B75BF5701E48387F35F6 /* Pods_FirebaseUI_demo_swift.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -180,6 +189,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 6096FEF87E5B53C0792BC146 /* Pods_FirebaseUI_demo_swiftTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -202,6 +212,7 @@ 8DABC99C1D3D82D600453807 /* FirebaseUI-demo-swiftTests */, 8DABC9861D3D82D600453807 /* Products */, 9C43BF8CA810E7C909775084 /* Pods */, + C129AF2D5B3F8906D7A96042 /* Frameworks */, ); sourceTree = ""; }; @@ -240,10 +251,23 @@ 9C43BF8CA810E7C909775084 /* Pods */ = { isa = PBXGroup; children = ( + DB206ACE5B8C8DC3A2E47E00 /* Pods-FirebaseUI-demo-swift.debug.xcconfig */, + A885F4D8D84B72ADACBE725B /* Pods-FirebaseUI-demo-swift.release.xcconfig */, + 8E009A2D4461F77B9CEB0C4D /* Pods-FirebaseUI-demo-swiftTests.debug.xcconfig */, + 6F5993EFB11CBA0003C0DE94 /* Pods-FirebaseUI-demo-swiftTests.release.xcconfig */, ); path = Pods; sourceTree = ""; }; + C129AF2D5B3F8906D7A96042 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 25F197CFBB06559F4B537E37 /* Pods_FirebaseUI_demo_swift.framework */, + 637019691D9C301621749DE1 /* Pods_FirebaseUI_demo_swiftTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; C302C1D31D91CC7B00ADBD41 /* Samples */ = { isa = PBXGroup; children = ( @@ -305,9 +329,11 @@ isa = PBXNativeTarget; buildConfigurationList = 8DABC9A21D3D82D600453807 /* Build configuration list for PBXNativeTarget "FirebaseUI-demo-swift" */; buildPhases = ( + 3D86CE81C1F8711347A14B72 /* [CP] Check Pods Manifest.lock */, 8DABC9811D3D82D600453807 /* Sources */, 8DABC9821D3D82D600453807 /* Frameworks */, 8DABC9831D3D82D600453807 /* Resources */, + 04D211F7D3B42A6D19A9E000 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -322,6 +348,7 @@ isa = PBXNativeTarget; buildConfigurationList = 8DABC9A51D3D82D600453807 /* Build configuration list for PBXNativeTarget "FirebaseUI-demo-swiftTests" */; buildPhases = ( + 94F892B9CDD1C2428D7F724B /* [CP] Check Pods Manifest.lock */, 8DABC9951D3D82D600453807 /* Sources */, 8DABC9961D3D82D600453807 /* Frameworks */, 8DABC9971D3D82D600453807 /* Resources */, @@ -348,7 +375,6 @@ TargetAttributes = { 8DABC9841D3D82D600453807 = { CreatedOnToolsVersion = 7.3.1; - DevelopmentTeam = YYX2P3XVJ7; LastSwiftMigration = 1020; SystemCapabilities = { com.apple.BackgroundModes = { @@ -497,6 +523,149 @@ }; /* End PBXResourcesBuildPhase section */ +/* Begin PBXShellScriptBuildPhase section */ + 04D211F7D3B42A6D19A9E000 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-FirebaseUI-demo-swift/Pods-FirebaseUI-demo-swift-frameworks.sh", + "${BUILT_PRODUCTS_DIR}/AppAuth/AppAuth.framework", + "${BUILT_PRODUCTS_DIR}/AppCheckCore/AppCheckCore.framework", + "${BUILT_PRODUCTS_DIR}/BoringSSL-GRPC/openssl_grpc.framework", + "${BUILT_PRODUCTS_DIR}/FirebaseAnonymousAuthUI/FirebaseAnonymousAuthUI.framework", + "${BUILT_PRODUCTS_DIR}/FirebaseAppCheckInterop/FirebaseAppCheckInterop.framework", + "${BUILT_PRODUCTS_DIR}/FirebaseAuth/FirebaseAuth.framework", + "${BUILT_PRODUCTS_DIR}/FirebaseAuthInterop/FirebaseAuthInterop.framework", + "${BUILT_PRODUCTS_DIR}/FirebaseAuthUI/FirebaseAuthUI.framework", + "${BUILT_PRODUCTS_DIR}/FirebaseCore/FirebaseCore.framework", + "${BUILT_PRODUCTS_DIR}/FirebaseCoreExtension/FirebaseCoreExtension.framework", + "${BUILT_PRODUCTS_DIR}/FirebaseCoreInternal/FirebaseCoreInternal.framework", + "${BUILT_PRODUCTS_DIR}/FirebaseDatabase/FirebaseDatabase.framework", + "${BUILT_PRODUCTS_DIR}/FirebaseDatabaseUI/FirebaseDatabaseUI.framework", + "${BUILT_PRODUCTS_DIR}/FirebaseEmailAuthUI/FirebaseEmailAuthUI.framework", + "${BUILT_PRODUCTS_DIR}/FirebaseFacebookAuthUI/FirebaseFacebookAuthUI.framework", + "${BUILT_PRODUCTS_DIR}/FirebaseFirestore/FirebaseFirestore.framework", + "${BUILT_PRODUCTS_DIR}/FirebaseFirestoreInternal/FirebaseFirestoreInternal.framework", + "${BUILT_PRODUCTS_DIR}/FirebaseFirestoreUI/FirebaseFirestoreUI.framework", + "${BUILT_PRODUCTS_DIR}/FirebaseGoogleAuthUI/FirebaseGoogleAuthUI.framework", + "${BUILT_PRODUCTS_DIR}/FirebaseOAuthUI/FirebaseOAuthUI.framework", + "${BUILT_PRODUCTS_DIR}/FirebasePhoneAuthUI/FirebasePhoneAuthUI.framework", + "${BUILT_PRODUCTS_DIR}/FirebaseSharedSwift/FirebaseSharedSwift.framework", + "${BUILT_PRODUCTS_DIR}/FirebaseStorage/FirebaseStorage.framework", + "${BUILT_PRODUCTS_DIR}/FirebaseStorageUI/FirebaseStorageUI.framework", + "${BUILT_PRODUCTS_DIR}/GTMAppAuth/GTMAppAuth.framework", + "${BUILT_PRODUCTS_DIR}/GTMSessionFetcher/GTMSessionFetcher.framework", + "${BUILT_PRODUCTS_DIR}/GoogleSignIn/GoogleSignIn.framework", + "${BUILT_PRODUCTS_DIR}/GoogleUtilities/GoogleUtilities.framework", + "${BUILT_PRODUCTS_DIR}/PromisesObjC/FBLPromises.framework", + "${BUILT_PRODUCTS_DIR}/RecaptchaInterop/RecaptchaInterop.framework", + "${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework", + "${BUILT_PRODUCTS_DIR}/abseil/absl.framework", + "${BUILT_PRODUCTS_DIR}/gRPC-C++/grpcpp.framework", + "${BUILT_PRODUCTS_DIR}/gRPC-Core/grpc.framework", + "${BUILT_PRODUCTS_DIR}/leveldb-library/leveldb.framework", + "${BUILT_PRODUCTS_DIR}/nanopb/nanopb.framework", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/FBAEMKit/FBAEMKit.framework/FBAEMKit", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/FBSDKCoreKit/FBSDKCoreKit.framework/FBSDKCoreKit", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/FBSDKCoreKit_Basics/FBSDKCoreKit_Basics.framework/FBSDKCoreKit_Basics", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/FBSDKLoginKit/FBSDKLoginKit.framework/FBSDKLoginKit", + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AppAuth.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AppCheckCore.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/openssl_grpc.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseAnonymousAuthUI.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseAppCheckInterop.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseAuth.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseAuthInterop.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseAuthUI.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCore.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCoreExtension.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCoreInternal.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseDatabase.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseDatabaseUI.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseEmailAuthUI.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseFacebookAuthUI.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseFirestore.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseFirestoreInternal.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseFirestoreUI.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseGoogleAuthUI.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseOAuthUI.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebasePhoneAuthUI.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseSharedSwift.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseStorage.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseStorageUI.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GTMAppAuth.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GTMSessionFetcher.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleSignIn.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleUtilities.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FBLPromises.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RecaptchaInterop.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/absl.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/grpcpp.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/grpc.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/leveldb.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/nanopb.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FBAEMKit.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FBSDKCoreKit.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FBSDKCoreKit_Basics.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FBSDKLoginKit.framework", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-FirebaseUI-demo-swift/Pods-FirebaseUI-demo-swift-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 3D86CE81C1F8711347A14B72 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-FirebaseUI-demo-swift-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 94F892B9CDD1C2428D7F724B /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-FirebaseUI-demo-swiftTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + /* Begin PBXSourcesBuildPhase section */ 8DABC9811D3D82D600453807 /* Sources */ = { isa = PBXSourcesBuildPhase; @@ -748,12 +917,13 @@ }; 8DABC9A31D3D82D600453807 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = DB206ACE5B8C8DC3A2E47E00 /* Pods-FirebaseUI-demo-swift.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; BITCODE_GENERATION_MODE = ""; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = "FirebaseUI-demo-swift/FirebaseUI-demo-swift.entitlements"; - DEVELOPMENT_TEAM = YYX2P3XVJ7; + DEVELOPMENT_TEAM = ""; HEADER_SEARCH_PATHS = ( "$(inherited)", "${PODS_ROOT}/Firebase/Core/Sources", @@ -792,7 +962,7 @@ BITCODE_GENERATION_MODE = ""; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = "FirebaseUI-demo-swift/FirebaseUI-demo-swift.entitlements"; - DEVELOPMENT_TEAM = YYX2P3XVJ7; + DEVELOPMENT_TEAM = ""; HEADER_SEARCH_PATHS = ( "$(inherited)", "${PODS_ROOT}/Firebase/Core/Sources", diff --git a/samples/swift/FirebaseUI-demo-swift/FUIAppDelegate.swift b/samples/swift/FirebaseUI-demo-swift/FUIAppDelegate.swift index a818e86596d..c254ad0d6d0 100644 --- a/samples/swift/FirebaseUI-demo-swift/FUIAppDelegate.swift +++ b/samples/swift/FirebaseUI-demo-swift/FUIAppDelegate.swift @@ -15,11 +15,7 @@ // import UIKit -import FBSDKCoreKit import FirebaseCore -import FirebaseAuth -import FirebaseAuthUI -import GTMSessionFetcher @main class AppDelegate: UIResponder, UIApplicationDelegate { @@ -30,41 +26,8 @@ class AppDelegate: UIResponder, UIApplicationDelegate { // Successfully running this sample requires an app in Firebase and an // accompanying valid GoogleService-Info.plist file. FirebaseApp.configure() - GTMSessionFetcher.setLoggingEnabled(true) - ApplicationDelegate.shared.application( - application, - didFinishLaunchingWithOptions: launchOptions - ) return true } - - @available(iOS 9.0, *) - func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any]) -> Bool { - ApplicationDelegate.shared.application( - app, - open: url, - sourceApplication: options[UIApplication.OpenURLOptionsKey.sourceApplication] as? String, - annotation: options[UIApplication.OpenURLOptionsKey.annotation] - ) - let sourceApplication = options[UIApplication.OpenURLOptionsKey.sourceApplication] as! String? - return self.handleOpenUrl(url, sourceApplication: sourceApplication) - } - - @available(iOS 8.0, *) - func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool { - return self.handleOpenUrl(url, sourceApplication: sourceApplication) - } - - - func handleOpenUrl(_ url: URL, sourceApplication: String?) -> Bool { - // [START handle_open_url] - if FUIAuth.defaultAuthUI()?.handleOpen(url, sourceApplication: sourceApplication) ?? false { - return true - } - // other URL handling goes here. - return false - // [END handle_open_url] - } } diff --git a/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FUIAuthViewController.swift b/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FUIAuthViewController.swift deleted file mode 100644 index 6c580a3bf02..00000000000 --- a/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FUIAuthViewController.swift +++ /dev/null @@ -1,344 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import UIKit -import FirebaseAuth -import FirebaseEmailAuthUI -import FirebaseFacebookAuthUI -import FirebaseAnonymousAuthUI -import FirebasePhoneAuthUI -import FirebaseOAuthUI -import FirebaseGoogleAuthUI - -let kFirebaseTermsOfService = URL(string: "https://firebase.google.com/terms/")! -let kFirebasePrivacyPolicy = URL(string: "https://firebase.google.com/support/privacy/")! - -enum UISections: Int, RawRepresentable { - case Settings = 0 - case Providers - case AnonymousSignIn - case Name - case Email - case UID - case Phone - case AccessToken - case IDToken -} - -enum Providers: Int, RawRepresentable { - case Email = 0 - case Google - case Facebook - case Twitter - case Apple - case Phone -} - - - -/// A view controller displaying a basic sign-in flow using FUIAuth. -class FUIAuthViewController: UITableViewController { - // Before running this sample, make sure you've correctly configured - // the appropriate authentication methods in Firebase console. For more - // info, see the Auth README at ../../FirebaseAuthUI/README.md - // and https://firebase.google.com/docs/auth/ - - fileprivate var authStateDidChangeHandle: AuthStateDidChangeListenerHandle? - - fileprivate(set) var auth: Auth? = Auth.auth() - fileprivate(set) var authUI: FUIAuth? = FUIAuth.defaultAuthUI() - fileprivate(set) var customAuthUIDelegate: FUIAuthDelegate = FUICustomAuthDelegate() - - @IBOutlet weak var cellSignedIn: UITableViewCell! - @IBOutlet weak var cellName: UITableViewCell! - @IBOutlet weak var cellEmail: UITableViewCell! - @IBOutlet weak var cellUid: UITableViewCell! - @IBOutlet weak var cellPhone: UITableViewCell! - @IBOutlet weak var cellAccessToken: UITableViewCell! - @IBOutlet weak var cellIdToken: UITableViewCell! - @IBOutlet weak var cellAnonymousSignIn: UITableViewCell! - - @IBOutlet weak var authorizationButton: UIBarButtonItem! - @IBOutlet weak var customAuthorizationSwitch: UISwitch! - @IBOutlet weak var customScopesSwitch: UISwitch! - @IBOutlet weak var facebookSwitch: UISwitch! - - - override func viewDidLoad() { - super.viewDidLoad() - - self.authUI?.tosurl = kFirebaseTermsOfService - self.authUI?.privacyPolicyURL = kFirebasePrivacyPolicy - - self.tableView.selectRow(at: IndexPath(row: Providers.Email.rawValue, section: UISections.Providers.rawValue), - animated: false, - scrollPosition: .none) - self.tableView.selectRow(at: IndexPath(row: Providers.Google.rawValue, section: UISections.Providers.rawValue), - animated: false, - scrollPosition: .none) - self.tableView.selectRow(at: IndexPath(row: Providers.Facebook.rawValue, section: UISections.Providers.rawValue), - animated: false, - scrollPosition: .none) - self.tableView.selectRow(at: IndexPath(row: Providers.Twitter.rawValue, section: UISections.Providers.rawValue), - animated: false, - scrollPosition: .none) - self.tableView.selectRow(at: IndexPath(row: Providers.Apple.rawValue, section: UISections.Providers.rawValue), - animated: false, - scrollPosition: .none) - self.tableView.selectRow(at: IndexPath(row: Providers.Phone.rawValue, section: UISections.Providers.rawValue), - animated: false, - scrollPosition: .none) - - } - - override func viewWillAppear(_ animated: Bool) { - super.viewWillAppear(animated) - - self.tableView.rowHeight = UITableView.automaticDimension; - self.tableView.estimatedRowHeight = 240; - - self.authStateDidChangeHandle = - self.auth?.addStateDidChangeListener(self.updateUI(auth:user:)) - - self.navigationController?.isToolbarHidden = false; - } - - override func viewWillDisappear(_ animated: Bool) { - super.viewWillDisappear(animated) - if let handle = self.authStateDidChangeHandle { - self.auth?.removeStateDidChangeListener(handle) - } - - self.navigationController?.isToolbarHidden = true; - } - - override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { - return UITableView.automaticDimension - } - - override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { - if (indexPath.section == UISections.AnonymousSignIn.rawValue && indexPath.row == 0) { - if (auth?.currentUser?.isAnonymous ?? false) { - tableView.deselectRow(at: indexPath, animated: false) - return; - } - do { - try self.authUI?.signOut() - } catch let error { - self.ifNoError(error) {} - } - - auth?.signInAnonymously() { authReuslt, error in - self.ifNoError(error) { - self.showAlert(title: "Signed In Anonymously") - } - } - tableView.deselectRow(at: indexPath, animated: false) - } - } - - fileprivate func showAlert(title: String, message: String? = "") { - if #available(iOS 8.0, *) { - let alertController = - UIAlertController(title: title, message: message, preferredStyle: .alert) - alertController.addAction(UIAlertAction(title: "OK", - style: .default, - handler: { (UIAlertAction) in - alertController.dismiss(animated: true, completion: nil) - })) - self.present(alertController, animated: true, completion: nil) - } else { - UIAlertView(title: title, - message: message ?? "", - delegate: nil, - cancelButtonTitle: nil, - otherButtonTitles: "OK").show() - } - } - - private func ifNoError(_ error: Error?, execute: () -> Void) { - guard error == nil else { - showAlert(title: "Error", message: error!.localizedDescription) - return - } - execute() - } - - @IBAction func onAuthorize(_ sender: AnyObject) { - if (self.auth?.currentUser) != nil { - if (auth?.currentUser?.isAnonymous != false) { - auth?.currentUser?.delete() { error in - self.ifNoError(error) { - self.showAlert(title: "", message:"The user was properly deleted.") - } - } - } else { - do { - try self.authUI?.signOut() - } catch let error { - self.ifNoError(error) { - self.showAlert(title: "Error", message:"The user was properly signed out.") - } - } - } - } else { - self.authUI?.delegate = self.customAuthorizationSwitch.isOn ? self.customAuthUIDelegate : nil; - - // If you haven't set up your authentications correctly these buttons - // will still appear in the UI, but they'll crash the app when tapped. - self.authUI?.providers = self.getListOfIDPs() - - let providerID = self.authUI?.providers.first?.providerID; - let isPhoneAuth = providerID == PhoneAuthProviderID; - let isEmailAuth = providerID == EmailAuthProviderID; - let shouldSkipAuthPicker = self.authUI?.providers.count == 1 && (isPhoneAuth || isEmailAuth); - if (shouldSkipAuthPicker) { - if (isPhoneAuth) { - let provider = self.authUI?.providers.first as! FUIPhoneAuth; - provider.signIn(withPresenting: self, phoneNumber: nil); - } else if (isEmailAuth) { - let provider = self.authUI?.providers.first as! FUIEmailAuth; - provider.signIn(withPresenting: self, email: nil); - } - } else { - let controller = self.authUI!.authViewController() - controller.navigationBar.isHidden = self.customAuthorizationSwitch.isOn - self.present(controller, animated: true, completion: nil) - } - } - } - - // Boilerplate - func updateUI(auth: Auth, user: User?) { - if let user = self.auth?.currentUser { - self.cellSignedIn.textLabel?.text = "Signed in" - self.cellName.textLabel?.text = user.displayName ?? "(null)" - self.cellEmail.textLabel?.text = user.email ?? "(null)" - self.cellUid.textLabel?.text = user.uid - self.cellPhone.textLabel?.text = user.phoneNumber - - if (auth.currentUser?.isAnonymous != false) { - self.authorizationButton.title = "Delete Anonymous User"; - } else { - self.authorizationButton.title = "Sign Out"; - } - } else { - self.cellSignedIn.textLabel?.text = "Not signed in" - self.cellName.textLabel?.text = "null" - self.cellEmail.textLabel?.text = "null" - self.cellUid.textLabel?.text = "null" - self.cellPhone.textLabel?.text = "null" - - self.authorizationButton.title = "Sign In"; - } - - self.cellAccessToken.textLabel?.text = getAllAccessTokens() - self.cellIdToken.textLabel?.text = getAllIdTokens() - - let selectedRows = self.tableView.indexPathsForSelectedRows - self.tableView.reloadData() - if let rows = selectedRows { - for path in rows { - self.tableView.selectRow(at: path, animated: false, scrollPosition: .none) - } - } - } - - func getAllAccessTokens() -> String { - var result = "" - for provider in self.authUI!.providers { - result += (provider.shortName + ": " + (provider.accessToken ?? "null") + "\n") - } - - return result - } - - func getAllIdTokens() -> String { - var result = "" - for provider in self.authUI!.providers { - result += (provider.shortName + ": " + (provider.idToken! ?? "null") + "\n") - } - - return result - } - - func getListOfIDPs() -> [FUIAuthProvider] { - var providers = [FUIAuthProvider]() - if let selectedRows = self.tableView.indexPathsForSelectedRows { - for indexPath in selectedRows { - if indexPath.section == UISections.Providers.rawValue { - let provider:FUIAuthProvider? - - switch indexPath.row { - case Providers.Email.rawValue: - provider = FUIEmailAuth() - case Providers.Google.rawValue: - provider = self.customScopesSwitch.isOn ? FUIGoogleAuth(authUI: self.authUI!, - scopes: [kGoogleGamesScope, - kGooglePlusMeScope, - kGoogleUserInfoEmailScope, - kGoogleUserInfoProfileScope]) - : FUIGoogleAuth(authUI: self.authUI!) - case Providers.Twitter.rawValue: - let buttonColor = - UIColor(red: 71.0/255.0, green: 154.0/255.0, blue: 234.0/255.0, alpha: 1.0) - guard let iconPath = Bundle.main.path(forResource: "twtrsymbol", ofType: "png") else { - NSLog("Warning: Unable to find Twitter icon") - continue - } - provider = FUIOAuth(authUI: self.authUI!, - providerID: "twitter.com", - buttonLabelText: "Sign in with Twitter", - shortName: "Twitter", - buttonColor: buttonColor, - iconImage: UIImage(contentsOfFile: iconPath)!, - scopes: ["user.readwrite"], - customParameters: ["prompt" : "consent"], - loginHintKey: nil) - case Providers.Facebook.rawValue: - provider = self.customScopesSwitch.isOn ? FUIFacebookAuth(authUI: self.authUI!, - permissions: ["email", - "user_friends", - "ads_read"]) - : FUIFacebookAuth(authUI: self.authUI!) - let facebookProvider = provider as! FUIFacebookAuth - facebookProvider.useLimitedLogin = self.facebookSwitch.isOn - case Providers.Apple.rawValue: - if #available(iOS 13.0, *) { - provider = FUIOAuth.appleAuthProvider() - } else { - provider = nil - } - case Providers.Phone.rawValue: - let phoneAuth = FUIPhoneAuth(authUI: self.authUI!) - phoneAuth.defaultCountryCode = "JP" - provider = phoneAuth - default: provider = nil - } - - guard provider != nil else { - continue - } - - providers.append(provider!) - } - } - } - - return providers - } - -} diff --git a/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FUICustomAuthPickerViewController.swift b/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FUICustomAuthPickerViewController.swift deleted file mode 100644 index 76bb0f1d65b..00000000000 --- a/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FUICustomAuthPickerViewController.swift +++ /dev/null @@ -1,26 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import UIKit -import FirebaseAuthUI - -class FUICustomAuthPickerViewController: FUIAuthPickerViewController { - - @IBAction func onClose(_ sender: AnyObject) { - self.cancelAuthorization() - } - -} diff --git a/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FUICustomAuthPickerViewController.xib b/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FUICustomAuthPickerViewController.xib deleted file mode 100644 index 331a8ad8049..00000000000 --- a/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FUICustomAuthPickerViewController.xib +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FUICustomAuthUIDelegate.swift b/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FUICustomAuthUIDelegate.swift deleted file mode 100644 index a7cda803e70..00000000000 --- a/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FUICustomAuthUIDelegate.swift +++ /dev/null @@ -1,77 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import UIKit -import FirebaseAuth -import FirebaseEmailAuthUI - -class FUICustomAuthDelegate: NSObject, @preconcurrency FUIAuthDelegate { - - @objc func authUI(_ authUI: FUIAuth, didSignInWith authDataResult: AuthDataResult?, error: Error?) { - switch error { - case .some(let error as NSError) where UInt(error.code) == FUIAuthErrorCode.userCancelledSignIn.rawValue: - print("User cancelled sign-in") - case .some(let error as NSError) where error.userInfo[NSUnderlyingErrorKey] != nil: - print("Login error: \(error.userInfo[NSUnderlyingErrorKey]!)") - case .some(let error): - print("Login error: \(error.localizedDescription)") - case .none: - return - } - } - - @MainActor func authPickerViewController(forAuthUI authUI: FUIAuth) -> FUIAuthPickerViewController { - return FUICustomAuthPickerViewController(nibName: "FUICustomAuthPickerViewController", - bundle: Bundle.main, - authUI: authUI) - } - - @MainActor func emailEntryViewController(forAuthUI authUI: FUIAuth) -> FUIEmailEntryViewController { - return FUICustomEmailEntryViewController(nibName: "FUICustomEmailEntryViewController", - bundle: Bundle.main, - authUI: authUI) - } - - @MainActor func passwordRecoveryViewController(forAuthUI authUI: FUIAuth, email: String?) -> FUIPasswordRecoveryViewController { - return FUICustomPasswordRecoveryViewController(nibName: "FUICustomPasswordRecoveryViewController", - bundle: Bundle.main, - authUI: authUI, - email: email) - } - - @MainActor func passwordSignInViewController(forAuthUI authUI: FUIAuth, email: String?) -> FUIPasswordSignInViewController { - return FUICustomPasswordSignInViewController(nibName: "FUICustomPasswordSignInViewController", - bundle: Bundle.main, - authUI: authUI, - email: email) - } - - @MainActor func passwordSignUpViewController(forAuthUI authUI: FUIAuth, email: String) -> FUIPasswordSignUpViewController { - return FUICustomPasswordSignUpViewController(nibName: "FUICustomPasswordSignUpViewController", - bundle: Bundle.main, - authUI: authUI, - email: email, - requireDisplayName: true) - } - - @MainActor func passwordVerificationViewController(forAuthUI authUI: FUIAuth, email: String?, newCredential: AuthCredential) -> FUIPasswordVerificationViewController { - return FUICustomPasswordVerificationViewController(nibName: "FUICustomPasswordVerificationViewController", - bundle: Bundle.main, - authUI: authUI, - email: email, - newCredential: newCredential) - } -} diff --git a/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FUICustomEmailEntryViewController.swift b/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FUICustomEmailEntryViewController.swift deleted file mode 100644 index 35a0a44c6af..00000000000 --- a/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FUICustomEmailEntryViewController.swift +++ /dev/null @@ -1,72 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import UIKit -import FirebaseEmailAuthUI - -class FUICustomEmailEntryViewController: FUIEmailEntryViewController, UITextFieldDelegate { - @IBOutlet weak var emailTextField: UITextField! - @IBOutlet weak var nextButton: UIBarButtonItem! - - override func viewDidLoad() { - super.viewDidLoad() - - //override action of default 'Next' button to use custom layout elements' - self.navigationItem.rightBarButtonItem?.target = self - self.navigationItem.rightBarButtonItem?.action = #selector(onNextButton(_:)) - } - - override func viewWillAppear(_ animated: Bool) { - super.viewWillAppear(animated) - - //update state of all UI elements (e g disable 'Next' buttons) - self.updateEmailValue(emailTextField) - } - - @IBAction func onBack(_ sender: AnyObject) { - self.onBack() - } - @IBAction func onNextButton(_ sender: AnyObject) { - if let email = emailTextField.text { - self.onNext(email) - } - } - @IBAction func onCancel(_ sender: AnyObject) { - self.cancelAuthorization() - } - - @IBAction func onViewSelected(_ sender: AnyObject) { - emailTextField.resignFirstResponder() - } - - @IBAction func updateEmailValue(_ sender: UITextField) { - if emailTextField == sender, let email = emailTextField.text { - nextButton.isEnabled = !email.isEmpty - self.didChangeEmail(email) - } - } - -// MARK: - UITextFieldDelegate methods - - func textFieldShouldReturn(_ textField: UITextField) -> Bool { - if textField == emailTextField, let email = textField.text { - self.onNext(email) - } - - return false - } - -} diff --git a/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FUICustomEmailEntryViewController.xib b/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FUICustomEmailEntryViewController.xib deleted file mode 100644 index fc3eefe2079..00000000000 --- a/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FUICustomEmailEntryViewController.xib +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FUICustomPasswordRecoveryViewController.swift b/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FUICustomPasswordRecoveryViewController.swift deleted file mode 100644 index ac0c0285e0e..00000000000 --- a/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FUICustomPasswordRecoveryViewController.swift +++ /dev/null @@ -1,82 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import UIKit -import FirebaseEmailAuthUI - -class FUICustomPasswordRecoveryViewController: FUIPasswordRecoveryViewController, UITextFieldDelegate { - @IBOutlet weak var emailTextField: UITextField! - @IBOutlet weak var recoverButton: UIBarButtonItem! - - override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?, authUI: FUIAuth, email: String?) { - super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil, authUI: authUI, email: email) - - emailTextField.text = email - } - - required init?(coder aDecoder: NSCoder) { - super.init(coder: aDecoder) - } - - override func viewDidLoad() { - super.viewDidLoad() - - //override action of default 'Next' button to use custom layout elements' - self.navigationItem.rightBarButtonItem?.target = self - self.navigationItem.rightBarButtonItem?.action = #selector(onRecover(_:)) - } - - override func viewWillAppear(_ animated: Bool) { - super.viewWillAppear(animated) - - //update state of all UI elements (e g disable 'Next' buttons) - self.updateEmailValue(emailTextField) - } - - @IBAction func onBack(_ sender: AnyObject) { - self.onBack() - } - - @IBAction func onRecover(_ sender: AnyObject) { - if let email = emailTextField.text { - self.recoverEmail(email) - } - } - @IBAction func onCancel(_ sender: AnyObject) { - self.cancelAuthorization() - } - - @IBAction func updateEmailValue(_ sender: UITextField) { - if emailTextField == sender, let email = emailTextField.text { - recoverButton.isEnabled = !email.isEmpty - self.didChangeEmail(email) - } - } - - @IBAction func onViewSelected(_ sender: AnyObject) { - emailTextField.resignFirstResponder() - } - - // MARK: - UITextFieldDelegate methods - - func textFieldShouldReturn(_ textField: UITextField) -> Bool { - if textField == emailTextField, let email = textField.text { - self.recoverEmail(email) - } - - return false - } -} diff --git a/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FUICustomPasswordRecoveryViewController.xib b/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FUICustomPasswordRecoveryViewController.xib deleted file mode 100644 index 4d4bfaf80ef..00000000000 --- a/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FUICustomPasswordRecoveryViewController.xib +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FUICustomPasswordSignInViewController.swift b/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FUICustomPasswordSignInViewController.swift deleted file mode 100644 index c92ffb9492b..00000000000 --- a/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FUICustomPasswordSignInViewController.swift +++ /dev/null @@ -1,93 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import UIKit -import FirebaseEmailAuthUI - -class FUICustomPasswordSignInViewController: FUIPasswordSignInViewController { - @IBOutlet weak var emailTextField: UITextField! - @IBOutlet weak var passwordTextField: UITextField! - @IBOutlet weak var nextButton: UIBarButtonItem! - - override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?, authUI: FUIAuth, email: String?) { - super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil, authUI: authUI, email: email) - - emailTextField.text = email - } - - required init?(coder aDecoder: NSCoder) { - super.init(coder: aDecoder) - } - - override func viewDidLoad() { - super.viewDidLoad() - - //override action of default 'Next' button to use custom layout elements' - self.navigationItem.rightBarButtonItem?.target = self - self.navigationItem.rightBarButtonItem?.action = #selector(onNext(_:)) - } - - override func viewWillAppear(_ animated: Bool) { - super.viewWillAppear(animated) - - //update state of all UI elements (e g disable 'Next' buttons) - self.updateTextFieldValue(nil) - } - - @IBAction func onForgotPassword(_ sender: AnyObject) { - if let email = emailTextField.text { - self.forgotPassword(forEmail: email) - } - } - - @IBAction func onNext(_ sender: AnyObject?) { - if let email = emailTextField.text, let password = passwordTextField.text { - self.signIn(withDefaultValue: email, andPassword: password) - } - } - - @IBAction func onCancel(_ sender: AnyObject) { - self.cancelAuthorization() - } - - @IBAction func onBack(_ sender: AnyObject) { - self.onBack() - } - - @IBAction func onViewSelected(_ sender: AnyObject) { - emailTextField.resignFirstResponder() - passwordTextField.resignFirstResponder() - } - - @IBAction func updateTextFieldValue(_ sender: AnyObject?) { - if let email = emailTextField.text, let password = passwordTextField.text { - nextButton.isEnabled = !email.isEmpty && !password.isEmpty - self.didChangeEmail(email, andPassword: password) - } - } - - // MARK: - UITextFieldDelegate methods - - func textFieldShouldReturn(_ textField: UITextField) -> Bool { - if textField == emailTextField { - passwordTextField.becomeFirstResponder() - } else if textField == passwordTextField { - self.onNext(nil) - } - - return false - } -} diff --git a/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FUICustomPasswordSignInViewController.xib b/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FUICustomPasswordSignInViewController.xib deleted file mode 100644 index 15bb98044dd..00000000000 --- a/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FUICustomPasswordSignInViewController.xib +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FUICustomPasswordSignUpViewController.swift b/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FUICustomPasswordSignUpViewController.swift deleted file mode 100644 index cf8487342d4..00000000000 --- a/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FUICustomPasswordSignUpViewController.swift +++ /dev/null @@ -1,101 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import UIKit -import FirebaseEmailAuthUI - -class FUICustomPasswordSignUpViewController: FUIPasswordSignUpViewController, UITextFieldDelegate { - - @IBOutlet weak var emailTextField: UITextField! - @IBOutlet weak var usernameTextField: UITextField! - @IBOutlet weak var passwordTextField: UITextField! - @IBOutlet weak var nextButton: UIBarButtonItem! - - override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?, authUI: FUIAuth, email: String?, requireDisplayName: Bool) { - super.init(nibName: nibNameOrNil, - bundle: nibBundleOrNil, - authUI: authUI, - email: email, - requireDisplayName: requireDisplayName) - - emailTextField.text = email - } - - required init?(coder aDecoder: NSCoder) { - super.init(coder: aDecoder) - } - - override func viewDidLoad() { - super.viewDidLoad() - - //override action of default 'Next' button to use custom layout elements' - self.navigationItem.rightBarButtonItem?.target = self - self.navigationItem.rightBarButtonItem?.action = #selector(onNext(_:)) - } - - override func viewWillAppear(_ animated: Bool) { - super.viewWillAppear(animated) - - //update state of all UI elements (e g disable 'Next' buttons) - self.updateTextFieldValue(nil) - } - - @IBAction func onNext(_ sender: AnyObject?) { - if let email = emailTextField.text, - let password = passwordTextField.text, - let username = usernameTextField.text { - self.signUp(withEmail: email, andPassword: password, andUsername: username) - } - } - - @IBAction func onCancel(_ sender: AnyObject) { - self.cancelAuthorization() - } - - @IBAction func onBack(_ sender: AnyObject) { - self.onBack() - } - @IBAction func onViewSelected(_ sender: AnyObject) { - emailTextField.resignFirstResponder() - passwordTextField.resignFirstResponder() - usernameTextField.resignFirstResponder() - } - - // MARK: - UITextFieldDelegate methods - - @IBAction func updateTextFieldValue(_ sender: AnyObject?) { - if let email = emailTextField.text, - let password = passwordTextField.text, - let username = usernameTextField.text { - - nextButton.isEnabled = !email.isEmpty && !password.isEmpty && !username.isEmpty - self.didChangeEmail(email, orPassword: password, orUserName: username) - } - } - - func textFieldShouldReturn(_ textField: UITextField) -> Bool { - if textField == emailTextField { - usernameTextField.becomeFirstResponder() - } else if textField == usernameTextField { - passwordTextField.becomeFirstResponder() - } else if textField == passwordTextField { - self.onNext(nil) - } - - return false - } - -} diff --git a/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FUICustomPasswordSignUpViewController.xib b/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FUICustomPasswordSignUpViewController.xib deleted file mode 100644 index 91eb1e08c1d..00000000000 --- a/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FUICustomPasswordSignUpViewController.xib +++ /dev/null @@ -1,151 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FUICustomPasswordVerificationViewController.swift b/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FUICustomPasswordVerificationViewController.swift deleted file mode 100644 index ec4555fd6b7..00000000000 --- a/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FUICustomPasswordVerificationViewController.swift +++ /dev/null @@ -1,93 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import UIKit -import FirebaseAuth -import FirebaseEmailAuthUI - -class FUICustomPasswordVerificationViewController: FUIPasswordVerificationViewController, UITextFieldDelegate { - fileprivate(set) var userEmail: String - - @IBOutlet weak var infoLabel: UILabel! - @IBOutlet weak var passwordTextField: UITextField! - @IBOutlet weak var nextButton: UIBarButtonItem! - - override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?, authUI: FUIAuth, email: String?, newCredential: AuthCredential) { - userEmail = email ?? "" - super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil, authUI: authUI, email: email, newCredential: newCredential) - - infoLabel.text = "You’ve already used \(userEmail). Enter your password for that account to sign in." - } - - required init?(coder aDecoder: NSCoder) { - userEmail = "" - super.init(coder: aDecoder) - } - - override func viewDidLoad() { - super.viewDidLoad() - - //override action of default 'Next' button to use custom layout elements' - self.navigationItem.rightBarButtonItem?.target = self - self.navigationItem.rightBarButtonItem?.action = #selector(onNext(_:)) - } - - override func viewWillAppear(_ animated: Bool) { - super.viewWillAppear(animated) - - //update state of all UI elements (e g disable 'Next' buttons) - self.updateTextFieldValue(nil) - } - - @IBAction func onForgotPassword(_ sender: AnyObject) { - self.forgotPassword() - } - - @IBAction func onNext(_ sender: AnyObject?) { - if let password = passwordTextField.text { - self.verifyPassword(password) - } - } - - @IBAction func onCancel(_ sender: AnyObject) { - self.cancelAuthorization() - } - - @IBAction func onBack(_ sender: AnyObject) { - self.onBack() - } - - @IBAction func onViewSelected(_ sender: AnyObject) { - passwordTextField.resignFirstResponder() - } - - // MARK: - UITextFieldDelegate methods - - @IBAction func updateTextFieldValue(_ sender: AnyObject?) { - if let password = passwordTextField.text { - nextButton.isEnabled = !password.isEmpty - self.didChangePassword(password) - } - } - - func textFieldShouldReturn(_ textField: UITextField) -> Bool { - if textField == passwordTextField { - self.onNext(nil) - } - - return false - } -} diff --git a/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FUICustomPasswordVerificationViewController.xib b/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FUICustomPasswordVerificationViewController.xib deleted file mode 100644 index 57d54488de0..00000000000 --- a/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FUICustomPasswordVerificationViewController.xib +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/samples/swift/FirebaseUI-demo-swift/Samples/Sample.swift b/samples/swift/FirebaseUI-demo-swift/Samples/Sample.swift index 11072adacba..c920004d096 100644 --- a/samples/swift/FirebaseUI-demo-swift/Samples/Sample.swift +++ b/samples/swift/FirebaseUI-demo-swift/Samples/Sample.swift @@ -23,9 +23,8 @@ enum Sample: Int, RawRepresentable { // When adding new samples, add a new value here and fill // out the switch statements below as necessary. - case auth = 0 - case chat = 1 - case storage = 2 + case chat = 0 + case storage = 1 static var total: Int { var count = 0 @@ -42,11 +41,6 @@ enum Sample: Int, RawRepresentable { title: "Chat", subtitle: "Demonstrates using a FUICollectionViewDataSource to load data from Firebase Database into a UICollectionView for a basic chat app." ) - case .auth: - return ( - title: "Auth", - subtitle: "Demonstrates the FirebaseAuthUI flow with customization options." - ) case .storage: return ( title: "Storage", @@ -59,8 +53,6 @@ enum Sample: Int, RawRepresentable { switch self { case .chat: return UIStoryboard.instantiateViewController("Main", identifier: "ChatViewController") - case .auth: - return UIStoryboard.instantiateViewController("Main", identifier: "FUIAuthViewController") case .storage: return UIStoryboard.instantiateViewController("Main", identifier: "StorageViewController") } diff --git a/samples/swift/Podfile b/samples/swift/Podfile index 1e9e99f0a2d..d08714b8373 100644 --- a/samples/swift/Podfile +++ b/samples/swift/Podfile @@ -16,16 +16,11 @@ target 'FirebaseUI-demo-swift' do # pod 'FirebaseFirestoreInternal', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'main' pod 'FirebaseUI', :path => '../../' - pod 'FirebaseAuthUI', :path => '../../' pod 'FirebaseDatabaseUI', :path => '../../' pod 'FirebaseFirestoreUI', :path => '../../' - pod 'FirebaseOAuthUI', :path => '../../' - pod 'FirebasePhoneAuthUI', :path => '../../' - pod 'FirebaseAnonymousAuthUI', :path => '../../' - pod 'FirebaseEmailAuthUI', :path => '../../' - pod 'FirebaseFacebookAuthUI', :path => '../../' - pod 'FirebaseGoogleAuthUI', :path => '../../' pod 'FirebaseStorageUI', :path => '../../' + + pod 'Firebase/Auth' # For anonymous auth in Chat sample target 'FirebaseUI-demo-swiftTests' do inherit! :search_paths diff --git a/samples/swift/README.md b/samples/swift/README.md index 1fea1fc28aa..e417b460b77 100644 --- a/samples/swift/README.md +++ b/samples/swift/README.md @@ -1,39 +1,33 @@ -FirebaseUI Chat Demo in Swift +FirebaseUI Demo in Swift ============================= -This directory contains a collection of swift code samples. +This directory contains Swift code samples demonstrating FirebaseUI Database and Storage features. + +## Installation -In order to install and run: ``` bash git clone https://github.com/firebase/FirebaseUI-iOS.git cd FirebaseUI-iOS/samples/swift pod install open FirebaseUI-demo-swift.xcworkspace ``` -Once you've opened the workspace, go into `Supporting Files/Info.plist` and either fill in the social provider information currently commented out, or delete extra providers you're not interested in. For providers you choose to keep, enable them in your Firebase Dashboard according to the [user authentication docs](https://www.firebase.com/docs/ios/guide/user-auth.html). In `ViewController.m` make sure to only enable providers that you've configured properly. - -### Project configuration -Please follow steps described [here](https://github.com/firebase/FirebaseUI-iOS#mandatory-sample-project-configuration) in order to run the sample project. +## Project Configuration -### Chat Sample +1. Download `GoogleService-Info.plist` from [Firebase Console](https://console.firebase.google.com) +2. Copy it to `samples/swift/` directory +3. Configure your Firebase Database and Storage in the Firebase Console -This sample uses [anonymous authentication](https://firebase.google.com/docs/auth/ios/anonymous-auth), -so make sure anonymous auth is enabled in Firebase console. +## Samples -### Auth Sample +### Chat Sample -This sample uses [email/password](https://firebase.google.com/docs/auth/ios/password-auth), -[Google](https://firebase.google.com/docs/auth/ios/google-signin), -and [Facebook](https://firebase.google.com/docs/auth/ios/facebook-login) -auth, so make sure those are enabled in Firebase console. +This sample demonstrates real-time database functionality using `FUICollectionViewDataSource` to bind a Firebase query to a `UICollectionView`. The chat messages are stored in the Firebase Realtime Database and updated in real-time. -The auth example requires a little more setup (adding url schemes, etc) -since it depends on the various keys and tokens for the different auth -services your app will support. Take a look at the [Auth README](../../FirebaseAuthUI/README.md) -for more information. +Note: This sample uses [anonymous authentication](https://firebase.google.com/docs/auth/ios/anonymous-auth), so make sure anonymous auth is enabled in Firebase Console. ### Storage Sample -This sample does not use a logged-in user, so make to set up the [Storage Security Rules](https://firebase.google.com/docs/storage/security/start#sample-rules) -for your bucket to allow that. +This sample demonstrates Firebase Storage integration, showing how to upload and display images stored in Firebase Storage. + +Note: Make sure to set up the [Storage Security Rules](https://firebase.google.com/docs/storage/security/start#sample-rules) for your bucket. diff --git a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/UITestUtils.swift b/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/UITestUtils.swift deleted file mode 100644 index 2116c2f26a5..00000000000 --- a/samples/swiftui/FirebaseSwiftUIExample/FirebaseSwiftUIExample/UITestUtils.swift +++ /dev/null @@ -1,27 +0,0 @@ -// -// UITestUtils.swift -// FirebaseSwiftUIExample -// -// Created by Russell Wheatley on 16/05/2025. -// -import FirebaseAuth -import SwiftUI - -// UI Test Runner keys -public let uiAuthEmulator = CommandLine.arguments.contains("--auth-emulator") - -public var testEmail: String? { - guard let emailIndex = CommandLine.arguments.firstIndex(of: "--create-user"), - CommandLine.arguments.indices.contains(emailIndex + 1) - else { return nil } - return CommandLine.arguments[emailIndex + 1] -} - -func testCreateUser() async throws { - if let email = testEmail { - let password = "123456" - let auth = Auth.auth() - try await auth.createUser(withEmail: email, password: password) - try auth.signOut() - } -} diff --git a/samples/swiftui/FirebaseSwiftUISample/.gitignore b/samples/swiftui/FirebaseSwiftUISample/.gitignore new file mode 100644 index 00000000000..7c074c1f195 --- /dev/null +++ b/samples/swiftui/FirebaseSwiftUISample/.gitignore @@ -0,0 +1,110 @@ +# Xcode +# +# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore + +## User settings +xcuserdata/ + +## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9) +*.xcscmblueprint +*.xccheckout + +## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4) +build/ +DerivedData/ +*.moved-aside +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 + +## Obj-C/Swift specific +*.hmap + +## App packaging +*.ipa +*.dSYM.zip +*.dSYM + +## Playgrounds +timeline.xctimeline +playground.xcworkspace + +# Swift Package Manager +# +# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. +# Packages/ +# Package.pins +# Package.resolved +# *.xcodeproj +# +# Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata +# hence it is not needed unless you have added a package configuration file to your project +# .swiftpm + +.build/ + +# CocoaPods +# +# We recommend against adding the Pods directory to your .gitignore. However +# you should judge for yourself, the pros and cons are mentioned at: +# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control +# +# Pods/ +# +# Add this line if you want to avoid checking in source code from the Xcode workspace +# *.xcworkspace + +# Carthage +# +# Add this line if you want to avoid checking in source code from Carthage dependencies. +# Carthage/Checkouts + +Carthage/Build/ + +# Accio dependency management +Dependencies/ +.accio/ + +# fastlane +# +# It is recommended to not store the screenshots in the git repo. +# Instead, use fastlane to re-generate the screenshots whenever they are needed. +# For more information about the recommended setup visit: +# https://docs.fastlane.tools/best-practices/source-control/#source-control + +fastlane/report.xml +fastlane/Preview.html +fastlane/screenshots/**/*.png +fastlane/test_output + +# Code Injection +# +# After new code Injection tools there's a generated folder /iOSInjectionProject +# https://github.com/johnno1962/injectionforxcode + +iOSInjectionProject/ + +# Firebase +GoogleService-Info.plist + +# macOS +.DS_Store + +# Swift +*.swiftpm +.swiftpm + +# Backup files +*~.nib +*.swp +*.swo +*~ + +# IDE +.vscode/ +.idea/ diff --git a/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample.xcodeproj/project.pbxproj b/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample.xcodeproj/project.pbxproj new file mode 100644 index 00000000000..a8f3367113f --- /dev/null +++ b/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample.xcodeproj/project.pbxproj @@ -0,0 +1,425 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 77; + objects = { + +/* Begin PBXBuildFile section */ + 7EDAD81D2EBE23A5002EC70E /* FirebaseAppleSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 7EDAD81C2EBE23A5002EC70E /* FirebaseAppleSwiftUI */; }; + 7EDAD81F2EBE23A5002EC70E /* FirebaseAuthSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 7EDAD81E2EBE23A5002EC70E /* FirebaseAuthSwiftUI */; }; + 7EDAD8212EBE23A5002EC70E /* FirebaseFacebookSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 7EDAD8202EBE23A5002EC70E /* FirebaseFacebookSwiftUI */; }; + 7EDAD8232EBE23A5002EC70E /* FirebaseGoogleSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 7EDAD8222EBE23A5002EC70E /* FirebaseGoogleSwiftUI */; }; + 7EDAD8252EBE23A5002EC70E /* FirebaseOAuthSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 7EDAD8242EBE23A5002EC70E /* FirebaseOAuthSwiftUI */; }; + 7EDAD8272EBE23A5002EC70E /* FirebasePhoneAuthSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 7EDAD8262EBE23A5002EC70E /* FirebasePhoneAuthSwiftUI */; }; + 7EDAD8292EBE23A5002EC70E /* FirebaseTwitterSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 7EDAD8282EBE23A5002EC70E /* FirebaseTwitterSwiftUI */; }; + 7EDAD82B2EBE23C3002EC70E /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 7EDAD82A2EBE23C3002EC70E /* GoogleService-Info.plist */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 7EDAD7E42EBE2363002EC70E /* FirebaseSwiftUISample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FirebaseSwiftUISample.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 7EDAD82A2EBE23C3002EC70E /* GoogleService-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */ + 7EDAD8DF2EBE2F7C002EC70E /* Exceptions for "FirebaseSwiftUISample" folder in "FirebaseSwiftUISample" target */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + Info.plist, + ); + target = 7EDAD7E32EBE2363002EC70E /* FirebaseSwiftUISample */; + }; +/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */ + +/* Begin PBXFileSystemSynchronizedRootGroup section */ + 7EDAD7E62EBE2363002EC70E /* FirebaseSwiftUISample */ = { + isa = PBXFileSystemSynchronizedRootGroup; + exceptions = ( + 7EDAD8DF2EBE2F7C002EC70E /* Exceptions for "FirebaseSwiftUISample" folder in "FirebaseSwiftUISample" target */, + ); + path = FirebaseSwiftUISample; + sourceTree = ""; + }; +/* End PBXFileSystemSynchronizedRootGroup section */ + +/* Begin PBXFrameworksBuildPhase section */ + 7EDAD7E12EBE2363002EC70E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 7EDAD81D2EBE23A5002EC70E /* FirebaseAppleSwiftUI in Frameworks */, + 7EDAD81F2EBE23A5002EC70E /* FirebaseAuthSwiftUI in Frameworks */, + 7EDAD8232EBE23A5002EC70E /* FirebaseGoogleSwiftUI in Frameworks */, + 7EDAD8212EBE23A5002EC70E /* FirebaseFacebookSwiftUI in Frameworks */, + 7EDAD8272EBE23A5002EC70E /* FirebasePhoneAuthSwiftUI in Frameworks */, + 7EDAD8292EBE23A5002EC70E /* FirebaseTwitterSwiftUI in Frameworks */, + 7EDAD8252EBE23A5002EC70E /* FirebaseOAuthSwiftUI in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 7EDAD7DB2EBE2363002EC70E = { + isa = PBXGroup; + children = ( + 7EDAD82A2EBE23C3002EC70E /* GoogleService-Info.plist */, + 7EDAD7E62EBE2363002EC70E /* FirebaseSwiftUISample */, + 7EDAD7E52EBE2363002EC70E /* Products */, + ); + sourceTree = ""; + }; + 7EDAD7E52EBE2363002EC70E /* Products */ = { + isa = PBXGroup; + children = ( + 7EDAD7E42EBE2363002EC70E /* FirebaseSwiftUISample.app */, + ); + name = Products; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 7EDAD7E32EBE2363002EC70E /* FirebaseSwiftUISample */ = { + isa = PBXNativeTarget; + buildConfigurationList = 7EDAD7EF2EBE2364002EC70E /* Build configuration list for PBXNativeTarget "FirebaseSwiftUISample" */; + buildPhases = ( + 7EDAD7E02EBE2363002EC70E /* Sources */, + 7EDAD7E12EBE2363002EC70E /* Frameworks */, + 7EDAD7E22EBE2363002EC70E /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + fileSystemSynchronizedGroups = ( + 7EDAD7E62EBE2363002EC70E /* FirebaseSwiftUISample */, + ); + name = FirebaseSwiftUISample; + packageProductDependencies = ( + 7EDAD81C2EBE23A5002EC70E /* FirebaseAppleSwiftUI */, + 7EDAD81E2EBE23A5002EC70E /* FirebaseAuthSwiftUI */, + 7EDAD8202EBE23A5002EC70E /* FirebaseFacebookSwiftUI */, + 7EDAD8222EBE23A5002EC70E /* FirebaseGoogleSwiftUI */, + 7EDAD8242EBE23A5002EC70E /* FirebaseOAuthSwiftUI */, + 7EDAD8262EBE23A5002EC70E /* FirebasePhoneAuthSwiftUI */, + 7EDAD8282EBE23A5002EC70E /* FirebaseTwitterSwiftUI */, + ); + productName = FirebaseSwiftUISample; + productReference = 7EDAD7E42EBE2363002EC70E /* FirebaseSwiftUISample.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 7EDAD7DC2EBE2363002EC70E /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 2610; + LastUpgradeCheck = 2610; + TargetAttributes = { + 7EDAD7E32EBE2363002EC70E = { + CreatedOnToolsVersion = 26.1; + }; + }; + }; + buildConfigurationList = 7EDAD7DF2EBE2363002EC70E /* Build configuration list for PBXProject "FirebaseSwiftUISample" */; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 7EDAD7DB2EBE2363002EC70E; + minimizedProjectReferenceProxies = 1; + packageReferences = ( + 7EDAD81B2EBE23A5002EC70E /* XCLocalSwiftPackageReference "../../../../FirebaseUI-iOS" */, + ); + preferredProjectObjectVersion = 77; + productRefGroup = 7EDAD7E52EBE2363002EC70E /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 7EDAD7E32EBE2363002EC70E /* FirebaseSwiftUISample */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 7EDAD7E22EBE2363002EC70E /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 7EDAD82B2EBE23C3002EC70E /* GoogleService-Info.plist in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 7EDAD7E02EBE2363002EC70E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 7EDAD7ED2EBE2364002EC70E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 26.1; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 7EDAD7EE2EBE2364002EC70E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 26.1; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 7EDAD7F02EBE2364002EC70E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_ENTITLEMENTS = FirebaseSwiftUISample/FirebaseSwiftUISample.entitlements; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = YYX2P3XVJ7; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = FirebaseSwiftUISample/Info.plist; + INFOPLIST_KEY_NSUserTrackingUsageDescription = "Testing - need to authorize User tracking for Facebook classic login."; + INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 17.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = io.flutter.plugins.firebase.auth.example; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 7EDAD7F12EBE2364002EC70E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_ENTITLEMENTS = FirebaseSwiftUISample/FirebaseSwiftUISample.entitlements; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = YYX2P3XVJ7; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = FirebaseSwiftUISample/Info.plist; + INFOPLIST_KEY_NSUserTrackingUsageDescription = "Testing - need to authorize User tracking for Facebook classic login."; + INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 17.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = io.flutter.plugins.firebase.auth.example; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 7EDAD7DF2EBE2363002EC70E /* Build configuration list for PBXProject "FirebaseSwiftUISample" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7EDAD7ED2EBE2364002EC70E /* Debug */, + 7EDAD7EE2EBE2364002EC70E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 7EDAD7EF2EBE2364002EC70E /* Build configuration list for PBXNativeTarget "FirebaseSwiftUISample" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7EDAD7F02EBE2364002EC70E /* Debug */, + 7EDAD7F12EBE2364002EC70E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCLocalSwiftPackageReference section */ + 7EDAD81B2EBE23A5002EC70E /* XCLocalSwiftPackageReference "../../../../FirebaseUI-iOS" */ = { + isa = XCLocalSwiftPackageReference; + relativePath = "../../../../FirebaseUI-iOS"; + }; +/* End XCLocalSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 7EDAD81C2EBE23A5002EC70E /* FirebaseAppleSwiftUI */ = { + isa = XCSwiftPackageProductDependency; + productName = FirebaseAppleSwiftUI; + }; + 7EDAD81E2EBE23A5002EC70E /* FirebaseAuthSwiftUI */ = { + isa = XCSwiftPackageProductDependency; + productName = FirebaseAuthSwiftUI; + }; + 7EDAD8202EBE23A5002EC70E /* FirebaseFacebookSwiftUI */ = { + isa = XCSwiftPackageProductDependency; + productName = FirebaseFacebookSwiftUI; + }; + 7EDAD8222EBE23A5002EC70E /* FirebaseGoogleSwiftUI */ = { + isa = XCSwiftPackageProductDependency; + productName = FirebaseGoogleSwiftUI; + }; + 7EDAD8242EBE23A5002EC70E /* FirebaseOAuthSwiftUI */ = { + isa = XCSwiftPackageProductDependency; + productName = FirebaseOAuthSwiftUI; + }; + 7EDAD8262EBE23A5002EC70E /* FirebasePhoneAuthSwiftUI */ = { + isa = XCSwiftPackageProductDependency; + productName = FirebasePhoneAuthSwiftUI; + }; + 7EDAD8282EBE23A5002EC70E /* FirebaseTwitterSwiftUI */ = { + isa = XCSwiftPackageProductDependency; + productName = FirebaseTwitterSwiftUI; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = 7EDAD7DC2EBE2363002EC70E /* Project object */; +} diff --git a/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Application/AppDelegate.swift b/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Application/AppDelegate.swift new file mode 100644 index 00000000000..8d16d1070c5 --- /dev/null +++ b/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Application/AppDelegate.swift @@ -0,0 +1,72 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import FacebookCore +import FirebaseAuth +import FirebaseCore +import GoogleSignIn + +class AppDelegate: NSObject, UIApplicationDelegate { + func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [ + UIApplication.LaunchOptionsKey: Any + ]? + ) -> Bool { + FirebaseApp.configure() + + ApplicationDelegate.shared.application( + application, + didFinishLaunchingWithOptions: launchOptions + ) + return true + } + + func application(_: UIApplication, + didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { + Auth.auth().setAPNSToken(deviceToken, type: .prod) + } + + func application( + _: UIApplication, + didReceiveRemoteNotification notification: [AnyHashable: Any], + fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) + -> Void + ) { + if Auth.auth().canHandleNotification(notification) { + completionHandler(.noData) + return + } + } + + func application( + _ app: UIApplication, + open url: URL, + options: [UIApplication.OpenURLOptionsKey: Any] = [:] + ) -> Bool { + if Auth.auth().canHandle(url) { return true } + + if ApplicationDelegate.shared.application( + app, + open: url, + sourceApplication: options[UIApplication.OpenURLOptionsKey + .sourceApplication] as? String, + annotation: options[UIApplication.OpenURLOptionsKey.annotation] + ) { + return true + } + + return GIDSignIn.sharedInstance.handle(url) + } +} diff --git a/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Application/ContentView.swift b/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Application/ContentView.swift new file mode 100644 index 00000000000..2d629af39e1 --- /dev/null +++ b/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Application/ContentView.swift @@ -0,0 +1,129 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import SwiftUI +import FirebaseAuth +import FirebaseAppleSwiftUI +import FirebasePhoneAuthSwiftUI +import FirebaseGoogleSwiftUI +import FirebaseTwitterSwiftUI +import FirebaseAuthSwiftUI +import FirebaseFacebookSwiftUI +import FirebaseOAuthSwiftUI + + +struct ContentView: View { + init() { +// Auth.auth().useEmulator(withHost: "127.0.0.1", port: 9099) + + let actionCodeSettings = ActionCodeSettings() + + actionCodeSettings.handleCodeInApp = true + actionCodeSettings.url = URL(string: "https://flutterfire-e2e-tests.firebaseapp.com") + actionCodeSettings.setIOSBundleID(Bundle.main.bundleIdentifier!) + actionCodeSettings.linkDomain = "flutterfire-e2e-tests.firebaseapp.com" + let configuration = AuthConfiguration( + shouldAutoUpgradeAnonymousUsers: true, + tosUrl: URL(string: "https://example.com/tos"), + privacyPolicyUrl: URL(string: "https://example.com/privacy"), + emailLinkSignInActionCodeSettings: actionCodeSettings, + mfaEnabled: true + ) + + authService = AuthService( + configuration: configuration + ) + .withAppleSignIn() + .withPhoneSignIn() + .withGoogleSignIn() + .withFacebookSignIn(FacebookProviderSwift()) + .withTwitterSignIn() + .withOAuthSignIn(OAuthProviderSwift.github()) + .withOAuthSignIn(OAuthProviderSwift.microsoft()) + .withOAuthSignIn(OAuthProviderSwift.yahoo()) + .withOAuthSignIn( + OAuthProviderSwift( + providerId: "oidc.line", + scopes: ["openid", "profile", "email"], + displayName: "Sign in with LINE", + buttonIcon: Image(.icLineLogo), + buttonBackgroundColor: .lineButton, + buttonForegroundColor: .white + ) + ) + .withEmailSignIn() + } + + let authService: AuthService + + var body: some View { + NavigationStack { + VStack(spacing: 24) { + NavigationLink { + AuthPickerViewExample() + .navigationTitle("Using AuthPickerView") + } label: { + VStack(alignment: .leading, spacing: 16) { + Text("AuthPickerView example") + .font(.headline) + .fontWeight(.bold) + Text("How to use with AuthPickerView") + Text("• Pre-built authentication UI\n• Automatic flow management\n• Quick integration") + .font(.caption) + .foregroundColor(.secondary) + } + .multilineTextAlignment(.leading) + .padding() + .frame(maxWidth: .infinity, alignment: .leading) + .background { + RoundedRectangle(cornerRadius: 16) + .fill(Color(UIColor.secondarySystemBackground)) + .frame(maxWidth: .infinity) + } + } + .tint(Color(.label)) + NavigationLink { + CustomViewExample() + .navigationTitle("Using AuthService") + } label: { + VStack(alignment: .leading, spacing: 16) { + Text("Custom View example") + .font(.headline) + .fontWeight(.bold) + Text("How to use with AuthService with a custom view") + Text("• Build custom authentication UI\n• Direct AuthService method calls\n• Full control over user experience") + .font(.caption) + .foregroundColor(.secondary) + } + .multilineTextAlignment(.leading) + .padding() + .frame(maxWidth: .infinity, alignment: .leading) + .background { + RoundedRectangle(cornerRadius: 16) + .fill(Color(UIColor.secondarySystemBackground)) + } + } + .tint(Color(.label)) + } + .padding() + .navigationTitle("FirebaseUI Demo") + .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .top) + } + .environment(authService) + } +} + +#Preview { + ContentView() +} diff --git a/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Application/FirebaseSwiftUISampleApp.swift b/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Application/FirebaseSwiftUISampleApp.swift new file mode 100644 index 00000000000..b73ad9e225f --- /dev/null +++ b/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Application/FirebaseSwiftUISampleApp.swift @@ -0,0 +1,26 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import SwiftUI + +@main +struct FirebaseSwiftUISampleApp: App { + @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate + + var body: some Scene { + WindowGroup { + ContentView() + } + } +} diff --git a/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Assets.xcassets/AccentColor.colorset/Contents.json b/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 00000000000..eb878970081 --- /dev/null +++ b/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Assets.xcassets/AppIcon.appiconset/Contents.json b/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000000..2305880107d --- /dev/null +++ b/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,35 @@ +{ + "images" : [ + { + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "tinted" + } + ], + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Assets.xcassets/Contents.json b/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Assets.xcassets/Contents.json new file mode 100644 index 00000000000..73c00596a7f --- /dev/null +++ b/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Assets.xcassets/ic-line-logo.imageset/Contents.json b/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Assets.xcassets/ic-line-logo.imageset/Contents.json new file mode 100644 index 00000000000..216d35cbecc --- /dev/null +++ b/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Assets.xcassets/ic-line-logo.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "fui-ic-line-logo.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "fui-ic-line-logo-x2.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "fui-ic-line-logo-x3.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Assets.xcassets/ic-line-logo.imageset/fui-ic-line-logo-x2.png b/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Assets.xcassets/ic-line-logo.imageset/fui-ic-line-logo-x2.png new file mode 100644 index 00000000000..924fd4adbc5 Binary files /dev/null and b/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Assets.xcassets/ic-line-logo.imageset/fui-ic-line-logo-x2.png differ diff --git a/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Assets.xcassets/ic-line-logo.imageset/fui-ic-line-logo-x3.png b/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Assets.xcassets/ic-line-logo.imageset/fui-ic-line-logo-x3.png new file mode 100644 index 00000000000..77131141d7f Binary files /dev/null and b/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Assets.xcassets/ic-line-logo.imageset/fui-ic-line-logo-x3.png differ diff --git a/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Assets.xcassets/ic-line-logo.imageset/fui-ic-line-logo.png b/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Assets.xcassets/ic-line-logo.imageset/fui-ic-line-logo.png new file mode 100644 index 00000000000..3e58a91d7f4 Binary files /dev/null and b/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Assets.xcassets/ic-line-logo.imageset/fui-ic-line-logo.png differ diff --git a/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Assets.xcassets/line-button.colorset/Contents.json b/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Assets.xcassets/line-button.colorset/Contents.json new file mode 100644 index 00000000000..f3dcfcaa71f --- /dev/null +++ b/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Assets.xcassets/line-button.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x55", + "green" : "0xC7", + "red" : "0x06" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x55", + "green" : "0xC7", + "red" : "0x06" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Examples/AuthPickerViewExample.swift b/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Examples/AuthPickerViewExample.swift new file mode 100644 index 00000000000..d3d4c2159ca --- /dev/null +++ b/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Examples/AuthPickerViewExample.swift @@ -0,0 +1,64 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import SwiftUI +import FirebaseAuthSwiftUI +import FirebaseAuth + +struct AuthPickerViewExample: View { + @Environment(AuthService.self) private var authService + + var body: some View { + AuthPickerView { + authenticatedApp + } + } + + var authenticatedApp: some View { + NavigationStack { + VStack { + if authService.authenticationState == .unauthenticated { + Text("Not Authenticated") + Button { + authService.isPresented = true + } label: { + Text("Authenticate") + } + .buttonStyle(.bordered) + } else { + Text("Authenticated - \(authService.currentUser?.email ?? "")") + Button { + authService.isPresented = true // Reopen the sheet + } label: { + Text("Manage Account") + } + .buttonStyle(.bordered) + Button { + Task { + try? await authService.signOut() + } + } label: { + Text("Sign Out") + } + .buttonStyle(.borderedProminent) + } + } + } + .onChange(of: authService.authenticationState) { _, newValue in + if newValue != .authenticating { + authService.isPresented = newValue == .unauthenticated + } + } + } +} diff --git a/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Examples/CustomViewExample.swift b/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Examples/CustomViewExample.swift new file mode 100644 index 00000000000..370b2485252 --- /dev/null +++ b/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Examples/CustomViewExample.swift @@ -0,0 +1,246 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import SwiftUI +import FirebaseAuthSwiftUI +import FirebaseAuth + +struct CustomViewExample: View { + @Environment(AuthService.self) private var authService + @State private var email: String = "" + @State private var password: String = "" + @State private var isSignUp: Bool = false + @State private var errorMessage: String? + @State private var isLoading: Bool = false + + var body: some View { + if authService.authenticationState == .authenticated { + authenticatedView + } else { + landingView + } + } + + private var landingView: some View { + ScrollView { + VStack(spacing: 32) { + Spacer() + .frame(height: 40) + + // Hero section + VStack(spacing: 16) { + Image(systemName: "flame.fill") + .font(.system(size: 80)) + .foregroundStyle(.orange) + + Text("Welcome to FirebaseUI") + .font(.largeTitle) + .fontWeight(.bold) + .multilineTextAlignment(.center) + + Text("Sign in to continue and explore all the features") + .font(.body) + .foregroundColor(.secondary) + .multilineTextAlignment(.center) + .padding(.horizontal) + } + + Spacer() + .frame(height: 20) + + // Email/Password form + VStack(spacing: 16) { + VStack(alignment: .leading, spacing: 8) { + Text("Email") + .font(.subheadline) + .fontWeight(.medium) + + TextField("Enter your email", text: $email) + .textInputAutocapitalization(.never) + .keyboardType(.emailAddress) + .textContentType(.emailAddress) + .padding() + .background(Color(UIColor.secondarySystemBackground)) + .cornerRadius(8) + } + + VStack(alignment: .leading, spacing: 8) { + Text("Password") + .font(.subheadline) + .fontWeight(.medium) + + SecureField("Enter your password", text: $password) + .textContentType(isSignUp ? .newPassword : .password) + .padding() + .background(Color(UIColor.secondarySystemBackground)) + .cornerRadius(8) + } + + if let errorMessage = errorMessage { + Text(errorMessage) + .font(.caption) + .foregroundColor(.red) + .frame(maxWidth: .infinity, alignment: .leading) + } + + Button { + Task { + await handleAuthentication() + } + } label: { + HStack { + if isLoading { + ProgressView() + .tint(.white) + } + Text(isSignUp ? "Create Account" : "Sign In") + .fontWeight(.semibold) + } + .frame(maxWidth: .infinity) + .padding(.vertical, 14) + .background(isFormValid ? Color.blue : Color.gray) + .foregroundColor(.white) + .cornerRadius(8) + } + .disabled(!isFormValid || isLoading) + + Button { + isSignUp.toggle() + errorMessage = nil + } label: { + Text(isSignUp ? "Already have an account? Sign In" : "Don't have an account? Sign Up") + .font(.subheadline) + .foregroundColor(.blue) + } + } + .padding(.horizontal, 24) + + // Divider with text + HStack { + Rectangle() + .fill(Color.secondary.opacity(0.3)) + .frame(height: 1) + + Text("or continue with") + .font(.caption) + .foregroundColor(.secondary) + .padding(.horizontal, 8) + + Rectangle() + .fill(Color.secondary.opacity(0.3)) + .frame(height: 1) + } + .padding(.horizontal, 24) + + // Auth providers section - using AuthService's renderButtons + VStack(spacing: 12) { + authService.renderButtons(spacing: 12) + } + .padding(.horizontal, 24) + + Spacer() + .frame(minHeight: 20) + + // Footer + VStack(spacing: 8) { + HStack(spacing: 4) { + Text("By continuing, you agree to our") + .font(.caption) + .foregroundColor(.secondary) + + if let tosUrl = authService.configuration.tosUrl { + Link("Terms", destination: tosUrl) + .font(.caption) + } + + Text("and") + .font(.caption) + .foregroundColor(.secondary) + + if let privacyUrl = authService.configuration.privacyPolicyUrl { + Link("Privacy Policy", destination: privacyUrl) + .font(.caption) + } + } + } + .padding(.horizontal, 24) + .padding(.bottom, 20) + } + } + } + + private var authenticatedView: some View { + VStack(spacing: 24) { + Spacer() + Image(systemName: "checkmark.circle.fill") + .font(.system(size: 80)) + .foregroundStyle(.green) + + VStack(spacing: 8) { + Text("Signed In Successfully") + .font(.title) + .fontWeight(.bold) + + if let email = authService.currentUser?.email { + Text(email) + .font(.body) + .foregroundColor(.secondary) + } else if let phoneNumber = authService.currentUser?.phoneNumber { + Text(phoneNumber) + .font(.body) + .foregroundColor(.secondary) + } + } + + Button { + Task { + try? await authService.signOut() + } + } label: { + Text("Sign Out") + .font(.body) + .fontWeight(.semibold) + .foregroundColor(.red) + .frame(maxWidth: .infinity) + .padding(.vertical, 14) + .background(Color.red.opacity(0.1)) + .cornerRadius(8) + } + .padding(.horizontal, 24) + + Spacer() + } + } + + private var isFormValid: Bool { + !email.isEmpty && !password.isEmpty && password.count >= 6 + } + + private func handleAuthentication() async { + errorMessage = nil + isLoading = true + + do { + if isSignUp { + _ = try await authService.createUser(email: email, password: password) + } else { + _ = try await authService.signIn(email: email, password: password) + } + } catch { + errorMessage = error.localizedDescription + } + + isLoading = false + } +} diff --git a/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/FirebaseSwiftUISample.entitlements b/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/FirebaseSwiftUISample.entitlements new file mode 100644 index 00000000000..80b5221de76 --- /dev/null +++ b/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/FirebaseSwiftUISample.entitlements @@ -0,0 +1,12 @@ + + + + + aps-environment + development + com.apple.developer.applesignin + + Default + + + diff --git a/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Info.plist b/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Info.plist new file mode 100644 index 00000000000..972c78a5b8c --- /dev/null +++ b/samples/swiftui/FirebaseSwiftUISample/FirebaseSwiftUISample/Info.plist @@ -0,0 +1,52 @@ + + + + + CFBundleLocalizations + + en + es + de + fr + + CFBundleURLTypes + + + CFBundleTypeRole + Editor + CFBundleURLSchemes + + com.googleusercontent.apps.406099696497-134k3722m01rtrsklhf3b7k8sqa5r7in + fb128693022464535 + + + + CFBundleTypeRole + Editor + CFBundleURLSchemes + + app-1-406099696497-ios-58cbc26aca8e5cf83574d0 + + + + + FacebookAppID + 128693022464535 + FacebookClientToken + 16dbbdf0cfb309034a6ad98ac2a21688 + FacebookDisplayName + Firebase Swift UI App + FirebaseAppDelegateProxyEnabled + + LSApplicationQueriesSchemes + + fbapi + fb-messenger-share-api + + UIBackgroundModes + + fetch + remote-notification + + + diff --git a/samples/swiftui/FirebaseSwiftUISample/GoogleService-Info.plist b/samples/swiftui/FirebaseSwiftUISample/GoogleService-Info.plist new file mode 100644 index 00000000000..f325ead98db --- /dev/null +++ b/samples/swiftui/FirebaseSwiftUISample/GoogleService-Info.plist @@ -0,0 +1,38 @@ + + + + + CLIENT_ID + 406099696497-134k3722m01rtrsklhf3b7k8sqa5r7in.apps.googleusercontent.com + REVERSED_CLIENT_ID + com.googleusercontent.apps.406099696497-134k3722m01rtrsklhf3b7k8sqa5r7in + ANDROID_CLIENT_ID + 406099696497-17qn06u8a0dc717u8ul7s49ampk13lul.apps.googleusercontent.com + API_KEY + AIzaSyDooSUGSf63Ghq02_iIhtnmwMDs4HlWS6c + GCM_SENDER_ID + 406099696497 + PLIST_VERSION + 1 + BUNDLE_ID + io.flutter.plugins.firebase.auth.example + PROJECT_ID + flutterfire-e2e-tests + STORAGE_BUCKET + flutterfire-e2e-tests.appspot.com + IS_ADS_ENABLED + + IS_ANALYTICS_ENABLED + + IS_APPINVITE_ENABLED + + IS_GCM_ENABLED + + IS_SIGNIN_ENABLED + + GOOGLE_APP_ID + 1:406099696497:ios:58cbc26aca8e5cf83574d0 + DATABASE_URL + https://flutterfire-e2e-tests-default-rtdb.europe-west1.firebasedatabase.app + + \ No newline at end of file diff --git a/staging.sh b/staging.sh index cd42c5a3624..dce0f049add 100755 --- a/staging.sh +++ b/staging.sh @@ -3,16 +3,8 @@ set -euxo pipefail pod repo push --use-json spec-staging FirebaseDatabaseUI.podspec && \ - pod repo push --use-json --allow-warnings spec-staging FirebaseAuthUI.podspec && \ pod repo push --use-json spec-staging FirebaseStorageUI.podspec && \ pod repo push --use-json spec-staging FirebaseFirestoreUI.podspec -pod repo push --use-json spec-staging FirebaseAnonymousAuthUI.podspec && \ - pod repo push --use-json --allow-warnings spec-staging FirebaseEmailAuthUI.podspec && \ - pod repo push --use-json spec-staging FirebaseFacebookAuthUI.podspec && \ - pod repo push --use-json spec-staging FirebaseGoogleAuthUI.podspec && \ - pod repo push --use-json spec-staging FirebaseOAuthUI.podspec && \ - pod repo push --use-json --allow-warnings spec-staging FirebasePhoneAuthUI.podspec - pod spec lint FirebaseUI.podspec && \ pod repo push --use-json spec-staging FirebaseUI.podspec