Skip to content
This repository was archived by the owner on Jan 25, 2024. It is now read-only.

Commit

Permalink
added notice translation model, set up model methods for creating tra…
Browse files Browse the repository at this point in the history
…nslations from json file, and added translations to api
  • Loading branch information
birbjam committed Jul 27, 2023
1 parent f55ada2 commit 9daf802
Show file tree
Hide file tree
Showing 8 changed files with 232 additions and 5 deletions.
13 changes: 9 additions & 4 deletions api/base/serializers.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
from django.db.models import fields
from rest_framework import serializers
from rest_framework.serializers import SerializerMethodField
from bclabels.models import BCLabel
from tklabels.models import TKLabel
from helpers.models import LabelTranslation, Notice
from helpers.models import LabelTranslation, Notice, NoticeTranslation
from projects.models import Project, ProjectCreator
from communities.models import Community
from institutions.models import Institution
from researchers.models import Researcher
from django.contrib.auth.models import User

class InstitutionSerializer(serializers.ModelSerializer):
institution_name = SerializerMethodField()
Expand Down Expand Up @@ -60,10 +58,17 @@ class Meta:
def get_community(self, obj):
return str(obj.community.community_name)

class NoticeTranslationsSerializer(serializers.ModelSerializer):
class Meta:
model = NoticeTranslation
fields = ('translated_name', 'language_tag', 'language', 'translated_text')

class NoticeSerializer(serializers.ModelSerializer):
translations = NoticeTranslationsSerializer(source="notice_translations", many=True)

class Meta:
model = Notice
fields = ('notice_type', 'name', 'img_url', 'svg_url', 'default_text', 'created', 'updated',)
fields = ('notice_type', 'name', 'img_url', 'svg_url', 'default_text', 'translations', 'created', 'updated',)

class ProjectOverviewSerializer(serializers.ModelSerializer):
class Meta:
Expand Down
21 changes: 21 additions & 0 deletions bclabels/migrations/0053_auto_20230727_2152.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Generated by Django 3.1.13 on 2023-07-27 21:52

from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('bclabels', '0052_bclabel_last_edited_by'),
]

operations = [
migrations.AlterField(
model_name='bclabel',
name='last_edited_by',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='bclabel_last_edited_by', to=settings.AUTH_USER_MODEL),
),
]
38 changes: 38 additions & 0 deletions helpers/migrations/0054_auto_20230727_2152.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# Generated by Django 3.1.13 on 2023-07-27 21:52

from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

dependencies = [
('institutions', '0030_auto_20230607_2059'),
('researchers', '0035_auto_20221021_2043'),
('helpers', '0053_auto_20230629_1808'),
]

operations = [
migrations.AlterField(
model_name='opentocollaboratenoticeurl',
name='institution',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='otc_institution_url', to='institutions.institution'),
),
migrations.AlterField(
model_name='opentocollaboratenoticeurl',
name='researcher',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='otc_researcher_url', to='researchers.researcher'),
),
migrations.CreateModel(
name='NoticeTranslation',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('notice_type', models.CharField(choices=[('biocultural', 'biocultural'), ('traditional_knowledge', 'traditional_knowledge'), ('attribution_incomplete', 'attribution_incomplete')], max_length=50, null=True)),
('language_tag', models.CharField(blank=True, max_length=5)),
('language', models.CharField(blank=True, max_length=150)),
('translated_name', models.CharField(blank=True, max_length=150)),
('translated_text', models.TextField(blank=True)),
('notice', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='notice_translations', to='helpers.notice')),
],
),
]
48 changes: 47 additions & 1 deletion helpers/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,29 @@ class Notice(models.Model):
created = models.DateTimeField(auto_now_add=True, null=True)
updated = models.DateTimeField(auto_now=True)

def save(self, *args, **kwargs):
# Note: this will only work once the Notice itself is saved first, check the json file for what languages are currently available.
# Use: notice.save(language='French')
def set_translation(self, language):
with open('./localcontexts/static/json/NoticeTranslations.json') as json_file:
translations_data = json.load(json_file)

for item in translations_data:
if item['noticeType'] == self.notice_type and item['language'] == language:
translation = item['noticeDefaultText']
break
else:
return

NoticeTranslation.objects.update_or_create(
notice=self,
notice_type=self.notice_type,
language_tag=item['language_tag'],
language=item['language'],
translated_name=item['noticeName'],
translated_text=translation
)

def save(self, language=None, *args, **kwargs):
json_data = open('./localcontexts/static/json/Notices.json')
data = json.load(json_data) #deserialize

Expand All @@ -37,6 +59,9 @@ def save(self, *args, **kwargs):
self.img_url = baseURL + item['imgFileName']
self.svg_url = baseURL + item['svgFileName']
self.default_text = item['noticeDefaultText']

if language:
self.set_translation(language)

super().save(*args, **kwargs)

Expand All @@ -49,6 +74,27 @@ class Meta:
verbose_name_plural = 'Notices'
ordering = ('-created',)

