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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了斯威夫特:翻译成阿拉伯语后没有返回英文版相关的知识,希望对你有一定的参考价值。

我想在英语和阿拉伯语版本之间本地化我的应用程序包括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>)

        }
    }
}
答案

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

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

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

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

以上是关于斯威夫特:翻译成阿拉伯语后没有返回英文版的主要内容,如果未能解决你的问题,请参考以下文章

如何将字符串转换为 utf-8? (斯威夫特,阿拉莫菲尔)

斯威夫特:阿拉莫菲尔邮报

无法调用非函数类型“HTTPURLResponse?”的值阿拉莫菲尔 4,斯威夫特 3

拼音翻译成阿拉伯数字

阿拉伯数字用英语怎么说

怎么将中文转换成数字代码