openfoodfacts / smooth-app

🤳🥫 The new Open Food Facts mobile application for Android and iOS, crafted with Flutter and Dart
https://world.openfoodfacts.org/open-food-facts-mobile-app?utm_source=off&utf_medium=web&utm_campaign=github-repo
Apache License 2.0
835 stars 279 forks source link

Add the product main language to the details page (write) #4771

Open monsieurtanuki opened 11 months ago

monsieurtanuki commented 11 months ago

Problem

Today it's not possible in the app to see or set the product main language (LANGUAGE / lang).

Proposed solution

Add the product main language to the details page (write).

Additional context

May explain #4672

Azad99-9 commented 11 months ago

@monsieurtanuki i would like to work on this issue, please assign it to me.

I have gone through #4672 as well, it would be more helpful if you could brief me a little bit more about this issue.

monsieurtanuki commented 11 months ago

Hi @Azad99-9! Let's focus on the current issue. After all I think the "main language" should be added to the "other details" page (cf. "website" field). Please post a screenshot here before any PR, just to check if you are in the right direction.

Azad99-9 commented 11 months ago

main_language_bug

@monsieurtanuki Shall i add the main language option in this page after the website field.

monsieurtanuki commented 11 months ago

@monsieurtanuki Shall i add the main language option in this page after the website field.

@Azad99-9 Yes, something like that.

Azad99-9 commented 11 months ago

main_language_done @monsieurtanuki added the product specific language selector in the other details section and this is what it looks like. any followups?

monsieurtanuki commented 11 months ago

@Azad99-9 Please consider that:

Azad99-9 commented 11 months ago

@monsieurtanuki just need a little more clarity, All user interface elements within the specific product range should be displayed in the main language of the product ?

monsieurtanuki commented 11 months ago

@Azad99-9 Not really sure what you mean but:

Azad99-9 commented 11 months ago

Yeah that was comprehensive, go it.👍

Azad99-9 commented 11 months ago

@Azad99-9 Please consider that:

  • The language can be null and I don't see how it would look with your UI
  • The label is definitely incorrect - it should rather be "Main product language"

@monsieurtanuki

  1. I've implemented a solution to address null values by setting English as the default language whenever the value is missing or null in the field product.lang.
  2. Additionally, I've introduced a new field named "product_main_language_title" across all "arb" files, which corresponds to the string "Main product language".

Shall i raise the pull request?

monsieurtanuki commented 11 months ago

I've implemented a solution to address null values by setting English as the default language whenever the value is missing or null in the field product.lang.

English is NOT the default. null is the default. Please imagine a solution in the language selector where the language can be null, perhaps with an additional label like "not specified".

Additionally, I've introduced a new field named "product_main_language_title" across all "arb" files

Please just edit the file that you change, in this case probably ONLY app_en.arb.

which corresponds to the string "Main product language".

That's good.

Azad99-9 commented 11 months ago

@monsieurtanuki When a new product is being created, the language selector is automatically setting the 'product main language' field to English by default. This setup indicates that the product main language field is always assigned a value and technically cannot be null, as the language selector widget lacks an option corresponding to null.

Would it be advisable to modify the language selector widget to include an additional option, such as 'not-specified,' allowing the 'product main language' field to accommodate null values, as previously suggested?.

monsieurtanuki commented 11 months ago

When a new product is being created, the language selector is automatically setting the 'product main language' field to English by default.

Only if that's the way you coded it. lang can be null and we have to deal with this case. Actually it's probably populated by default with the lc parameter of the first saveProduct.

This setup indicates that the product main language field is always assigned a value and technically cannot be null.

Yes it technically can: String? lang.

Would it be advisable to modify the language selector widget to include an additional option, such as 'not-specified,' allowing the 'product main language' field to accommodate null values, as previously suggested?.

That's exactly what I suggested in my previous comment: "Please imagine a solution in the language selector where the language can be null, perhaps with an additional label like "not specified"."

Azad99-9 commented 11 months ago

@monsieurtanuki may i know what is the difference between "product query language" and product.lang.

monsieurtanuki commented 11 months ago

@Azad99-9 In this issue it's "product MAIN language" and lang. For instance, you can query in Dutch a product in Belgium whose main language is French.

abdullah-khudher commented 10 months ago

Is there any update on this issue @Azad99-9?

Azad99-9 commented 10 months ago

Kindly unassign me this issue.

abdullah-khudher commented 10 months ago

@monsieurtanuki There is a product main language dropdown on the details page to choose the language when trying to add a new product.

Do you mean in some other place?

WhatsApp Image 2023-12-25 at 12 38 53 AM

WhatsApp Image 2023-12-25 at 12 42 15 AM

monsieurtanuki commented 10 months ago

