“ | In your language: 'Eat lead, laddies!' — The Demoman | ” |
Localization on Mac OS X. Mac OS X has a fully-fledged and elegant localization infrastructure that enables software to be translated into multiple languages and shipped as a single convenient package to end users. In this article I don't rehash the material on localization that is already available on the web. Support for Office 2016 for Mac ended on October 13, 2020. Rest assured that all your Office 2016 apps will continue to function—they won't disappear from your Mac, nor will you lose any data. However, you could expose yourself to serious and potentially harmful security risks. Try Microsoft 365 for free. Here's what the end of support means. What is a here-string and how do I use it? In PowerShell, you can use here-strings to declare blocks of text. They’re declared just like regular strings except they have an @ on each end. Instead of being limited to one line, you can declare an entire block or a multiple line string. Here-strings are also useful for making a string composed. Missing customizations in Office Word for Mac after installing 2016 version. In theory you should be able to go here. During the beta release of Office 2016 I.
Localized values are not stored in the Info.plist file itself. Instead, you store the values for a particular localization in a strings file with the name InfoPlist.strings. You place this file in the same language-specific project directory that you use to store other resources for the same localization.
Localization files govern how text and dialogue are used and shown in-game in the user's preferred language. This includes everything from item descriptions to achievement names.
For example, a Winger would be known as a Flügelstürmer in German.
The files below contain the appropriate text translations for 27 supported languages as determined by the Steam Translation Server (commonly abbreviated as STS).
To help translate Valve games into your language, please visit the STS website.
To view a page on this Wiki in a different language, click on the language links located under Languages section in the sidebar.
To help translate this Wiki into your language, visit the Language Center.
June 19, 2008 Patch (Pyro Update)
July 8, 2010 Patch (Engineer Update)
June 23, 2011 Patch (Über Update)
October 13, 2011 Patch (Manniversary Update)
June 27, 2012 Patch (Pyromania Update)
December 20, 2012 Patch (Mecha Update)
June 18, 2014 Patch (Love & War Update)
October 29, 2014 Patch (Scream Fortress VI)
December 22, 2014 Patch (Smissmas 2014)
February 11, 2015 Patch #1
October 28, 2015 Patch (Scream Fortress 2015)
December 17, 2015 Patch (Tough Break Update)
June 22, 2016 Patch #1
July 7, 2016 Patch (Meet Your Match Update)
October 21, 2016 Patch (Scream Fortress 2016)
October 20, 2017 Patch #1 (Jungle Inferno Update)
October 26, 2017 Patch (Scream Fortress 2017)
March 28, 2018 Patch #1
October 19, 2018 Patch (Scream Fortress 2018)
July 25, 2019 Patch (Summer 2019 Pack)
October 10, 2019 Patch (Scream Fortress 2019)
December 16, 2019 Patch (Smissmas 2019)
August 21, 2020 Patch (Summer 2020 Pack)
October 1, 2020 Patch (Scream Fortress 2020)
December 3, 2020 Patch (Smissmas 2020)
Bulgarian (BG) [Not supported on this wiki]
Chinese (Simplified) (ZH-HANS)
Chinese (Traditional) (ZH-HANT)
Czech (CS)
Danish (DA)
Dutch (NL)
English (EN-US or EN-GB) [No tag on this wiki]
Finnish (FI)
French (FR)
German (DE)
Greek (EL-GR) [Not supported on this wiki]
Hungarian (HU)
Italian (IT)
Japanese (JA)
Korean (KO)
Norwegian (NO)
Pirate [Not supported on this wiki]
Polish (PL)
Portuguese (PT)
Portuguese-Brazil (PT-BR)
Romanian (RO)
Russian (RU)
Spanish-Spain (ES)
Spanish-Latin America (ES-419) [Not supported on this wiki]
Swedish (SV)
Thai (TH) [Not supported on this wiki]
Turkish (TR)
Ukrainian (UK) [Not supported on this wiki]
Vietnamese (VI) [Not supported on this wiki]
This tech note is for app developers on macOS, iOS, watchOS, and tvOS who are modularizing their code into frameworks. It demonstrates how to embed frameworks built as dependencies of an app for different project configurations. This tech note also provides troubleshooting steps for common issues encountered when embedding frameworks.
A framework is a hierarchical directory that encapsulates a dynamic library, header files, and resources, such as storyboards, image files, and localized strings, into a single package. Apps using frameworks need to embed the framework in the app's bundle.
Apps wishing to utilize frameworks to share code across different parts of their application, such as between an app and an app extension, need to start from the framework template appropriate for the app's target platform. The framework target can be added to the same project as the app target, or it can be added to a separate Xcode project.
Create a new Xcode target and select the framework template appropriate for your app's target platform.
Add all of the framework source files to the new target's Compile Sources build phase.
Set the visibility of header files needed by clients of the framework to Public.
Add the public headers to the umbrella header file. If your framework is named YourFramework
, the umbrella header is named YourFramework.h
.
Follow the steps in Configuring Your Project to configure the new framework target as a dependency of the app target.
Before embedding a framework, set up your Xcode project so the app target depends on the framework target. The following sections describe how to set up this dependency for common project scenarios.
Apps with one Xcode project containing an app target and a framework target can go on to the Embedding a Framework section.
Apps not using an Xcode workspace that depend on a framework in a different Xcode project should configure the app project using these instructions:
Open the app’s Xcode project.
In Finder, locate the framework Xcode project. Drag this Xcode project from Finder to the Project Navigator, inside of the app project. This nests a reference to the framework project in the app project, as shown in Figure 1.
Follow the steps in Embedding a Framework.
Apps using an Xcode workspace that depend on a framework in a different Xcode project should configure the app project using these instructions:
Open the Xcode workspace.
Add each Xcode project to the workspace with File > Add Files to 'Workspace Name.'
Follow the steps in Embedding a Framework.
An umbrella framework is a framework bundle that contains other frameworks. While it is possible to create umbrella frameworks for macOS apps, doing so is unnecessary for most developers and is not recommended. Umbrella frameworks are not supported on iOS, watchOS, or tvOS.
In nearly all cases, you should include your code in a single, standard framework bundle. If your code is sufficiently modular, you can create multiple frameworks, where the dependencies between frameworks is minimal or nonexistent.
If your app has dependencies between frameworks, configure the dependency with these instructions:
In the framework target's General settings, add the frameworks it depends on to the Linked Frameworks and Libraries section, as shown in Figure 2.
In the app project, follow the instructions for Embedding a Framework. The app target is responsible for embedding all of the frameworks, including any frameworks that other frameworks depend on.
The steps to embed a framework vary, depending on the type of app you are building. The following sections describe how to embed the framework inside the built app for the different types of apps.
Important: This section only applies to iMessage apps. For iOS apps providing an iMessage Extension, see Embedding a Framework in iOS, macOS, watchOS, and tvOS Apps.
Open the iMessage app’s Xcode project or workspace.
Go to the Build Phases for the iMessage extension target.
Add the framework to the Link Binaries With Libraries list. See Figure 3.
Go to the Build Phases for the iMessage app target.
Add a New Copy Files Phase by selecting the Add icon, highlighted in Figure 4. Set the Destination field to Frameworks, and add the framework to the list. Ensure Code Sign on Copy is checked.
Open the app’s Xcode project or workspace.
Go to the app target’s General configuration page.
Add the framework target to the Embedded Binaries section by clicking the Add icon, highlighted in Figure 5. Do not drag in the framework from Finder.
Select your framework from the list of binaries that can be embedded.
The following sections describe common errors when embedding frameworks, and steps for resolving each type of error.
The following errors are caused by a project configuration that embeds a framework built for a build configuration that is different from the build configuration for the app.
To fix any of these errors:
Open the Project Navigator.
Look for items referencing a framework that your app builds as a dependency that is not in the Products section. Figure 6 shows an example.
Delete this item from the Project Navigator. Select 'Remove Reference' on the confirmation dialog.
Follow the steps in Configuring Your Project.
The following error indicates a framework is missing from the app bundle.
To fix this error:
Follow the steps in Inspecting A Binary's Linkage.
In the results from the previous step, find the lines starting with @rpath
that are not listed in the Embedded Binaries section in the app target's General settings.
Remove the frameworks identified in the previous step from the Linked Frameworks and Libraries section in the app target's General settings.
Embed the frameworks by following the steps in Embedding a Framework.
The following errors may indicate your app is embedding a dynamic library that is not packaged as a framework. Dynamic libraries outside of a framework bundle, which typically have the file extension .dylib
, are not supported on iOS, watchOS, or tvOS, except for the system Swift libraries provided by Xcode.
To determine if the cause of these errors is due to having a dynamic library outside of framework:
In the Xcode Organizer, right click on the archive producing the error and select 'Show In Finder.'
Right click on the .xcarchive
and select 'Show Package Contents.'
Navigate to the Products/Applications
directory.
Open Terminal, and run the command in Listing 1. You can drag and drop the .app
from Finder to Terminal to fill in the path.
Look for any file in the output whose name does not begin with libSwift
.
Convert the library identified in the previous step to a framework by following the steps in Adding A Framework Target.
Note: The Invalid Swift Support errors shown here can also indicate a problem with how the app was archived. If you didn't find any dynamic libraries in the Terminal output above, consult the Xcode documentation for submitting apps to the App Store to ensure that you are using the correct archive process for the App Store.
Listing 1 Terminal command to find .dylib
files
The following error indicates your app embedded a static library.
This is caused by placing a static library in a bundle structure that looks like a framework; this packaging is sometimes referred to by third party framework developers as a static framework. Since the binary in these situations is a static library, apps cannot embed it in the app bundle.
If you are building your own static library and using shell scripts to package it in a .framework
directory, you need to migrate to building a framework with a dynamic library instead, as this is the correct way to build a framework. Static frameworks are not a supported way of sharing static libraries. To migrate to a framework using a dynamic library, consult Adding A Framework Target.
If you use third party libraries that you do not build yourself, you can solve this error by identifying the static framework and removing it from the Embedded Binaries section.
Follow the steps in Inspecting A Binary's Linkage.
In the results from the previous step, compare the entries starting with @rpath
in the Terminal output to the libraries listed in the Embedded Binaries section on the app target's General settings. Any library listed in the app target's General settings but not the Terminal output is likely the source of the problem.
Confirm each of the libraries identified in the previous step is a static library by running the command in Listing 2 in the Terminal. If the library is a static library, the output of the file command will look like Listing 3.
Once you've confirmed the library is static, go to the Build Phases for the app target in Xcode. Remove this library from any build phase named 'Copy Files' or 'Embed Frameworks.' The library should remain in the 'Link Binary with Libraries' section.
Listing 2 Terminal command to determine if a binary is a static library
Listing 3 Example output for a static library
Some errors require inspecting a binary to see what libraries it is linked against, and comparing this information to the project setup in Xcode. Follow these steps to inspect the binary when directed to by specific troubleshooting sections, and use the results as indicated by that troubleshooting section.
In the Xcode Organizer, right click on the archive producing the error and select 'Show In Finder.'
Right click on the .xcarchive
and select 'Show Package Contents.'
Navigate to the Products/Applications
directory. Right click on the .app
and select 'Show Package Contents.'
Find your app's binary, usually named the same as the app's target in Xcode. Open Terminal, and run the command in Listing 4. You can drag and drop the binary from Finder to the Terminal to fill in the path.
Repeat these steps for any app extensions or frameworks in your .app
. Make sure to give the otool command the path to the binary, and not the outer .framework
or .appex
directory.
Listing 4 Terminal command to list all of the libraries dynamically linked to a binary
The output of this Terminal command lists all of the dynamic libraries a binary is linked against, for each architecture in the binary.
Note: The system Swift libraries (libraries whose name starts with libSwift
) will be listed in the Terminal output, but not in Embedded Binaries section of the app target's General settings. This is expected.
Date | Notes |
---|---|
2017-03-14 | Added information for embedding frameworks in iMessage apps and expanded Troubleshooting section |
2016-09-13 | New document that demonstrates how to embed a framework for different project configurations, and how to troubleshoot common errors |
Copyright © 2017 Apple Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2017-03-14