class NoticeTranslation(models.Model):
TYPES = (
('biocultural', 'biocultural'),
('traditional_knowledge', 'traditional_knowledge'),
('attribution_incomplete', 'attribution_incomplete'),
)
notice_type = models.CharField(max_length=50, null=True, choices=TYPES)
notice = models.ForeignKey(Notice, on_delete=models.CASCADE, related_name="notice_translations")
language_tag = models.CharField(max_length=5, blank=True)
language = models.CharField(max_length=150, blank=True)
translated_name = models.CharField(max_length=150, blank=True)
translated_text = models.TextField(blank=True)

def __str__(self):
return f"{self.notice} - {self.language}"

class Meta:
verbose_name = 'Notice Translation'
verbose_name_plural = 'Notice Translations'


class OpenToCollaborateNoticeURL(models.Model):
institution = models.ForeignKey(Institution, null=True, on_delete=models.CASCADE, blank=True, db_index=True, related_name="otc_institution_url")
researcher = models.ForeignKey(Researcher, null=True, on_delete=models.CASCADE, blank=True, db_index=True, related_name="otc_researcher_url")
Expand Down
4 changes: 4 additions & 0 deletions localcontexts/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -392,6 +392,9 @@ class CollectionsCareNoticePolicyAdmin(admin.ModelAdmin):
list_display = ('institution', 'added')
search_fields = ('institution__institution_name',)

class NoticeTranslationAdmin(admin.ModelAdmin):
list_display = ('notice', 'notice_type', 'language')

admin_site.register(ProjectStatus, ProjectStatusAdmin)
admin_site.register(Notice, NoticeAdmin)
admin_site.register(LabelVersion, LabelVersionAdmin)
Expand All @@ -401,6 +404,7 @@ class CollectionsCareNoticePolicyAdmin(admin.ModelAdmin):
admin_site.register(OpenToCollaborateNoticeURL, OpenToCollaborateNoticeURLAdmin)
admin_site.register(NoticeDownloadTracker, NoticeDownloadTrackerAdmin)
admin_site.register(CollectionsCareNoticePolicy, CollectionsCareNoticePolicyAdmin)
admin_site.register(NoticeTranslation, NoticeTranslationAdmin)

