Dear Alexei, I have got it to work: https://github.com/azerbini/eamena2/blob/app/models/forms.py
I was modifying the wrong method, in entity.py instead of looking into app/models/forms and changing that get_nodes. My bad. Now, the problem is that, for whatever reason (and unrelated to my changes to get_nodes()), the JS libraries only allow me to edit branches in the language of original insertion. So, when the selected language is English, I am able to pull up and edit in a form all of the branches that were initially saved in the DB in English. Viceversa, when the language selected is Arabic, I can only edit branches (or entities - call them as you may) that were saved into the DB in Arabic. Any idea as to why the JS does this? Thank you - getting there step by step! Andrea On Thursday, June 16, 2016 at 7:43:59 PM UTC+1, Alexei Peters wrote: > > Hi Andrea, > I'll have to look into this. > Cheers, > Alexei > > > Director of Web Development - Farallon Geographics, Inc. - 971.227.3173 > > On Wed, Jun 15, 2016 at 10:43 AM, <[email protected] <javascript:>> > wrote: > >> A small update. I have been able to bypass the indexing problem by >> commenting off lines 228-30 in app/search/search.py and replacing the >> custom exception with a standard return False. >> I subsequently modified get_nodes() as visible here: >> https://github.com/azerbini/eamena2/blob/app/models/entity.py >> >> Now, the labels returned by get_nodes are in the correct language, and >> yet they keep being visualised in the templates in the language of original >> insertion (see screenshot attached). Once again, what do I need to modify >> in order to tweak the resource graph which is passed as an observable array >> to branch-list.js? >> >> Thanks, >> >> andrea >> >> >> <https://lh3.googleusercontent.com/-Zcqp_1zUD-w/V2GTt9oU6wI/AAAAAAAAAAM/HQDeE69Bcvk1ujOoe_4l-sYCLEmIS68TQCLcB/s1600/Screen%2BShot%2B2016-06-15%2Bat%2B18.42.29.png> >> >> >> >> On Wednesday, June 15, 2016 at 2:23:53 PM UTC+1, [email protected] >> wrote: >>> >>> Hi all, >>> >>> In order to fix the visualisation of the already selected branches, I >>> have tried to modify models/entity.py, particularly the get_nodes method, >>> since it is that which calls the labels of concepts already stored in the >>> database (see here for the modified method: >>> https://github.com/azerbini/eamena2/blob/app/models/entity.py). >>> Currently, I am only trying to get get_nodes() to retrieve the right >>> prefLabels, so I am not modifying the data, just displaying it via print >>> statements. I have had to perform a UUID validation of entity.value in >>> order to stop get_preflabels_from_valueid from attempting to run on >>> entity.value when the latter is a Polygon type. When I modify a form, on >>> POST submission, all seems to work fine. Here are some of the outputs I get >>> on the server: >>> >>> Entity label pre prefLabel: <class 'arches.app.models.entity.Entity'>: >>>> d7f8c3f4-abb5-4d88-879e-41574d905df7 of type >>>> SITE_OVERALL_ARCHAEOLOGICAL_CERTAINTY_TYPE.E55 with value >>>> "e2febf75-58b1-4803-a7f9-c7cd3d01606b" >>>> >>>> {u'_type': u'1e0f9e9a-99e0-4439-a796-f0e1c9e26db9', u'_source': >>>> {u'category': u'label', u'conceptid': >>>> u'8748c8c7-8d3d-4003-a6b5-f87d9d933490', u'language': u'en-US', u'value': >>>> u'High', u'type': u'prefLabel', u'id': >>>> u'e2febf75-58b1-4803-a7f9-c7cd3d01606b'}, u'_index': u'concept_labels', >>>> u'_version': 2, u'found': True, u'_id': >>>> u'e2febf75-58b1-4803-a7f9-c7cd3d01606b'} >>>> >>>> Entity label post prefLabel: {u'category': u'label', u'conceptid': >>>> u'8748c8c7-8d3d-4003-a6b5-f87d9d933490', u'language': u'ar', u'value': >>>> u'\u0639\u0627\u0644\u064a', u'type': u'prefLabel', u'id': >>>> u'75905a06-9b0e-4c72-84c9-ae6883b83b30'} >>>> >>> >>> >>> As you can see, get_preflabels_from_valueid has correctly located my new >>> label value. However, I then get an ES indexing problem: >>> >>> RequestError at >>>> /resources/HERITAGE_RESOURCE_GROUP.E27/summary/8b712dc9-5de2-446f-900e-26a63e511d91 >>>> TransportError(400, u'MapperParsingException[object mapping for >>>> [HERITAGE_RESOURCE_GROUP.E27] tried to parse as object, but got EOF, has a >>>> concrete value been provided to it?]') >>>> Request Method: POST >>>> Request URL: >>>> http://localhost:8000/resources/HERITAGE_RESOURCE_GROUP.E27/summary/8b712dc9-5de2-446f-900e-26a63e511d91 >>>> Django Version: 1.6.2 >>>> Exception Type: RequestError >>>> Exception Value: >>>> >>>> TransportError(400, u'MapperParsingException[object mapping for >>>> [HERITAGE_RESOURCE_GROUP.E27] tried to parse as object, but got EOF, has a >>>> concrete value been provided to it?]') >>>> >>>> Exception Location: >>>> /Users/eamena/Projects/ENV/lib/python2.7/site-packages/arches/app/search/search.py >>>> >>>> in index_data, line 227 >>>> >>>> >>> Why is the indexing called, and when? Why does it fail, considering that >>> I have not changed anything at all, just printed to console? >>> >>> Thanks for your help, >>> >>> Andrea >>> >>> >>> >>> >>> On Tuesday, June 14, 2016 at 8:40:32 AM UTC+1, [email protected] >>> wrote: >>>> >>>> All this makes sense Alexei. However, I am still trying to figure out >>>> at which point in concept.py (or other python file) does the get_preflabel >>>> get called when created a resource graph. I am asking this as I am still >>>> unable to see the translated labels in the already selected branches >>>> (those, in other words, that get populated in the templates by >>>> branch-list.js). >>>> >>>> Can you help? >>>> >>>> Thanks, >>>> >>>> Andrea >>>> >>>> On Monday, June 13, 2016 at 10:50:37 PM UTC+1, Alexei Peters wrote: >>>>> >>>>> Hi Andrea, >>>>> Keep in mind that when you see something like this: >>>>> >>>>> def get_preflabel(self, lang=settings.LANGUAGE_CODE) >>>>> >>>>> What it means is, use for "lang" the value defined in >>>>> settings.LANGUAGE_CODE if nothing else is provided. >>>>> Most of the views take in a lang property as part of the request, >>>>> defaulting, again, to settings.LANGUAGE_CODE if none is provided. >>>>> >>>>> eg: in app/views/concept.py on line 74 >>>>> lang = request.GET.get('lang', settings.LANGUAGE_CODE) >>>>> >>>>> what this means is that if your request has a "lang" property in the >>>>> querystring >>>>> eg: >>>>> http://blahblahblah/concept/11111111-1111-1111-1111-11111111111?lang=ar >>>>> then the language code "ar" should be passed on down to the >>>>> get_preflabel function with the language passed in from the request and >>>>> it >>>>> will not use the value from settings.LANGUAGE_CODE >>>>> >>>>> Hope that helps clarify how that all works. >>>>> Cheers, >>>>> Alexei >>>>> >>>>> >>>>> Director of Web Development - Farallon Geographics, Inc. - >>>>> 971.227.3173 >>>>> >>>>> On Fri, Jun 10, 2016 at 11:44 AM, <[email protected]> wrote: >>>>> >>>>>> In my case Alexei, this wouldn't work as I use the Middleware to >>>>>> operate language changes - settings.LANGUAGE_CODE would remain defaulted >>>>>> to >>>>>> en_US (the only lang code that I have assigned in settings.py). Instead, >>>>>> I >>>>>> have worked around this issue by replacing settings.LANGUAGE_CODE with >>>>>> translation.get_language(). >>>>>> >>>>>> a. >>>>>> >>>>>> On Friday, June 10, 2016 at 7:22:20 PM UTC+1, Alexei Peters wrote: >>>>>>> >>>>>>> Hi Andrea, >>>>>>> There is a method in the models/concept.py file at line 375 called >>>>>>> "get_preflabel" >>>>>>> >>>>>>> def get_preflabel(self, lang=settings.LANGUAGE_CODE): >>>>>>>> ret = [] >>>>>>>> if self.values == []: >>>>>>>> concept = Concept().get(id=self.id, >>>>>>>> include_subconcepts=False, include_parentconcepts=False, >>>>>>>> include=['label']) >>>>>>>> else: >>>>>>>> concept = self >>>>>>>> for value in concept.values: >>>>>>>> if value.type == 'prefLabel': >>>>>>>> if value.language == lang: >>>>>>>> return value >>>>>>>> elif value.language == lang.split('-')[0]: >>>>>>>> ret.insert(0, value) >>>>>>>> elif value.type == 'altLabel': >>>>>>>> if value.language == lang: >>>>>>>> ret.insert(0, value) >>>>>>>> ret.append(value) >>>>>>>> return ret[0] if len(ret) > 0 else ConceptValue() >>>>>>> >>>>>>> >>>>>>> that method has been updated in Arches v4 to this: >>>>>>> >>>>>>> def get_preflabel(self, lang=settings.LANGUAGE_CODE): >>>>>>>> score = 0 >>>>>>>> ranked_labels = [] >>>>>>>> if self.values == []: >>>>>>>> concept = Concept().get(id=self.id, >>>>>>>> include_subconcepts=False, include_parentconcepts=False, >>>>>>>> include=['label']) >>>>>>>> else: >>>>>>>> concept = self >>>>>>>> for value in concept.values: >>>>>>>> ranked_label = { >>>>>>>> 'weight': 1, >>>>>>>> 'value': value >>>>>>>> } >>>>>>>> if value.type == 'prefLabel': >>>>>>>> ranked_label['weight'] = ranked_label['weight'] * 10 >>>>>>>> elif value.type == 'altLabel': >>>>>>>> ranked_label['weight'] = ranked_label['weight'] * 4 >>>>>>>> if value.language == lang: >>>>>>>> ranked_label['weight'] = ranked_label['weight'] * 10 >>>>>>>> elif value.language.split('-')[0] == lang.split('-')[0]: >>>>>>>> ranked_label['weight'] = ranked_label['weight'] * 5 >>>>>>>> ranked_labels.append(ranked_label) >>>>>>>> ranked_labels = sorted(ranked_labels, key=lambda label: >>>>>>>> label['weight'], reverse=True) >>>>>>>> if len(ranked_labels) == 0: >>>>>>>> ranked_labels.append({ >>>>>>>> 'weight': 1, >>>>>>>> 'value': ConceptValue() >>>>>>>> }) >>>>>>>> return ranked_labels[0]['value'] >>>>>>> >>>>>>> >>>>>>> as a test, you might try replacing the old method with the new one. >>>>>>> Also like I mentioned before, I would create prefLabels for all your >>>>>>> Arabic concepts. >>>>>>> >>>>>>> If that fixes the issue, I can update the v3 code accordingly and >>>>>>> you could then update your package from that. >>>>>>> >>>>>>> Hope that helps. >>>>>>> Cheers, >>>>>>> Alexei >>>>>>> >>>>>>> >>>>>>> Director of Web Development - Farallon Geographics, Inc. - >>>>>>> 971.227.3173 >>>>>>> >>>>>>> On Fri, Jun 10, 2016 at 8:19 AM, <[email protected]> wrote: >>>>>>> >>>>>>>> That's what we had done in the beginning Alexei. However, for some >>>>>>>> unclear reason, it would appear that Arches selects among prefLabels >>>>>>>> across >>>>>>>> languages - so when we had all labels as prefLabels we ended up having >>>>>>>> some >>>>>>>> concepts in Arabic and some in English. I was only able to fix that by >>>>>>>> selecting altLabels instead. Any idea of why that error might have >>>>>>>> been >>>>>>>> occurring? >>>>>>>> >>>>>>>> Andrea >>>>>>>> >>>>>>>> On Thursday, June 9, 2016 at 5:40:54 PM UTC+1, Alexei Peters wrote: >>>>>>>>> >>>>>>>>> Hi Andrea, >>>>>>>>> Instead of using altLabels for the Arabic language, you should use >>>>>>>>> prefLabels. Each language can (and should) specify a prefLabel. >>>>>>>>> Once you >>>>>>>>> do that the system should be able to discern the correct label. >>>>>>>>> I'll try and send another email with more detail on how to set up >>>>>>>>> an end point to switch the language. >>>>>>>>> Cheers, >>>>>>>>> Alexei >>>>>>>>> >>>>>>>>> >>>>>>>>> Director of Web Development - Farallon Geographics, Inc. - >>>>>>>>> 971.227.3173 >>>>>>>>> >>>>>>>>> On Wed, Jun 8, 2016 at 7:43 AM, <[email protected]> wrote: >>>>>>>>> >>>>>>>>>> Thank you Alexei. As it happens, I had already,and successfully, >>>>>>>>>> set up an Arabic translation of all of the static strings (the ones >>>>>>>>>> read by >>>>>>>>>> Django's gettext). This works fine, though I am not too happy with >>>>>>>>>> having >>>>>>>>>> Django automatically select a language based on Middleware: I'd much >>>>>>>>>> rather >>>>>>>>>> be able to switch languages at will by using the language dropdown >>>>>>>>>> in the >>>>>>>>>> header. >>>>>>>>>> >>>>>>>>>> The major issue is how to get the app to display the alternative >>>>>>>>>> Arabic labels that we entered in the RDM for each node and concept. >>>>>>>>>> Once I >>>>>>>>>> set up my custom context processor to loop through the languages in >>>>>>>>>> the >>>>>>>>>> header, the two languages will display correctly of course, but >>>>>>>>>> that won't >>>>>>>>>> be enough unless I build the language dropdown within a form that, >>>>>>>>>> when >>>>>>>>>> posted, leads the app to switch from prefLabels in en_US to >>>>>>>>>> altLabels in >>>>>>>>>> ar. *This* is the point on which I would really welcome your >>>>>>>>>> input. Have you already written some code to manipulate label >>>>>>>>>> visualisation? >>>>>>>>>> >>>>>>>>>> Best, >>>>>>>>>> >>>>>>>>>> Andrea >>>>>>>>>> >>>>>>>>>> On Monday, June 6, 2016 at 10:15:13 PM UTC+1, Alexei Peters wrote: >>>>>>>>>>> >>>>>>>>>>> Hi Andrea, >>>>>>>>>>> You'll actually have to do several things to present the site in >>>>>>>>>>> another language. >>>>>>>>>>> >>>>>>>>>>> 1. You'll have to add supply your own version of the >>>>>>>>>>> template/header.htm file and as you mentioned loop through the >>>>>>>>>>> languages >>>>>>>>>>> provided by the system. To do that you'll probably want to add >>>>>>>>>>> a context >>>>>>>>>>> processor that get's the language information from the database. >>>>>>>>>>> See >>>>>>>>>>> arches/app/utils/context_processors.py for examples. Once >>>>>>>>>>> you've created >>>>>>>>>>> that, then add a reference to it in the >>>>>>>>>>> TEMPLATE_CONTEXT_PROCESSORS section >>>>>>>>>>> of settings.py. Once you've done this you should be able to >>>>>>>>>>> access the >>>>>>>>>>> languages from your new header.htm template. >>>>>>>>>>> 2. In settings.py go to MIDDLEWARE_CLASSES and uncomment the >>>>>>>>>>> line: 'django.middleware.locale.LocaleMiddleware' >>>>>>>>>>> 3. Read the section entitled "How Django discovers language >>>>>>>>>>> preference" in the reference documentation found here: >>>>>>>>>>> https://media.readthedocs.org/pdf/django/1.6.x/django.pdf . >>>>>>>>>>> There are several ways to set the language, but the easiest >>>>>>>>>>> might be to set >>>>>>>>>>> a cookie. >>>>>>>>>>> >>>>>>>>>>> Once you've done those things you should be well on your way to >>>>>>>>>>> displaying your site in Arabic. >>>>>>>>>>> Chees, >>>>>>>>>>> Alexei >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> Director of Web Development - Farallon Geographics, Inc. - >>>>>>>>>>> 971.227.3173 >>>>>>>>>>> >>>>>>>>>>> On Mon, Jun 6, 2016 at 7:12 AM, <[email protected]> wrote: >>>>>>>>>>> >>>>>>>>>>>> I am not sure I explained myself correctly Adam. Let me try >>>>>>>>>>>> again: we have translated our entire platform in Arabic, including >>>>>>>>>>>> both the >>>>>>>>>>>> static strings which Django reads via the .mo file and our nodes >>>>>>>>>>>> and >>>>>>>>>>>> concepts. The translations for the latter two have been entered >>>>>>>>>>>> via the RDM >>>>>>>>>>>> as altLabels selecting Arabic as a language. Arabic had been >>>>>>>>>>>> previously >>>>>>>>>>>> added as a language via the Django admin panel (Models -> >>>>>>>>>>>> d_languages). >>>>>>>>>>>> >>>>>>>>>>>> Now, what I want to do is to be able to select the appropriate >>>>>>>>>>>> app language in the header dropdown so that, when I select Arabic, >>>>>>>>>>>> I get >>>>>>>>>>>> the whole app to be shown in Arabic. Do I have to write this whole >>>>>>>>>>>> class >>>>>>>>>>>> from scratch? Or does something exist already to support >>>>>>>>>>>> multilingual apps? >>>>>>>>>>>> >>>>>>>>>>>> Andrea >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> On Wednesday, June 1, 2016 at 10:38:48 PM UTC+1, Adam Cox wrote: >>>>>>>>>>>>> >>>>>>>>>>>>> Hi Andrea, technically this is possible, but I don't think it >>>>>>>>>>>>> would do what you are hoping... The Languages dropdown is meant >>>>>>>>>>>>> to be >>>>>>>>>>>>> configured to allow the user to change the app's interface >>>>>>>>>>>>> language, while >>>>>>>>>>>>> the language concepts are only meant to be attributes for a >>>>>>>>>>>>> resource (the >>>>>>>>>>>>> language that an Information Resource is written in, for example). >>>>>>>>>>>>> >>>>>>>>>>>>> Adam >>>>>>>>>>>>> >>>>>>>>>>>>> On Wednesday, May 25, 2016 at 12:59:08 AM UTC-6, >>>>>>>>>>>>> [email protected] wrote: >>>>>>>>>>>>>> >>>>>>>>>>>>>> Hi All, >>>>>>>>>>>>>> >>>>>>>>>>>>>> I am in need to change the static 'Languages' dropdown menu >>>>>>>>>>>>>> in the header.htm template to a dynamic one looping through the >>>>>>>>>>>>>> list of >>>>>>>>>>>>>> languages in the concepts.d_languages table. Has someone already >>>>>>>>>>>>>> written >>>>>>>>>>>>>> this code ? I couldn't figure out how to read the language table >>>>>>>>>>>>>> via Django >>>>>>>>>>>>>> tags. >>>>>>>>>>>>>> >>>>>>>>>>>>>> Best, >>>>>>>>>>>>>> >>>>>>>>>>>>>> Andrea >>>>>>>>>>>>>> >>>>>>>>>>>>> -- >>>>>>>>>>>> -- To post, send email to [email protected]. To >>>>>>>>>>>> unsubscribe, send email to [email protected]. >>>>>>>>>>>> For more information, visit >>>>>>>>>>>> https://groups.google.com/d/forum/archesproject?hl=en >>>>>>>>>>>> --- >>>>>>>>>>>> You received this message because you are subscribed to the >>>>>>>>>>>> Google Groups "Arches Project" group. >>>>>>>>>>>> To unsubscribe from this group and stop receiving emails from >>>>>>>>>>>> it, send an email to [email protected]. >>>>>>>>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> -- >>>>>>>>>> -- To post, send email to [email protected]. To >>>>>>>>>> unsubscribe, send email to [email protected]. For >>>>>>>>>> more information, visit >>>>>>>>>> https://groups.google.com/d/forum/archesproject?hl=en >>>>>>>>>> --- >>>>>>>>>> You received this message because you are subscribed to the >>>>>>>>>> Google Groups "Arches Project" group. >>>>>>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>>>>>> send an email to [email protected]. >>>>>>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>>>>>> >>>>>>>>> >>>>>>>>> -- >>>>>>>> -- To post, send email to [email protected]. To >>>>>>>> unsubscribe, send email to [email protected]. For >>>>>>>> more information, visit >>>>>>>> https://groups.google.com/d/forum/archesproject?hl=en >>>>>>>> --- >>>>>>>> You received this message because you are subscribed to the Google >>>>>>>> Groups "Arches Project" group. >>>>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>>>> send an email to [email protected]. >>>>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>>>> >>>>>>> >>>>>>> -- >>>>>> -- To post, send email to [email protected]. To >>>>>> unsubscribe, send email to [email protected]. For >>>>>> more information, visit >>>>>> https://groups.google.com/d/forum/archesproject?hl=en >>>>>> --- >>>>>> You received this message because you are subscribed to the Google >>>>>> Groups "Arches Project" group. >>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>> send an email to [email protected]. >>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>> >>>>> >>>>> -- >> -- To post, send email to [email protected] <javascript:>. To >> unsubscribe, send email to [email protected] <javascript:>. >> For more information, visit >> https://groups.google.com/d/forum/archesproject?hl=en >> --- >> You received this message because you are subscribed to the Google Groups >> "Arches Project" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected] <javascript:>. >> For more options, visit https://groups.google.com/d/optout. >> > > -- -- To post, send email to [email protected]. To unsubscribe, send email to [email protected]. For more information, visit https://groups.google.com/d/forum/archesproject?hl=en --- You received this message because you are subscribed to the Google Groups "Arches Project" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
