草庐IT

ios - 允许相机访问后,UIImagePickerController 不本地化?

coder 2023-09-11 原文

我正在尝试为一家大公司的应用程序打开相机(因此该应用程序支持多种语言)。一切正常,但相机屏幕上的按钮(照片、视频、重拍、取消)没有本地化,即使应用程序已完全本地化。但是,在我进入 iPhone 设置并重新允许访问相机后,相机按钮会以正确的语言显示。照片库也会出现同样的问题。导航栏上的“取消”按钮未本地化。我已经尝试了几乎所有我在网上看到的东西,但找不到 Ant 工作的解决方案。


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


}

上面你可以看到我的代码。有没有人有同样的问题?任何帮助都会很棒。谢谢!

编辑:我仍然找不到可靠的解决方案,但如果您不在 Debug模式下运行该应用程序,它将正常工作。

最佳答案

我认为取消按钮的本地化是 iOS 的一部分,会自动翻译成用户的语言。您可以通过 UIKit 访问字符串。看看这个问题:How to get localized Cancel, Done and etc?

“这是我为获取系统 UIKit 字符串而创建的一个小宏: #define UIKitLocalizedString(key) [[NSBundle bundleWithIdentifier:@"com.apple.UIKit"] localizedStringForKey:key value:@""table:nil]

Use it like this:

UIKitLocalizedString(@"搜索"); UIKitLocalizedString(@"完成"); UIKitLocalizedString(@"取消"); ...”(来源:Stephan Helinar)

(为可怕的格式道歉,在移动设备上匆忙。)

关于ios - 允许相机访问后,UIImagePickerController 不本地化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56018763/

有关ios - 允许相机访问后,UIImagePickerController 不本地化?的更多相关文章

  1. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  2. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  3. ruby-on-rails - 在混合/模块中覆盖模型的属性访问器 - 2

    我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah

  4. ruby - 续集在添加关联时访问many_to_many连接表 - 2

    我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以

  5. ruby - 如何验证 IO.copy_stream 是否成功 - 2

    这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

  6. ruby-on-rails - RSpec:避免使用允许接收的任何实例 - 2

    我正在处理旧代码的一部分。beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)endRubocop错误如下:Avoidstubbingusing'allow_any_instance_of'我读到了RuboCop::RSpec:AnyInstance我试着像下面那样改变它。由此beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)end对此:let(:sport_

  7. ruby - 是否可以覆盖 gemfile 进行本地开发? - 2

    我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI

  8. Ruby 文件 IO 定界符? - 2

    我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的

  9. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  10. [工业相机] 分辨率、精度和公差之间的关系 - 2

    📢博客主页:https://blog.csdn.net/weixin_43197380📢欢迎点赞👍收藏⭐留言📝如有错误敬请指正!📢本文由Loewen丶原创,首发于CSDN,转载注明出处🙉📢现在的付出,都会是一种沉淀,只为让你成为更好的人✨文章预览:一.分辨率(Resolution)1、工业相机的分辨率是如何定义的?2、工业相机的分辨率是如何选择的?二.精度(Accuracy)1、像素精度(PixelAccuracy)2、定位精度和重复定位精度(RepeatPrecision)三.公差(Tolerance)四.课后作业(Post-ClassExercises)视觉行业的初学者,甚至是做了1~2年

随机推荐