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.

Reply via email to