阿拉伯语本地化改变了方向



你好在我的应用程序中,我正在使用这个pod https://github.com/Abedalkareem/LanguageManager-iOS 并且我已经注释了所有改变视图方向的代码,但是当我将语言从英语更改为阿拉伯语时,当我重新打开应用程序时,它会改变文本的方向,当我再次选择英语时,它从左到右改变方向,当我再次选择英语时,一切都很好, 我想禁用,当语言更改时我不想做任何事情。

这是我的语言人的代码

ager
//
//  LanguageManger.swift
//
//  Created by abedalkareem omreyh on 10/23/17.
//  Copyright © 2017 abedlkareem omreyh. All rights reserved.
//  GitHub: https://github.com/Abedalkareem/LanguageManger-iOS
//
import UIKit
class LanguageManger {
    static let shared: LanguageManger = LanguageManger()

    /// Returns the currnet language
    var currentLanguage: Languages {
        get {
            guard let currentLang = UserDefaults.standard.string(forKey: "selectedLanguage")
                else {
                    fatalError("Did you set the default language for the app ?")
            }
            return Languages(rawValue: currentLang)!
        }
        set {
            print("raw value(newValue.rawValue)")
            UserDefaults.standard.set(newValue.rawValue, forKey: "selectedLanguage")
        }
    }
    /// Returns the default language that the app will run first time
    var defaultLanguage: Languages {
        get {
            guard let defaultLanguage = UserDefaults.standard.string(forKey: "defaultLanguage") else {
                fatalError("Did you set the default language for the app ?")
            }
            return Languages(rawValue: defaultLanguage)!
        }
        set {
            // swizzle the awakeFromNib from nib and localize the text in the new awakeFromNib
            UIView.localize()
            let defaultLanguage = UserDefaults.standard.string(forKey: "defaultLanguage")
            guard defaultLanguage == nil else {
                return
            }
            UserDefaults.standard.set(newValue.rawValue, forKey: "defaultLanguage")
            UserDefaults.standard.set(newValue.rawValue, forKey: "selectedLanguage")
            setLanguage(language: newValue)
        }
    }

    // Returns the diriction of the language
        var isRightToLeft: Bool {
            get {
                let lang = currentLanguage.rawValue
                return lang.contains("s") || lang.contains("he") || lang.contains("ur") || lang.contains("fa")
            }
        }
    /// Returns the app locale for use it in dates and currency
    var appLocale: Locale {
        get {
            return Locale(identifier: currentLanguage.rawValue)
        }
    }
    ///
    /// Set the current language for the app
    ///
    /// - parameter language: The language that you need from the app to run with
    ///
    func setLanguage(language: Languages) {
      //   change the dircation of the views
//        let semanticContentAttribute:UISemanticContentAttribute = language == .ar ? .forceRightToLeft : .forceRightToLeft
//                UIView.appearance().semanticContentAttribute = semanticContentAttribute
//                UINavigationBar.appearance().semanticContentAttribute = semanticContentAttribute
//                UITextField.appearance().semanticContentAttribute = semanticContentAttribute
//                UITextView.appearance().semanticContentAttribute = semanticContentAttribute
        // change app language
        UserDefaults.standard.set([language.rawValue], forKey: "AppleLanguages")
        UserDefaults.standard.synchronize()
        // set current language
        currentLanguage = language
        print("---curent langugae from lanagugae maneger (currentLanguage)")
    }
}
enum Languages:String {
    case ar,en,nl,ja,ko,vi,ru,sv,fr,es,pt,it,de,da,fi,nb,tr,el,id,ms,th,hi,hu,pl,cs,sk,uk,hr,ca,ro,he
    case enGB = "en-GB"
    case enAU = "en-AU"
    case enCA = "en-CA"
    case enIN = "en-IN"
    case frCA = "fr-CA"
    case esMX = "es-MX"
    case ptBR = "pt-BR"
    case zhHans = "zh-Hans"
    case zhHant = "zh-Hant"
    case zhHK = "zh-HK"
}

// MARK: Swizzling
extension UIView {
    static func localize() {
        let orginalSelector = #selector(awakeFromNib)
        let swizzledSelector = #selector(swizzledAwakeFromNib)
        let orginalMethod = class_getInstanceMethod(self, orginalSelector)
        let swizzledMethod = class_getInstanceMethod(self, swizzledSelector)
        let didAddMethod = class_addMethod(self, orginalSelector, method_getImplementation(swizzledMethod!), method_getTypeEncoding(swizzledMethod!))
        if didAddMethod {
            class_replaceMethod(self, swizzledSelector, method_getImplementation(orginalMethod!), method_getTypeEncoding(orginalMethod!))
        } else {
            method_exchangeImplementations(orginalMethod!, swizzledMethod!)
        }
    }
    @objc func swizzledAwakeFromNib() {
        swizzledAwakeFromNib()
        switch self {
        case let txtf as UITextField:
            txtf.text = txtf.text?.localiz()
        case let lbl as UILabel:
            lbl.text = lbl.text?.localiz()
        case let btn as UIButton:
            btn.setTitle(btn.title(for: .normal)?.localiz(), for: .normal)
        default:
            break
        }
    }
}

// MARK: String extension
extension String {

    /// Localize the current string to the selected language
    /// - returns: The localized string
    ///
    func localiz() -> String {
        guard let bundle = Bundle.main.path(forResource: LanguageManger.shared.currentLanguage.rawValue, ofType: "lproj") else {
            return NSLocalizedString(self, comment: "")
        }
        let langBundle = Bundle(path: bundle)
        return NSLocalizedString(self, tableName: nil, bundle: langBundle!, comment: "")
    }
}
// MARK: UIApplication extension
extension UIApplication {
    // Get top view controller
    static var topViewController:UIViewController? {
        get{
            if var topController = UIApplication.shared.keyWindow?.rootViewController {
                while let presentedViewController = topController.presentedViewController {
                    topController = presentedViewController
                }
                return topController
            }else{
                return nil
            }
        }
    }
}

我在更改语言后执行此操作,但什么也没发生

 UINavigationBar.appearance().semanticContentAttribute = .forceLeftToRight
               UITextField.appearance().semanticContentAttribute = .forceLeftToRight
                    UITextView.appearance().semanticContentAttribute = .forceLeftToRight
                   UIView.appearance().semanticContentAttribute = .forceLeftToRight

在阿拉伯语语言中,文本显示在右侧

UIView.appearance((.semanticContentAttribute = .forceLeftToRight

您可以使用

view.contentMode = .right,无论内容是什么语言,这都会强制内容,因为当它是阿拉伯语时,它会更改为左。

最新更新