斯威夫特:翻译成阿拉伯语后没有回归英文版

时间:2017-12-17 04:14:35

标签: ios swift localization right-to-left

我想在英语和阿拉伯语版本(包括RTL)之间本地化我的应用程序。但是在翻译成阿拉伯语后它不会从左到右返回到英文版,当我点击导航项目UIButton时,它只会重复到阿拉伯语版本,导航项目标志也没有正确显示它只是重复阿拉伯国旗。

//这是我的代码

import UIKit

import Foundation



// homeCollectionViewController

class HomeCollectionViewController: UICollectionViewController, UICollectionViewDelegateFlowLayout{

    let navLanguageBtn = UIButton()

    static var language = ""

    override func viewDidLoad() {
        super.viewDidLoad()

        setupHomeNavBarBtn()

    }

    // NavigationBar
    func setupHomeNavBarBtn() {


        navLanguageBtn.frame = CGRect(x: 0, y: 0, width: CollectionViewSize.width / 15, height: CollectionViewSize.width / 15)
        navLanguageBtn.contentEdgeInsets = UIEdgeInsetsMake(0, 0, CollectionViewSize.width / 60, 0)
        navLanguageBtn.setImage(UIImage(named: "arab_flag")?.withRenderingMode(.alwaysOriginal), for: .normal)
        navLanguageBtn.contentMode = .scaleAspectFit
        navLanguageBtn.addTarget(self, action: #selector(navLanguageBtnClick), for: .touchUpInside)
        let navLanguageBtnItem = UIBarButtonItem(customView: navLanguageBtn)
        self.navigationItem.setRightBarButtonItems([ navLanguageBtnItem], animated: true)

    }


    // ButtonClick
    public func navLanguageBtnClick(){


        if (navLanguageBtn.isSelected == true)
        {
            print("language btn click true English flag")


            navLanguageBtn.setImage(UIImage(named: "english_flag")?.withRenderingMode(.alwaysOriginal), for: UIControlState.normal)
            UIView.appearance().semanticContentAttribute = .forceRightToLeft



            navLanguageBtn.isSelected = false

            let path = Bundle.main.path(forResource: "ar-SA", ofType: "lproj")
            let bundal = Bundle.init(path: path!)! as Bundle




            HomeCollectionViewController.language = "ar"



            navigationItem.title = bundal.localizedString(forKey: "home", value: nil, table: nil)

            SecondHomeCell.newProductTrans = bundal.localizedString(forKey: "newProduct", value: nil, table: nil)
            SecondHomeCell.populerStoriesTrans = bundal.localizedString(forKey: "populerStories", value: nil, table: nil)


            let navController: UINavigationController? = (UIApplication.shared.keyWindow?.rootViewController as? UINavigationController)
            let layout = UICollectionViewFlowLayout()
            let control = HomeCollectionViewController(collectionViewLayout: layout)

            navController?.pushViewController(control, animated: true)

            let AR_POST_PARAMETERS = ["language": HomeCollectionViewController.language]

            self.secondHomeCell?.secondHomeCellDataLoad(POST_PARAMETERS: AR_POST_PARAMETERS as! Dictionary<String, String>)

        }
        else
        {

            print("language btn click true arabic flag")
            navLanguageBtn.setImage(UIImage(named: "arab_flag")?.withRenderingMode(.alwaysOriginal), for: UIControlState.selected)
            UIView.appearance().semanticContentAttribute = .forceLeftToRight
            // UIView.appearance().transform = CGAffineTransform(scaleX: 1.0, y: -1.0)
            navLanguageBtn.isSelected = true

            // self.lblCountryName.transform = CGAffineTransform(scaleX: 1.0, y: 1.0)
            let path = Bundle.main.path(forResource: "en", ofType: "lproj")
            let bundal = Bundle.init(path: path!)! as Bundle


            //home
            HomeCollectionViewController.language = "en"

            navigationItem.title = bundal.localizedString(forKey: "home", value: nil, table: nil)

            SecondHomeCell.newProductTrans = bundal.localizedString(forKey: "newProduct", value: nil, table: nil)
            SecondHomeCell.populerStoriesTrans = bundal.localizedString(forKey: "populerStories", value: nil, table: nil)

            let navController: UINavigationController? = (UIApplication.shared.keyWindow?.rootViewController as? UINavigationController)
            let layout = UICollectionViewFlowLayout()
            let control = HomeCollectionViewController(collectionViewLayout: layout)

            navController?.pushViewController(control, animated: true)

            let AR_POST_PARAMETERS = ["language": HomeCollectionViewController.language]

            self.secondHomeCell?.secondHomeCellDataLoad(POST_PARAMETERS: AR_POST_PARAMETERS as! Dictionary<String, String>)

        }
    }
}

1 个答案:

答案 0 :(得分:1)

要更改应用程序的语言,从应用程序中的按钮单击,我建议您要求用户重新启动应用程序,以便进行更改。

在我的应用程序中,我正在改变这样的语言。

//On Button click:

if applicationLanguage() == "ar"  {
                    setApplicationLanguage(languageCode: "en-US")
                } 
else if applicationLanguage() == "en"  {
                setApplicationLanguage(languageCode: "ar")
            }




func applicationLanguage() -> String
    {
        let languages : NSArray = UserDefaults.standard.object(forKey: "AppleLanguages") as! NSArray
        let selectedLanguage : String = languages[0] as! String
        return selectedLanguage.components(separatedBy: "-").first!
    }

func setApplicationLanguage(languageCode : String)
    {
        // Show Alert to restart the application. Present it in your view controller.



        UserDefaults.standard.set([languageCode], forKey: "AppleLanguages")
        UserDefaults.standard.synchronize()
    }

用户应手动退出应用程序,以便进行更改。