UIImagePickerController не локализуется после разрешения доступа к камере? - PullRequest
3 голосов
/ 07 мая 2019

Я пытаюсь открыть камеру для приложения большой компании (поэтому приложение поддерживает несколько языков).Все работает нормально, но кнопки на экране камеры (Фото, Видео, Возврат, Отмена) не локализуются, даже если приложение полностью локализовано.Однако после того, как я перехожу к настройкам iPhone и реальный доступ к камере, кнопки камеры отображаются на правильном языке.Та же проблема происходит с библиотекой фотографий.Кнопка «Отмена» на панели навигации не локализована.Я перепробовал почти все, что видел в Интернете, но не смог найти решение для работы с муравьями.


import Foundation
import Photos

class CameraPhotoAuthenticationManager {

    static let shared = CameraPhotoAuthenticationManager()

    func checkCameraAuthorization(viewController: UIViewController, picker: UIImagePickerController) {
        let status = AVCaptureDevice.authorizationStatus(for: AVMediaType.video)
        switch status {
        case .authorized:
            viewController.present(picker, animated: true, completion: nil)
        case .notDetermined:
            requestPermissionForCamera()
        case .denied, .restricted:
            self.showCameraNeedAccessMessage(viewController: viewController)
        }
    }

    func checkPhotoAuthorization(viewController: UIViewController, picker: UIImagePickerController) {
        if PHPhotoLibrary.authorizationStatus() == .authorized {
            viewController.present(picker, animated: true, completion: nil)
        } else {
            PHPhotoLibrary.requestAuthorization {
                status in
                DispatchQueue.main.async {
                    if status == PHAuthorizationStatus.authorized {
                        viewController.present(picker, animated: true, completion: nil)
                    } else {
                        self.showNeedPhotoAccessMessage(viewController: viewController)
                    }
                }
            }
        }
    }

    private func showNeedPhotoAccessMessage(viewController: UIViewController) {
        let alertVC = UIAlertController(title: nil, message: "create.group.photo.auth".localized, preferredStyle: .alert)
        alertVC.addAction(UIAlertAction(title: "create.group.alert.close".localized, style: .cancel, handler: nil))
        alertVC.addAction(UIAlertAction(title: "create.group.settings".localized, style: .default, handler: { (action: UIAlertAction) -> Void in
            UIApplication.shared.openURL(URL(string: UIApplication.openSettingsURLString)!)
        }))
        viewController.present(alertVC, animated: true, completion: nil)
    }

    private func showCameraNeedAccessMessage(viewController: UIViewController) {
        let alertVC = UIAlertController(title: nil, message: "create.group.camera.auth".localized, preferredStyle: .alert)
        alertVC.addAction(UIAlertAction(title: "create.group.alert.close".localized, style: .cancel, handler: nil))
        alertVC.addAction(UIAlertAction(title: "create.group.settings".localized, style: .default, handler: {
            action in
            UIApplication.shared.openURL(URL(string: UIApplication.openSettingsURLString)!)
        }))
        viewController.present(alertVC, animated: true, completion: nil)
    }

    private func requestPermissionForCamera(){
        AVCaptureDevice.requestAccess(for: .video, completionHandler: {accessGranted in
            guard accessGranted == true else { return }
        })
    }


}

Вы можете увидеть мой код.У кого-нибудь есть такая же проблема?Любая помощь будет отличной.Спасибо!

РЕДАКТИРОВАТЬ: Я все еще не мог найти твердое решение, но если вы не запустите приложение в режиме отладки, оно будет работать правильно.

1 Ответ

0 голосов
/ 08 мая 2019

Я думаю, что локализация кнопки Отмена является частью iOS и будет автоматически переводиться на язык пользователя.Вы можете получить доступ к строкам через UIKit.Взгляните на этот вопрос: Как локализовать Cancel, Done и т. Д.

"Вот небольшой макрос, который я создал для получения строк UIKit системы: #define UIKitLocalizedString (key) [[NSBundle bundleWithIdentifier: @ "com.apple.UIKit"] localizedStringForKey: значение ключа: @ "" table: nil]

Use it like this:

UIKitLocalizedString (@ "Поиск"); UIKitLocalizedString (@ "Done");UIKitLocalizedString (@ "Cancel"); ... "(кредит: Стефан Хелинар)

(Извиняюсь за ужасное форматирование, на мобильном телефоне и в спешке.)

...