@abdullah-khudher Again, there are localized fields. For each of them, there is a language selector. For instance, the name of the product is X in English and Y in French. Like in your screenshots.

AND, there's a field that contains the product MAIN language. That's what the issue is about.

M123-dev commented 10 months ago

As far as I understood it (Correct me if I'm wrong): Say there is a product sold in Germany

[Example Brand] Soyamilch

We can have its name in English:

[Example brand] Soy milk

But we can specify the main language of a product, which in this case would be German, since that's what's on the product.

That's what the lang field in the product is for

monsieurtanuki commented 10 months ago

@M123-dev That's correct!

monsieurtanuki commented 9 months ago

@abdullah-khudher Still working on it?

panicoli0 commented 7 months ago

Can I take that issue?

monsieurtanuki commented 7 months ago

Hi @panicoli0! You can see in that thread what needs to be done regarding UI and code. Don't hesitate to ask additional questions before sending a PR.

panicoli0 commented 7 months ago

Hey @monsieurtanuki I think that I got it, let me make it more visual just for clarification purposes. So I created this mockup: image

The idea is to have the capability to define the product's main language right?

monsieurtanuki commented 7 months ago

The idea is to have the capability to define the product's main language right?

@panicoli0 Indeed it is. But I suggest you code in the "additional details" page (where "website" is) because:

teolemon commented 7 months ago

The proper wording is "Main product language"

panicoli0 commented 7 months ago

Agreed! This is how is going to look: image

Feel free to share your thoughts

monsieurtanuki commented 7 months ago

@panicoli0 Not a big fan of the "Main product language" looking like a chapter title but that's the right page, that will do for the moment.

Please note that this is the only language selector case where the language may be null:

panicoli0 commented 7 months ago

I just spotted that product.lang is not editable and is always coming as default with a value of ENGLISH. I tried to save the value the same as we did for the website without success.

/// Returns a [Product] with the values from the text fields.
  Product? _getMinimalistProduct() {
    // Product()
    //   ..barcode = _product.barcode
    //   ..website = _websiteController.text;

    Product? result;
    Product getBasicProduct() => Product()
      ..barcode = _product.barcode
      ..lang = _multilingualHelper.getCurrentLanguage()
      ..website = _websiteController.text;

    if (_websiteController.isDifferentFromInitialValue) {
      result ??= getBasicProduct();
      result.website = _websiteController.text;
    }
    _multilangualHelperControllerWithHistory.text =
        _multilingualHelper.getCurrentLanguage().toString();
    if (_multilangualHelperControllerWithHistory.isDifferentFromInitialValue) {
      result ??= getBasicProduct();
      result.lang = _multilingualHelper.getCurrentLanguage();
    }
    return result;
  }

something from outside is resetting the value to ENGLISH. Any clue about it?

monsieurtanuki commented 7 months ago

Hi @panicoli0! There's a lot of tap dancing in your code, and that's not a good sign. Please don't call the language selector _multilingualHelper because in the rest of the app it means different labels for different languages. What about _mainLanguageHelper? Your code does not change the main language on the server because you haven't coded it. You need to include lang in UpToDateProvider (not 100% sure about the name) so that it's copied to the product changes sent to the server. There may be another side-effect to fix after that, but we'll see that later.

panicoli0 commented 7 months ago

Hey @monsieurtanuki Agree with your suggestion I will use _mainLanguageHelper Just for testing purposes, I tried changing the website field, saving and loading and it works! The problem is with the _product.lang. I don't know why is not being saved the same as the website (Despite that website(string) and lang(OpenFoodFactsLanguage).

here is the code that I'm using to store the product.lang: image

Any chance to have a quick call between us? I can share the branch with you.

M123-dev commented 7 months ago

I just checked it inside the SDK. It looks like the lang field is read only, or that we can't set it manually. See https://github.com/openfoodfacts/openfoodfacts-dart/pull/894

Do you have an other idea how to set it monsieurtanuki, otherwise we would have to ask Stéphane.


Unrelated: @panicoli0 I'd recommend posting your email in a harder to read format like name [at] test dot com so that scrapers are having a hard time putting you on some email lists.

monsieurtanuki commented 7 months ago

Hi @panicoli0! Unfortunately I cannot dedicate that much time to that issue. In addition to that, as @M123-dev noted, for some products we cannot change the main language. Maybe it's not a "good first issue" after all :(

panicoli0 commented 6 months ago

hey @monsieurtanuki and @M123-dev what about to add a new field, like 'main_product_language' ?

M123-dev commented 4 months ago

Yes @panicoli0 but that would have to be done in the server.

@stephanegigandet is there a way to set the main product language, the lang field

stephanegigandet commented 4 months ago

@M123-dev the "lang" field is not read only on the server side

monsieurtanuki commented 4 months ago

I would have a look at it but I have issues with higher priorities.