Is there a way to translate dynamic text in Play Framework? - scala

I understand that the Play Framework (2.7) allows Internationalization in which to display pre-written text but is there a way that it can translate blocks of text dynamically? For example; suppose that a user has written a review and another user wants to read that review in their own language. It's not practical to manually translate user reviews before making them accessible to other users. Many thanks

Internationalization feature in Play has nothing in common with translation at all, it's just provide infrastructure around ability of you app to show content based on user localisation preferences. See https://www.playframework.com/documentation/2.8.x/ScalaI18N#Externalizing-messages:
You can externalize messages in the conf/messages.xxx files.
The default conf/messages file matches all languages. Additionally you can specify > language-specific message files such as conf/messages.fr or conf/messages.en-US.
Which means that you can have text files like
conf/messages.en-US:
example.message.id=Example message in US English
conf/messages.fr-FR:
example.message.id=Example message in French
and then retrieve particular message by it's id depending on languauge like:
val messagesApi: MessagesApi = //injected API
messagesApi("example.message.id")(lang)
So Play framework for you will choose proper file and read proper message for particular languague.
But content of files is your responsibility, Play does not translate nothing for you.

Related

Form content in multiple languages: View behaviour and model handling

Currently I work an an app where the user can create products for a catalog. The status is, he can do this in one language, data gets send to the backend and saved. The next step would be to make this creation process ready for multiple languages e.g. english or french. The behaviour should be the following, he choses the language inside a drop down field and gets a form in the selected language.
The problems I encountered and my solution process till now:
1) How should the view handling be? Should I create a new fragment for every language and exchange the content? If Im correct that would mean I would need to destroy and create fragements for the languages, right? And then create them with a binded model again.
2) How should I handle the model/models? Should I create one model with the data they share e.g. creation date and create a model with language related attributes? That would be my solution right now.
Maybe you already did something similiar or have some thoughts about this, thanks for any help!
You should do neither of those things. There are mechanisms in place, generally referred to as i18n that help you with this process. UI5 help available here:
https://ui5.sap.com/sdk#/topic/df86bfbeab0645e5b764ffa488ed57dc
and
https://ui5.sap.com/sdk#/topic/5424938fc60244c5b708d71b50a0eee4
In summary, translations should be done using the i18n mechanisms and the oData logon language.
Logging into the application, assuming it's hosted on an SAP gateway or SCP / Launchpad, the user's current logon language will drive at least all standard SAP translatable texts like the labels returned from data elements in your oData services. The appropriate url parameter is sap-language=EN, but it's set automatically from the current browser settings. Generally, you don't have to worry about this.
The same browser settings drive which particular i18n file is loaded. This could be specific like en_US for American English, or fr for French.
If you code your app without any hard coded translations but always follow the rules in the links above, adding a language should be trivial.
These translations could probably be triggered programmatically via a dropdown as well but I have never tried that since it's extra steps for my users.

Name input like SMS or Facebook app

I'm trying to find a library that can handle autocompletion with tokened (grouped) texts.
There are some very nice libraries out there for autocompletion such as:
https://github.com/EddyBorja/MLPAutoCompleteTextField
https://github.com/hoteltonight/HTAutocompleteTextField
https://github.com/TarasRoshko/TRAutocompleteView
The problem here is, I want to make the selection look like names tagging at SMS or Facebook app. So when the user tries to delete, he should delete all the text.
There are good jQuery implementations, one of them is this:
http://loopj.com/jquery-tokeninput/
I couldn't find any for iOS, perhaps the keywords are very generic, thus Google does not show any related results. Is there any library for this or can you provide any code examples?
What you're trying to achieve can't be done using the public SDK.
However, there exist some nice third party solutions.
I found this question, Is there an iPhone equivalent to the NSTokenField control?, which includes links to controls you could use.

Is it possible to provide additional info about my app to the system search?

There's a system search in iOS that allows users to search though the whole device by searching entered keyword for app names, mail messages, calendar and etc. Is it possible to provide some additional information (content info) about my app to system search? We are developing some rich-graphic-content app and there are various objects there.
The customer asked us, is it possible to implement such use case: a user enters the name of some object and system search finds that object and shows our app name in the result list :) Maybe it's possible to create some "sitemap" with information about the app content, to put that somewhere into plist and to ask system search to use that for search index. I'm pretty sure it's impossible, just want to be 100% sure :)
UPDATE: One thought on that - maybe system search also uses app description text from itunes? If so then we could place additional information there and to workaround that :)
For static keywords (that are pre-defined when building the app), you can do this: How to get an iPhone app to appear in Spotlight with a query that doesn't exactly match
Unfortunately, there doesn't seem to be any way to add keywords dynamically, e.g. for the objects/files created with your app, like the Apple-provided apps do. Hopefully, the ability to add your app's contents to Spotlight will be added in a future version of iOS (7+).

Translation-oriented CMS/Wiki/HelpPortal systems?

We need to run a help portal for users of our application. We want every page to be accesible in several languages.
I want to find a content-management system which would have rich translation features, such as:
Per-paragraph translation;
Warnings for translated content that wasn't updated after a change was made to another language;
Possibility to choose whether to show or hide paragraphs/pages which are not translated;
Easy and user-friendly switching between languages (e.g. "this page is accessible in the following other languages: ...").
I found a MediaWiki plugin which allows at least some of the above mentioned. Are there any CMSes with native orientation for translations and multilingual content?
The Daisy CMS has great built-in translation support.
Break your content into sections and translate them individually, or whole pages at a time.
You can run a report that tells you which documents have translations that are out of sync with the base language, and which documents don't have translations at all. You can then translate inside the app or export for offline translation and import later.
You can exclude untranslated pages and paragraphs from the locale-specific navigation automatically.
The menu will automatically show the user which languages are available for a specific page.

Localization issue in iphone

I need to make an application in which the user can toggle between two languages on triggering a click event on a button.
The problem here is that I have seen examples in which, if we want to load our localized nib file, then we need to change the language from the settings options and we can get the proper nib file loaded according to language selected.
I want to do this within my application, meaning I don't want to go to the settings menu and change the language and then reload the application.
I just want the above effect within my application (that is, through a button click event the app should be able to toggle between two languages).
Is it possible, and does Apple allow it?
Nobody here can tell you whether Apple will allow it, but if your app is well designed and there's a good reason for this departure from the usual way of doing things, you've probably got a good shot.
There's nothing to prevent you from loading a nib file localized for a different region. I'd probably avoid trying to use Apple's automatic mechanism, though. Just name your nib files using some pattern and load the appropriate one.
If you want your life to easy, you will take advantage of the Localization built into the operating system. Otherwise, you will have write your own methods to load localized strings or nib files.
There is no reason for Apple to reject an app that shows localized text based on an in-app setting. I work to help developers localize apps and, although I don't suggest this approach, they have done it and I've never heard of a rejection from Apple.
What you won't be able to do is use Apple's built-in tools, which rely on the system settings to determine a user's language and push the text from a Localizable.strings file. But it honestly won't take you too long to implement a similar system yourself using functions akin to gettext.
You essentially need to implement the same basic logic as any localization system:
1) Surround your in-app texts in a function that will display the proper language based on the user's chosen settings
2) Export your source texts (probably English into file
3) Translate the English strings into each language in a separate file
The function you write can follow the lines of gettext, which has examples in many programming languages. If the settings is "French" grab the equivalent string from the French file. If the setting is English, just print the English.
You won't be able to use Apple's tools, but you CAN do it on your own and Apple won't really care as far as I know. However, if you choose to localize into an Apple-supported language, follow this app localization tutorial for iOS using the standard Localizable.strings method.