How language and static-string localization works in the Pulsate iOS SDK, and how to segment campaigns by device language.
The Pulsate SDK localizes the static text elements it renders — labels and UI copy that are not editable in the campaign builder. How this works depends on your SDK version, so start by confirming which version you are on.
Pulsate SDK 4.7.0+
From version 4.7.0 the Feed is rendered as a Web Feed. Because the Feed UI is served remotely, per-string localization on the app/SDK side is no longer performed for Feed content.
Campaign content is still localizable: segment your userbase by device language and send a language-specific campaign to each segment. See Language Codes below for how device language is matched.
No public string-override API on current SDKs
The current SDK (4.8.x) does not expose a public API for overriding individual UI strings or forcing a display language. The string-configuration methods that exist in the SDK source (
setCurrentLanguage,setStringConfiguration,setCustomStringWithKey, …) live on a private manager extension and an internal configuration class — they are not callable from your app and will not compile against the shipped framework.If you need programmatic string overrides, contact Pulsate support so the API can be prioritized for a future release. (The typed key classes
PULStringKeyandPULStringConfigurationare already public, so the surface is prepared — only the entry points are unexposed.)
Earlier SDKs (pre-4.7.0, legacy)
On SDKs older than 4.7.0, localization of the native Feed was done by editing bundled string files. This path is retained here for teams still on older builds.
All needed packages ship with the SDK — you only replace the string values you want to localize.
Note
You can also use this mechanism to customize the English copy to anything you wish.
Locate PULPulsateBasic.bundle and PULStrings.bundle, open the folder for the language you want (for example pl.lproj), and edit the PULStrings file. Change values only — never the keys — and keep the .strings syntax intact.
Example — translating to Polish
In the
pl.lprojfolder, change:
"reply_button_label" = "Reply";
to:
"reply_button_label" = "Odpowiedz";
pod updateoverwrites your customizationsUpdating the pod replaces the bundles, including any edited
.stringsfiles. Keep a copy of your customizations and re-apply them after updating.
List of changeable strings (legacy bundle)
"%d days ago" = "%d days ago";
"%d hours ago" = "%d hours ago";
"%d minutes ago" = "%d minutes ago";
"%d months ago" = "%d months ago";
"%d seconds ago" = "%d seconds ago";
"%d weeks ago" = "%d weeks ago";
"%d years ago" = "%d years ago";
"A minute ago" = "A minute ago";
"An hour ago" = "An hour ago";
"Just now" = "Just now";
"Last month" = "Last month";
"Last week" = "Last week";
"Last year" = "Last year";
"Yesterday" = "Yesterday";
"1 year ago" = "1 year ago";
"1 month ago" = "1 month ago";
"1 week ago" = "1 week ago";
"1 day ago" = "1 day ago";
"This morning" = "This morning";
"This afternoon" = "This afternoon";
"Today" = "Today";
"This week" = "This week";
"This month" = "This month";
"This year" = "This year";
"reply_button_label" = "Reply";
"new_message_button_label" = "New Message";
"new_messages_button_label" = "New Messages";
"new_updates" = "New Updates";
"no_internet_user_deleted_error" = "User deleted.";
"no_internet_server_error" = "Unable to Connect. Swipe down to Retry.";
"no_internet_send_message_error" = "Unable to Connect. Try again later.";
"view_conversation_button_label" = "View Conversation";
"select_subject_label" = "Please select a subject";
"write_a_message_hint" = "Write a message...";
"give_your_message_a_subject" = "Give your message a subject so\nit's easier to organize.";
"sent_a_message" = "sent a message";
"replied_to_your" = "replied to your message";
"send_button" = "SEND";
"new_card_label" = "New Card";
"feed_title_label" = "Feed";
"new_message_title_label" = "New Message";
"subject_feedback_label" = "Feedback";
"subject_feature_suggestion_label" = "Feature Suggestion";
"subject_complaint_label" = "Complaint";
"subject_other_label" = "Other...";
"feed_is_empty_title" = "Your Feed is Empty";
"icon_left_text" = "Tap the";
"icon_right_text" = "icon to start a";
"icon_bottom_text" = "new conversation with us.";
"second_paragraph_text" = "You can use this section to \n ask questions or send feedback";
"message_sending" = "Message Sending...";
"message_sent" = "Message Sent";
"message_failed" = "No Internet Connection";
"try_again" = "Try Again?";
"other_subject_hint" = "Please describe your message";
"reached_bottom_of_feed" = "You have reached the bottom of your feed.";
"pulsate_YOU_in_message_card" = "You";
Language Codes
Pulsate lets you build Segments and Campaigns based on device language, using ISO 639-1 two-letter language codes (for example en, pl, de, fr). Use these codes when segmenting your userbase.

