I am making a Windows Phone application that scans barcodes of grocery items. If the barcode is not found I ask the user to fill in info such as

name

brand

unit size

I am mainly focusing on English but still planning to deploy to all marketplaces.

One scenario concerns me though.

In places like Canada a product has to have both English & French labelling. This product will share 1 barcode. So, some companies will have French Brand Name & English Brand Name and French Product Name and English Product Name.

I have no clue how to figure out what they are entering but the results could be bad.

Consider this product

If I setup my database to have one row per barcode I will only get one language back, either the English or French depending on what the user entered. I could get around this in the back end by querying for a Language as well.

Problem is how do I get the user to tell me what they are entering in?

Option 1: Dropdown with every language that is required when adding product?

Option 2: Detect language from phone

I don't like option 1 as that is too many choices and Option 2 can be hard as if the phone is not correctly setup might get the wrong result and also I have to consider French and French Canadian might be different.

A flag is not a good indicator of Language. Especially in this context - it's a Canadian issue, yet they speak English and French, so what, you'd show the French Flag or the English Flag for people in Canada to select as their country?
–
JonW♦Feb 5 '14 at 10:03

A good option would be to ask the user for his language when launching the app for the first time. But let's imagine a canadian choosed french and then enter a name like "cheese". If nothing is found, you could make some suggestions like :

No results for this name. Try another name or switch to english

Another solution would be to keep the french and english name in the database (I don't know how you're managing your database and it would be really complex but this is just a suggestion).

I am not too concerned about the database area I have 2 possible solutions for that already but it is the GUI. I need a way to make sure that if they enter in a product the right language gets associated with it. So in the end the picture I posted would basically be considered 2 different products so that English and French speaker would see the correct wording.
–
chobo2Feb 5 '14 at 17:38

If barcodes are the same for different names so you can use another table for languages. One table for barcodes and one table for product related data (brand and product name).

If an English user scan a product and it didn't found so s/he enter English name for that product. Then there is a French user that scan the same product but encounter with a English name. In this case a "Suggestion" like button is required. So s/he can enter another name that is matched with his/r language and this name will be linked to that barcode.

Also there is another solution. You have an application. So you can get user's language in the first launch. All rest of works done in the given language.

I would strongly advise against the third idea. My friends are always amused when they happen to see my grocery list - because it is in three different languages (each item appears once only, but the language in which I entered it is random). Whatever a bilingual user enters as language at the first launch, you cannot rely that she will continue to use this language consistently throughout her use of the app. Bilinguals change language depending on context, and you can't control for that.
–
Rumi P.Feb 5 '14 at 12:36

@RumiP. that's an interesting point of view but I think bilinguals are a minority. I'm not saying we should ignore minorties but when designing you have to make choices regarding your core public. Sometimes you can't spend a bunch of time designing things for 3% of your users. I think it wouldn't be wrong to assume the user is speaking english if he choosed it and if the whole app is in english too. As you said, you conciously know that other people won't understand your grocery list, how the app would do ?
–
GabinFeb 5 '14 at 15:02

I don't think that bilinguals are a small minority in Canada. And as a user, I don't expect that my grocery app will "understand" my entries - I view it as a dumb data storage, as a list where I enter any word which I will understand. Data reuse concepts are a learned skill, and the average user out there doesn't know, or want to know, that his entries are relevant for other users using the same application. He might choose the language in which he wants the app to speak to him; he is not considering his entries in the sense that he is speaking to the app.
–
Rumi P.Feb 5 '14 at 15:17

And if I understand the app correctly, there is no human who reviews entries users made. The first time a English-Canadian user (whose presumed language is English) connects a certain barcode to "pain", all other English-speaking app users will see "pain" come up when they scan the same barcode, not "bread". So the minority's entries will ruin the experience of the majority. It isn't a good idea to disregard them at all. And the dev can't rely on the user understanding the consequences, because the user doesn't want to be saddled with the responsibility of filling the dev's database.
–
Rumi P.Feb 5 '14 at 15:21

Ya right now I have no plan of human review and I mean that won't even solve the problem. If a user puts in "pain" for that product with the right barcode then it just as correct as if someone wrote in "bread" so there would be a war of people editing the record back and forth. I can handle the back end but don't know how to do the front end so I get the correct language.
–
chobo2Feb 5 '14 at 17:36

Why not use Google Translate API to automatically detect the language of the product name? We use it on our products for language detection and translation.

Obviously, language detection works better the longer the input text is. But even with short input (one or two words), the API will return a 'confidence' parameter which indicates the confidence of the language detection operation.