# INSTITUTIONS ADMIN
class InstitutionAdmin(admin.ModelAdmin):
Expand Down
74 changes: 74 additions & 0 deletions localcontexts/static/json/NoticeTranslations.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
[
{
"id": 1,
"noticeName": "Atribución Incompleta",
"noticeType": "attribution_incomplete",
"noticeDefaultText": "Las colecciones y documentos en nuestra institución tienen atribuciones incompletas, imprecisas y/o faltantes. Utilizamos esta Notificación para identificar claramente este material y que pueda ser actualizado o corregido por las comunidades de origen. Nuestra institución está comprometida a llevar a cabo colaboraciones y alianzas para resolver este problema de atribuciones incorrectas o faltantes.",
"language_tag": "es",
"language": "Spanish"
},
{
"id": 2,
"noticeName": "Notificación BC (Biocultural)",
"noticeType": "biocultural",
"noticeDefaultText": "La Notificación BC indica de manera visible que hay derechos y responsabilidades culturales asociadas que necesitan mayor atención en caso de cualquier instancia en la que el material en cuestión es usado o compartido. La Notificación BC reconoce los derechos de personas y comunidades Indígenas para definir las circunstancias bajo las cuales permitir el uso de información, colecciones, datos, e información de secuencia digital generada desde las formas de biodiversidad y recursos genéticos asociados con tierras, aguas y territorios tradicionales/ancestrales. La Notificación BC indica que las Etiquetas BC (Bioculturales) están en desarrollo y que su implementación está siendo negociada. Para mayor información sobre las Etiquetas BC por favor visitar https://localcontexts.org/notices/biocultural-notices/.",
"language_tag": "es",
"language": "Spanish"
},
{
"id": 3,
"noticeName": "Notificación CT (Conocimiento Tradicional)",
"noticeType": "traditional_knowledge",
"noticeDefaultText": "La Notificación de CT indica de manera visible que existen derechos y responsabilidades culturales asociados que requieren mayor atención en el caso de cualquier forma de uso y circulación futura de este material. La Notificación de CT tiene el potencial de indicar que Etiquetas de CT están siendo desarrolladas y su implementación está siendo negociada. Para mayor información sobre las Etiquetas CT por favor visitar https://localcontexts.org/notice/tk-notice/.",
"language_tag": "es",
"language": "Spanish"
},
{
"id": 4,
"noticeName": "Attribution Incomplète",
"noticeType": "attribution_incomplete",
"noticeDefaultText": "Certaines collections ou items dans nos institutions ont des attributions incomplètes, inexactes ou manquantes. Nous utilisons cette notification afin d’identifier clairement ce matériel pour qu’il soit mis à jour ou corrigé par les communautés d’origine. Notre institution s’est engagée à collaborer et à travailler en partenariat avec ces communautés afin de résoudre le problème d’attributions inexactes ou manquantes.",
"language_tag": "fr",
"language": "French"
},
{
"id": 5,
"noticeName": "Notification BC (Bioculturelle)",
"noticeType": "biocultural",
"noticeDefaultText": "La notification BC sert à rendre visible l’information selon laquelle le matériel utilisé est accompagné de droits culturels et de responsabilités qui nécessitent une attention particulière au moment de le partager ou de l’utiliser. La notification BC est une reconnaissance des droits des peuples autochtones de permettre l’utilisation d’informations, de collections, de données et d’informations sur les séquences numériques provenant de la biodiversité et des ressources associées à leurs terres, cours d’eau et territoires traditionnels. La notification BC peut indiquer que les étiquettes BC (bioculturelles) sont en cours de réalisation et que leur application est en train d’être négociée. Pour plus d’information à propos des étiquettes BC, consulter le site https://localcontexts.org/notices/biocultural-notices/.",
"language_tag": "fr",
"language": "French"
},
{
"id": 6,
"noticeName": "Notification ST (Savoir Traditionnel)",
"noticeType": "traditional_knowledge",
"noticeDefaultText": "La notification ST sert à rendre visible l’information selon laquelle des droits culturels et des responsabilités sont rattachés au matériel en question et qu’une attention particulière doit être portée à tout partage ou toute utilisation future du matériel. La notification ST peut indiquer que les étiquettes ST (savoir traditionnel) sont en cours de réalisation et que leur application est en train d’être négociée. Pour plus d’information à propos des étiquettes ST, consulter le site https://localcontexts.org/notice/tk-notice/.",
"language_tag": "fr",
"language": "French"
},
{
"id": 7,
"noticeName": "Tutukinga Kore",
"noticeType": "attribution_incomplete",
"noticeDefaultText": "Tērā ngā kohinga me ngā taonga o tō mātou wānanga, kāore anō i tutuki, kua hē nei, kua ngaro nei rānei/hoki. Ko te tikanga o tēnei Pānui, he whakamōhio atu, me whakahou, me whakatika rānei tēnei taonga e ngā hapori, nāna tonu aua taonga. E ū ana tō mātou wānanga ki tēnei āhuatanga e rongoā ai ngā take nei nā.",
"language_tag": "mi",
"language": "Māori"
},
{
"id": 8,
"noticeName": "Pānui Whakamārama BC",
"noticeType": "biocultural",
"noticeDefaultText": "Ko tā te Pānui Whakamārama BC, he āta whakaatu, tērā ētahi tikanga ā-iwi me ōna haepapa ki runga i te whakamahinga, i te horapatanga hoki o tēnei taonga me ōna raraunga rānei. Whakamanahia ai ki tēnei Pānui Whakamārama BC, ko te mana tuku iho o ngā iwi taketake ki roto i ngā kohinga mātauranga pūtaiao, me ngā raraunga hangarau mō runga i ngā hapori, ngā tāngata, me te rerenga rauropi e noho pū ana i ngā whenua, i ngā wai me ngā rohe o ngā iwi taketake. Kei roto hoki pea i tēnei Pānui BC, ko te kōrero e mea ana, tērā ngā Tohu BC (Rerenga rauropi) e waihangatia ana, ā, kei te whiriwhirihia tonutia tōna whakatinanatanga. Mō ētahi atu kōrero mō ngā Pānui Whakamārama BC, pāwhiritia i konei.",
"language_tag": "mi",
"language": "Māori"
},
{
"id": 9,
"noticeName": "Pānui Whakamārama TK",
"noticeType": "traditional_knowledge",
"noticeDefaultText": "Ko tā te Pānui Whakamārama TK, he āta whakaatu, tērā ētahi tikanga ā-iwi me ōna haepapa ki runga i te whakamahinga, i te horapatanga hoki o tēnei taonga. Kei roto hoki pea i tēnei Pānui TK, ko te kōrero e mea ana, tērā ngā Tohu TK e waihangatia ana, ā, kei te whiriwhirihia tonutia tōna whakatinanatanga. Mō ētahi atu kōrero mō ngā Pānui Whakamārama TK, pāwhiritia i konei.",
"language_tag": "mi",
"language": "Māori"
}
]
18 changes: 18 additions & 0 deletions projects/migrations/0170_auto_20230727_2152.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 3.1.13 on 2023-07-27 21:52

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('projects', '0169_auto_20230705_2027'),
]

operations = [
migrations.AlterField(
model_name='project',
name='project_privacy',
field=models.CharField(choices=[('Public', 'Public'), ('Contributor', 'Contributor'), ('Private', 'Private')], max_length=20, null=True),
),
]
21 changes: 21 additions & 0 deletions tklabels/migrations/0033_auto_20230727_2152.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Generated by Django 3.1.13 on 2023-07-27 21:52

from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('tklabels', '0032_tklabel_last_edited_by'),
]

operations = [
migrations.AlterField(
model_name='tklabel',
name='last_edited_by',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='tklabel_last_edited_by', to=settings.AUTH_USER_MODEL),
),
]

0 comments on commit 9daf802

Please sign in to comment.