Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 正在运行的应用程序中切换脚本中视图元素的语言_Ios_Swift_Localization_Storyboard - Fatal编程技术网

Ios 正在运行的应用程序中切换脚本中视图元素的语言

Ios 正在运行的应用程序中切换脚本中视图元素的语言,ios,swift,localization,storyboard,Ios,Swift,Localization,Storyboard,我有一个应用程序,我想在应用程序中更改语言,这可以与localize.strings一起使用,但此代码不会触发main.strings文件 下面是设置语言VC中使用的代码 import UIKit let AppLanguageKey = "AppLanguage" let AppLanguageDefaultValue = "en" var appLanguage: String { get { if let language = NSUserDefaults.standardU

我有一个应用程序,我想在应用程序中更改语言,这可以与localize.strings一起使用,但此代码不会触发main.strings文件

下面是设置语言VC中使用的代码

import UIKit

let AppLanguageKey = "AppLanguage"
let AppLanguageDefaultValue = "en"

var appLanguage: String {

get {
    if let language = NSUserDefaults.standardUserDefaults().stringForKey(AppLanguageKey) {
        return language
    } else {
        NSUserDefaults.standardUserDefaults().setValue(AppLanguageDefaultValue, forKey: AppLanguageKey)
        return AppLanguageDefaultValue
    }
}

set(value) {
    NSUserDefaults.standardUserDefaults().setValue((value), forKey: AppLanguageKey)
}

}

class ViewController: UIViewController {
以下是StringsExtension.swift中使用的代码

import Foundation

extension String {

var localizeString: String {
    return localizeString(appLanguage)
}

var localizeStringUsingSystemLang: String {
    return NSLocalizedString(self, comment: "")
}

func localizeString(lang:String?) -> String {

    if let lang = lang {
        if let path = NSBundle.mainBundle().pathForResource(lang, ofType: "lproj") {
            let bundle = NSBundle(path: path)
            return NSLocalizedString(self, tableName: nil, bundle: bundle!, value: "", comment: "")
        }
    }
    return localizeStringUsingSystemLang
}
}
请尝试以下代码:

塔巴·斯威夫特

Localizable.strings(英语)

Localizable.strings(法语)

主故事板



那么,您想使用不同的字符串文件吗?或者,您使用例如系统按钮“完成”,并且希望转换系统元素?我希望同时使用main.strings(故事板)和本地化的.strings。目前,仅输入本地化的.strings。主字符串具有选项卡名称,以及某些选项卡上的菜单项。这就是为什么我两者都需要。我尝试将菜单项添加到localize.strings,但这不起作用。我建议您以编程方式设置视图元素的所有标题。一个小时后我会为你做样品。谢谢你。好的,做了,效果很好。现在只需要本地化导航标题和选项卡名称Hi Vasily,我让它工作,选项卡栏项目和所有。谢谢你的支持。我会用所有代码更新上一篇文章,以防你想看到我做了什么。感谢(你能给我一个投票支持这三个问题吗?)。请点击此处查看所有详细信息和最终代码
import UIKit

class TabBarController: UITabBarController {

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    setTabViewControllerParams(0, tabBarItemTitle: "ONE".localizeString, navigationItemTitle: "ONE".localizeString)
    setTabViewControllerParams(1, tabBarItemTitle: "TWO".localizeString, navigationItemTitle: "TWO".localizeString)
}

func setTabViewControllerParams(index: Int, tabBarItemTitle: String, navigationItemTitle: String) {

    if let tabBarItems = tabBar.items {
        if index < tabBarItems.count {
            tabBarItems[index].title = tabBarItemTitle
        }
    }

    if let viewControllers = viewControllers {
        if index < viewControllers.count {
            if let navigationController = viewControllers[index] as? UINavigationController {
                if navigationController.viewControllers.count > 0 {
                    let viewController = navigationController.viewControllers[0]
                    viewController.navigationItem.title = navigationItemTitle
                }
            }
        }
    }
}
}
"ONE" = "один";
"TWO" = "два";
"ONE" = "one";
"TWO" = "two";
"ONE" = "un";
"DEUX" = "deux";
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10117" systemVersion="15G31" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="nUR-Hp-pCa">
<dependencies>
    <deployment identifier="iOS"/>
    <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
</dependencies>
<scenes>
    <!--View Controller-->
    <scene sceneID="CyN-qL-pwy">
        <objects>
            <viewController id="pYF-J2-lCH" sceneMemberID="viewController">
                <layoutGuides>
                    <viewControllerLayoutGuide type="top" id="7sj-ZO-H6Z"/>
                    <viewControllerLayoutGuide type="bottom" id="z8T-yS-yZZ"/>
                </layoutGuides>
                <view key="view" contentMode="scaleToFill" id="fUH-or-StF">
                    <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
                    <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                    <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
                </view>
                <navigationItem key="navigationItem" id="t7h-zd-rWW"/>
            </viewController>
            <placeholder placeholderIdentifier="IBFirstResponder" id="yti-8g-g3h" userLabel="First Responder" sceneMemberID="firstResponder"/>
        </objects>
        <point key="canvasLocation" x="1837" y="905"/>
    </scene>
    <!--View Controller-->
    <scene sceneID="qSl-mU-Ice">
        <objects>
            <viewController id="6og-vK-uE7" sceneMemberID="viewController">
                <layoutGuides>
                    <viewControllerLayoutGuide type="top" id="8pT-ac-TqX"/>
                    <viewControllerLayoutGuide type="bottom" id="xne-JP-NAW"/>
                </layoutGuides>
                <view key="view" contentMode="scaleToFill" id="cy0-Zm-dW4">
                    <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
                    <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                    <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
                </view>
                <navigationItem key="navigationItem" id="Yme-f2-Ybt"/>
            </viewController>
            <placeholder placeholderIdentifier="IBFirstResponder" id="sj3-Kd-b6r" userLabel="First Responder" sceneMemberID="firstResponder"/>
        </objects>
        <point key="canvasLocation" x="1837" y="244"/>
    </scene>
    <!--Tab Bar Controller-->
    <scene sceneID="hYk-it-5Yg">
        <objects>
            <tabBarController id="nUR-Hp-pCa" customClass="TabBarController" customModule="stackoverflow_39242174" customModuleProvider="target" sceneMemberID="viewController">
                <tabBar key="tabBar" contentMode="scaleToFill" id="ZIu-fS-Ven">
                    <rect key="frame" x="0.0" y="0.0" width="320" height="49"/>
                    <autoresizingMask key="autoresizingMask"/>
                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
                </tabBar>
                <connections>
                    <segue destination="9ZZ-tm-gKt" kind="relationship" relationship="viewControllers" id="tba-rV-XaM"/>
                    <segue destination="QV0-6J-vKg" kind="relationship" relationship="viewControllers" id="MnC-tA-o6W"/>
                </connections>
            </tabBarController>
            <placeholder placeholderIdentifier="IBFirstResponder" id="5R8-Ki-Qv1" userLabel="First Responder" sceneMemberID="firstResponder"/>
        </objects>
        <point key="canvasLocation" x="205" y="575"/>
    </scene>
    <!--Item 1-->
    <scene sceneID="5eX-TM-S1f">
        <objects>
            <navigationController automaticallyAdjustsScrollViewInsets="NO" id="9ZZ-tm-gKt" sceneMemberID="viewController">
                <tabBarItem key="tabBarItem" title="Item 1" id="6fX-a0-rTY"/>
                <toolbarItems/>
                <navigationBar key="navigationBar" contentMode="scaleToFill" id="LaV-6J-YLJ">
                    <rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
                    <autoresizingMask key="autoresizingMask"/>
                </navigationBar>
                <nil name="viewControllers"/>
                <connections>
                    <segue destination="6og-vK-uE7" kind="relationship" relationship="rootViewController" id="H4K-P1-t3E"/>
                </connections>
            </navigationController>
            <placeholder placeholderIdentifier="IBFirstResponder" id="n57-4l-GAt" userLabel="First Responder" sceneMemberID="firstResponder"/>
        </objects>
        <point key="canvasLocation" x="1025" y="244"/>
    </scene>
    <!--Item 2-->
    <scene sceneID="nqO-69-Jkp">
        <objects>
            <navigationController automaticallyAdjustsScrollViewInsets="NO" id="QV0-6J-vKg" sceneMemberID="viewController">
                <tabBarItem key="tabBarItem" title="Item 2" id="YyT-40-7qX"/>
                <toolbarItems/>
                <navigationBar key="navigationBar" contentMode="scaleToFill" id="ukb-bm-c5h">
                    <rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
                    <autoresizingMask key="autoresizingMask"/>
                </navigationBar>
                <nil name="viewControllers"/>
                <connections>
                    <segue destination="pYF-J2-lCH" kind="relationship" relationship="rootViewController" id="gRY-up-TJA"/>
                </connections>
            </navigationController>
            <placeholder placeholderIdentifier="IBFirstResponder" id="geq-VQ-SVO" userLabel="First Responder" sceneMemberID="firstResponder"/>
        </objects>
        <point key="canvasLocation" x="1025" y="905"/>
    </scene>
</scenes>
</document>