Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
ranking request
#33
by
JulesLambert345
- opened
- .gitignore +0 -2
- .streamlit/config.toml +1 -1
- app.py +1 -4
- locales/ar/LC_MESSAGES/messages.mo +0 -0
- locales/ar/LC_MESSAGES/messages.po +180 -298
- locales/fr/LC_MESSAGES/messages.mo +0 -0
- locales/fr/LC_MESSAGES/messages.po +180 -297
- messages.pot +180 -297
- requirements.txt +2 -3
- src/components.py +20 -134
- src/data_analysis.py +0 -242
- src/dataframes.py +11 -9
- src/filters.py +3 -4
- src/fuzzy_matching.py +0 -258
- src/map_utils.py +10 -17
- src/markers.py +2 -3
- src/text_content.py +6 -4
.gitignore
CHANGED
@@ -21,5 +21,3 @@ var/
|
|
21 |
|
22 |
# vscode
|
23 |
.vscode
|
24 |
-
|
25 |
-
secrets.toml
|
|
|
21 |
|
22 |
# vscode
|
23 |
.vscode
|
|
|
|
.streamlit/config.toml
CHANGED
@@ -25,7 +25,7 @@ gatherUsageStats = false
|
|
25 |
# - Open the browser
|
26 |
|
27 |
# Default: whatever value is set in server.port.
|
28 |
-
serverPort =
|
29 |
|
30 |
# .streamlit/config.toml
|
31 |
[ui]
|
|
|
25 |
# - Open the browser
|
26 |
|
27 |
# Default: whatever value is set in server.port.
|
28 |
+
serverPort = 8502
|
29 |
|
30 |
# .streamlit/config.toml
|
31 |
[ui]
|
app.py
CHANGED
@@ -7,7 +7,7 @@ import folium
|
|
7 |
import streamlit as st
|
8 |
from huggingface_hub import HfApi
|
9 |
from streamlit_folium import st_folium
|
10 |
-
from src.components import
|
11 |
from src.text_content import (
|
12 |
CREDITS_TEXT,
|
13 |
LOGO,
|
@@ -117,9 +117,6 @@ show_embed_code()
|
|
117 |
# Show metrics
|
118 |
show_dataframes_metrics(len_requests, len_interventions, len_solved_verified_requests, lang)
|
119 |
|
120 |
-
# Show charts
|
121 |
-
show_charts()
|
122 |
-
|
123 |
# Verified Requests table
|
124 |
# st.divider()
|
125 |
# st.subheader(_("📝 **Table of verified requests**"))
|
|
|
7 |
import streamlit as st
|
8 |
from huggingface_hub import HfApi
|
9 |
from streamlit_folium import st_folium
|
10 |
+
from src.components import show_dataframes_metrics, show_embed_code, show_donations
|
11 |
from src.text_content import (
|
12 |
CREDITS_TEXT,
|
13 |
LOGO,
|
|
|
117 |
# Show metrics
|
118 |
show_dataframes_metrics(len_requests, len_interventions, len_solved_verified_requests, lang)
|
119 |
|
|
|
|
|
|
|
120 |
# Verified Requests table
|
121 |
# st.divider()
|
122 |
# st.subheader(_("📝 **Table of verified requests**"))
|
locales/ar/LC_MESSAGES/messages.mo
CHANGED
Binary files a/locales/ar/LC_MESSAGES/messages.mo and b/locales/ar/LC_MESSAGES/messages.mo differ
|
|
locales/ar/LC_MESSAGES/messages.po
CHANGED
@@ -3,12 +3,12 @@
|
|
3 |
# This file is distributed under the same license as the PACKAGE package.
|
4 |
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
5 |
#
|
6 |
-
#: src/utils.py:69 src/utils.py:70 src/markers.py:
|
7 |
msgid ""
|
8 |
msgstr ""
|
9 |
"Project-Id-Version: \n"
|
10 |
"Report-Msgid-Bugs-To: \n"
|
11 |
-
"POT-Creation-Date: 2023-09-
|
12 |
"PO-Revision-Date: 2023-09-18 21:00+0200\n"
|
13 |
"Last-Translator: \n"
|
14 |
"Language-Team: \n"
|
@@ -18,91 +18,91 @@ msgstr ""
|
|
18 |
"Content-Transfer-Encoding: 8bit\n"
|
19 |
"X-Generator: Poedit 3.3.2\n"
|
20 |
|
21 |
-
#: app.py:
|
22 |
msgid "myapplication"
|
23 |
msgstr ""
|
24 |
|
25 |
-
#: app.py:
|
26 |
msgid "HF_TOKEN"
|
27 |
msgstr ""
|
28 |
|
29 |
-
#: app.py:
|
30 |
msgid "wide"
|
31 |
msgstr ""
|
32 |
|
33 |
-
#: app.py:
|
34 |
msgid "collapsed"
|
35 |
msgstr ""
|
36 |
|
37 |
-
#: app.py:
|
38 |
msgid "🤝"
|
39 |
msgstr ""
|
40 |
|
41 |
-
#: app.py:
|
42 |
msgid "Nt3awnou نتعاونو"
|
43 |
msgstr ""
|
44 |
|
45 |
-
#: app.py:
|
46 |
msgid "sleep_time"
|
47 |
msgstr ""
|
48 |
|
49 |
-
#: app.py:
|
50 |
msgid "auto_refresh"
|
51 |
msgstr ""
|
52 |
|
53 |
-
#: app.py:
|
54 |
msgid "Auto Refresh?"
|
55 |
msgstr ""
|
56 |
|
57 |
-
#: app.py:
|
58 |
msgid "Refresh rate in seconds"
|
59 |
msgstr ""
|
60 |
|
61 |
-
#: app.py:
|
62 |
msgid "ar"
|
63 |
msgstr ""
|
64 |
|
65 |
-
#: app.py:
|
66 |
msgid "العربية"
|
67 |
msgstr ""
|
68 |
|
69 |
-
#: app.py:
|
70 |
msgid "fr"
|
71 |
msgstr ""
|
72 |
|
73 |
-
#: app.py:
|
74 |
msgid "Français"
|
75 |
msgstr ""
|
76 |
|
77 |
-
#: app.py:
|
78 |
msgid "en"
|
79 |
msgstr ""
|
80 |
|
81 |
-
#: app.py:
|
82 |
msgid "English"
|
83 |
msgstr ""
|
84 |
|
85 |
-
#: app.py:
|
86 |
msgid "Choose language / اختر اللغة"
|
87 |
msgstr ""
|
88 |
|
89 |
-
#: app.py:
|
90 |
msgid "messages"
|
91 |
msgstr ""
|
92 |
|
93 |
-
#: app.py:
|
94 |
msgid "locales"
|
95 |
msgstr ""
|
96 |
|
97 |
-
#: app.py:
|
98 |
msgid "Markers"
|
99 |
msgstr ""
|
100 |
|
101 |
-
#: app.py:
|
102 |
msgid "map"
|
103 |
msgstr ""
|
104 |
|
105 |
-
#: app.py:
|
106 |
msgid ""
|
107 |
"\n"
|
108 |
" <style>\n"
|
@@ -117,19 +117,19 @@ msgstr ""
|
|
117 |
msgid ""
|
118 |
"\n"
|
119 |
" <div style=\"text-align: left;\">\n"
|
120 |
-
" Nt3awnou نتعاونو is a
|
121 |
-
"
|
122 |
-
"
|
123 |
-
"
|
124 |
-
"
|
125 |
-
"
|
126 |
-
"
|
127 |
-
"
|
128 |
-
"
|
129 |
-
"
|
130 |
-
"
|
131 |
-
"
|
132 |
-
"
|
133 |
" <br>⚠️ Warning : There are still rocks falling down the mountains, making "
|
134 |
"the roads to the affected areas very dangerous. We advise volunteers to "
|
135 |
"donate directly to specialized NGOs.<br>\n"
|
@@ -156,11 +156,11 @@ msgid ""
|
|
156 |
"\n"
|
157 |
" <div style=\"text-align: right;-webkit-rtl-ordering: logical;\">\n"
|
158 |
"\n"
|
159 |
-
" نتعاونو هي منصة تعاونية
|
160 |
-
"
|
161 |
-
"
|
162 |
-
"
|
163 |
-
"
|
164 |
"المعلومات، كنجمعوهم فخريطة كتمكن الجمعيات من تنظيم و استهداف تدخلاتهم بدقة "
|
165 |
"باش توصل المساعدة للناس لي محتاجين في وقت أسرع. و كل جمعية قامت باللازم في "
|
166 |
"منطقة معينة تقدر تعلمنا عن طريق ملأ استمارة مخصصة لهاد الأمر. هاد المعلومات "
|
@@ -191,21 +191,21 @@ msgstr ""
|
|
191 |
msgid ""
|
192 |
"\n"
|
193 |
" <div style=\"text-align: left;\">\n"
|
194 |
-
" Nt3awnou نتعاونو est une plateforme collaborative à
|
195 |
-
"
|
196 |
-
"
|
197 |
-
"
|
198 |
-
"
|
199 |
-
"
|
200 |
-
"
|
201 |
-
"
|
202 |
-
"
|
203 |
-
"
|
204 |
-
"
|
205 |
-
"
|
206 |
-
"
|
207 |
-
"
|
208 |
-
"
|
209 |
" <br> ⚠️ Avertissement : Il y a encore des chutes de pierres dans les "
|
210 |
"montagnes, ce qui rend les routes vers les zones touchées très dangereuses. "
|
211 |
"Nous conseillons aux volontaires de faire des dons directement aux "
|
@@ -245,12 +245,15 @@ msgid ""
|
|
245 |
" <hr>\n"
|
246 |
" <div style=\"text-align: center;\">\n"
|
247 |
" <p>By <b>Moroccans</b> for <b>Moroccans</b> 🤝</p>\n"
|
|
|
|
|
|
|
248 |
" <p>Reach out to us at <a href=\"mailto:nt3awnoumorocco@gmail."
|
249 |
"com\">[email protected]</a></p>\n"
|
250 |
" "
|
251 |
msgstr ""
|
252 |
|
253 |
-
#: src/text_content.py:
|
254 |
msgid ""
|
255 |
"\n"
|
256 |
" <style>\n"
|
@@ -312,7 +315,7 @@ msgid ""
|
|
312 |
" # "
|
313 |
msgstr ""
|
314 |
|
315 |
-
#: src/text_content.py:
|
316 |
msgid ""
|
317 |
"**If a request should be reviewed or dropped submit its id here/ إذا كان يجب "
|
318 |
"مراجعة أو حذف طلب، أدخل رقمه هنا:**"
|
@@ -341,8 +344,7 @@ msgid "warn"
|
|
341 |
msgstr ""
|
342 |
|
343 |
#: src/utils.py:28 src/utils.py:29 src/utils.py:57 src/utils.py:58
|
344 |
-
#: src/utils.py:67 src/markers.py:
|
345 |
-
#: src/components.py:137
|
346 |
msgid ","
|
347 |
msgstr ""
|
348 |
|
@@ -350,9 +352,9 @@ msgstr ""
|
|
350 |
msgid "Add a latlng column to the dataframe"
|
351 |
msgstr ""
|
352 |
|
353 |
-
#: src/utils.py:44 src/utils.py:46 src/markers.py:
|
354 |
-
#: src/markers.py:
|
355 |
-
#: src/markers.py:
|
356 |
msgid "latlng"
|
357 |
msgstr ""
|
358 |
|
@@ -427,7 +429,7 @@ msgstr ""
|
|
427 |
msgid "50 to 100 km - Moderate risk area | منطقة خطر معتدلة"
|
428 |
msgstr ""
|
429 |
|
430 |
-
#: src/utils.py:98 src/markers.py:8 src/markers.py:
|
431 |
msgid "orange"
|
432 |
msgstr ""
|
433 |
|
@@ -483,7 +485,7 @@ msgstr ""
|
|
483 |
msgid "#0046C8"
|
484 |
msgstr ""
|
485 |
|
486 |
-
#: src/utils.py:140 src/utils.py:144 src/markers.py:
|
487 |
msgid "Done ✅"
|
488 |
msgstr "تم ✅"
|
489 |
|
@@ -491,11 +493,11 @@ msgstr "تم ✅"
|
|
491 |
msgid "Planned ⏳"
|
492 |
msgstr "مخطط ⏳"
|
493 |
|
494 |
-
#: src/utils.py:142 src/utils.py:146 src/markers.py:
|
495 |
msgid "Partial 📝"
|
496 |
msgstr "جزئي 📝"
|
497 |
|
498 |
-
#: src/utils.py:145 src/markers.py:
|
499 |
msgid "Planned ⌛"
|
500 |
msgstr "مخطط ⌛"
|
501 |
|
@@ -511,15 +513,15 @@ msgstr "حالة طوارئ متوسطة 🟠"
|
|
511 |
msgid "Low Emergency 🟡"
|
512 |
msgstr "حالة طوارئ منخفضة 🟡"
|
513 |
|
514 |
-
#: src/utils.py:158 src/markers.py:
|
515 |
msgid "High"
|
516 |
msgstr ""
|
517 |
|
518 |
-
#: src/utils.py:159 src/markers.py:
|
519 |
msgid "Medium"
|
520 |
msgstr ""
|
521 |
|
522 |
-
#: src/utils.py:160 src/markers.py:
|
523 |
msgid "Low"
|
524 |
msgstr ""
|
525 |
|
@@ -735,7 +737,7 @@ msgstr ""
|
|
735 |
msgid "إغاثة"
|
736 |
msgstr ""
|
737 |
|
738 |
-
#: src/markers.py:7 src/markers.py:
|
739 |
msgid "red"
|
740 |
msgstr ""
|
741 |
|
@@ -747,7 +749,7 @@ msgstr ""
|
|
747 |
msgid "مأوى"
|
748 |
msgstr ""
|
749 |
|
750 |
-
#: src/markers.py:9 src/markers.py:
|
751 |
msgid "beige"
|
752 |
msgstr ""
|
753 |
|
@@ -771,7 +773,7 @@ msgstr ""
|
|
771 |
msgid "bell"
|
772 |
msgstr ""
|
773 |
|
774 |
-
#: src/markers.py:16 src/markers.py:
|
775 |
msgid "heart"
|
776 |
msgstr ""
|
777 |
|
@@ -787,156 +789,60 @@ msgstr ""
|
|
787 |
msgid "Warning"
|
788 |
msgstr ""
|
789 |
|
790 |
-
#: src/markers.py:
|
791 |
-
msgid "A"
|
792 |
-
msgstr ""
|
793 |
-
|
794 |
-
#: src/markers.py:35
|
795 |
msgid "Display NGO interventions on the map"
|
796 |
msgstr ""
|
797 |
|
798 |
-
#: src/markers.py:
|
799 |
-
msgid "K"
|
800 |
-
msgstr ""
|
801 |
-
|
802 |
-
#: src/markers.py:40 src/markers.py:77
|
803 |
-
msgid "H"
|
804 |
-
msgstr ""
|
805 |
-
|
806 |
-
#: src/markers.py:40
|
807 |
msgid "Intervention prévue dans le futur / Planned future intervention"
|
808 |
msgstr ""
|
809 |
|
810 |
-
#: src/markers.py:
|
811 |
msgid "Partiellement satisfait / Partially Served"
|
812 |
msgstr ""
|
813 |
|
814 |
-
#: src/markers.py:
|
815 |
msgid "pink"
|
816 |
msgstr ""
|
817 |
|
818 |
-
#: src/markers.py:
|
819 |
msgid "Critique, Besoin d'aide en urgence / Critical, in urgent need of help"
|
820 |
msgstr ""
|
821 |
|
822 |
-
#: src/markers.py:
|
823 |
msgid "green"
|
824 |
msgstr ""
|
825 |
|
826 |
-
#: src/markers.py:
|
827 |
msgid "darkgreen"
|
828 |
msgstr ""
|
829 |
|
830 |
-
#: src/markers.py:
|
831 |
-
msgid "B"
|
832 |
-
msgstr ""
|
833 |
-
|
834 |
-
#: src/markers.py:72
|
835 |
-
msgid "C"
|
836 |
-
msgstr ""
|
837 |
-
|
838 |
-
#: src/markers.py:73
|
839 |
-
msgid "D"
|
840 |
-
msgstr ""
|
841 |
-
|
842 |
-
#: src/markers.py:74
|
843 |
-
msgid "E"
|
844 |
-
msgstr ""
|
845 |
-
|
846 |
-
#: src/markers.py:75
|
847 |
-
msgid "F"
|
848 |
-
msgstr ""
|
849 |
-
|
850 |
-
#: src/markers.py:76
|
851 |
-
msgid "G"
|
852 |
-
msgstr ""
|
853 |
-
|
854 |
-
#: src/markers.py:78
|
855 |
-
msgid "I"
|
856 |
-
msgstr ""
|
857 |
-
|
858 |
-
#: src/markers.py:79
|
859 |
-
msgid "J"
|
860 |
-
msgstr ""
|
861 |
-
|
862 |
-
#: src/markers.py:81
|
863 |
-
msgid "L"
|
864 |
-
msgstr ""
|
865 |
-
|
866 |
-
#: src/markers.py:82
|
867 |
-
msgid "M"
|
868 |
-
msgstr ""
|
869 |
-
|
870 |
-
#: src/markers.py:83
|
871 |
-
msgid "N"
|
872 |
-
msgstr ""
|
873 |
-
|
874 |
-
#: src/markers.py:84
|
875 |
-
msgid "O"
|
876 |
-
msgstr ""
|
877 |
-
|
878 |
-
#: src/markers.py:85
|
879 |
-
msgid "P"
|
880 |
-
msgstr ""
|
881 |
-
|
882 |
-
#: src/markers.py:86
|
883 |
-
msgid "Q"
|
884 |
-
msgstr ""
|
885 |
-
|
886 |
-
#: src/markers.py:87
|
887 |
-
msgid "R"
|
888 |
-
msgstr ""
|
889 |
-
|
890 |
-
#: src/markers.py:88
|
891 |
-
msgid "S"
|
892 |
-
msgstr ""
|
893 |
-
|
894 |
-
#: src/markers.py:89
|
895 |
-
msgid "T"
|
896 |
-
msgstr ""
|
897 |
-
|
898 |
-
#: src/markers.py:90
|
899 |
-
msgid "U"
|
900 |
-
msgstr ""
|
901 |
-
|
902 |
-
#: src/markers.py:92
|
903 |
-
msgid ", "
|
904 |
-
msgstr ""
|
905 |
-
|
906 |
-
#: src/markers.py:93
|
907 |
#, python-brace-format
|
908 |
msgid ""
|
909 |
"\n"
|
|
|
|
|
|
|
|
|
910 |
" <b>Org:</b> {org}<br>\n"
|
911 |
-
" <b>
|
912 |
-
" <b>Speciality:</b> {speciality}<br>\n"
|
913 |
-
" <b>Phone 1:</b> {phone_1}<br>\n"
|
914 |
-
" <b>Phone 2:</b> {phone_2}<br>\n"
|
915 |
-
" <b>Email:</b> {email}<br>\n"
|
916 |
-
" <b>Intervention Date:</b> {intervention_date}<br>\n"
|
917 |
-
" <b>Intervention Status:</b> {intervention_status}<br>\n"
|
918 |
-
" <b>Help Type:</b> {help_type}<br>\n"
|
919 |
-
" <b>Current Situation:</b> {current_situation}<br>\n"
|
920 |
-
" <b>Future Help Type:</b> {future_help_type}<br>\n"
|
921 |
-
" <b>Douar Name:</b> {full_douar_name}<br>\n"
|
922 |
-
" <b>Accessibility to Douar:</b> {accessibility_to_douar}<br>\n"
|
923 |
-
" <b>Type of Accessibility:</b> {type_of_accessibility}<br>\n"
|
924 |
" <b>Population:</b> {population}<br>\n"
|
925 |
-
" <b>
|
926 |
-
"<br>\n"
|
927 |
-
" <b>
|
928 |
" "
|
929 |
msgstr ""
|
930 |
|
931 |
-
#: src/markers.py:
|
932 |
msgid "Planned"
|
933 |
msgstr "مخطط لها"
|
934 |
|
935 |
-
#: src/markers.py:
|
936 |
msgid "glyphicon"
|
937 |
msgstr ""
|
938 |
|
939 |
-
#: src/markers.py:
|
940 |
#, python-brace-format
|
941 |
msgid ""
|
942 |
"\n"
|
@@ -951,20 +857,20 @@ msgid ""
|
|
951 |
" "
|
952 |
msgstr ""
|
953 |
|
954 |
-
#: src/markers.py:
|
955 |
msgid "Display victim requests on the map"
|
956 |
msgstr ""
|
957 |
|
958 |
-
#: src/markers.py:
|
959 |
msgid "ما هي احتياجاتك؟ (أضفها إذا لم يتم ذكرها)"
|
960 |
msgstr ""
|
961 |
|
962 |
-
#: src/markers.py:
|
963 |
#, python-brace-format
|
964 |
msgid "https://maps.google.com/?q={long_lat}"
|
965 |
msgstr ""
|
966 |
|
967 |
-
#: src/markers.py:
|
968 |
msgid ""
|
969 |
"\n"
|
970 |
" <b>Request Type:</b> {request_type}<br>\n"
|
@@ -978,77 +884,77 @@ msgid ""
|
|
978 |
" "
|
979 |
msgstr ""
|
980 |
|
981 |
-
#: src/markers.py:
|
982 |
msgid "list"
|
983 |
msgstr ""
|
984 |
|
985 |
-
#: src/markers.py:
|
986 |
msgid " لأي جماعة / قيادة / دوار تنتمون ؟"
|
987 |
msgstr ""
|
988 |
|
989 |
-
#: src/markers.py:
|
990 |
msgid "Display verified victim requests on the map"
|
991 |
msgstr ""
|
992 |
|
993 |
-
#: src/markers.py:
|
994 |
msgid "Help Details"
|
995 |
msgstr ""
|
996 |
|
997 |
-
#: src/markers.py:
|
998 |
#, python-brace-format
|
999 |
msgid "<b>Request Type:</b> {request_type}<br>"
|
1000 |
msgstr ""
|
1001 |
|
1002 |
-
#: src/markers.py:
|
1003 |
msgid "Location Details"
|
1004 |
msgstr ""
|
1005 |
|
1006 |
-
#: src/markers.py:
|
1007 |
#, python-brace-format
|
1008 |
msgid "<b>Location:</b> {val}<br>"
|
1009 |
msgstr ""
|
1010 |
|
1011 |
-
#: src/markers.py:
|
1012 |
msgid "Emergency Degree"
|
1013 |
msgstr ""
|
1014 |
|
1015 |
-
#: src/markers.py:
|
1016 |
#, python-brace-format
|
1017 |
msgid "<b>Emergency Degree:</b> {val}<br>"
|
1018 |
msgstr ""
|
1019 |
|
1020 |
-
#: src/markers.py:
|
1021 |
msgid "Verification Date"
|
1022 |
msgstr ""
|
1023 |
|
1024 |
-
#: src/markers.py:
|
1025 |
#, python-brace-format
|
1026 |
msgid "<b>Verification Date:</b> {val}<br>"
|
1027 |
msgstr ""
|
1028 |
|
1029 |
-
#: src/markers.py:
|
1030 |
-
#: src/dataframes.py:
|
1031 |
msgid "id"
|
1032 |
msgstr ""
|
1033 |
|
1034 |
-
#: src/markers.py:
|
1035 |
#, python-brace-format
|
1036 |
msgid "<b>Id:</b> {val}<br>"
|
1037 |
msgstr ""
|
1038 |
|
1039 |
-
#: src/markers.py:
|
1040 |
#, python-brace-format
|
1041 |
msgid "https://maps.google.com/?q={val}"
|
1042 |
msgstr ""
|
1043 |
|
1044 |
-
#: src/markers.py:
|
1045 |
#, python-brace-format
|
1046 |
msgid ""
|
1047 |
"<a href=\"{maps_url}\" target=\"_blank\" rel=\"noopener "
|
1048 |
"noreferrer\"><b>Google Maps</b></a><br>"
|
1049 |
msgstr ""
|
1050 |
|
1051 |
-
#: src/markers.py:
|
1052 |
msgid ""
|
1053 |
"<a href='https://docs.google.com/forms/d/"
|
1054 |
"e/1FAIpQLSdyAcOAULumk4A1DsfrwUsGdZ-9G5xOUuD3vHdQOp3nGNAZXw/viewform?"
|
@@ -1057,63 +963,63 @@ msgid ""
|
|
1057 |
"solved</b></a><br>"
|
1058 |
msgstr ""
|
1059 |
|
1060 |
-
#: src/components.py:
|
1061 |
msgid "Id review submission form"
|
1062 |
msgstr ""
|
1063 |
|
1064 |
-
#: src/components.py:
|
1065 |
msgid "🔍 Review of requests | مراجعة طلب مساعدة"
|
1066 |
msgstr ""
|
1067 |
|
1068 |
-
#: src/components.py:
|
1069 |
msgid "Enter id / أدخل الرقم"
|
1070 |
msgstr ""
|
1071 |
|
1072 |
-
#: src/components.py:
|
1073 |
msgid "Explain why / أدخل سبب المراجعة"
|
1074 |
msgstr ""
|
1075 |
|
1076 |
-
#: src/components.py:
|
1077 |
msgid "Submit / أرسل"
|
1078 |
msgstr ""
|
1079 |
|
1080 |
-
#: src/components.py:
|
1081 |
msgid "Please enter a reason / الرجاء إدخال سبب"
|
1082 |
msgstr ""
|
1083 |
|
1084 |
-
#: src/components.py:
|
1085 |
msgid ""
|
1086 |
"review_id_{id_to_review}_{datetime.now().strftime('%Y-%m-%d_%H-%M-%S')}.txt"
|
1087 |
msgstr ""
|
1088 |
|
1089 |
-
#: src/components.py:
|
1090 |
msgid "w"
|
1091 |
msgstr ""
|
1092 |
|
1093 |
-
#: src/components.py:
|
1094 |
#, python-brace-format
|
1095 |
msgid "id: {id_to_review}, explanation: {reason_for_review}\n"
|
1096 |
msgstr ""
|
1097 |
|
1098 |
-
#: src/components.py:
|
1099 |
msgid "nt3awnou/review_requests"
|
1100 |
msgstr ""
|
1101 |
|
1102 |
-
#: src/components.py:
|
1103 |
msgid "dataset"
|
1104 |
msgstr ""
|
1105 |
|
1106 |
-
#: src/components.py:
|
1107 |
msgid ""
|
1108 |
"Submitted at https://huggingface.co/datasets/nt3awnou/review_requests/ تم "
|
1109 |
"الإرسال"
|
1110 |
msgstr ""
|
1111 |
|
1112 |
-
#: src/components.py:
|
1113 |
msgid "💻 For Developers only, embed code for the map"
|
1114 |
msgstr "💻 للمطورين فقط، الكود لتضمين الخريطة"
|
1115 |
|
1116 |
-
#: src/components.py:
|
1117 |
msgid ""
|
1118 |
"\n"
|
1119 |
" <iframe id=\"nt3awnou-map\"\n"
|
@@ -1132,80 +1038,55 @@ msgid ""
|
|
1132 |
" "
|
1133 |
msgstr ""
|
1134 |
|
1135 |
-
#: src/components.py:
|
1136 |
msgid "html"
|
1137 |
msgstr ""
|
1138 |
|
1139 |
-
#: src/components.py:
|
1140 |
msgid "# Number of help requests"
|
1141 |
msgstr ""
|
1142 |
|
1143 |
-
#: src/components.py:
|
1144 |
msgid "# Number of interventions"
|
1145 |
msgstr ""
|
1146 |
|
1147 |
-
#: src/components.py:
|
1148 |
msgid "# Number of solved requests"
|
1149 |
msgstr ""
|
1150 |
|
1151 |
-
#: src/components.py:
|
|
|
|
|
|
|
|
|
1152 |
msgid "# عدد طلبات المساعدة"
|
1153 |
msgstr ""
|
1154 |
|
1155 |
-
#: src/components.py:
|
1156 |
msgid "# عدد التدخلات"
|
1157 |
msgstr ""
|
1158 |
|
1159 |
-
#: src/components.py:
|
1160 |
msgid "# عدد الطلبات المستجاب لها"
|
1161 |
msgstr ""
|
1162 |
|
1163 |
-
#: src/components.py:
|
1164 |
msgid "# Nombre de demandes d'aide"
|
1165 |
msgstr ""
|
1166 |
|
1167 |
-
#: src/components.py:
|
1168 |
msgid "# Nombre d'interventions"
|
1169 |
msgstr ""
|
1170 |
|
1171 |
-
#: src/components.py:
|
1172 |
msgid "# Nombre de demandes résolues"
|
1173 |
msgstr ""
|
1174 |
|
1175 |
-
#: src/components.py:
|
1176 |
-
msgid "📊 **Charts**"
|
1177 |
-
msgstr "**الرسوم البيانية** 📊"
|
1178 |
-
|
1179 |
-
#: src/components.py:130 src/components.py:131
|
1180 |
-
msgid "supplies_category"
|
1181 |
-
msgstr ""
|
1182 |
-
|
1183 |
-
#: src/components.py:130 src/components.py:137
|
1184 |
-
msgid "[] '"
|
1185 |
-
msgstr ""
|
1186 |
-
|
1187 |
-
#: src/components.py:130 src/components.py:137
|
1188 |
-
msgid "category"
|
1189 |
-
msgstr ""
|
1190 |
-
|
1191 |
-
# ARABIC TRANSLATION
|
1192 |
-
#: src/components.py:131
|
1193 |
-
msgid "Supplies Categories"
|
1194 |
-
msgstr "أصناف المساعدات"
|
1195 |
-
|
1196 |
-
#: src/components.py:137 src/components.py:138
|
1197 |
-
msgid "need_category"
|
1198 |
-
msgstr ""
|
1199 |
-
|
1200 |
-
#: src/components.py:138
|
1201 |
-
msgid "Needs Categories"
|
1202 |
-
msgstr "أصناف الاحتياجات"
|
1203 |
-
|
1204 |
-
#: src/components.py:145
|
1205 |
msgid "📝 **Donations**"
|
1206 |
msgstr "**التبرعات** 📝"
|
1207 |
|
1208 |
-
#: src/components.py:
|
1209 |
msgid ""
|
1210 |
"\n"
|
1211 |
" <div style=\"text-align: center;\">\n"
|
@@ -1222,7 +1103,7 @@ msgid ""
|
|
1222 |
" "
|
1223 |
msgstr ""
|
1224 |
|
1225 |
-
#: src/components.py:
|
1226 |
msgid ""
|
1227 |
"\n"
|
1228 |
" <div style=\"text-align: center;\">\n"
|
@@ -1239,7 +1120,7 @@ msgid ""
|
|
1239 |
" "
|
1240 |
msgstr ""
|
1241 |
|
1242 |
-
#: src/components.py:
|
1243 |
msgid ""
|
1244 |
"\n"
|
1245 |
" <div style=\"text-align: center;\">\n"
|
@@ -1316,104 +1197,105 @@ msgstr "✅ تمت خدمتها بالكامل"
|
|
1316 |
msgid "Choose status"
|
1317 |
msgstr ""
|
1318 |
|
1319 |
-
#: src/dataframes.py:6
|
1320 |
-
msgid "VERIFIED_REQUESTS_URL"
|
1321 |
-
msgstr ""
|
1322 |
-
|
1323 |
#: src/dataframes.py:7
|
1324 |
-
msgid "
|
1325 |
-
|
1326 |
-
|
1327 |
-
#: src/dataframes.py:8
|
1328 |
-
msgid "INTERVENTIONS_URL"
|
1329 |
msgstr ""
|
1330 |
|
1331 |
#: src/dataframes.py:9
|
1332 |
-
msgid "
|
|
|
|
|
1333 |
msgstr ""
|
1334 |
|
1335 |
-
#: src/dataframes.py:
|
1336 |
-
msgid "
|
|
|
|
|
1337 |
msgstr ""
|
1338 |
|
1339 |
-
#: src/dataframes.py:
|
1340 |
msgid "data/regions.json"
|
1341 |
msgstr ""
|
1342 |
|
1343 |
-
#: src/dataframes.py:
|
1344 |
msgid "Automatic Extracted Coordinates"
|
1345 |
msgstr ""
|
1346 |
|
1347 |
-
#: src/dataframes.py:
|
1348 |
msgid "Status"
|
1349 |
msgstr ""
|
1350 |
|
1351 |
-
#: src/dataframes.py:
|
1352 |
msgid "Display the dataframe in a table"
|
1353 |
msgstr ""
|
1354 |
|
1355 |
-
#: src/dataframes.py:
|
1356 |
msgid "🔍 Search for information / بحث عن المعلومات"
|
1357 |
msgstr ""
|
1358 |
|
1359 |
-
#: src/dataframes.py:
|
1360 |
#, python-brace-format
|
1361 |
msgid "query_{df_hash}"
|
1362 |
msgstr ""
|
1363 |
|
1364 |
-
#: src/dataframes.py:
|
1365 |
msgid "🔍 Search for an id / بحث عن رقم"
|
1366 |
msgstr ""
|
1367 |
|
1368 |
-
#: src/dataframes.py:
|
1369 |
#, python-brace-format
|
1370 |
msgid "id_{df_hash}"
|
1371 |
msgstr ""
|
1372 |
|
1373 |
-
#: src/dataframes.py:
|
1374 |
msgid "🗓️ Status / حالة"
|
1375 |
msgstr ""
|
1376 |
|
1377 |
-
#: src/dataframes.py:
|
1378 |
msgid "all / الكل"
|
1379 |
msgstr ""
|
1380 |
|
1381 |
-
#: src/dataframes.py:
|
1382 |
msgid "Done / تم"
|
1383 |
msgstr ""
|
1384 |
|
1385 |
-
#: src/dataframes.py:
|
1386 |
msgid "Planned / مخطط لها"
|
1387 |
msgstr ""
|
1388 |
|
1389 |
-
#: src/dataframes.py:
|
1390 |
#, python-brace-format
|
1391 |
msgid "status_{df_hash}"
|
1392 |
msgstr ""
|
1393 |
|
1394 |
-
#: src/dataframes.py:
|
1395 |
-
msgid "
|
|
|
|
|
|
|
1396 |
msgstr ""
|
1397 |
|
1398 |
-
#: src/dataframes.py:
|
1399 |
msgid "Intervention déjà passée / Past intevention"
|
1400 |
msgstr ""
|
1401 |
|
1402 |
-
#: src/dataframes.py:
|
1403 |
#, python-brace-format
|
1404 |
msgid ""
|
1405 |
"To view the full Google Sheet for advanced filtering go to: {data_url} "
|
1406 |
"**لعرض الورقة كاملة، اذهب إلى**"
|
1407 |
msgstr ""
|
1408 |
|
1409 |
-
#: src/dataframes.py:
|
1410 |
msgid ""
|
1411 |
"We are hiding contact information to protect the privacy of the victims. If "
|
1412 |
"you are an NGO and want to contact the victims, please contact us at "
|
1413 | |
1414 |
msgstr ""
|
1415 |
|
1416 |
-
#: src/dataframes.py:
|
1417 |
msgid ""
|
1418 |
"\n"
|
1419 |
" <div style=\"text-align: left;\">\n"
|
|
|
3 |
# This file is distributed under the same license as the PACKAGE package.
|
4 |
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
5 |
#
|
6 |
+
#: src/utils.py:69 src/utils.py:70 src/markers.py:195 src/components.py:16
|
7 |
msgid ""
|
8 |
msgstr ""
|
9 |
"Project-Id-Version: \n"
|
10 |
"Report-Msgid-Bugs-To: \n"
|
11 |
+
"POT-Creation-Date: 2023-09-19 03:04+0200\n"
|
12 |
"PO-Revision-Date: 2023-09-18 21:00+0200\n"
|
13 |
"Last-Translator: \n"
|
14 |
"Language-Team: \n"
|
|
|
18 |
"Content-Transfer-Encoding: 8bit\n"
|
19 |
"X-Generator: Poedit 3.3.2\n"
|
20 |
|
21 |
+
#: app.py:22
|
22 |
msgid "myapplication"
|
23 |
msgstr ""
|
24 |
|
25 |
+
#: app.py:24
|
26 |
msgid "HF_TOKEN"
|
27 |
msgstr ""
|
28 |
|
29 |
+
#: app.py:31
|
30 |
msgid "wide"
|
31 |
msgstr ""
|
32 |
|
33 |
+
#: app.py:32 src/filters.py:40 src/filters.py:62
|
34 |
msgid "collapsed"
|
35 |
msgstr ""
|
36 |
|
37 |
+
#: app.py:33
|
38 |
msgid "🤝"
|
39 |
msgstr ""
|
40 |
|
41 |
+
#: app.py:34
|
42 |
msgid "Nt3awnou نتعاونو"
|
43 |
msgstr ""
|
44 |
|
45 |
+
#: app.py:38
|
46 |
msgid "sleep_time"
|
47 |
msgstr ""
|
48 |
|
49 |
+
#: app.py:40
|
50 |
msgid "auto_refresh"
|
51 |
msgstr ""
|
52 |
|
53 |
+
#: app.py:43
|
54 |
msgid "Auto Refresh?"
|
55 |
msgstr ""
|
56 |
|
57 |
+
#: app.py:45
|
58 |
msgid "Refresh rate in seconds"
|
59 |
msgstr ""
|
60 |
|
61 |
+
#: app.py:55 app.py:182 src/components.py:70 src/components.py:126
|
62 |
msgid "ar"
|
63 |
msgstr ""
|
64 |
|
65 |
+
#: app.py:55
|
66 |
msgid "العربية"
|
67 |
msgstr ""
|
68 |
|
69 |
+
#: app.py:56 src/components.py:89 src/components.py:143
|
70 |
msgid "fr"
|
71 |
msgstr ""
|
72 |
|
73 |
+
#: app.py:56
|
74 |
msgid "Français"
|
75 |
msgstr ""
|
76 |
|
77 |
+
#: app.py:57 app.py:62 src/components.py:52 src/components.py:110
|
78 |
msgid "en"
|
79 |
msgstr ""
|
80 |
|
81 |
+
#: app.py:57
|
82 |
msgid "English"
|
83 |
msgstr ""
|
84 |
|
85 |
+
#: app.py:60
|
86 |
msgid "Choose language / اختر اللغة"
|
87 |
msgstr ""
|
88 |
|
89 |
+
#: app.py:65
|
90 |
msgid "messages"
|
91 |
msgstr ""
|
92 |
|
93 |
+
#: app.py:65
|
94 |
msgid "locales"
|
95 |
msgstr ""
|
96 |
|
97 |
+
#: app.py:70
|
98 |
msgid "Markers"
|
99 |
msgstr ""
|
100 |
|
101 |
+
#: app.py:113
|
102 |
msgid "map"
|
103 |
msgstr ""
|
104 |
|
105 |
+
#: app.py:184
|
106 |
msgid ""
|
107 |
"\n"
|
108 |
" <style>\n"
|
|
|
117 |
msgid ""
|
118 |
"\n"
|
119 |
" <div style=\"text-align: left;\">\n"
|
120 |
+
" Nt3awnou نتعاونو is a collaborative platform dedicated to aiding "
|
121 |
+
"individuals impacted by the recent earthquake in Morocco. Our core mission "
|
122 |
+
"is to streamline and coordinate timely assistance for everyone affected. How "
|
123 |
+
"do we achieve this? We assist those in need by allowing them to communicate "
|
124 |
+
"their location and the specific aid they require, either by completing a "
|
125 |
+
"form or sending a voice message via WhatsApp to the number <b>0652573987</"
|
126 |
+
"b>. Once we receive and process this information, it can be viewed in our "
|
127 |
+
"dashboard, which allows NGOs to organize and precisely target their "
|
128 |
+
"interventions, ensuring swift assistance reaches those in need. Any "
|
129 |
+
"organization that has taken initiative in a particular area can notify us by "
|
130 |
+
"completing a dedicated form. This data is also incorporated into the "
|
131 |
+
"dashboard so that other NGOs can help affected areas that still haven't "
|
132 |
+
"received help.\n"
|
133 |
" <br>⚠️ Warning : There are still rocks falling down the mountains, making "
|
134 |
"the roads to the affected areas very dangerous. We advise volunteers to "
|
135 |
"donate directly to specialized NGOs.<br>\n"
|
|
|
156 |
"\n"
|
157 |
" <div style=\"text-align: right;-webkit-rtl-ordering: logical;\">\n"
|
158 |
"\n"
|
159 |
+
" نتعاونو هي منصة تعاونية لمساعدة الأفراد المتضررين من الزلزال الأخير في "
|
160 |
+
"المغرب. مهمتنا هي تسهيل تقديم المساعدة في الوقت المناسب و بفاعلية و تنظيم "
|
161 |
+
"لجميع المتضررين. كيفاش؟ كنعاونو الناس لي محتاجين للمساعدة إعلمونا بمكانهم و "
|
162 |
+
"نوع المساعدة لي محتاجين ليها سواء عن طريق ملأ الاستمارة أو عن طريق إرسال "
|
163 |
+
"تسجيل صوتي عبر واتساب إلى رقم مخصص<b>0652573987</b>. بعد معالجة هاد "
|
164 |
"المعلومات، كنجمعوهم فخريطة كتمكن الجمعيات من تنظيم و استهداف تدخلاتهم بدقة "
|
165 |
"باش توصل المساعدة للناس لي محتاجين في وقت أسرع. و كل جمعية قامت باللازم في "
|
166 |
"منطقة معينة تقدر تعلمنا عن طريق ملأ استمارة مخصصة لهاد الأمر. هاد المعلومات "
|
|
|
191 |
msgid ""
|
192 |
"\n"
|
193 |
" <div style=\"text-align: left;\">\n"
|
194 |
+
" Nt3awnou نتعاونو est une plateforme collaborative dédiée à l'aide aux "
|
195 |
+
"personnes touchées par le récent tremblement de terre au Maroc. Notre "
|
196 |
+
"mission principale est de rationaliser et de coordonner une assistance "
|
197 |
+
"rapide pour toutes les personnes touchées. Comment y parvenons-nous ? Nous "
|
198 |
+
"aidons les personnes dans le besoin en leur permettant de communiquer leur "
|
199 |
+
"localisation et l'aide spécifique dont elles ont besoin, soit en remplissant "
|
200 |
+
"un formulaire, soit en envoyant un message vocal via WhatsApp à un numéro "
|
201 |
+
"<b>0652573987</b>. Une fois reçues et traitées, ces informations peuvent "
|
202 |
+
"être consultées dans notre tableau de bord, qui permet aux associations "
|
203 |
+
"d'organiser et de cibler précisément leurs interventions, afin que l'aide "
|
204 |
+
"parvienne rapidement à ceux qui en ont besoin. Toute organisation ayant pris "
|
205 |
+
"une initiative dans une zone particulière peut nous en informer en "
|
206 |
+
"remplissant un formulaire prévu à cet effet. Ces données sont également "
|
207 |
+
"intégrées au tableau de bord afin que d'autres associations puissent aider "
|
208 |
+
"les zones touchées qui n'ont pas encore reçu d'aide.\n"
|
209 |
" <br> ⚠️ Avertissement : Il y a encore des chutes de pierres dans les "
|
210 |
"montagnes, ce qui rend les routes vers les zones touchées très dangereuses. "
|
211 |
"Nous conseillons aux volontaires de faire des dons directement aux "
|
|
|
245 |
" <hr>\n"
|
246 |
" <div style=\"text-align: center;\">\n"
|
247 |
" <p>By <b>Moroccans</b> for <b>Moroccans</b> 🤝</p>\n"
|
248 |
+
" <p> Special thanks for <a href=\"https://www.annarabic.com/\">Annarabic</"
|
249 |
+
"a> and <a href=\"https://summerschool.morocco.ai/\">AI Summer School</a> for "
|
250 |
+
"their support</p>\n"
|
251 |
" <p>Reach out to us at <a href=\"mailto:nt3awnoumorocco@gmail."
|
252 |
"com\">[email protected]</a></p>\n"
|
253 |
" "
|
254 |
msgstr ""
|
255 |
|
256 |
+
#: src/text_content.py:61
|
257 |
msgid ""
|
258 |
"\n"
|
259 |
" <style>\n"
|
|
|
315 |
" # "
|
316 |
msgstr ""
|
317 |
|
318 |
+
#: src/text_content.py:106
|
319 |
msgid ""
|
320 |
"**If a request should be reviewed or dropped submit its id here/ إذا كان يجب "
|
321 |
"مراجعة أو حذف طلب، أدخل رقمه هنا:**"
|
|
|
344 |
msgstr ""
|
345 |
|
346 |
#: src/utils.py:28 src/utils.py:29 src/utils.py:57 src/utils.py:58
|
347 |
+
#: src/utils.py:67 src/markers.py:26
|
|
|
348 |
msgid ","
|
349 |
msgstr ""
|
350 |
|
|
|
352 |
msgid "Add a latlng column to the dataframe"
|
353 |
msgstr ""
|
354 |
|
355 |
+
#: src/utils.py:44 src/utils.py:46 src/markers.py:81 src/markers.py:87
|
356 |
+
#: src/markers.py:98 src/markers.py:133 src/markers.py:147 src/markers.py:193
|
357 |
+
#: src/markers.py:209
|
358 |
msgid "latlng"
|
359 |
msgstr ""
|
360 |
|
|
|
429 |
msgid "50 to 100 km - Moderate risk area | منطقة خطر معتدلة"
|
430 |
msgstr ""
|
431 |
|
432 |
+
#: src/utils.py:98 src/markers.py:8 src/markers.py:188
|
433 |
msgid "orange"
|
434 |
msgstr ""
|
435 |
|
|
|
485 |
msgid "#0046C8"
|
486 |
msgstr ""
|
487 |
|
488 |
+
#: src/utils.py:140 src/utils.py:144 src/markers.py:54 src/markers.py:109
|
489 |
msgid "Done ✅"
|
490 |
msgstr "تم ✅"
|
491 |
|
|
|
493 |
msgid "Planned ⏳"
|
494 |
msgstr "مخطط ⏳"
|
495 |
|
496 |
+
#: src/utils.py:142 src/utils.py:146 src/markers.py:58
|
497 |
msgid "Partial 📝"
|
498 |
msgstr "جزئي 📝"
|
499 |
|
500 |
+
#: src/utils.py:145 src/markers.py:50 src/markers.py:106
|
501 |
msgid "Planned ⌛"
|
502 |
msgstr "مخطط ⌛"
|
503 |
|
|
|
513 |
msgid "Low Emergency 🟡"
|
514 |
msgstr "حالة طوارئ منخفضة 🟡"
|
515 |
|
516 |
+
#: src/utils.py:158 src/markers.py:189
|
517 |
msgid "High"
|
518 |
msgstr ""
|
519 |
|
520 |
+
#: src/utils.py:159 src/markers.py:188
|
521 |
msgid "Medium"
|
522 |
msgstr ""
|
523 |
|
524 |
+
#: src/utils.py:160 src/markers.py:187 src/markers.py:220
|
525 |
msgid "Low"
|
526 |
msgstr ""
|
527 |
|
|
|
737 |
msgid "إغاثة"
|
738 |
msgstr ""
|
739 |
|
740 |
+
#: src/markers.py:7 src/markers.py:107 src/markers.py:110 src/markers.py:189
|
741 |
msgid "red"
|
742 |
msgstr ""
|
743 |
|
|
|
749 |
msgid "مأوى"
|
750 |
msgstr ""
|
751 |
|
752 |
+
#: src/markers.py:9 src/markers.py:177 src/markers.py:187 src/markers.py:234
|
753 |
msgid "beige"
|
754 |
msgstr ""
|
755 |
|
|
|
773 |
msgid "bell"
|
774 |
msgstr ""
|
775 |
|
776 |
+
#: src/markers.py:16 src/markers.py:107 src/markers.py:110
|
777 |
msgid "heart"
|
778 |
msgstr ""
|
779 |
|
|
|
789 |
msgid "Warning"
|
790 |
msgstr ""
|
791 |
|
792 |
+
#: src/markers.py:34
|
|
|
|
|
|
|
|
|
793 |
msgid "Display NGO interventions on the map"
|
794 |
msgstr ""
|
795 |
|
796 |
+
#: src/markers.py:39
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
797 |
msgid "Intervention prévue dans le futur / Planned future intervention"
|
798 |
msgstr ""
|
799 |
|
800 |
+
#: src/markers.py:43 src/filters.py:52
|
801 |
msgid "Partiellement satisfait / Partially Served"
|
802 |
msgstr ""
|
803 |
|
804 |
+
#: src/markers.py:49 src/markers.py:107
|
805 |
msgid "pink"
|
806 |
msgstr ""
|
807 |
|
808 |
+
#: src/markers.py:51 src/filters.py:51
|
809 |
msgid "Critique, Besoin d'aide en urgence / Critical, in urgent need of help"
|
810 |
msgstr ""
|
811 |
|
812 |
+
#: src/markers.py:53 src/markers.py:110
|
813 |
msgid "green"
|
814 |
msgstr ""
|
815 |
|
816 |
+
#: src/markers.py:57
|
817 |
msgid "darkgreen"
|
818 |
msgstr ""
|
819 |
|
820 |
+
#: src/markers.py:68
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
821 |
#, python-brace-format
|
822 |
msgid ""
|
823 |
"\n"
|
824 |
+
" <b>Date:</b> {date}<br>\n"
|
825 |
+
" <b>City:</b> {city}<br>\n"
|
826 |
+
" <b>Intervention Status:</b> {status}<br>\n"
|
827 |
+
" <b>Village Status:</b> {village_status}<br>\n"
|
828 |
" <b>Org:</b> {org}<br>\n"
|
829 |
+
" <b>Intervention:</b> {intervention_type}<br>\n"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
830 |
" <b>Population:</b> {population}<br>\n"
|
831 |
+
" <b>Road State:</b> {road_state}<br>\n"
|
832 |
+
" <b>Details:</b> {details}<br>\n"
|
833 |
+
" <b>Contact:</b> {contact}<br>\n"
|
834 |
" "
|
835 |
msgstr ""
|
836 |
|
837 |
+
#: src/markers.py:102
|
838 |
msgid "Planned"
|
839 |
msgstr "مخطط لها"
|
840 |
|
841 |
+
#: src/markers.py:107 src/markers.py:110 src/markers.py:177 src/markers.py:234
|
842 |
msgid "glyphicon"
|
843 |
msgstr ""
|
844 |
|
845 |
+
#: src/markers.py:120
|
846 |
#, python-brace-format
|
847 |
msgid ""
|
848 |
"\n"
|
|
|
857 |
" "
|
858 |
msgstr ""
|
859 |
|
860 |
+
#: src/markers.py:143
|
861 |
msgid "Display victim requests on the map"
|
862 |
msgstr ""
|
863 |
|
864 |
+
#: src/markers.py:145 src/dataframes.py:37
|
865 |
msgid "ما هي احتياجاتك؟ (أضفها إذا لم يتم ذكرها)"
|
866 |
msgstr ""
|
867 |
|
868 |
+
#: src/markers.py:148
|
869 |
#, python-brace-format
|
870 |
msgid "https://maps.google.com/?q={long_lat}"
|
871 |
msgstr ""
|
872 |
|
873 |
+
#: src/markers.py:155
|
874 |
msgid ""
|
875 |
"\n"
|
876 |
" <b>Request Type:</b> {request_type}<br>\n"
|
|
|
884 |
" "
|
885 |
msgstr ""
|
886 |
|
887 |
+
#: src/markers.py:165 src/markers.py:219
|
888 |
msgid "list"
|
889 |
msgstr ""
|
890 |
|
891 |
+
#: src/markers.py:172 src/markers.py:173
|
892 |
msgid " لأي جماعة / قيادة / دوار تنتمون ؟"
|
893 |
msgstr ""
|
894 |
|
895 |
+
#: src/markers.py:183
|
896 |
msgid "Display verified victim requests on the map"
|
897 |
msgstr ""
|
898 |
|
899 |
+
#: src/markers.py:197 src/markers.py:198 src/dataframes.py:40
|
900 |
msgid "Help Details"
|
901 |
msgstr ""
|
902 |
|
903 |
+
#: src/markers.py:200
|
904 |
#, python-brace-format
|
905 |
msgid "<b>Request Type:</b> {request_type}<br>"
|
906 |
msgstr ""
|
907 |
|
908 |
+
#: src/markers.py:201 src/markers.py:223
|
909 |
msgid "Location Details"
|
910 |
msgstr ""
|
911 |
|
912 |
+
#: src/markers.py:202
|
913 |
#, python-brace-format
|
914 |
msgid "<b>Location:</b> {val}<br>"
|
915 |
msgstr ""
|
916 |
|
917 |
+
#: src/markers.py:203 src/markers.py:220
|
918 |
msgid "Emergency Degree"
|
919 |
msgstr ""
|
920 |
|
921 |
+
#: src/markers.py:204
|
922 |
#, python-brace-format
|
923 |
msgid "<b>Emergency Degree:</b> {val}<br>"
|
924 |
msgstr ""
|
925 |
|
926 |
+
#: src/markers.py:205
|
927 |
msgid "Verification Date"
|
928 |
msgstr ""
|
929 |
|
930 |
+
#: src/markers.py:206
|
931 |
#, python-brace-format
|
932 |
msgid "<b>Verification Date:</b> {val}<br>"
|
933 |
msgstr ""
|
934 |
|
935 |
+
#: src/markers.py:207 src/markers.py:216 src/dataframes.py:33
|
936 |
+
#: src/dataframes.py:34 src/dataframes.py:89
|
937 |
msgid "id"
|
938 |
msgstr ""
|
939 |
|
940 |
+
#: src/markers.py:208
|
941 |
#, python-brace-format
|
942 |
msgid "<b>Id:</b> {val}<br>"
|
943 |
msgstr ""
|
944 |
|
945 |
+
#: src/markers.py:210
|
946 |
#, python-brace-format
|
947 |
msgid "https://maps.google.com/?q={val}"
|
948 |
msgstr ""
|
949 |
|
950 |
+
#: src/markers.py:212
|
951 |
#, python-brace-format
|
952 |
msgid ""
|
953 |
"<a href=\"{maps_url}\" target=\"_blank\" rel=\"noopener "
|
954 |
"noreferrer\"><b>Google Maps</b></a><br>"
|
955 |
msgstr ""
|
956 |
|
957 |
+
#: src/markers.py:217
|
958 |
msgid ""
|
959 |
"<a href='https://docs.google.com/forms/d/"
|
960 |
"e/1FAIpQLSdyAcOAULumk4A1DsfrwUsGdZ-9G5xOUuD3vHdQOp3nGNAZXw/viewform?"
|
|
|
963 |
"solved</b></a><br>"
|
964 |
msgstr ""
|
965 |
|
966 |
+
#: src/components.py:8
|
967 |
msgid "Id review submission form"
|
968 |
msgstr ""
|
969 |
|
970 |
+
#: src/components.py:10
|
971 |
msgid "🔍 Review of requests | مراجعة طلب مساعدة"
|
972 |
msgstr ""
|
973 |
|
974 |
+
#: src/components.py:13
|
975 |
msgid "Enter id / أدخل الرقم"
|
976 |
msgstr ""
|
977 |
|
978 |
+
#: src/components.py:14
|
979 |
msgid "Explain why / أدخل سبب المراجعة"
|
980 |
msgstr ""
|
981 |
|
982 |
+
#: src/components.py:15
|
983 |
msgid "Submit / أرسل"
|
984 |
msgstr ""
|
985 |
|
986 |
+
#: src/components.py:17
|
987 |
msgid "Please enter a reason / الرجاء إدخال سبب"
|
988 |
msgstr ""
|
989 |
|
990 |
+
#: src/components.py:19
|
991 |
msgid ""
|
992 |
"review_id_{id_to_review}_{datetime.now().strftime('%Y-%m-%d_%H-%M-%S')}.txt"
|
993 |
msgstr ""
|
994 |
|
995 |
+
#: src/components.py:20
|
996 |
msgid "w"
|
997 |
msgstr ""
|
998 |
|
999 |
+
#: src/components.py:21
|
1000 |
#, python-brace-format
|
1001 |
msgid "id: {id_to_review}, explanation: {reason_for_review}\n"
|
1002 |
msgstr ""
|
1003 |
|
1004 |
+
#: src/components.py:25
|
1005 |
msgid "nt3awnou/review_requests"
|
1006 |
msgstr ""
|
1007 |
|
1008 |
+
#: src/components.py:26
|
1009 |
msgid "dataset"
|
1010 |
msgstr ""
|
1011 |
|
1012 |
+
#: src/components.py:28
|
1013 |
msgid ""
|
1014 |
"Submitted at https://huggingface.co/datasets/nt3awnou/review_requests/ تم "
|
1015 |
"الإرسال"
|
1016 |
msgstr ""
|
1017 |
|
1018 |
+
#: src/components.py:32
|
1019 |
msgid "💻 For Developers only, embed code for the map"
|
1020 |
msgstr "💻 للمطورين فقط، الكود لتضمين الخريطة"
|
1021 |
|
1022 |
+
#: src/components.py:34
|
1023 |
msgid ""
|
1024 |
"\n"
|
1025 |
" <iframe id=\"nt3awnou-map\"\n"
|
|
|
1038 |
" "
|
1039 |
msgstr ""
|
1040 |
|
1041 |
+
#: src/components.py:47
|
1042 |
msgid "html"
|
1043 |
msgstr ""
|
1044 |
|
1045 |
+
#: src/components.py:57
|
1046 |
msgid "# Number of help requests"
|
1047 |
msgstr ""
|
1048 |
|
1049 |
+
#: src/components.py:62
|
1050 |
msgid "# Number of interventions"
|
1051 |
msgstr ""
|
1052 |
|
1053 |
+
#: src/components.py:67
|
1054 |
msgid "# Number of solved requests"
|
1055 |
msgstr ""
|
1056 |
|
1057 |
+
#: src/components.py:71
|
1058 |
+
msgid "📝 شرح منصة نتعاونو"
|
1059 |
+
msgstr ""
|
1060 |
+
|
1061 |
+
#: src/components.py:76
|
1062 |
msgid "# عدد طلبات المساعدة"
|
1063 |
msgstr ""
|
1064 |
|
1065 |
+
#: src/components.py:81
|
1066 |
msgid "# عدد التدخلات"
|
1067 |
msgstr ""
|
1068 |
|
1069 |
+
#: src/components.py:86
|
1070 |
msgid "# عدد الطلبات المستجاب لها"
|
1071 |
msgstr ""
|
1072 |
|
1073 |
+
#: src/components.py:94
|
1074 |
msgid "# Nombre de demandes d'aide"
|
1075 |
msgstr ""
|
1076 |
|
1077 |
+
#: src/components.py:99
|
1078 |
msgid "# Nombre d'interventions"
|
1079 |
msgstr ""
|
1080 |
|
1081 |
+
#: src/components.py:104
|
1082 |
msgid "# Nombre de demandes résolues"
|
1083 |
msgstr ""
|
1084 |
|
1085 |
+
#: src/components.py:109
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1086 |
msgid "📝 **Donations**"
|
1087 |
msgstr "**التبرعات** 📝"
|
1088 |
|
1089 |
+
#: src/components.py:112
|
1090 |
msgid ""
|
1091 |
"\n"
|
1092 |
" <div style=\"text-align: center;\">\n"
|
|
|
1103 |
" "
|
1104 |
msgstr ""
|
1105 |
|
1106 |
+
#: src/components.py:128
|
1107 |
msgid ""
|
1108 |
"\n"
|
1109 |
" <div style=\"text-align: center;\">\n"
|
|
|
1120 |
" "
|
1121 |
msgstr ""
|
1122 |
|
1123 |
+
#: src/components.py:145
|
1124 |
msgid ""
|
1125 |
"\n"
|
1126 |
" <div style=\"text-align: center;\">\n"
|
|
|
1197 |
msgid "Choose status"
|
1198 |
msgstr ""
|
1199 |
|
|
|
|
|
|
|
|
|
1200 |
#: src/dataframes.py:7
|
1201 |
+
msgid ""
|
1202 |
+
"https://docs.google.com/spreadsheets/"
|
1203 |
+
"d/1PXcAtI5L95hHSXAiRl3Y4v5O4coG39S86OTfBEcvLTE/edit#gid=0"
|
|
|
|
|
1204 |
msgstr ""
|
1205 |
|
1206 |
#: src/dataframes.py:9
|
1207 |
+
msgid ""
|
1208 |
+
"https://docs.google.com/spreadsheets/"
|
1209 |
+
"d/1gYoBBiBo1L18IVakHkf3t1fOGvHWb23loadyFZUeHJs/edit#gid=966953708"
|
1210 |
msgstr ""
|
1211 |
|
1212 |
+
#: src/dataframes.py:11
|
1213 |
+
msgid ""
|
1214 |
+
"https://docs.google.com/spreadsheets/"
|
1215 |
+
"d/1eXOTqunOWWP8FRdENPs4cU9ulISm4XZWYJJNR1-SrwY/edit#gid=2089222765"
|
1216 |
msgstr ""
|
1217 |
|
1218 |
+
#: src/dataframes.py:13
|
1219 |
msgid "data/regions.json"
|
1220 |
msgstr ""
|
1221 |
|
1222 |
+
#: src/dataframes.py:20 src/dataframes.py:22
|
1223 |
msgid "Automatic Extracted Coordinates"
|
1224 |
msgstr ""
|
1225 |
|
1226 |
+
#: src/dataframes.py:26 src/dataframes.py:27
|
1227 |
msgid "Status"
|
1228 |
msgstr ""
|
1229 |
|
1230 |
+
#: src/dataframes.py:58
|
1231 |
msgid "Display the dataframe in a table"
|
1232 |
msgstr ""
|
1233 |
|
1234 |
+
#: src/dataframes.py:65
|
1235 |
msgid "🔍 Search for information / بحث عن المعلومات"
|
1236 |
msgstr ""
|
1237 |
|
1238 |
+
#: src/dataframes.py:65
|
1239 |
#, python-brace-format
|
1240 |
msgid "query_{df_hash}"
|
1241 |
msgstr ""
|
1242 |
|
1243 |
+
#: src/dataframes.py:69
|
1244 |
msgid "🔍 Search for an id / بحث عن رقم"
|
1245 |
msgstr ""
|
1246 |
|
1247 |
+
#: src/dataframes.py:74
|
1248 |
#, python-brace-format
|
1249 |
msgid "id_{df_hash}"
|
1250 |
msgstr ""
|
1251 |
|
1252 |
+
#: src/dataframes.py:78
|
1253 |
msgid "🗓️ Status / حالة"
|
1254 |
msgstr ""
|
1255 |
|
1256 |
+
#: src/dataframes.py:78
|
1257 |
msgid "all / الكل"
|
1258 |
msgstr ""
|
1259 |
|
1260 |
+
#: src/dataframes.py:78 src/dataframes.py:95
|
1261 |
msgid "Done / تم"
|
1262 |
msgstr ""
|
1263 |
|
1264 |
+
#: src/dataframes.py:78 src/dataframes.py:98
|
1265 |
msgid "Planned / مخطط لها"
|
1266 |
msgstr ""
|
1267 |
|
1268 |
+
#: src/dataframes.py:78
|
1269 |
#, python-brace-format
|
1270 |
msgid "status_{df_hash}"
|
1271 |
msgstr ""
|
1272 |
|
1273 |
+
#: src/dataframes.py:94
|
1274 |
+
msgid ""
|
1275 |
+
"Pouvez-vous nous préciser si vous êtes déjà intervenus ou si vous prévoyez "
|
1276 |
+
"de le faire | Tell us if you already made the intervention, or if you're "
|
1277 |
+
"planning to do it"
|
1278 |
msgstr ""
|
1279 |
|
1280 |
+
#: src/dataframes.py:96 src/dataframes.py:99
|
1281 |
msgid "Intervention déjà passée / Past intevention"
|
1282 |
msgstr ""
|
1283 |
|
1284 |
+
#: src/dataframes.py:105
|
1285 |
#, python-brace-format
|
1286 |
msgid ""
|
1287 |
"To view the full Google Sheet for advanced filtering go to: {data_url} "
|
1288 |
"**لعرض الورقة كاملة، اذهب إلى**"
|
1289 |
msgstr ""
|
1290 |
|
1291 |
+
#: src/dataframes.py:110
|
1292 |
msgid ""
|
1293 |
"We are hiding contact information to protect the privacy of the victims. If "
|
1294 |
"you are an NGO and want to contact the victims, please contact us at "
|
1295 | |
1296 |
msgstr ""
|
1297 |
|
1298 |
+
#: src/dataframes.py:113
|
1299 |
msgid ""
|
1300 |
"\n"
|
1301 |
" <div style=\"text-align: left;\">\n"
|
locales/fr/LC_MESSAGES/messages.mo
CHANGED
Binary files a/locales/fr/LC_MESSAGES/messages.mo and b/locales/fr/LC_MESSAGES/messages.mo differ
|
|
locales/fr/LC_MESSAGES/messages.po
CHANGED
@@ -3,12 +3,12 @@
|
|
3 |
# This file is distributed under the same license as the PACKAGE package.
|
4 |
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
5 |
#
|
6 |
-
#: src/utils.py:69 src/utils.py:70 src/markers.py:
|
7 |
msgid ""
|
8 |
msgstr ""
|
9 |
"Project-Id-Version: \n"
|
10 |
"Report-Msgid-Bugs-To: \n"
|
11 |
-
"POT-Creation-Date: 2023-09-
|
12 |
"PO-Revision-Date: 2023-09-18 21:00+0200\n"
|
13 |
"Last-Translator: \n"
|
14 |
"Language-Team: \n"
|
@@ -18,91 +18,91 @@ msgstr ""
|
|
18 |
"Content-Transfer-Encoding: 8bit\n"
|
19 |
"X-Generator: Poedit 3.3.2\n"
|
20 |
|
21 |
-
#: app.py:
|
22 |
msgid "myapplication"
|
23 |
msgstr ""
|
24 |
|
25 |
-
#: app.py:
|
26 |
msgid "HF_TOKEN"
|
27 |
msgstr ""
|
28 |
|
29 |
-
#: app.py:
|
30 |
msgid "wide"
|
31 |
msgstr ""
|
32 |
|
33 |
-
#: app.py:
|
34 |
msgid "collapsed"
|
35 |
msgstr ""
|
36 |
|
37 |
-
#: app.py:
|
38 |
msgid "🤝"
|
39 |
msgstr ""
|
40 |
|
41 |
-
#: app.py:
|
42 |
msgid "Nt3awnou نتعاونو"
|
43 |
msgstr ""
|
44 |
|
45 |
-
#: app.py:
|
46 |
msgid "sleep_time"
|
47 |
msgstr ""
|
48 |
|
49 |
-
#: app.py:
|
50 |
msgid "auto_refresh"
|
51 |
msgstr ""
|
52 |
|
53 |
-
#: app.py:
|
54 |
msgid "Auto Refresh?"
|
55 |
msgstr ""
|
56 |
|
57 |
-
#: app.py:
|
58 |
msgid "Refresh rate in seconds"
|
59 |
msgstr ""
|
60 |
|
61 |
-
#: app.py:
|
62 |
msgid "ar"
|
63 |
msgstr ""
|
64 |
|
65 |
-
#: app.py:
|
66 |
msgid "العربية"
|
67 |
msgstr ""
|
68 |
|
69 |
-
#: app.py:
|
70 |
msgid "fr"
|
71 |
msgstr ""
|
72 |
|
73 |
-
#: app.py:
|
74 |
msgid "Français"
|
75 |
msgstr ""
|
76 |
|
77 |
-
#: app.py:
|
78 |
msgid "en"
|
79 |
msgstr ""
|
80 |
|
81 |
-
#: app.py:
|
82 |
msgid "English"
|
83 |
msgstr ""
|
84 |
|
85 |
-
#: app.py:
|
86 |
msgid "Choose language / اختر اللغة"
|
87 |
msgstr ""
|
88 |
|
89 |
-
#: app.py:
|
90 |
msgid "messages"
|
91 |
msgstr ""
|
92 |
|
93 |
-
#: app.py:
|
94 |
msgid "locales"
|
95 |
msgstr ""
|
96 |
|
97 |
-
#: app.py:
|
98 |
msgid "Markers"
|
99 |
msgstr ""
|
100 |
|
101 |
-
#: app.py:
|
102 |
msgid "map"
|
103 |
msgstr ""
|
104 |
|
105 |
-
#: app.py:
|
106 |
msgid ""
|
107 |
"\n"
|
108 |
" <style>\n"
|
@@ -117,19 +117,19 @@ msgstr ""
|
|
117 |
msgid ""
|
118 |
"\n"
|
119 |
" <div style=\"text-align: left;\">\n"
|
120 |
-
" Nt3awnou نتعاونو is a
|
121 |
-
"
|
122 |
-
"
|
123 |
-
"
|
124 |
-
"
|
125 |
-
"
|
126 |
-
"
|
127 |
-
"
|
128 |
-
"
|
129 |
-
"
|
130 |
-
"
|
131 |
-
"
|
132 |
-
"
|
133 |
" <br>⚠️ Warning : There are still rocks falling down the mountains, making "
|
134 |
"the roads to the affected areas very dangerous. We advise volunteers to "
|
135 |
"donate directly to specialized NGOs.<br>\n"
|
@@ -156,11 +156,11 @@ msgid ""
|
|
156 |
"\n"
|
157 |
" <div style=\"text-align: right;-webkit-rtl-ordering: logical;\">\n"
|
158 |
"\n"
|
159 |
-
" نتعاونو هي منصة تعاونية
|
160 |
-
"
|
161 |
-
"
|
162 |
-
"
|
163 |
-
"
|
164 |
"المعلومات، كنجمعوهم فخريطة كتمكن الجمعيات من تنظيم و استهداف تدخلاتهم بدقة "
|
165 |
"باش توصل المساعدة للناس لي محتاجين في وقت أسرع. و كل جمعية قامت باللازم في "
|
166 |
"منطقة معينة تقدر تعلمنا عن طريق ملأ استمارة مخصصة لهاد الأمر. هاد المعلومات "
|
@@ -191,21 +191,21 @@ msgstr ""
|
|
191 |
msgid ""
|
192 |
"\n"
|
193 |
" <div style=\"text-align: left;\">\n"
|
194 |
-
" Nt3awnou نتعاونو est une plateforme collaborative à
|
195 |
-
"
|
196 |
-
"
|
197 |
-
"
|
198 |
-
"
|
199 |
-
"
|
200 |
-
"
|
201 |
-
"
|
202 |
-
"
|
203 |
-
"
|
204 |
-
"
|
205 |
-
"
|
206 |
-
"
|
207 |
-
"
|
208 |
-
"
|
209 |
" <br> ⚠️ Avertissement : Il y a encore des chutes de pierres dans les "
|
210 |
"montagnes, ce qui rend les routes vers les zones touchées très dangereuses. "
|
211 |
"Nous conseillons aux volontaires de faire des dons directement aux "
|
@@ -245,12 +245,15 @@ msgid ""
|
|
245 |
" <hr>\n"
|
246 |
" <div style=\"text-align: center;\">\n"
|
247 |
" <p>By <b>Moroccans</b> for <b>Moroccans</b> 🤝</p>\n"
|
|
|
|
|
|
|
248 |
" <p>Reach out to us at <a href=\"mailto:nt3awnoumorocco@gmail."
|
249 |
"com\">[email protected]</a></p>\n"
|
250 |
" "
|
251 |
msgstr ""
|
252 |
|
253 |
-
#: src/text_content.py:
|
254 |
msgid ""
|
255 |
"\n"
|
256 |
" <style>\n"
|
@@ -312,7 +315,7 @@ msgid ""
|
|
312 |
" # "
|
313 |
msgstr ""
|
314 |
|
315 |
-
#: src/text_content.py:
|
316 |
msgid ""
|
317 |
"**If a request should be reviewed or dropped submit its id here/ إذا كان يجب "
|
318 |
"مراجعة أو حذف طلب، أدخل رقمه هنا:**"
|
@@ -341,8 +344,7 @@ msgid "warn"
|
|
341 |
msgstr ""
|
342 |
|
343 |
#: src/utils.py:28 src/utils.py:29 src/utils.py:57 src/utils.py:58
|
344 |
-
#: src/utils.py:67 src/markers.py:
|
345 |
-
#: src/components.py:137
|
346 |
msgid ","
|
347 |
msgstr ""
|
348 |
|
@@ -350,9 +352,9 @@ msgstr ""
|
|
350 |
msgid "Add a latlng column to the dataframe"
|
351 |
msgstr ""
|
352 |
|
353 |
-
#: src/utils.py:44 src/utils.py:46 src/markers.py:
|
354 |
-
#: src/markers.py:
|
355 |
-
#: src/markers.py:
|
356 |
msgid "latlng"
|
357 |
msgstr ""
|
358 |
|
@@ -427,7 +429,7 @@ msgstr ""
|
|
427 |
msgid "50 to 100 km - Moderate risk area | منطقة خطر معتدلة"
|
428 |
msgstr ""
|
429 |
|
430 |
-
#: src/utils.py:98 src/markers.py:8 src/markers.py:
|
431 |
msgid "orange"
|
432 |
msgstr ""
|
433 |
|
@@ -483,7 +485,7 @@ msgstr ""
|
|
483 |
msgid "#0046C8"
|
484 |
msgstr ""
|
485 |
|
486 |
-
#: src/utils.py:140 src/utils.py:144 src/markers.py:
|
487 |
msgid "Done ✅"
|
488 |
msgstr "Terminé ✅"
|
489 |
|
@@ -491,11 +493,11 @@ msgstr "Terminé ✅"
|
|
491 |
msgid "Planned ⏳"
|
492 |
msgstr "Prévu ⏳"
|
493 |
|
494 |
-
#: src/utils.py:142 src/utils.py:146 src/markers.py:
|
495 |
msgid "Partial 📝"
|
496 |
msgstr "Partiel 📝"
|
497 |
|
498 |
-
#: src/utils.py:145 src/markers.py:
|
499 |
msgid "Planned ⌛"
|
500 |
msgstr "Prévu ⌛"
|
501 |
|
@@ -511,15 +513,15 @@ msgstr "Urgence moyenne 🟠"
|
|
511 |
msgid "Low Emergency 🟡"
|
512 |
msgstr "Urgence faible 🟡"
|
513 |
|
514 |
-
#: src/utils.py:158 src/markers.py:
|
515 |
msgid "High"
|
516 |
msgstr ""
|
517 |
|
518 |
-
#: src/utils.py:159 src/markers.py:
|
519 |
msgid "Medium"
|
520 |
msgstr ""
|
521 |
|
522 |
-
#: src/utils.py:160 src/markers.py:
|
523 |
msgid "Low"
|
524 |
msgstr ""
|
525 |
|
@@ -724,7 +726,7 @@ msgstr ""
|
|
724 |
msgid "إغاثة"
|
725 |
msgstr ""
|
726 |
|
727 |
-
#: src/markers.py:7 src/markers.py:
|
728 |
msgid "red"
|
729 |
msgstr ""
|
730 |
|
@@ -736,7 +738,7 @@ msgstr ""
|
|
736 |
msgid "مأوى"
|
737 |
msgstr ""
|
738 |
|
739 |
-
#: src/markers.py:9 src/markers.py:
|
740 |
msgid "beige"
|
741 |
msgstr ""
|
742 |
|
@@ -760,7 +762,7 @@ msgstr ""
|
|
760 |
msgid "bell"
|
761 |
msgstr ""
|
762 |
|
763 |
-
#: src/markers.py:16 src/markers.py:
|
764 |
msgid "heart"
|
765 |
msgstr ""
|
766 |
|
@@ -776,156 +778,60 @@ msgstr ""
|
|
776 |
msgid "Warning"
|
777 |
msgstr ""
|
778 |
|
779 |
-
#: src/markers.py:
|
780 |
-
msgid "A"
|
781 |
-
msgstr ""
|
782 |
-
|
783 |
-
#: src/markers.py:35
|
784 |
msgid "Display NGO interventions on the map"
|
785 |
msgstr ""
|
786 |
|
787 |
-
#: src/markers.py:
|
788 |
-
msgid "K"
|
789 |
-
msgstr ""
|
790 |
-
|
791 |
-
#: src/markers.py:40 src/markers.py:77
|
792 |
-
msgid "H"
|
793 |
-
msgstr ""
|
794 |
-
|
795 |
-
#: src/markers.py:40
|
796 |
msgid "Intervention prévue dans le futur / Planned future intervention"
|
797 |
msgstr ""
|
798 |
|
799 |
-
#: src/markers.py:
|
800 |
msgid "Partiellement satisfait / Partially Served"
|
801 |
msgstr ""
|
802 |
|
803 |
-
#: src/markers.py:
|
804 |
msgid "pink"
|
805 |
msgstr ""
|
806 |
|
807 |
-
#: src/markers.py:
|
808 |
msgid "Critique, Besoin d'aide en urgence / Critical, in urgent need of help"
|
809 |
msgstr ""
|
810 |
|
811 |
-
#: src/markers.py:
|
812 |
msgid "green"
|
813 |
msgstr ""
|
814 |
|
815 |
-
#: src/markers.py:
|
816 |
msgid "darkgreen"
|
817 |
msgstr ""
|
818 |
|
819 |
-
#: src/markers.py:
|
820 |
-
msgid "B"
|
821 |
-
msgstr ""
|
822 |
-
|
823 |
-
#: src/markers.py:72
|
824 |
-
msgid "C"
|
825 |
-
msgstr ""
|
826 |
-
|
827 |
-
#: src/markers.py:73
|
828 |
-
msgid "D"
|
829 |
-
msgstr ""
|
830 |
-
|
831 |
-
#: src/markers.py:74
|
832 |
-
msgid "E"
|
833 |
-
msgstr ""
|
834 |
-
|
835 |
-
#: src/markers.py:75
|
836 |
-
msgid "F"
|
837 |
-
msgstr ""
|
838 |
-
|
839 |
-
#: src/markers.py:76
|
840 |
-
msgid "G"
|
841 |
-
msgstr ""
|
842 |
-
|
843 |
-
#: src/markers.py:78
|
844 |
-
msgid "I"
|
845 |
-
msgstr ""
|
846 |
-
|
847 |
-
#: src/markers.py:79
|
848 |
-
msgid "J"
|
849 |
-
msgstr ""
|
850 |
-
|
851 |
-
#: src/markers.py:81
|
852 |
-
msgid "L"
|
853 |
-
msgstr ""
|
854 |
-
|
855 |
-
#: src/markers.py:82
|
856 |
-
msgid "M"
|
857 |
-
msgstr ""
|
858 |
-
|
859 |
-
#: src/markers.py:83
|
860 |
-
msgid "N"
|
861 |
-
msgstr ""
|
862 |
-
|
863 |
-
#: src/markers.py:84
|
864 |
-
msgid "O"
|
865 |
-
msgstr ""
|
866 |
-
|
867 |
-
#: src/markers.py:85
|
868 |
-
msgid "P"
|
869 |
-
msgstr ""
|
870 |
-
|
871 |
-
#: src/markers.py:86
|
872 |
-
msgid "Q"
|
873 |
-
msgstr ""
|
874 |
-
|
875 |
-
#: src/markers.py:87
|
876 |
-
msgid "R"
|
877 |
-
msgstr ""
|
878 |
-
|
879 |
-
#: src/markers.py:88
|
880 |
-
msgid "S"
|
881 |
-
msgstr ""
|
882 |
-
|
883 |
-
#: src/markers.py:89
|
884 |
-
msgid "T"
|
885 |
-
msgstr ""
|
886 |
-
|
887 |
-
#: src/markers.py:90
|
888 |
-
msgid "U"
|
889 |
-
msgstr ""
|
890 |
-
|
891 |
-
#: src/markers.py:92
|
892 |
-
msgid ", "
|
893 |
-
msgstr ""
|
894 |
-
|
895 |
-
#: src/markers.py:93
|
896 |
#, python-brace-format
|
897 |
msgid ""
|
898 |
"\n"
|
|
|
|
|
|
|
|
|
899 |
" <b>Org:</b> {org}<br>\n"
|
900 |
-
" <b>
|
901 |
-
" <b>Speciality:</b> {speciality}<br>\n"
|
902 |
-
" <b>Phone 1:</b> {phone_1}<br>\n"
|
903 |
-
" <b>Phone 2:</b> {phone_2}<br>\n"
|
904 |
-
" <b>Email:</b> {email}<br>\n"
|
905 |
-
" <b>Intervention Date:</b> {intervention_date}<br>\n"
|
906 |
-
" <b>Intervention Status:</b> {intervention_status}<br>\n"
|
907 |
-
" <b>Help Type:</b> {help_type}<br>\n"
|
908 |
-
" <b>Current Situation:</b> {current_situation}<br>\n"
|
909 |
-
" <b>Future Help Type:</b> {future_help_type}<br>\n"
|
910 |
-
" <b>Douar Name:</b> {full_douar_name}<br>\n"
|
911 |
-
" <b>Accessibility to Douar:</b> {accessibility_to_douar}<br>\n"
|
912 |
-
" <b>Type of Accessibility:</b> {type_of_accessibility}<br>\n"
|
913 |
" <b>Population:</b> {population}<br>\n"
|
914 |
-
" <b>
|
915 |
-
"<br>\n"
|
916 |
-
" <b>
|
917 |
" "
|
918 |
msgstr ""
|
919 |
|
920 |
-
#: src/markers.py:
|
921 |
msgid "Planned"
|
922 |
msgstr "Prévu"
|
923 |
|
924 |
-
#: src/markers.py:
|
925 |
msgid "glyphicon"
|
926 |
msgstr ""
|
927 |
|
928 |
-
#: src/markers.py:
|
929 |
#, python-brace-format
|
930 |
msgid ""
|
931 |
"\n"
|
@@ -940,20 +846,20 @@ msgid ""
|
|
940 |
" "
|
941 |
msgstr ""
|
942 |
|
943 |
-
#: src/markers.py:
|
944 |
msgid "Display victim requests on the map"
|
945 |
msgstr ""
|
946 |
|
947 |
-
#: src/markers.py:
|
948 |
msgid "ما هي احتياجاتك؟ (أضفها إذا لم يتم ذكرها)"
|
949 |
msgstr ""
|
950 |
|
951 |
-
#: src/markers.py:
|
952 |
#, python-brace-format
|
953 |
msgid "https://maps.google.com/?q={long_lat}"
|
954 |
msgstr ""
|
955 |
|
956 |
-
#: src/markers.py:
|
957 |
msgid ""
|
958 |
"\n"
|
959 |
" <b>Request Type:</b> {request_type}<br>\n"
|
@@ -967,77 +873,77 @@ msgid ""
|
|
967 |
" "
|
968 |
msgstr ""
|
969 |
|
970 |
-
#: src/markers.py:
|
971 |
msgid "list"
|
972 |
msgstr ""
|
973 |
|
974 |
-
#: src/markers.py:
|
975 |
msgid " لأي جماعة / قيادة / دوار تنتمون ؟"
|
976 |
msgstr ""
|
977 |
|
978 |
-
#: src/markers.py:
|
979 |
msgid "Display verified victim requests on the map"
|
980 |
msgstr ""
|
981 |
|
982 |
-
#: src/markers.py:
|
983 |
msgid "Help Details"
|
984 |
msgstr ""
|
985 |
|
986 |
-
#: src/markers.py:
|
987 |
#, python-brace-format
|
988 |
msgid "<b>Request Type:</b> {request_type}<br>"
|
989 |
msgstr ""
|
990 |
|
991 |
-
#: src/markers.py:
|
992 |
msgid "Location Details"
|
993 |
msgstr ""
|
994 |
|
995 |
-
#: src/markers.py:
|
996 |
#, python-brace-format
|
997 |
msgid "<b>Location:</b> {val}<br>"
|
998 |
msgstr ""
|
999 |
|
1000 |
-
#: src/markers.py:
|
1001 |
msgid "Emergency Degree"
|
1002 |
msgstr ""
|
1003 |
|
1004 |
-
#: src/markers.py:
|
1005 |
#, python-brace-format
|
1006 |
msgid "<b>Emergency Degree:</b> {val}<br>"
|
1007 |
msgstr ""
|
1008 |
|
1009 |
-
#: src/markers.py:
|
1010 |
msgid "Verification Date"
|
1011 |
msgstr ""
|
1012 |
|
1013 |
-
#: src/markers.py:
|
1014 |
#, python-brace-format
|
1015 |
msgid "<b>Verification Date:</b> {val}<br>"
|
1016 |
msgstr ""
|
1017 |
|
1018 |
-
#: src/markers.py:
|
1019 |
-
#: src/dataframes.py:
|
1020 |
msgid "id"
|
1021 |
msgstr ""
|
1022 |
|
1023 |
-
#: src/markers.py:
|
1024 |
#, python-brace-format
|
1025 |
msgid "<b>Id:</b> {val}<br>"
|
1026 |
msgstr ""
|
1027 |
|
1028 |
-
#: src/markers.py:
|
1029 |
#, python-brace-format
|
1030 |
msgid "https://maps.google.com/?q={val}"
|
1031 |
msgstr ""
|
1032 |
|
1033 |
-
#: src/markers.py:
|
1034 |
#, python-brace-format
|
1035 |
msgid ""
|
1036 |
"<a href=\"{maps_url}\" target=\"_blank\" rel=\"noopener "
|
1037 |
"noreferrer\"><b>Google Maps</b></a><br>"
|
1038 |
msgstr ""
|
1039 |
|
1040 |
-
#: src/markers.py:
|
1041 |
msgid ""
|
1042 |
"<a href='https://docs.google.com/forms/d/"
|
1043 |
"e/1FAIpQLSdyAcOAULumk4A1DsfrwUsGdZ-9G5xOUuD3vHdQOp3nGNAZXw/viewform?"
|
@@ -1046,63 +952,63 @@ msgid ""
|
|
1046 |
"solved</b></a><br>"
|
1047 |
msgstr ""
|
1048 |
|
1049 |
-
#: src/components.py:
|
1050 |
msgid "Id review submission form"
|
1051 |
msgstr ""
|
1052 |
|
1053 |
-
#: src/components.py:
|
1054 |
msgid "🔍 Review of requests | مراجعة طلب مساعدة"
|
1055 |
msgstr ""
|
1056 |
|
1057 |
-
#: src/components.py:
|
1058 |
msgid "Enter id / أدخل الرقم"
|
1059 |
msgstr ""
|
1060 |
|
1061 |
-
#: src/components.py:
|
1062 |
msgid "Explain why / أدخل سبب المراجعة"
|
1063 |
msgstr ""
|
1064 |
|
1065 |
-
#: src/components.py:
|
1066 |
msgid "Submit / أرسل"
|
1067 |
msgstr ""
|
1068 |
|
1069 |
-
#: src/components.py:
|
1070 |
msgid "Please enter a reason / الرجاء إدخال سبب"
|
1071 |
msgstr ""
|
1072 |
|
1073 |
-
#: src/components.py:
|
1074 |
msgid ""
|
1075 |
"review_id_{id_to_review}_{datetime.now().strftime('%Y-%m-%d_%H-%M-%S')}.txt"
|
1076 |
msgstr ""
|
1077 |
|
1078 |
-
#: src/components.py:
|
1079 |
msgid "w"
|
1080 |
msgstr ""
|
1081 |
|
1082 |
-
#: src/components.py:
|
1083 |
#, python-brace-format
|
1084 |
msgid "id: {id_to_review}, explanation: {reason_for_review}\n"
|
1085 |
msgstr ""
|
1086 |
|
1087 |
-
#: src/components.py:
|
1088 |
msgid "nt3awnou/review_requests"
|
1089 |
msgstr ""
|
1090 |
|
1091 |
-
#: src/components.py:
|
1092 |
msgid "dataset"
|
1093 |
msgstr ""
|
1094 |
|
1095 |
-
#: src/components.py:
|
1096 |
msgid ""
|
1097 |
"Submitted at https://huggingface.co/datasets/nt3awnou/review_requests/ تم "
|
1098 |
"الإرسال"
|
1099 |
msgstr ""
|
1100 |
|
1101 |
-
#: src/components.py:
|
1102 |
msgid "💻 For Developers only, embed code for the map"
|
1103 |
msgstr "💻 Pour les développeurs uniquement, code d'intégration de la carte"
|
1104 |
|
1105 |
-
#: src/components.py:
|
1106 |
msgid ""
|
1107 |
"\n"
|
1108 |
" <iframe id=\"nt3awnou-map\"\n"
|
@@ -1121,79 +1027,55 @@ msgid ""
|
|
1121 |
" "
|
1122 |
msgstr ""
|
1123 |
|
1124 |
-
#: src/components.py:
|
1125 |
msgid "html"
|
1126 |
msgstr ""
|
1127 |
|
1128 |
-
#: src/components.py:
|
1129 |
msgid "# Number of help requests"
|
1130 |
msgstr ""
|
1131 |
|
1132 |
-
#: src/components.py:
|
1133 |
msgid "# Number of interventions"
|
1134 |
msgstr ""
|
1135 |
|
1136 |
-
#: src/components.py:
|
1137 |
msgid "# Number of solved requests"
|
1138 |
msgstr ""
|
1139 |
|
1140 |
-
#: src/components.py:
|
|
|
|
|
|
|
|
|
1141 |
msgid "# عدد طلبات المساعدة"
|
1142 |
msgstr ""
|
1143 |
|
1144 |
-
#: src/components.py:
|
1145 |
msgid "# عدد التدخلات"
|
1146 |
msgstr ""
|
1147 |
|
1148 |
-
#: src/components.py:
|
1149 |
msgid "# عدد الطلبات المستجاب لها"
|
1150 |
msgstr ""
|
1151 |
|
1152 |
-
#: src/components.py:
|
1153 |
msgid "# Nombre de demandes d'aide"
|
1154 |
msgstr ""
|
1155 |
|
1156 |
-
#: src/components.py:
|
1157 |
msgid "# Nombre d'interventions"
|
1158 |
msgstr ""
|
1159 |
|
1160 |
-
#: src/components.py:
|
1161 |
msgid "# Nombre de demandes résolues"
|
1162 |
msgstr ""
|
1163 |
|
1164 |
-
#: src/components.py:
|
1165 |
-
msgid "📊 **Charts**"
|
1166 |
-
msgstr "📊 **Graphiques**"
|
1167 |
-
|
1168 |
-
#: src/components.py:130 src/components.py:131
|
1169 |
-
msgid "supplies_category"
|
1170 |
-
msgstr ""
|
1171 |
-
|
1172 |
-
#: src/components.py:130 src/components.py:137
|
1173 |
-
msgid "[] '"
|
1174 |
-
msgstr ""
|
1175 |
-
|
1176 |
-
#: src/components.py:130 src/components.py:137
|
1177 |
-
msgid "category"
|
1178 |
-
msgstr ""
|
1179 |
-
|
1180 |
-
#: src/components.py:131
|
1181 |
-
msgid "Supplies Categories"
|
1182 |
-
msgstr "Catégories d'aides fournies"
|
1183 |
-
|
1184 |
-
#: src/components.py:137 src/components.py:138
|
1185 |
-
msgid "need_category"
|
1186 |
-
msgstr ""
|
1187 |
-
|
1188 |
-
#: src/components.py:138
|
1189 |
-
msgid "Needs Categories"
|
1190 |
-
msgstr "Catégories de besoins"
|
1191 |
-
|
1192 |
-
#: src/components.py:145
|
1193 |
msgid "📝 **Donations**"
|
1194 |
msgstr "📝 **Donations**"
|
1195 |
|
1196 |
-
#: src/components.py:
|
1197 |
msgid ""
|
1198 |
"\n"
|
1199 |
" <div style=\"text-align: center;\">\n"
|
@@ -1210,7 +1092,7 @@ msgid ""
|
|
1210 |
" "
|
1211 |
msgstr ""
|
1212 |
|
1213 |
-
#: src/components.py:
|
1214 |
msgid ""
|
1215 |
"\n"
|
1216 |
" <div style=\"text-align: center;\">\n"
|
@@ -1227,7 +1109,7 @@ msgid ""
|
|
1227 |
" "
|
1228 |
msgstr ""
|
1229 |
|
1230 |
-
#: src/components.py:
|
1231 |
msgid ""
|
1232 |
"\n"
|
1233 |
" <div style=\"text-align: center;\">\n"
|
@@ -1304,104 +1186,105 @@ msgstr "✅ Entièrement servi"
|
|
1304 |
msgid "Choose status"
|
1305 |
msgstr ""
|
1306 |
|
1307 |
-
#: src/dataframes.py:6
|
1308 |
-
msgid "VERIFIED_REQUESTS_URL"
|
1309 |
-
msgstr ""
|
1310 |
-
|
1311 |
#: src/dataframes.py:7
|
1312 |
-
msgid "
|
1313 |
-
|
1314 |
-
|
1315 |
-
#: src/dataframes.py:8
|
1316 |
-
msgid "INTERVENTIONS_URL"
|
1317 |
msgstr ""
|
1318 |
|
1319 |
#: src/dataframes.py:9
|
1320 |
-
msgid "
|
|
|
|
|
1321 |
msgstr ""
|
1322 |
|
1323 |
-
#: src/dataframes.py:
|
1324 |
-
msgid "
|
|
|
|
|
1325 |
msgstr ""
|
1326 |
|
1327 |
-
#: src/dataframes.py:
|
1328 |
msgid "data/regions.json"
|
1329 |
msgstr ""
|
1330 |
|
1331 |
-
#: src/dataframes.py:
|
1332 |
msgid "Automatic Extracted Coordinates"
|
1333 |
msgstr ""
|
1334 |
|
1335 |
-
#: src/dataframes.py:
|
1336 |
msgid "Status"
|
1337 |
msgstr ""
|
1338 |
|
1339 |
-
#: src/dataframes.py:
|
1340 |
msgid "Display the dataframe in a table"
|
1341 |
msgstr ""
|
1342 |
|
1343 |
-
#: src/dataframes.py:
|
1344 |
msgid "🔍 Search for information / بحث عن المعلومات"
|
1345 |
msgstr ""
|
1346 |
|
1347 |
-
#: src/dataframes.py:
|
1348 |
#, python-brace-format
|
1349 |
msgid "query_{df_hash}"
|
1350 |
msgstr ""
|
1351 |
|
1352 |
-
#: src/dataframes.py:
|
1353 |
msgid "🔍 Search for an id / بحث عن رقم"
|
1354 |
msgstr ""
|
1355 |
|
1356 |
-
#: src/dataframes.py:
|
1357 |
#, python-brace-format
|
1358 |
msgid "id_{df_hash}"
|
1359 |
msgstr ""
|
1360 |
|
1361 |
-
#: src/dataframes.py:
|
1362 |
msgid "🗓️ Status / حالة"
|
1363 |
msgstr ""
|
1364 |
|
1365 |
-
#: src/dataframes.py:
|
1366 |
msgid "all / الكل"
|
1367 |
msgstr ""
|
1368 |
|
1369 |
-
#: src/dataframes.py:
|
1370 |
msgid "Done / تم"
|
1371 |
msgstr ""
|
1372 |
|
1373 |
-
#: src/dataframes.py:
|
1374 |
msgid "Planned / مخطط لها"
|
1375 |
msgstr ""
|
1376 |
|
1377 |
-
#: src/dataframes.py:
|
1378 |
#, python-brace-format
|
1379 |
msgid "status_{df_hash}"
|
1380 |
msgstr ""
|
1381 |
|
1382 |
-
#: src/dataframes.py:
|
1383 |
-
msgid "
|
|
|
|
|
|
|
1384 |
msgstr ""
|
1385 |
|
1386 |
-
#: src/dataframes.py:
|
1387 |
msgid "Intervention déjà passée / Past intevention"
|
1388 |
msgstr ""
|
1389 |
|
1390 |
-
#: src/dataframes.py:
|
1391 |
#, python-brace-format
|
1392 |
msgid ""
|
1393 |
"To view the full Google Sheet for advanced filtering go to: {data_url} "
|
1394 |
"**لعرض الورقة كاملة، اذهب إلى**"
|
1395 |
msgstr ""
|
1396 |
|
1397 |
-
#: src/dataframes.py:
|
1398 |
msgid ""
|
1399 |
"We are hiding contact information to protect the privacy of the victims. If "
|
1400 |
"you are an NGO and want to contact the victims, please contact us at "
|
1401 | |
1402 |
msgstr ""
|
1403 |
|
1404 |
-
#: src/dataframes.py:
|
1405 |
msgid ""
|
1406 |
"\n"
|
1407 |
" <div style=\"text-align: left;\">\n"
|
|
|
3 |
# This file is distributed under the same license as the PACKAGE package.
|
4 |
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
5 |
#
|
6 |
+
#: src/utils.py:69 src/utils.py:70 src/markers.py:195 src/components.py:16
|
7 |
msgid ""
|
8 |
msgstr ""
|
9 |
"Project-Id-Version: \n"
|
10 |
"Report-Msgid-Bugs-To: \n"
|
11 |
+
"POT-Creation-Date: 2023-09-19 03:04+0200\n"
|
12 |
"PO-Revision-Date: 2023-09-18 21:00+0200\n"
|
13 |
"Last-Translator: \n"
|
14 |
"Language-Team: \n"
|
|
|
18 |
"Content-Transfer-Encoding: 8bit\n"
|
19 |
"X-Generator: Poedit 3.3.2\n"
|
20 |
|
21 |
+
#: app.py:22
|
22 |
msgid "myapplication"
|
23 |
msgstr ""
|
24 |
|
25 |
+
#: app.py:24
|
26 |
msgid "HF_TOKEN"
|
27 |
msgstr ""
|
28 |
|
29 |
+
#: app.py:31
|
30 |
msgid "wide"
|
31 |
msgstr ""
|
32 |
|
33 |
+
#: app.py:32 src/filters.py:40 src/filters.py:62
|
34 |
msgid "collapsed"
|
35 |
msgstr ""
|
36 |
|
37 |
+
#: app.py:33
|
38 |
msgid "🤝"
|
39 |
msgstr ""
|
40 |
|
41 |
+
#: app.py:34
|
42 |
msgid "Nt3awnou نتعاونو"
|
43 |
msgstr ""
|
44 |
|
45 |
+
#: app.py:38
|
46 |
msgid "sleep_time"
|
47 |
msgstr ""
|
48 |
|
49 |
+
#: app.py:40
|
50 |
msgid "auto_refresh"
|
51 |
msgstr ""
|
52 |
|
53 |
+
#: app.py:43
|
54 |
msgid "Auto Refresh?"
|
55 |
msgstr ""
|
56 |
|
57 |
+
#: app.py:45
|
58 |
msgid "Refresh rate in seconds"
|
59 |
msgstr ""
|
60 |
|
61 |
+
#: app.py:55 app.py:182 src/components.py:70 src/components.py:126
|
62 |
msgid "ar"
|
63 |
msgstr ""
|
64 |
|
65 |
+
#: app.py:55
|
66 |
msgid "العربية"
|
67 |
msgstr ""
|
68 |
|
69 |
+
#: app.py:56 src/components.py:89 src/components.py:143
|
70 |
msgid "fr"
|
71 |
msgstr ""
|
72 |
|
73 |
+
#: app.py:56
|
74 |
msgid "Français"
|
75 |
msgstr ""
|
76 |
|
77 |
+
#: app.py:57 app.py:62 src/components.py:52 src/components.py:110
|
78 |
msgid "en"
|
79 |
msgstr ""
|
80 |
|
81 |
+
#: app.py:57
|
82 |
msgid "English"
|
83 |
msgstr ""
|
84 |
|
85 |
+
#: app.py:60
|
86 |
msgid "Choose language / اختر اللغة"
|
87 |
msgstr ""
|
88 |
|
89 |
+
#: app.py:65
|
90 |
msgid "messages"
|
91 |
msgstr ""
|
92 |
|
93 |
+
#: app.py:65
|
94 |
msgid "locales"
|
95 |
msgstr ""
|
96 |
|
97 |
+
#: app.py:70
|
98 |
msgid "Markers"
|
99 |
msgstr ""
|
100 |
|
101 |
+
#: app.py:113
|
102 |
msgid "map"
|
103 |
msgstr ""
|
104 |
|
105 |
+
#: app.py:184
|
106 |
msgid ""
|
107 |
"\n"
|
108 |
" <style>\n"
|
|
|
117 |
msgid ""
|
118 |
"\n"
|
119 |
" <div style=\"text-align: left;\">\n"
|
120 |
+
" Nt3awnou نتعاونو is a collaborative platform dedicated to aiding "
|
121 |
+
"individuals impacted by the recent earthquake in Morocco. Our core mission "
|
122 |
+
"is to streamline and coordinate timely assistance for everyone affected. How "
|
123 |
+
"do we achieve this? We assist those in need by allowing them to communicate "
|
124 |
+
"their location and the specific aid they require, either by completing a "
|
125 |
+
"form or sending a voice message via WhatsApp to the number <b>0652573987</"
|
126 |
+
"b>. Once we receive and process this information, it can be viewed in our "
|
127 |
+
"dashboard, which allows NGOs to organize and precisely target their "
|
128 |
+
"interventions, ensuring swift assistance reaches those in need. Any "
|
129 |
+
"organization that has taken initiative in a particular area can notify us by "
|
130 |
+
"completing a dedicated form. This data is also incorporated into the "
|
131 |
+
"dashboard so that other NGOs can help affected areas that still haven't "
|
132 |
+
"received help.\n"
|
133 |
" <br>⚠️ Warning : There are still rocks falling down the mountains, making "
|
134 |
"the roads to the affected areas very dangerous. We advise volunteers to "
|
135 |
"donate directly to specialized NGOs.<br>\n"
|
|
|
156 |
"\n"
|
157 |
" <div style=\"text-align: right;-webkit-rtl-ordering: logical;\">\n"
|
158 |
"\n"
|
159 |
+
" نتعاونو هي منصة تعاونية لمساعدة الأفراد المتضررين من الزلزال الأخير في "
|
160 |
+
"المغرب. مهمتنا هي تسهيل تقديم المساعدة في الوقت المناسب و بفاعلية و تنظيم "
|
161 |
+
"لجميع المتضررين. كيفاش؟ كنعاونو الناس لي محتاجين للمساعدة إعلمونا بمكانهم و "
|
162 |
+
"نوع المساعدة لي محتاجين ليها سواء عن طريق ملأ الاستمارة أو عن طريق إرسال "
|
163 |
+
"تسجيل صوتي عبر واتساب إلى رقم مخصص<b>0652573987</b>. بعد معالجة هاد "
|
164 |
"المعلومات، كنجمعوهم فخريطة كتمكن الجمعيات من تنظيم و استهداف تدخلاتهم بدقة "
|
165 |
"باش توصل المساعدة للناس لي محتاجين في وقت أسرع. و كل جمعية قامت باللازم في "
|
166 |
"منطقة معينة تقدر تعلمنا عن طريق ملأ استمارة مخصصة لهاد الأمر. هاد المعلومات "
|
|
|
191 |
msgid ""
|
192 |
"\n"
|
193 |
" <div style=\"text-align: left;\">\n"
|
194 |
+
" Nt3awnou نتعاونو est une plateforme collaborative dédiée à l'aide aux "
|
195 |
+
"personnes touchées par le récent tremblement de terre au Maroc. Notre "
|
196 |
+
"mission principale est de rationaliser et de coordonner une assistance "
|
197 |
+
"rapide pour toutes les personnes touchées. Comment y parvenons-nous ? Nous "
|
198 |
+
"aidons les personnes dans le besoin en leur permettant de communiquer leur "
|
199 |
+
"localisation et l'aide spécifique dont elles ont besoin, soit en remplissant "
|
200 |
+
"un formulaire, soit en envoyant un message vocal via WhatsApp à un numéro "
|
201 |
+
"<b>0652573987</b>. Une fois reçues et traitées, ces informations peuvent "
|
202 |
+
"être consultées dans notre tableau de bord, qui permet aux associations "
|
203 |
+
"d'organiser et de cibler précisément leurs interventions, afin que l'aide "
|
204 |
+
"parvienne rapidement à ceux qui en ont besoin. Toute organisation ayant pris "
|
205 |
+
"une initiative dans une zone particulière peut nous en informer en "
|
206 |
+
"remplissant un formulaire prévu à cet effet. Ces données sont également "
|
207 |
+
"intégrées au tableau de bord afin que d'autres associations puissent aider "
|
208 |
+
"les zones touchées qui n'ont pas encore reçu d'aide.\n"
|
209 |
" <br> ⚠️ Avertissement : Il y a encore des chutes de pierres dans les "
|
210 |
"montagnes, ce qui rend les routes vers les zones touchées très dangereuses. "
|
211 |
"Nous conseillons aux volontaires de faire des dons directement aux "
|
|
|
245 |
" <hr>\n"
|
246 |
" <div style=\"text-align: center;\">\n"
|
247 |
" <p>By <b>Moroccans</b> for <b>Moroccans</b> 🤝</p>\n"
|
248 |
+
" <p> Special thanks for <a href=\"https://www.annarabic.com/\">Annarabic</"
|
249 |
+
"a> and <a href=\"https://summerschool.morocco.ai/\">AI Summer School</a> for "
|
250 |
+
"their support</p>\n"
|
251 |
" <p>Reach out to us at <a href=\"mailto:nt3awnoumorocco@gmail."
|
252 |
"com\">[email protected]</a></p>\n"
|
253 |
" "
|
254 |
msgstr ""
|
255 |
|
256 |
+
#: src/text_content.py:61
|
257 |
msgid ""
|
258 |
"\n"
|
259 |
" <style>\n"
|
|
|
315 |
" # "
|
316 |
msgstr ""
|
317 |
|
318 |
+
#: src/text_content.py:106
|
319 |
msgid ""
|
320 |
"**If a request should be reviewed or dropped submit its id here/ إذا كان يجب "
|
321 |
"مراجعة أو حذف طلب، أدخل رقمه هنا:**"
|
|
|
344 |
msgstr ""
|
345 |
|
346 |
#: src/utils.py:28 src/utils.py:29 src/utils.py:57 src/utils.py:58
|
347 |
+
#: src/utils.py:67 src/markers.py:26
|
|
|
348 |
msgid ","
|
349 |
msgstr ""
|
350 |
|
|
|
352 |
msgid "Add a latlng column to the dataframe"
|
353 |
msgstr ""
|
354 |
|
355 |
+
#: src/utils.py:44 src/utils.py:46 src/markers.py:81 src/markers.py:87
|
356 |
+
#: src/markers.py:98 src/markers.py:133 src/markers.py:147 src/markers.py:193
|
357 |
+
#: src/markers.py:209
|
358 |
msgid "latlng"
|
359 |
msgstr ""
|
360 |
|
|
|
429 |
msgid "50 to 100 km - Moderate risk area | منطقة خطر معتدلة"
|
430 |
msgstr ""
|
431 |
|
432 |
+
#: src/utils.py:98 src/markers.py:8 src/markers.py:188
|
433 |
msgid "orange"
|
434 |
msgstr ""
|
435 |
|
|
|
485 |
msgid "#0046C8"
|
486 |
msgstr ""
|
487 |
|
488 |
+
#: src/utils.py:140 src/utils.py:144 src/markers.py:54 src/markers.py:109
|
489 |
msgid "Done ✅"
|
490 |
msgstr "Terminé ✅"
|
491 |
|
|
|
493 |
msgid "Planned ⏳"
|
494 |
msgstr "Prévu ⏳"
|
495 |
|
496 |
+
#: src/utils.py:142 src/utils.py:146 src/markers.py:58
|
497 |
msgid "Partial 📝"
|
498 |
msgstr "Partiel 📝"
|
499 |
|
500 |
+
#: src/utils.py:145 src/markers.py:50 src/markers.py:106
|
501 |
msgid "Planned ⌛"
|
502 |
msgstr "Prévu ⌛"
|
503 |
|
|
|
513 |
msgid "Low Emergency 🟡"
|
514 |
msgstr "Urgence faible 🟡"
|
515 |
|
516 |
+
#: src/utils.py:158 src/markers.py:189
|
517 |
msgid "High"
|
518 |
msgstr ""
|
519 |
|
520 |
+
#: src/utils.py:159 src/markers.py:188
|
521 |
msgid "Medium"
|
522 |
msgstr ""
|
523 |
|
524 |
+
#: src/utils.py:160 src/markers.py:187 src/markers.py:220
|
525 |
msgid "Low"
|
526 |
msgstr ""
|
527 |
|
|
|
726 |
msgid "إغاثة"
|
727 |
msgstr ""
|
728 |
|
729 |
+
#: src/markers.py:7 src/markers.py:107 src/markers.py:110 src/markers.py:189
|
730 |
msgid "red"
|
731 |
msgstr ""
|
732 |
|
|
|
738 |
msgid "مأوى"
|
739 |
msgstr ""
|
740 |
|
741 |
+
#: src/markers.py:9 src/markers.py:177 src/markers.py:187 src/markers.py:234
|
742 |
msgid "beige"
|
743 |
msgstr ""
|
744 |
|
|
|
762 |
msgid "bell"
|
763 |
msgstr ""
|
764 |
|
765 |
+
#: src/markers.py:16 src/markers.py:107 src/markers.py:110
|
766 |
msgid "heart"
|
767 |
msgstr ""
|
768 |
|
|
|
778 |
msgid "Warning"
|
779 |
msgstr ""
|
780 |
|
781 |
+
#: src/markers.py:34
|
|
|
|
|
|
|
|
|
782 |
msgid "Display NGO interventions on the map"
|
783 |
msgstr ""
|
784 |
|
785 |
+
#: src/markers.py:39
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
786 |
msgid "Intervention prévue dans le futur / Planned future intervention"
|
787 |
msgstr ""
|
788 |
|
789 |
+
#: src/markers.py:43 src/filters.py:52
|
790 |
msgid "Partiellement satisfait / Partially Served"
|
791 |
msgstr ""
|
792 |
|
793 |
+
#: src/markers.py:49 src/markers.py:107
|
794 |
msgid "pink"
|
795 |
msgstr ""
|
796 |
|
797 |
+
#: src/markers.py:51 src/filters.py:51
|
798 |
msgid "Critique, Besoin d'aide en urgence / Critical, in urgent need of help"
|
799 |
msgstr ""
|
800 |
|
801 |
+
#: src/markers.py:53 src/markers.py:110
|
802 |
msgid "green"
|
803 |
msgstr ""
|
804 |
|
805 |
+
#: src/markers.py:57
|
806 |
msgid "darkgreen"
|
807 |
msgstr ""
|
808 |
|
809 |
+
#: src/markers.py:68
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
810 |
#, python-brace-format
|
811 |
msgid ""
|
812 |
"\n"
|
813 |
+
" <b>Date:</b> {date}<br>\n"
|
814 |
+
" <b>City:</b> {city}<br>\n"
|
815 |
+
" <b>Intervention Status:</b> {status}<br>\n"
|
816 |
+
" <b>Village Status:</b> {village_status}<br>\n"
|
817 |
" <b>Org:</b> {org}<br>\n"
|
818 |
+
" <b>Intervention:</b> {intervention_type}<br>\n"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
819 |
" <b>Population:</b> {population}<br>\n"
|
820 |
+
" <b>Road State:</b> {road_state}<br>\n"
|
821 |
+
" <b>Details:</b> {details}<br>\n"
|
822 |
+
" <b>Contact:</b> {contact}<br>\n"
|
823 |
" "
|
824 |
msgstr ""
|
825 |
|
826 |
+
#: src/markers.py:102
|
827 |
msgid "Planned"
|
828 |
msgstr "Prévu"
|
829 |
|
830 |
+
#: src/markers.py:107 src/markers.py:110 src/markers.py:177 src/markers.py:234
|
831 |
msgid "glyphicon"
|
832 |
msgstr ""
|
833 |
|
834 |
+
#: src/markers.py:120
|
835 |
#, python-brace-format
|
836 |
msgid ""
|
837 |
"\n"
|
|
|
846 |
" "
|
847 |
msgstr ""
|
848 |
|
849 |
+
#: src/markers.py:143
|
850 |
msgid "Display victim requests on the map"
|
851 |
msgstr ""
|
852 |
|
853 |
+
#: src/markers.py:145 src/dataframes.py:37
|
854 |
msgid "ما هي احتياجاتك؟ (أضفها إذا لم يتم ذكرها)"
|
855 |
msgstr ""
|
856 |
|
857 |
+
#: src/markers.py:148
|
858 |
#, python-brace-format
|
859 |
msgid "https://maps.google.com/?q={long_lat}"
|
860 |
msgstr ""
|
861 |
|
862 |
+
#: src/markers.py:155
|
863 |
msgid ""
|
864 |
"\n"
|
865 |
" <b>Request Type:</b> {request_type}<br>\n"
|
|
|
873 |
" "
|
874 |
msgstr ""
|
875 |
|
876 |
+
#: src/markers.py:165 src/markers.py:219
|
877 |
msgid "list"
|
878 |
msgstr ""
|
879 |
|
880 |
+
#: src/markers.py:172 src/markers.py:173
|
881 |
msgid " لأي جماعة / قيادة / دوار تنتمون ؟"
|
882 |
msgstr ""
|
883 |
|
884 |
+
#: src/markers.py:183
|
885 |
msgid "Display verified victim requests on the map"
|
886 |
msgstr ""
|
887 |
|
888 |
+
#: src/markers.py:197 src/markers.py:198 src/dataframes.py:40
|
889 |
msgid "Help Details"
|
890 |
msgstr ""
|
891 |
|
892 |
+
#: src/markers.py:200
|
893 |
#, python-brace-format
|
894 |
msgid "<b>Request Type:</b> {request_type}<br>"
|
895 |
msgstr ""
|
896 |
|
897 |
+
#: src/markers.py:201 src/markers.py:223
|
898 |
msgid "Location Details"
|
899 |
msgstr ""
|
900 |
|
901 |
+
#: src/markers.py:202
|
902 |
#, python-brace-format
|
903 |
msgid "<b>Location:</b> {val}<br>"
|
904 |
msgstr ""
|
905 |
|
906 |
+
#: src/markers.py:203 src/markers.py:220
|
907 |
msgid "Emergency Degree"
|
908 |
msgstr ""
|
909 |
|
910 |
+
#: src/markers.py:204
|
911 |
#, python-brace-format
|
912 |
msgid "<b>Emergency Degree:</b> {val}<br>"
|
913 |
msgstr ""
|
914 |
|
915 |
+
#: src/markers.py:205
|
916 |
msgid "Verification Date"
|
917 |
msgstr ""
|
918 |
|
919 |
+
#: src/markers.py:206
|
920 |
#, python-brace-format
|
921 |
msgid "<b>Verification Date:</b> {val}<br>"
|
922 |
msgstr ""
|
923 |
|
924 |
+
#: src/markers.py:207 src/markers.py:216 src/dataframes.py:33
|
925 |
+
#: src/dataframes.py:34 src/dataframes.py:89
|
926 |
msgid "id"
|
927 |
msgstr ""
|
928 |
|
929 |
+
#: src/markers.py:208
|
930 |
#, python-brace-format
|
931 |
msgid "<b>Id:</b> {val}<br>"
|
932 |
msgstr ""
|
933 |
|
934 |
+
#: src/markers.py:210
|
935 |
#, python-brace-format
|
936 |
msgid "https://maps.google.com/?q={val}"
|
937 |
msgstr ""
|
938 |
|
939 |
+
#: src/markers.py:212
|
940 |
#, python-brace-format
|
941 |
msgid ""
|
942 |
"<a href=\"{maps_url}\" target=\"_blank\" rel=\"noopener "
|
943 |
"noreferrer\"><b>Google Maps</b></a><br>"
|
944 |
msgstr ""
|
945 |
|
946 |
+
#: src/markers.py:217
|
947 |
msgid ""
|
948 |
"<a href='https://docs.google.com/forms/d/"
|
949 |
"e/1FAIpQLSdyAcOAULumk4A1DsfrwUsGdZ-9G5xOUuD3vHdQOp3nGNAZXw/viewform?"
|
|
|
952 |
"solved</b></a><br>"
|
953 |
msgstr ""
|
954 |
|
955 |
+
#: src/components.py:8
|
956 |
msgid "Id review submission form"
|
957 |
msgstr ""
|
958 |
|
959 |
+
#: src/components.py:10
|
960 |
msgid "🔍 Review of requests | مراجعة طلب مساعدة"
|
961 |
msgstr ""
|
962 |
|
963 |
+
#: src/components.py:13
|
964 |
msgid "Enter id / أدخل الرقم"
|
965 |
msgstr ""
|
966 |
|
967 |
+
#: src/components.py:14
|
968 |
msgid "Explain why / أدخل سبب المراجعة"
|
969 |
msgstr ""
|
970 |
|
971 |
+
#: src/components.py:15
|
972 |
msgid "Submit / أرسل"
|
973 |
msgstr ""
|
974 |
|
975 |
+
#: src/components.py:17
|
976 |
msgid "Please enter a reason / الرجاء إدخال سبب"
|
977 |
msgstr ""
|
978 |
|
979 |
+
#: src/components.py:19
|
980 |
msgid ""
|
981 |
"review_id_{id_to_review}_{datetime.now().strftime('%Y-%m-%d_%H-%M-%S')}.txt"
|
982 |
msgstr ""
|
983 |
|
984 |
+
#: src/components.py:20
|
985 |
msgid "w"
|
986 |
msgstr ""
|
987 |
|
988 |
+
#: src/components.py:21
|
989 |
#, python-brace-format
|
990 |
msgid "id: {id_to_review}, explanation: {reason_for_review}\n"
|
991 |
msgstr ""
|
992 |
|
993 |
+
#: src/components.py:25
|
994 |
msgid "nt3awnou/review_requests"
|
995 |
msgstr ""
|
996 |
|
997 |
+
#: src/components.py:26
|
998 |
msgid "dataset"
|
999 |
msgstr ""
|
1000 |
|
1001 |
+
#: src/components.py:28
|
1002 |
msgid ""
|
1003 |
"Submitted at https://huggingface.co/datasets/nt3awnou/review_requests/ تم "
|
1004 |
"الإرسال"
|
1005 |
msgstr ""
|
1006 |
|
1007 |
+
#: src/components.py:32
|
1008 |
msgid "💻 For Developers only, embed code for the map"
|
1009 |
msgstr "💻 Pour les développeurs uniquement, code d'intégration de la carte"
|
1010 |
|
1011 |
+
#: src/components.py:34
|
1012 |
msgid ""
|
1013 |
"\n"
|
1014 |
" <iframe id=\"nt3awnou-map\"\n"
|
|
|
1027 |
" "
|
1028 |
msgstr ""
|
1029 |
|
1030 |
+
#: src/components.py:47
|
1031 |
msgid "html"
|
1032 |
msgstr ""
|
1033 |
|
1034 |
+
#: src/components.py:57
|
1035 |
msgid "# Number of help requests"
|
1036 |
msgstr ""
|
1037 |
|
1038 |
+
#: src/components.py:62
|
1039 |
msgid "# Number of interventions"
|
1040 |
msgstr ""
|
1041 |
|
1042 |
+
#: src/components.py:67
|
1043 |
msgid "# Number of solved requests"
|
1044 |
msgstr ""
|
1045 |
|
1046 |
+
#: src/components.py:71
|
1047 |
+
msgid "📝 شرح منصة نتعاونو"
|
1048 |
+
msgstr ""
|
1049 |
+
|
1050 |
+
#: src/components.py:76
|
1051 |
msgid "# عدد طلبات المساعدة"
|
1052 |
msgstr ""
|
1053 |
|
1054 |
+
#: src/components.py:81
|
1055 |
msgid "# عدد التدخلات"
|
1056 |
msgstr ""
|
1057 |
|
1058 |
+
#: src/components.py:86
|
1059 |
msgid "# عدد الطلبات المستجاب لها"
|
1060 |
msgstr ""
|
1061 |
|
1062 |
+
#: src/components.py:94
|
1063 |
msgid "# Nombre de demandes d'aide"
|
1064 |
msgstr ""
|
1065 |
|
1066 |
+
#: src/components.py:99
|
1067 |
msgid "# Nombre d'interventions"
|
1068 |
msgstr ""
|
1069 |
|
1070 |
+
#: src/components.py:104
|
1071 |
msgid "# Nombre de demandes résolues"
|
1072 |
msgstr ""
|
1073 |
|
1074 |
+
#: src/components.py:109
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1075 |
msgid "📝 **Donations**"
|
1076 |
msgstr "📝 **Donations**"
|
1077 |
|
1078 |
+
#: src/components.py:112
|
1079 |
msgid ""
|
1080 |
"\n"
|
1081 |
" <div style=\"text-align: center;\">\n"
|
|
|
1092 |
" "
|
1093 |
msgstr ""
|
1094 |
|
1095 |
+
#: src/components.py:128
|
1096 |
msgid ""
|
1097 |
"\n"
|
1098 |
" <div style=\"text-align: center;\">\n"
|
|
|
1109 |
" "
|
1110 |
msgstr ""
|
1111 |
|
1112 |
+
#: src/components.py:145
|
1113 |
msgid ""
|
1114 |
"\n"
|
1115 |
" <div style=\"text-align: center;\">\n"
|
|
|
1186 |
msgid "Choose status"
|
1187 |
msgstr ""
|
1188 |
|
|
|
|
|
|
|
|
|
1189 |
#: src/dataframes.py:7
|
1190 |
+
msgid ""
|
1191 |
+
"https://docs.google.com/spreadsheets/"
|
1192 |
+
"d/1PXcAtI5L95hHSXAiRl3Y4v5O4coG39S86OTfBEcvLTE/edit#gid=0"
|
|
|
|
|
1193 |
msgstr ""
|
1194 |
|
1195 |
#: src/dataframes.py:9
|
1196 |
+
msgid ""
|
1197 |
+
"https://docs.google.com/spreadsheets/"
|
1198 |
+
"d/1gYoBBiBo1L18IVakHkf3t1fOGvHWb23loadyFZUeHJs/edit#gid=966953708"
|
1199 |
msgstr ""
|
1200 |
|
1201 |
+
#: src/dataframes.py:11
|
1202 |
+
msgid ""
|
1203 |
+
"https://docs.google.com/spreadsheets/"
|
1204 |
+
"d/1eXOTqunOWWP8FRdENPs4cU9ulISm4XZWYJJNR1-SrwY/edit#gid=2089222765"
|
1205 |
msgstr ""
|
1206 |
|
1207 |
+
#: src/dataframes.py:13
|
1208 |
msgid "data/regions.json"
|
1209 |
msgstr ""
|
1210 |
|
1211 |
+
#: src/dataframes.py:20 src/dataframes.py:22
|
1212 |
msgid "Automatic Extracted Coordinates"
|
1213 |
msgstr ""
|
1214 |
|
1215 |
+
#: src/dataframes.py:26 src/dataframes.py:27
|
1216 |
msgid "Status"
|
1217 |
msgstr ""
|
1218 |
|
1219 |
+
#: src/dataframes.py:58
|
1220 |
msgid "Display the dataframe in a table"
|
1221 |
msgstr ""
|
1222 |
|
1223 |
+
#: src/dataframes.py:65
|
1224 |
msgid "🔍 Search for information / بحث عن المعلومات"
|
1225 |
msgstr ""
|
1226 |
|
1227 |
+
#: src/dataframes.py:65
|
1228 |
#, python-brace-format
|
1229 |
msgid "query_{df_hash}"
|
1230 |
msgstr ""
|
1231 |
|
1232 |
+
#: src/dataframes.py:69
|
1233 |
msgid "🔍 Search for an id / بحث عن رقم"
|
1234 |
msgstr ""
|
1235 |
|
1236 |
+
#: src/dataframes.py:74
|
1237 |
#, python-brace-format
|
1238 |
msgid "id_{df_hash}"
|
1239 |
msgstr ""
|
1240 |
|
1241 |
+
#: src/dataframes.py:78
|
1242 |
msgid "🗓️ Status / حالة"
|
1243 |
msgstr ""
|
1244 |
|
1245 |
+
#: src/dataframes.py:78
|
1246 |
msgid "all / الكل"
|
1247 |
msgstr ""
|
1248 |
|
1249 |
+
#: src/dataframes.py:78 src/dataframes.py:95
|
1250 |
msgid "Done / تم"
|
1251 |
msgstr ""
|
1252 |
|
1253 |
+
#: src/dataframes.py:78 src/dataframes.py:98
|
1254 |
msgid "Planned / مخطط لها"
|
1255 |
msgstr ""
|
1256 |
|
1257 |
+
#: src/dataframes.py:78
|
1258 |
#, python-brace-format
|
1259 |
msgid "status_{df_hash}"
|
1260 |
msgstr ""
|
1261 |
|
1262 |
+
#: src/dataframes.py:94
|
1263 |
+
msgid ""
|
1264 |
+
"Pouvez-vous nous préciser si vous êtes déjà intervenus ou si vous prévoyez "
|
1265 |
+
"de le faire | Tell us if you already made the intervention, or if you're "
|
1266 |
+
"planning to do it"
|
1267 |
msgstr ""
|
1268 |
|
1269 |
+
#: src/dataframes.py:96 src/dataframes.py:99
|
1270 |
msgid "Intervention déjà passée / Past intevention"
|
1271 |
msgstr ""
|
1272 |
|
1273 |
+
#: src/dataframes.py:105
|
1274 |
#, python-brace-format
|
1275 |
msgid ""
|
1276 |
"To view the full Google Sheet for advanced filtering go to: {data_url} "
|
1277 |
"**لعرض الورقة كاملة، اذهب إلى**"
|
1278 |
msgstr ""
|
1279 |
|
1280 |
+
#: src/dataframes.py:110
|
1281 |
msgid ""
|
1282 |
"We are hiding contact information to protect the privacy of the victims. If "
|
1283 |
"you are an NGO and want to contact the victims, please contact us at "
|
1284 | |
1285 |
msgstr ""
|
1286 |
|
1287 |
+
#: src/dataframes.py:113
|
1288 |
msgid ""
|
1289 |
"\n"
|
1290 |
" <div style=\"text-align: left;\">\n"
|
messages.pot
CHANGED
@@ -3,13 +3,13 @@
|
|
3 |
# This file is distributed under the same license as the PACKAGE package.
|
4 |
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
5 |
#
|
6 |
-
#: src/utils.py:69 src/utils.py:70 src/markers.py:
|
7 |
#, fuzzy
|
8 |
msgid ""
|
9 |
msgstr ""
|
10 |
"Project-Id-Version: PACKAGE VERSION\n"
|
11 |
"Report-Msgid-Bugs-To: \n"
|
12 |
-
"POT-Creation-Date: 2023-09-
|
13 |
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
14 |
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
15 |
"Language-Team: LANGUAGE <[email protected]>\n"
|
@@ -18,91 +18,91 @@ msgstr ""
|
|
18 |
"Content-Type: text/plain; charset=UTF-8\n"
|
19 |
"Content-Transfer-Encoding: 8bit\n"
|
20 |
|
21 |
-
#: app.py:
|
22 |
msgid "myapplication"
|
23 |
msgstr ""
|
24 |
|
25 |
-
#: app.py:
|
26 |
msgid "HF_TOKEN"
|
27 |
msgstr ""
|
28 |
|
29 |
-
#: app.py:
|
30 |
msgid "wide"
|
31 |
msgstr ""
|
32 |
|
33 |
-
#: app.py:
|
34 |
msgid "collapsed"
|
35 |
msgstr ""
|
36 |
|
37 |
-
#: app.py:
|
38 |
msgid "🤝"
|
39 |
msgstr ""
|
40 |
|
41 |
-
#: app.py:
|
42 |
msgid "Nt3awnou نتعاونو"
|
43 |
msgstr ""
|
44 |
|
45 |
-
#: app.py:
|
46 |
msgid "sleep_time"
|
47 |
msgstr ""
|
48 |
|
49 |
-
#: app.py:
|
50 |
msgid "auto_refresh"
|
51 |
msgstr ""
|
52 |
|
53 |
-
#: app.py:
|
54 |
msgid "Auto Refresh?"
|
55 |
msgstr ""
|
56 |
|
57 |
-
#: app.py:
|
58 |
msgid "Refresh rate in seconds"
|
59 |
msgstr ""
|
60 |
|
61 |
-
#: app.py:
|
62 |
msgid "ar"
|
63 |
msgstr ""
|
64 |
|
65 |
-
#: app.py:
|
66 |
msgid "العربية"
|
67 |
msgstr ""
|
68 |
|
69 |
-
#: app.py:
|
70 |
msgid "fr"
|
71 |
msgstr ""
|
72 |
|
73 |
-
#: app.py:
|
74 |
msgid "Français"
|
75 |
msgstr ""
|
76 |
|
77 |
-
#: app.py:
|
78 |
msgid "en"
|
79 |
msgstr ""
|
80 |
|
81 |
-
#: app.py:
|
82 |
msgid "English"
|
83 |
msgstr ""
|
84 |
|
85 |
-
#: app.py:
|
86 |
msgid "Choose language / اختر اللغة"
|
87 |
msgstr ""
|
88 |
|
89 |
-
#: app.py:
|
90 |
msgid "messages"
|
91 |
msgstr ""
|
92 |
|
93 |
-
#: app.py:
|
94 |
msgid "locales"
|
95 |
msgstr ""
|
96 |
|
97 |
-
#: app.py:
|
98 |
msgid "Markers"
|
99 |
msgstr ""
|
100 |
|
101 |
-
#: app.py:
|
102 |
msgid "map"
|
103 |
msgstr ""
|
104 |
|
105 |
-
#: app.py:
|
106 |
msgid ""
|
107 |
"\n"
|
108 |
" <style>\n"
|
@@ -117,19 +117,19 @@ msgstr ""
|
|
117 |
msgid ""
|
118 |
"\n"
|
119 |
" <div style=\"text-align: left;\">\n"
|
120 |
-
" Nt3awnou نتعاونو is a
|
121 |
-
"
|
122 |
-
"
|
123 |
-
"
|
124 |
-
"
|
125 |
-
"
|
126 |
-
"
|
127 |
-
"
|
128 |
-
"
|
129 |
-
"
|
130 |
-
"
|
131 |
-
"
|
132 |
-
"
|
133 |
" <br>⚠️ Warning : There are still rocks falling down the mountains, making "
|
134 |
"the roads to the affected areas very dangerous. We advise volunteers to "
|
135 |
"donate directly to specialized NGOs.<br>\n"
|
@@ -156,11 +156,11 @@ msgid ""
|
|
156 |
"\n"
|
157 |
" <div style=\"text-align: right;-webkit-rtl-ordering: logical;\">\n"
|
158 |
"\n"
|
159 |
-
" نتعاونو هي منصة تعاونية
|
160 |
-
"
|
161 |
-
"
|
162 |
-
"
|
163 |
-
"
|
164 |
"المعلومات، كنجمعوهم فخريطة كتمكن الجمعيات من تنظيم و استهداف تدخلاتهم بدقة "
|
165 |
"باش توصل المساعدة للناس لي محتاجين في وقت أسرع. و كل جمعية قامت باللازم في "
|
166 |
"منطقة معينة تقدر تعلمنا عن طريق ملأ استمارة مخصصة لهاد الأمر. هاد المعلومات "
|
@@ -191,21 +191,21 @@ msgstr ""
|
|
191 |
msgid ""
|
192 |
"\n"
|
193 |
" <div style=\"text-align: left;\">\n"
|
194 |
-
" Nt3awnou نتعاونو est une plateforme collaborative à
|
195 |
-
"
|
196 |
-
"
|
197 |
-
"
|
198 |
-
"
|
199 |
-
"
|
200 |
-
"
|
201 |
-
"
|
202 |
-
"
|
203 |
-
"
|
204 |
-
"
|
205 |
-
"
|
206 |
-
"
|
207 |
-
"
|
208 |
-
"
|
209 |
" <br> ⚠️ Avertissement : Il y a encore des chutes de pierres dans les "
|
210 |
"montagnes, ce qui rend les routes vers les zones touchées très dangereuses. "
|
211 |
"Nous conseillons aux volontaires de faire des dons directement aux "
|
@@ -245,12 +245,15 @@ msgid ""
|
|
245 |
" <hr>\n"
|
246 |
" <div style=\"text-align: center;\">\n"
|
247 |
" <p>By <b>Moroccans</b> for <b>Moroccans</b> 🤝</p>\n"
|
|
|
|
|
|
|
248 |
" <p>Reach out to us at <a href=\"mailto:nt3awnoumorocco@gmail."
|
249 |
"com\">[email protected]</a></p>\n"
|
250 |
" "
|
251 |
msgstr ""
|
252 |
|
253 |
-
#: src/text_content.py:
|
254 |
msgid ""
|
255 |
"\n"
|
256 |
" <style>\n"
|
@@ -312,7 +315,7 @@ msgid ""
|
|
312 |
" # "
|
313 |
msgstr ""
|
314 |
|
315 |
-
#: src/text_content.py:
|
316 |
msgid ""
|
317 |
"**If a request should be reviewed or dropped submit its id here/ إذا كان يجب "
|
318 |
"مراجعة أو حذف طلب، أدخل رقمه هنا:**"
|
@@ -339,8 +342,7 @@ msgid "warn"
|
|
339 |
msgstr ""
|
340 |
|
341 |
#: src/utils.py:28 src/utils.py:29 src/utils.py:57 src/utils.py:58
|
342 |
-
#: src/utils.py:67 src/markers.py:
|
343 |
-
#: src/components.py:137
|
344 |
msgid ","
|
345 |
msgstr ""
|
346 |
|
@@ -348,9 +350,9 @@ msgstr ""
|
|
348 |
msgid "Add a latlng column to the dataframe"
|
349 |
msgstr ""
|
350 |
|
351 |
-
#: src/utils.py:44 src/utils.py:46 src/markers.py:
|
352 |
-
#: src/markers.py:
|
353 |
-
#: src/markers.py:
|
354 |
msgid "latlng"
|
355 |
msgstr ""
|
356 |
|
@@ -425,7 +427,7 @@ msgstr ""
|
|
425 |
msgid "50 to 100 km - Moderate risk area | منطقة خطر معتدلة"
|
426 |
msgstr ""
|
427 |
|
428 |
-
#: src/utils.py:98 src/markers.py:8 src/markers.py:
|
429 |
msgid "orange"
|
430 |
msgstr ""
|
431 |
|
@@ -481,7 +483,7 @@ msgstr ""
|
|
481 |
msgid "#0046C8"
|
482 |
msgstr ""
|
483 |
|
484 |
-
#: src/utils.py:140 src/utils.py:144 src/markers.py:
|
485 |
msgid "Done ✅"
|
486 |
msgstr ""
|
487 |
|
@@ -489,11 +491,11 @@ msgstr ""
|
|
489 |
msgid "Planned ⏳"
|
490 |
msgstr ""
|
491 |
|
492 |
-
#: src/utils.py:142 src/utils.py:146 src/markers.py:
|
493 |
msgid "Partial 📝"
|
494 |
msgstr ""
|
495 |
|
496 |
-
#: src/utils.py:145 src/markers.py:
|
497 |
msgid "Planned ⌛"
|
498 |
msgstr ""
|
499 |
|
@@ -509,15 +511,15 @@ msgstr ""
|
|
509 |
msgid "Low Emergency 🟡"
|
510 |
msgstr ""
|
511 |
|
512 |
-
#: src/utils.py:158 src/markers.py:
|
513 |
msgid "High"
|
514 |
msgstr ""
|
515 |
|
516 |
-
#: src/utils.py:159 src/markers.py:
|
517 |
msgid "Medium"
|
518 |
msgstr ""
|
519 |
|
520 |
-
#: src/utils.py:160 src/markers.py:
|
521 |
msgid "Low"
|
522 |
msgstr ""
|
523 |
|
@@ -710,7 +712,7 @@ msgstr ""
|
|
710 |
msgid "إغاثة"
|
711 |
msgstr ""
|
712 |
|
713 |
-
#: src/markers.py:7 src/markers.py:
|
714 |
msgid "red"
|
715 |
msgstr ""
|
716 |
|
@@ -722,7 +724,7 @@ msgstr ""
|
|
722 |
msgid "مأوى"
|
723 |
msgstr ""
|
724 |
|
725 |
-
#: src/markers.py:9 src/markers.py:
|
726 |
msgid "beige"
|
727 |
msgstr ""
|
728 |
|
@@ -746,7 +748,7 @@ msgstr ""
|
|
746 |
msgid "bell"
|
747 |
msgstr ""
|
748 |
|
749 |
-
#: src/markers.py:16 src/markers.py:
|
750 |
msgid "heart"
|
751 |
msgstr ""
|
752 |
|
@@ -762,156 +764,60 @@ msgstr ""
|
|
762 |
msgid "Warning"
|
763 |
msgstr ""
|
764 |
|
765 |
-
#: src/markers.py:
|
766 |
-
msgid "A"
|
767 |
-
msgstr ""
|
768 |
-
|
769 |
-
#: src/markers.py:35
|
770 |
msgid "Display NGO interventions on the map"
|
771 |
msgstr ""
|
772 |
|
773 |
-
#: src/markers.py:
|
774 |
-
msgid "K"
|
775 |
-
msgstr ""
|
776 |
-
|
777 |
-
#: src/markers.py:40 src/markers.py:77
|
778 |
-
msgid "H"
|
779 |
-
msgstr ""
|
780 |
-
|
781 |
-
#: src/markers.py:40
|
782 |
msgid "Intervention prévue dans le futur / Planned future intervention"
|
783 |
msgstr ""
|
784 |
|
785 |
-
#: src/markers.py:
|
786 |
msgid "Partiellement satisfait / Partially Served"
|
787 |
msgstr ""
|
788 |
|
789 |
-
#: src/markers.py:
|
790 |
msgid "pink"
|
791 |
msgstr ""
|
792 |
|
793 |
-
#: src/markers.py:
|
794 |
msgid "Critique, Besoin d'aide en urgence / Critical, in urgent need of help"
|
795 |
msgstr ""
|
796 |
|
797 |
-
#: src/markers.py:
|
798 |
msgid "green"
|
799 |
msgstr ""
|
800 |
|
801 |
-
#: src/markers.py:
|
802 |
msgid "darkgreen"
|
803 |
msgstr ""
|
804 |
|
805 |
-
#: src/markers.py:
|
806 |
-
msgid "B"
|
807 |
-
msgstr ""
|
808 |
-
|
809 |
-
#: src/markers.py:72
|
810 |
-
msgid "C"
|
811 |
-
msgstr ""
|
812 |
-
|
813 |
-
#: src/markers.py:73
|
814 |
-
msgid "D"
|
815 |
-
msgstr ""
|
816 |
-
|
817 |
-
#: src/markers.py:74
|
818 |
-
msgid "E"
|
819 |
-
msgstr ""
|
820 |
-
|
821 |
-
#: src/markers.py:75
|
822 |
-
msgid "F"
|
823 |
-
msgstr ""
|
824 |
-
|
825 |
-
#: src/markers.py:76
|
826 |
-
msgid "G"
|
827 |
-
msgstr ""
|
828 |
-
|
829 |
-
#: src/markers.py:78
|
830 |
-
msgid "I"
|
831 |
-
msgstr ""
|
832 |
-
|
833 |
-
#: src/markers.py:79
|
834 |
-
msgid "J"
|
835 |
-
msgstr ""
|
836 |
-
|
837 |
-
#: src/markers.py:81
|
838 |
-
msgid "L"
|
839 |
-
msgstr ""
|
840 |
-
|
841 |
-
#: src/markers.py:82
|
842 |
-
msgid "M"
|
843 |
-
msgstr ""
|
844 |
-
|
845 |
-
#: src/markers.py:83
|
846 |
-
msgid "N"
|
847 |
-
msgstr ""
|
848 |
-
|
849 |
-
#: src/markers.py:84
|
850 |
-
msgid "O"
|
851 |
-
msgstr ""
|
852 |
-
|
853 |
-
#: src/markers.py:85
|
854 |
-
msgid "P"
|
855 |
-
msgstr ""
|
856 |
-
|
857 |
-
#: src/markers.py:86
|
858 |
-
msgid "Q"
|
859 |
-
msgstr ""
|
860 |
-
|
861 |
-
#: src/markers.py:87
|
862 |
-
msgid "R"
|
863 |
-
msgstr ""
|
864 |
-
|
865 |
-
#: src/markers.py:88
|
866 |
-
msgid "S"
|
867 |
-
msgstr ""
|
868 |
-
|
869 |
-
#: src/markers.py:89
|
870 |
-
msgid "T"
|
871 |
-
msgstr ""
|
872 |
-
|
873 |
-
#: src/markers.py:90
|
874 |
-
msgid "U"
|
875 |
-
msgstr ""
|
876 |
-
|
877 |
-
#: src/markers.py:92
|
878 |
-
msgid ", "
|
879 |
-
msgstr ""
|
880 |
-
|
881 |
-
#: src/markers.py:93
|
882 |
#, python-brace-format
|
883 |
msgid ""
|
884 |
"\n"
|
|
|
|
|
|
|
|
|
885 |
" <b>Org:</b> {org}<br>\n"
|
886 |
-
" <b>
|
887 |
-
" <b>Speciality:</b> {speciality}<br>\n"
|
888 |
-
" <b>Phone 1:</b> {phone_1}<br>\n"
|
889 |
-
" <b>Phone 2:</b> {phone_2}<br>\n"
|
890 |
-
" <b>Email:</b> {email}<br>\n"
|
891 |
-
" <b>Intervention Date:</b> {intervention_date}<br>\n"
|
892 |
-
" <b>Intervention Status:</b> {intervention_status}<br>\n"
|
893 |
-
" <b>Help Type:</b> {help_type}<br>\n"
|
894 |
-
" <b>Current Situation:</b> {current_situation}<br>\n"
|
895 |
-
" <b>Future Help Type:</b> {future_help_type}<br>\n"
|
896 |
-
" <b>Douar Name:</b> {full_douar_name}<br>\n"
|
897 |
-
" <b>Accessibility to Douar:</b> {accessibility_to_douar}<br>\n"
|
898 |
-
" <b>Type of Accessibility:</b> {type_of_accessibility}<br>\n"
|
899 |
" <b>Population:</b> {population}<br>\n"
|
900 |
-
" <b>
|
901 |
-
"<br>\n"
|
902 |
-
" <b>
|
903 |
" "
|
904 |
msgstr ""
|
905 |
|
906 |
-
#: src/markers.py:
|
907 |
msgid "Planned"
|
908 |
msgstr ""
|
909 |
|
910 |
-
#: src/markers.py:
|
911 |
msgid "glyphicon"
|
912 |
msgstr ""
|
913 |
|
914 |
-
#: src/markers.py:
|
915 |
#, python-brace-format
|
916 |
msgid ""
|
917 |
"\n"
|
@@ -926,20 +832,20 @@ msgid ""
|
|
926 |
" "
|
927 |
msgstr ""
|
928 |
|
929 |
-
#: src/markers.py:
|
930 |
msgid "Display victim requests on the map"
|
931 |
msgstr ""
|
932 |
|
933 |
-
#: src/markers.py:
|
934 |
msgid "ما هي احتياجاتك؟ (أضفها إذا لم يتم ذكرها)"
|
935 |
msgstr ""
|
936 |
|
937 |
-
#: src/markers.py:
|
938 |
#, python-brace-format
|
939 |
msgid "https://maps.google.com/?q={long_lat}"
|
940 |
msgstr ""
|
941 |
|
942 |
-
#: src/markers.py:
|
943 |
msgid ""
|
944 |
"\n"
|
945 |
" <b>Request Type:</b> {request_type}<br>\n"
|
@@ -953,77 +859,77 @@ msgid ""
|
|
953 |
" "
|
954 |
msgstr ""
|
955 |
|
956 |
-
#: src/markers.py:
|
957 |
msgid "list"
|
958 |
msgstr ""
|
959 |
|
960 |
-
#: src/markers.py:
|
961 |
msgid " لأي جماعة / قيادة / دوار تنتمون ؟"
|
962 |
msgstr ""
|
963 |
|
964 |
-
#: src/markers.py:
|
965 |
msgid "Display verified victim requests on the map"
|
966 |
msgstr ""
|
967 |
|
968 |
-
#: src/markers.py:
|
969 |
msgid "Help Details"
|
970 |
msgstr ""
|
971 |
|
972 |
-
#: src/markers.py:
|
973 |
#, python-brace-format
|
974 |
msgid "<b>Request Type:</b> {request_type}<br>"
|
975 |
msgstr ""
|
976 |
|
977 |
-
#: src/markers.py:
|
978 |
msgid "Location Details"
|
979 |
msgstr ""
|
980 |
|
981 |
-
#: src/markers.py:
|
982 |
#, python-brace-format
|
983 |
msgid "<b>Location:</b> {val}<br>"
|
984 |
msgstr ""
|
985 |
|
986 |
-
#: src/markers.py:
|
987 |
msgid "Emergency Degree"
|
988 |
msgstr ""
|
989 |
|
990 |
-
#: src/markers.py:
|
991 |
#, python-brace-format
|
992 |
msgid "<b>Emergency Degree:</b> {val}<br>"
|
993 |
msgstr ""
|
994 |
|
995 |
-
#: src/markers.py:
|
996 |
msgid "Verification Date"
|
997 |
msgstr ""
|
998 |
|
999 |
-
#: src/markers.py:
|
1000 |
#, python-brace-format
|
1001 |
msgid "<b>Verification Date:</b> {val}<br>"
|
1002 |
msgstr ""
|
1003 |
|
1004 |
-
#: src/markers.py:
|
1005 |
-
#: src/dataframes.py:
|
1006 |
msgid "id"
|
1007 |
msgstr ""
|
1008 |
|
1009 |
-
#: src/markers.py:
|
1010 |
#, python-brace-format
|
1011 |
msgid "<b>Id:</b> {val}<br>"
|
1012 |
msgstr ""
|
1013 |
|
1014 |
-
#: src/markers.py:
|
1015 |
#, python-brace-format
|
1016 |
msgid "https://maps.google.com/?q={val}"
|
1017 |
msgstr ""
|
1018 |
|
1019 |
-
#: src/markers.py:
|
1020 |
#, python-brace-format
|
1021 |
msgid ""
|
1022 |
"<a href=\"{maps_url}\" target=\"_blank\" rel=\"noopener "
|
1023 |
"noreferrer\"><b>Google Maps</b></a><br>"
|
1024 |
msgstr ""
|
1025 |
|
1026 |
-
#: src/markers.py:
|
1027 |
msgid ""
|
1028 |
"<a href='https://docs.google.com/forms/d/"
|
1029 |
"e/1FAIpQLSdyAcOAULumk4A1DsfrwUsGdZ-9G5xOUuD3vHdQOp3nGNAZXw/viewform?"
|
@@ -1032,63 +938,63 @@ msgid ""
|
|
1032 |
"solved</b></a><br>"
|
1033 |
msgstr ""
|
1034 |
|
1035 |
-
#: src/components.py:
|
1036 |
msgid "Id review submission form"
|
1037 |
msgstr ""
|
1038 |
|
1039 |
-
#: src/components.py:
|
1040 |
msgid "🔍 Review of requests | مراجعة طلب مساعدة"
|
1041 |
msgstr ""
|
1042 |
|
1043 |
-
#: src/components.py:
|
1044 |
msgid "Enter id / أدخل الرقم"
|
1045 |
msgstr ""
|
1046 |
|
1047 |
-
#: src/components.py:
|
1048 |
msgid "Explain why / أدخل سبب المراجعة"
|
1049 |
msgstr ""
|
1050 |
|
1051 |
-
#: src/components.py:
|
1052 |
msgid "Submit / أرسل"
|
1053 |
msgstr ""
|
1054 |
|
1055 |
-
#: src/components.py:
|
1056 |
msgid "Please enter a reason / الرجاء إدخال سبب"
|
1057 |
msgstr ""
|
1058 |
|
1059 |
-
#: src/components.py:
|
1060 |
msgid ""
|
1061 |
"review_id_{id_to_review}_{datetime.now().strftime('%Y-%m-%d_%H-%M-%S')}.txt"
|
1062 |
msgstr ""
|
1063 |
|
1064 |
-
#: src/components.py:
|
1065 |
msgid "w"
|
1066 |
msgstr ""
|
1067 |
|
1068 |
-
#: src/components.py:
|
1069 |
#, python-brace-format
|
1070 |
msgid "id: {id_to_review}, explanation: {reason_for_review}\n"
|
1071 |
msgstr ""
|
1072 |
|
1073 |
-
#: src/components.py:
|
1074 |
msgid "nt3awnou/review_requests"
|
1075 |
msgstr ""
|
1076 |
|
1077 |
-
#: src/components.py:
|
1078 |
msgid "dataset"
|
1079 |
msgstr ""
|
1080 |
|
1081 |
-
#: src/components.py:
|
1082 |
msgid ""
|
1083 |
"Submitted at https://huggingface.co/datasets/nt3awnou/review_requests/ تم "
|
1084 |
"الإرسال"
|
1085 |
msgstr ""
|
1086 |
|
1087 |
-
#: src/components.py:
|
1088 |
msgid "💻 For Developers only, embed code for the map"
|
1089 |
msgstr ""
|
1090 |
|
1091 |
-
#: src/components.py:
|
1092 |
msgid ""
|
1093 |
"\n"
|
1094 |
" <iframe id=\"nt3awnou-map\"\n"
|
@@ -1107,79 +1013,55 @@ msgid ""
|
|
1107 |
" "
|
1108 |
msgstr ""
|
1109 |
|
1110 |
-
#: src/components.py:
|
1111 |
msgid "html"
|
1112 |
msgstr ""
|
1113 |
|
1114 |
-
#: src/components.py:
|
1115 |
msgid "# Number of help requests"
|
1116 |
msgstr ""
|
1117 |
|
1118 |
-
#: src/components.py:
|
1119 |
msgid "# Number of interventions"
|
1120 |
msgstr ""
|
1121 |
|
1122 |
-
#: src/components.py:
|
1123 |
msgid "# Number of solved requests"
|
1124 |
msgstr ""
|
1125 |
|
1126 |
-
#: src/components.py:
|
|
|
|
|
|
|
|
|
1127 |
msgid "# عدد طلبات المساعدة"
|
1128 |
msgstr ""
|
1129 |
|
1130 |
-
#: src/components.py:
|
1131 |
msgid "# عدد التدخلات"
|
1132 |
msgstr ""
|
1133 |
|
1134 |
-
#: src/components.py:
|
1135 |
msgid "# عدد الطلبات المستجاب لها"
|
1136 |
msgstr ""
|
1137 |
|
1138 |
-
#: src/components.py:
|
1139 |
msgid "# Nombre de demandes d'aide"
|
1140 |
msgstr ""
|
1141 |
|
1142 |
-
#: src/components.py:
|
1143 |
msgid "# Nombre d'interventions"
|
1144 |
msgstr ""
|
1145 |
|
1146 |
-
#: src/components.py:
|
1147 |
msgid "# Nombre de demandes résolues"
|
1148 |
msgstr ""
|
1149 |
|
1150 |
-
#: src/components.py:
|
1151 |
-
msgid "📊 **Charts**"
|
1152 |
-
msgstr ""
|
1153 |
-
|
1154 |
-
#: src/components.py:130 src/components.py:131
|
1155 |
-
msgid "supplies_category"
|
1156 |
-
msgstr ""
|
1157 |
-
|
1158 |
-
#: src/components.py:130 src/components.py:137
|
1159 |
-
msgid "[] '"
|
1160 |
-
msgstr ""
|
1161 |
-
|
1162 |
-
#: src/components.py:130 src/components.py:137
|
1163 |
-
msgid "category"
|
1164 |
-
msgstr ""
|
1165 |
-
|
1166 |
-
#: src/components.py:131
|
1167 |
-
msgid "Supplies Categories"
|
1168 |
-
msgstr ""
|
1169 |
-
|
1170 |
-
#: src/components.py:137 src/components.py:138
|
1171 |
-
msgid "need_category"
|
1172 |
-
msgstr ""
|
1173 |
-
|
1174 |
-
#: src/components.py:138
|
1175 |
-
msgid "Needs Categories"
|
1176 |
-
msgstr ""
|
1177 |
-
|
1178 |
-
#: src/components.py:145
|
1179 |
msgid "📝 **Donations**"
|
1180 |
msgstr ""
|
1181 |
|
1182 |
-
#: src/components.py:
|
1183 |
msgid ""
|
1184 |
"\n"
|
1185 |
" <div style=\"text-align: center;\">\n"
|
@@ -1196,7 +1078,7 @@ msgid ""
|
|
1196 |
" "
|
1197 |
msgstr ""
|
1198 |
|
1199 |
-
#: src/components.py:
|
1200 |
msgid ""
|
1201 |
"\n"
|
1202 |
" <div style=\"text-align: center;\">\n"
|
@@ -1213,7 +1095,7 @@ msgid ""
|
|
1213 |
" "
|
1214 |
msgstr ""
|
1215 |
|
1216 |
-
#: src/components.py:
|
1217 |
msgid ""
|
1218 |
"\n"
|
1219 |
" <div style=\"text-align: center;\">\n"
|
@@ -1290,104 +1172,105 @@ msgstr ""
|
|
1290 |
msgid "Choose status"
|
1291 |
msgstr ""
|
1292 |
|
1293 |
-
#: src/dataframes.py:6
|
1294 |
-
msgid "VERIFIED_REQUESTS_URL"
|
1295 |
-
msgstr ""
|
1296 |
-
|
1297 |
#: src/dataframes.py:7
|
1298 |
-
msgid "
|
1299 |
-
|
1300 |
-
|
1301 |
-
#: src/dataframes.py:8
|
1302 |
-
msgid "INTERVENTIONS_URL"
|
1303 |
msgstr ""
|
1304 |
|
1305 |
#: src/dataframes.py:9
|
1306 |
-
msgid "
|
|
|
|
|
1307 |
msgstr ""
|
1308 |
|
1309 |
-
#: src/dataframes.py:
|
1310 |
-
msgid "
|
|
|
|
|
1311 |
msgstr ""
|
1312 |
|
1313 |
-
#: src/dataframes.py:
|
1314 |
msgid "data/regions.json"
|
1315 |
msgstr ""
|
1316 |
|
1317 |
-
#: src/dataframes.py:
|
1318 |
msgid "Automatic Extracted Coordinates"
|
1319 |
msgstr ""
|
1320 |
|
1321 |
-
#: src/dataframes.py:
|
1322 |
msgid "Status"
|
1323 |
msgstr ""
|
1324 |
|
1325 |
-
#: src/dataframes.py:
|
1326 |
msgid "Display the dataframe in a table"
|
1327 |
msgstr ""
|
1328 |
|
1329 |
-
#: src/dataframes.py:
|
1330 |
msgid "🔍 Search for information / بحث عن المعلومات"
|
1331 |
msgstr ""
|
1332 |
|
1333 |
-
#: src/dataframes.py:
|
1334 |
#, python-brace-format
|
1335 |
msgid "query_{df_hash}"
|
1336 |
msgstr ""
|
1337 |
|
1338 |
-
#: src/dataframes.py:
|
1339 |
msgid "🔍 Search for an id / بحث عن رقم"
|
1340 |
msgstr ""
|
1341 |
|
1342 |
-
#: src/dataframes.py:
|
1343 |
#, python-brace-format
|
1344 |
msgid "id_{df_hash}"
|
1345 |
msgstr ""
|
1346 |
|
1347 |
-
#: src/dataframes.py:
|
1348 |
msgid "🗓️ Status / حالة"
|
1349 |
msgstr ""
|
1350 |
|
1351 |
-
#: src/dataframes.py:
|
1352 |
msgid "all / الكل"
|
1353 |
msgstr ""
|
1354 |
|
1355 |
-
#: src/dataframes.py:
|
1356 |
msgid "Done / تم"
|
1357 |
msgstr ""
|
1358 |
|
1359 |
-
#: src/dataframes.py:
|
1360 |
msgid "Planned / مخطط لها"
|
1361 |
msgstr ""
|
1362 |
|
1363 |
-
#: src/dataframes.py:
|
1364 |
#, python-brace-format
|
1365 |
msgid "status_{df_hash}"
|
1366 |
msgstr ""
|
1367 |
|
1368 |
-
#: src/dataframes.py:
|
1369 |
-
msgid "
|
|
|
|
|
|
|
1370 |
msgstr ""
|
1371 |
|
1372 |
-
#: src/dataframes.py:
|
1373 |
msgid "Intervention déjà passée / Past intevention"
|
1374 |
msgstr ""
|
1375 |
|
1376 |
-
#: src/dataframes.py:
|
1377 |
#, python-brace-format
|
1378 |
msgid ""
|
1379 |
"To view the full Google Sheet for advanced filtering go to: {data_url} "
|
1380 |
"**لعرض الورقة كاملة، اذهب إلى**"
|
1381 |
msgstr ""
|
1382 |
|
1383 |
-
#: src/dataframes.py:
|
1384 |
msgid ""
|
1385 |
"We are hiding contact information to protect the privacy of the victims. If "
|
1386 |
"you are an NGO and want to contact the victims, please contact us at "
|
1387 | |
1388 |
msgstr ""
|
1389 |
|
1390 |
-
#: src/dataframes.py:
|
1391 |
msgid ""
|
1392 |
"\n"
|
1393 |
" <div style=\"text-align: left;\">\n"
|
|
|
3 |
# This file is distributed under the same license as the PACKAGE package.
|
4 |
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
5 |
#
|
6 |
+
#: src/utils.py:69 src/utils.py:70 src/markers.py:195 src/components.py:16
|
7 |
#, fuzzy
|
8 |
msgid ""
|
9 |
msgstr ""
|
10 |
"Project-Id-Version: PACKAGE VERSION\n"
|
11 |
"Report-Msgid-Bugs-To: \n"
|
12 |
+
"POT-Creation-Date: 2023-09-19 03:04+0200\n"
|
13 |
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
14 |
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
15 |
"Language-Team: LANGUAGE <[email protected]>\n"
|
|
|
18 |
"Content-Type: text/plain; charset=UTF-8\n"
|
19 |
"Content-Transfer-Encoding: 8bit\n"
|
20 |
|
21 |
+
#: app.py:22
|
22 |
msgid "myapplication"
|
23 |
msgstr ""
|
24 |
|
25 |
+
#: app.py:24
|
26 |
msgid "HF_TOKEN"
|
27 |
msgstr ""
|
28 |
|
29 |
+
#: app.py:31
|
30 |
msgid "wide"
|
31 |
msgstr ""
|
32 |
|
33 |
+
#: app.py:32 src/filters.py:40 src/filters.py:62
|
34 |
msgid "collapsed"
|
35 |
msgstr ""
|
36 |
|
37 |
+
#: app.py:33
|
38 |
msgid "🤝"
|
39 |
msgstr ""
|
40 |
|
41 |
+
#: app.py:34
|
42 |
msgid "Nt3awnou نتعاونو"
|
43 |
msgstr ""
|
44 |
|
45 |
+
#: app.py:38
|
46 |
msgid "sleep_time"
|
47 |
msgstr ""
|
48 |
|
49 |
+
#: app.py:40
|
50 |
msgid "auto_refresh"
|
51 |
msgstr ""
|
52 |
|
53 |
+
#: app.py:43
|
54 |
msgid "Auto Refresh?"
|
55 |
msgstr ""
|
56 |
|
57 |
+
#: app.py:45
|
58 |
msgid "Refresh rate in seconds"
|
59 |
msgstr ""
|
60 |
|
61 |
+
#: app.py:55 app.py:182 src/components.py:70 src/components.py:126
|
62 |
msgid "ar"
|
63 |
msgstr ""
|
64 |
|
65 |
+
#: app.py:55
|
66 |
msgid "العربية"
|
67 |
msgstr ""
|
68 |
|
69 |
+
#: app.py:56 src/components.py:89 src/components.py:143
|
70 |
msgid "fr"
|
71 |
msgstr ""
|
72 |
|
73 |
+
#: app.py:56
|
74 |
msgid "Français"
|
75 |
msgstr ""
|
76 |
|
77 |
+
#: app.py:57 app.py:62 src/components.py:52 src/components.py:110
|
78 |
msgid "en"
|
79 |
msgstr ""
|
80 |
|
81 |
+
#: app.py:57
|
82 |
msgid "English"
|
83 |
msgstr ""
|
84 |
|
85 |
+
#: app.py:60
|
86 |
msgid "Choose language / اختر اللغة"
|
87 |
msgstr ""
|
88 |
|
89 |
+
#: app.py:65
|
90 |
msgid "messages"
|
91 |
msgstr ""
|
92 |
|
93 |
+
#: app.py:65
|
94 |
msgid "locales"
|
95 |
msgstr ""
|
96 |
|
97 |
+
#: app.py:70
|
98 |
msgid "Markers"
|
99 |
msgstr ""
|
100 |
|
101 |
+
#: app.py:113
|
102 |
msgid "map"
|
103 |
msgstr ""
|
104 |
|
105 |
+
#: app.py:184
|
106 |
msgid ""
|
107 |
"\n"
|
108 |
" <style>\n"
|
|
|
117 |
msgid ""
|
118 |
"\n"
|
119 |
" <div style=\"text-align: left;\">\n"
|
120 |
+
" Nt3awnou نتعاونو is a collaborative platform dedicated to aiding "
|
121 |
+
"individuals impacted by the recent earthquake in Morocco. Our core mission "
|
122 |
+
"is to streamline and coordinate timely assistance for everyone affected. How "
|
123 |
+
"do we achieve this? We assist those in need by allowing them to communicate "
|
124 |
+
"their location and the specific aid they require, either by completing a "
|
125 |
+
"form or sending a voice message via WhatsApp to the number <b>0652573987</"
|
126 |
+
"b>. Once we receive and process this information, it can be viewed in our "
|
127 |
+
"dashboard, which allows NGOs to organize and precisely target their "
|
128 |
+
"interventions, ensuring swift assistance reaches those in need. Any "
|
129 |
+
"organization that has taken initiative in a particular area can notify us by "
|
130 |
+
"completing a dedicated form. This data is also incorporated into the "
|
131 |
+
"dashboard so that other NGOs can help affected areas that still haven't "
|
132 |
+
"received help.\n"
|
133 |
" <br>⚠️ Warning : There are still rocks falling down the mountains, making "
|
134 |
"the roads to the affected areas very dangerous. We advise volunteers to "
|
135 |
"donate directly to specialized NGOs.<br>\n"
|
|
|
156 |
"\n"
|
157 |
" <div style=\"text-align: right;-webkit-rtl-ordering: logical;\">\n"
|
158 |
"\n"
|
159 |
+
" نتعاونو هي منصة تعاونية لمساعدة الأفراد المتضررين من الزلزال الأخير في "
|
160 |
+
"المغرب. مهمتنا هي تسهيل تقديم المساعدة في الوقت المناسب و بفاعلية و تنظيم "
|
161 |
+
"لجميع المتضررين. كيفاش؟ كنعاونو الناس لي محتاجين للمساعدة إعلمونا بمكانهم و "
|
162 |
+
"نوع المساعدة لي محتاجين ليها سواء عن طريق ملأ الاستمارة أو عن طريق إرسال "
|
163 |
+
"تسجيل صوتي عبر واتساب إلى رقم مخصص<b>0652573987</b>. بعد معالجة هاد "
|
164 |
"المعلومات، كنجمعوهم فخريطة كتمكن الجمعيات من تنظيم و استهداف تدخلاتهم بدقة "
|
165 |
"باش توصل المساعدة للناس لي محتاجين في وقت أسرع. و كل جمعية قامت باللازم في "
|
166 |
"منطقة معينة تقدر تعلمنا عن طريق ملأ استمارة مخصصة لهاد الأمر. هاد المعلومات "
|
|
|
191 |
msgid ""
|
192 |
"\n"
|
193 |
" <div style=\"text-align: left;\">\n"
|
194 |
+
" Nt3awnou نتعاونو est une plateforme collaborative dédiée à l'aide aux "
|
195 |
+
"personnes touchées par le récent tremblement de terre au Maroc. Notre "
|
196 |
+
"mission principale est de rationaliser et de coordonner une assistance "
|
197 |
+
"rapide pour toutes les personnes touchées. Comment y parvenons-nous ? Nous "
|
198 |
+
"aidons les personnes dans le besoin en leur permettant de communiquer leur "
|
199 |
+
"localisation et l'aide spécifique dont elles ont besoin, soit en remplissant "
|
200 |
+
"un formulaire, soit en envoyant un message vocal via WhatsApp à un numéro "
|
201 |
+
"<b>0652573987</b>. Une fois reçues et traitées, ces informations peuvent "
|
202 |
+
"être consultées dans notre tableau de bord, qui permet aux associations "
|
203 |
+
"d'organiser et de cibler précisément leurs interventions, afin que l'aide "
|
204 |
+
"parvienne rapidement à ceux qui en ont besoin. Toute organisation ayant pris "
|
205 |
+
"une initiative dans une zone particulière peut nous en informer en "
|
206 |
+
"remplissant un formulaire prévu à cet effet. Ces données sont également "
|
207 |
+
"intégrées au tableau de bord afin que d'autres associations puissent aider "
|
208 |
+
"les zones touchées qui n'ont pas encore reçu d'aide.\n"
|
209 |
" <br> ⚠️ Avertissement : Il y a encore des chutes de pierres dans les "
|
210 |
"montagnes, ce qui rend les routes vers les zones touchées très dangereuses. "
|
211 |
"Nous conseillons aux volontaires de faire des dons directement aux "
|
|
|
245 |
" <hr>\n"
|
246 |
" <div style=\"text-align: center;\">\n"
|
247 |
" <p>By <b>Moroccans</b> for <b>Moroccans</b> 🤝</p>\n"
|
248 |
+
" <p> Special thanks for <a href=\"https://www.annarabic.com/\">Annarabic</"
|
249 |
+
"a> and <a href=\"https://summerschool.morocco.ai/\">AI Summer School</a> for "
|
250 |
+
"their support</p>\n"
|
251 |
" <p>Reach out to us at <a href=\"mailto:nt3awnoumorocco@gmail."
|
252 |
"com\">[email protected]</a></p>\n"
|
253 |
" "
|
254 |
msgstr ""
|
255 |
|
256 |
+
#: src/text_content.py:61
|
257 |
msgid ""
|
258 |
"\n"
|
259 |
" <style>\n"
|
|
|
315 |
" # "
|
316 |
msgstr ""
|
317 |
|
318 |
+
#: src/text_content.py:106
|
319 |
msgid ""
|
320 |
"**If a request should be reviewed or dropped submit its id here/ إذا كان يجب "
|
321 |
"مراجعة أو حذف طلب، أدخل رقمه هنا:**"
|
|
|
342 |
msgstr ""
|
343 |
|
344 |
#: src/utils.py:28 src/utils.py:29 src/utils.py:57 src/utils.py:58
|
345 |
+
#: src/utils.py:67 src/markers.py:26
|
|
|
346 |
msgid ","
|
347 |
msgstr ""
|
348 |
|
|
|
350 |
msgid "Add a latlng column to the dataframe"
|
351 |
msgstr ""
|
352 |
|
353 |
+
#: src/utils.py:44 src/utils.py:46 src/markers.py:81 src/markers.py:87
|
354 |
+
#: src/markers.py:98 src/markers.py:133 src/markers.py:147 src/markers.py:193
|
355 |
+
#: src/markers.py:209
|
356 |
msgid "latlng"
|
357 |
msgstr ""
|
358 |
|
|
|
427 |
msgid "50 to 100 km - Moderate risk area | منطقة خطر معتدلة"
|
428 |
msgstr ""
|
429 |
|
430 |
+
#: src/utils.py:98 src/markers.py:8 src/markers.py:188
|
431 |
msgid "orange"
|
432 |
msgstr ""
|
433 |
|
|
|
483 |
msgid "#0046C8"
|
484 |
msgstr ""
|
485 |
|
486 |
+
#: src/utils.py:140 src/utils.py:144 src/markers.py:54 src/markers.py:109
|
487 |
msgid "Done ✅"
|
488 |
msgstr ""
|
489 |
|
|
|
491 |
msgid "Planned ⏳"
|
492 |
msgstr ""
|
493 |
|
494 |
+
#: src/utils.py:142 src/utils.py:146 src/markers.py:58
|
495 |
msgid "Partial 📝"
|
496 |
msgstr ""
|
497 |
|
498 |
+
#: src/utils.py:145 src/markers.py:50 src/markers.py:106
|
499 |
msgid "Planned ⌛"
|
500 |
msgstr ""
|
501 |
|
|
|
511 |
msgid "Low Emergency 🟡"
|
512 |
msgstr ""
|
513 |
|
514 |
+
#: src/utils.py:158 src/markers.py:189
|
515 |
msgid "High"
|
516 |
msgstr ""
|
517 |
|
518 |
+
#: src/utils.py:159 src/markers.py:188
|
519 |
msgid "Medium"
|
520 |
msgstr ""
|
521 |
|
522 |
+
#: src/utils.py:160 src/markers.py:187 src/markers.py:220
|
523 |
msgid "Low"
|
524 |
msgstr ""
|
525 |
|
|
|
712 |
msgid "إغاثة"
|
713 |
msgstr ""
|
714 |
|
715 |
+
#: src/markers.py:7 src/markers.py:107 src/markers.py:110 src/markers.py:189
|
716 |
msgid "red"
|
717 |
msgstr ""
|
718 |
|
|
|
724 |
msgid "مأوى"
|
725 |
msgstr ""
|
726 |
|
727 |
+
#: src/markers.py:9 src/markers.py:177 src/markers.py:187 src/markers.py:234
|
728 |
msgid "beige"
|
729 |
msgstr ""
|
730 |
|
|
|
748 |
msgid "bell"
|
749 |
msgstr ""
|
750 |
|
751 |
+
#: src/markers.py:16 src/markers.py:107 src/markers.py:110
|
752 |
msgid "heart"
|
753 |
msgstr ""
|
754 |
|
|
|
764 |
msgid "Warning"
|
765 |
msgstr ""
|
766 |
|
767 |
+
#: src/markers.py:34
|
|
|
|
|
|
|
|
|
768 |
msgid "Display NGO interventions on the map"
|
769 |
msgstr ""
|
770 |
|
771 |
+
#: src/markers.py:39
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
772 |
msgid "Intervention prévue dans le futur / Planned future intervention"
|
773 |
msgstr ""
|
774 |
|
775 |
+
#: src/markers.py:43 src/filters.py:52
|
776 |
msgid "Partiellement satisfait / Partially Served"
|
777 |
msgstr ""
|
778 |
|
779 |
+
#: src/markers.py:49 src/markers.py:107
|
780 |
msgid "pink"
|
781 |
msgstr ""
|
782 |
|
783 |
+
#: src/markers.py:51 src/filters.py:51
|
784 |
msgid "Critique, Besoin d'aide en urgence / Critical, in urgent need of help"
|
785 |
msgstr ""
|
786 |
|
787 |
+
#: src/markers.py:53 src/markers.py:110
|
788 |
msgid "green"
|
789 |
msgstr ""
|
790 |
|
791 |
+
#: src/markers.py:57
|
792 |
msgid "darkgreen"
|
793 |
msgstr ""
|
794 |
|
795 |
+
#: src/markers.py:68
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
796 |
#, python-brace-format
|
797 |
msgid ""
|
798 |
"\n"
|
799 |
+
" <b>Date:</b> {date}<br>\n"
|
800 |
+
" <b>City:</b> {city}<br>\n"
|
801 |
+
" <b>Intervention Status:</b> {status}<br>\n"
|
802 |
+
" <b>Village Status:</b> {village_status}<br>\n"
|
803 |
" <b>Org:</b> {org}<br>\n"
|
804 |
+
" <b>Intervention:</b> {intervention_type}<br>\n"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
805 |
" <b>Population:</b> {population}<br>\n"
|
806 |
+
" <b>Road State:</b> {road_state}<br>\n"
|
807 |
+
" <b>Details:</b> {details}<br>\n"
|
808 |
+
" <b>Contact:</b> {contact}<br>\n"
|
809 |
" "
|
810 |
msgstr ""
|
811 |
|
812 |
+
#: src/markers.py:102
|
813 |
msgid "Planned"
|
814 |
msgstr ""
|
815 |
|
816 |
+
#: src/markers.py:107 src/markers.py:110 src/markers.py:177 src/markers.py:234
|
817 |
msgid "glyphicon"
|
818 |
msgstr ""
|
819 |
|
820 |
+
#: src/markers.py:120
|
821 |
#, python-brace-format
|
822 |
msgid ""
|
823 |
"\n"
|
|
|
832 |
" "
|
833 |
msgstr ""
|
834 |
|
835 |
+
#: src/markers.py:143
|
836 |
msgid "Display victim requests on the map"
|
837 |
msgstr ""
|
838 |
|
839 |
+
#: src/markers.py:145 src/dataframes.py:37
|
840 |
msgid "ما هي احتياجاتك؟ (أضفها إذا لم يتم ذكرها)"
|
841 |
msgstr ""
|
842 |
|
843 |
+
#: src/markers.py:148
|
844 |
#, python-brace-format
|
845 |
msgid "https://maps.google.com/?q={long_lat}"
|
846 |
msgstr ""
|
847 |
|
848 |
+
#: src/markers.py:155
|
849 |
msgid ""
|
850 |
"\n"
|
851 |
" <b>Request Type:</b> {request_type}<br>\n"
|
|
|
859 |
" "
|
860 |
msgstr ""
|
861 |
|
862 |
+
#: src/markers.py:165 src/markers.py:219
|
863 |
msgid "list"
|
864 |
msgstr ""
|
865 |
|
866 |
+
#: src/markers.py:172 src/markers.py:173
|
867 |
msgid " لأي جماعة / قيادة / دوار تنتمون ؟"
|
868 |
msgstr ""
|
869 |
|
870 |
+
#: src/markers.py:183
|
871 |
msgid "Display verified victim requests on the map"
|
872 |
msgstr ""
|
873 |
|
874 |
+
#: src/markers.py:197 src/markers.py:198 src/dataframes.py:40
|
875 |
msgid "Help Details"
|
876 |
msgstr ""
|
877 |
|
878 |
+
#: src/markers.py:200
|
879 |
#, python-brace-format
|
880 |
msgid "<b>Request Type:</b> {request_type}<br>"
|
881 |
msgstr ""
|
882 |
|
883 |
+
#: src/markers.py:201 src/markers.py:223
|
884 |
msgid "Location Details"
|
885 |
msgstr ""
|
886 |
|
887 |
+
#: src/markers.py:202
|
888 |
#, python-brace-format
|
889 |
msgid "<b>Location:</b> {val}<br>"
|
890 |
msgstr ""
|
891 |
|
892 |
+
#: src/markers.py:203 src/markers.py:220
|
893 |
msgid "Emergency Degree"
|
894 |
msgstr ""
|
895 |
|
896 |
+
#: src/markers.py:204
|
897 |
#, python-brace-format
|
898 |
msgid "<b>Emergency Degree:</b> {val}<br>"
|
899 |
msgstr ""
|
900 |
|
901 |
+
#: src/markers.py:205
|
902 |
msgid "Verification Date"
|
903 |
msgstr ""
|
904 |
|
905 |
+
#: src/markers.py:206
|
906 |
#, python-brace-format
|
907 |
msgid "<b>Verification Date:</b> {val}<br>"
|
908 |
msgstr ""
|
909 |
|
910 |
+
#: src/markers.py:207 src/markers.py:216 src/dataframes.py:33
|
911 |
+
#: src/dataframes.py:34 src/dataframes.py:89
|
912 |
msgid "id"
|
913 |
msgstr ""
|
914 |
|
915 |
+
#: src/markers.py:208
|
916 |
#, python-brace-format
|
917 |
msgid "<b>Id:</b> {val}<br>"
|
918 |
msgstr ""
|
919 |
|
920 |
+
#: src/markers.py:210
|
921 |
#, python-brace-format
|
922 |
msgid "https://maps.google.com/?q={val}"
|
923 |
msgstr ""
|
924 |
|
925 |
+
#: src/markers.py:212
|
926 |
#, python-brace-format
|
927 |
msgid ""
|
928 |
"<a href=\"{maps_url}\" target=\"_blank\" rel=\"noopener "
|
929 |
"noreferrer\"><b>Google Maps</b></a><br>"
|
930 |
msgstr ""
|
931 |
|
932 |
+
#: src/markers.py:217
|
933 |
msgid ""
|
934 |
"<a href='https://docs.google.com/forms/d/"
|
935 |
"e/1FAIpQLSdyAcOAULumk4A1DsfrwUsGdZ-9G5xOUuD3vHdQOp3nGNAZXw/viewform?"
|
|
|
938 |
"solved</b></a><br>"
|
939 |
msgstr ""
|
940 |
|
941 |
+
#: src/components.py:8
|
942 |
msgid "Id review submission form"
|
943 |
msgstr ""
|
944 |
|
945 |
+
#: src/components.py:10
|
946 |
msgid "🔍 Review of requests | مراجعة طلب مساعدة"
|
947 |
msgstr ""
|
948 |
|
949 |
+
#: src/components.py:13
|
950 |
msgid "Enter id / أدخل الرقم"
|
951 |
msgstr ""
|
952 |
|
953 |
+
#: src/components.py:14
|
954 |
msgid "Explain why / أدخل سبب المراجعة"
|
955 |
msgstr ""
|
956 |
|
957 |
+
#: src/components.py:15
|
958 |
msgid "Submit / أرسل"
|
959 |
msgstr ""
|
960 |
|
961 |
+
#: src/components.py:17
|
962 |
msgid "Please enter a reason / الرجاء إدخال سبب"
|
963 |
msgstr ""
|
964 |
|
965 |
+
#: src/components.py:19
|
966 |
msgid ""
|
967 |
"review_id_{id_to_review}_{datetime.now().strftime('%Y-%m-%d_%H-%M-%S')}.txt"
|
968 |
msgstr ""
|
969 |
|
970 |
+
#: src/components.py:20
|
971 |
msgid "w"
|
972 |
msgstr ""
|
973 |
|
974 |
+
#: src/components.py:21
|
975 |
#, python-brace-format
|
976 |
msgid "id: {id_to_review}, explanation: {reason_for_review}\n"
|
977 |
msgstr ""
|
978 |
|
979 |
+
#: src/components.py:25
|
980 |
msgid "nt3awnou/review_requests"
|
981 |
msgstr ""
|
982 |
|
983 |
+
#: src/components.py:26
|
984 |
msgid "dataset"
|
985 |
msgstr ""
|
986 |
|
987 |
+
#: src/components.py:28
|
988 |
msgid ""
|
989 |
"Submitted at https://huggingface.co/datasets/nt3awnou/review_requests/ تم "
|
990 |
"الإرسال"
|
991 |
msgstr ""
|
992 |
|
993 |
+
#: src/components.py:32
|
994 |
msgid "💻 For Developers only, embed code for the map"
|
995 |
msgstr ""
|
996 |
|
997 |
+
#: src/components.py:34
|
998 |
msgid ""
|
999 |
"\n"
|
1000 |
" <iframe id=\"nt3awnou-map\"\n"
|
|
|
1013 |
" "
|
1014 |
msgstr ""
|
1015 |
|
1016 |
+
#: src/components.py:47
|
1017 |
msgid "html"
|
1018 |
msgstr ""
|
1019 |
|
1020 |
+
#: src/components.py:57
|
1021 |
msgid "# Number of help requests"
|
1022 |
msgstr ""
|
1023 |
|
1024 |
+
#: src/components.py:62
|
1025 |
msgid "# Number of interventions"
|
1026 |
msgstr ""
|
1027 |
|
1028 |
+
#: src/components.py:67
|
1029 |
msgid "# Number of solved requests"
|
1030 |
msgstr ""
|
1031 |
|
1032 |
+
#: src/components.py:71
|
1033 |
+
msgid "📝 شرح منصة نتعاونو"
|
1034 |
+
msgstr ""
|
1035 |
+
|
1036 |
+
#: src/components.py:76
|
1037 |
msgid "# عدد طلبات المساعدة"
|
1038 |
msgstr ""
|
1039 |
|
1040 |
+
#: src/components.py:81
|
1041 |
msgid "# عدد التدخلات"
|
1042 |
msgstr ""
|
1043 |
|
1044 |
+
#: src/components.py:86
|
1045 |
msgid "# عدد الطلبات المستجاب لها"
|
1046 |
msgstr ""
|
1047 |
|
1048 |
+
#: src/components.py:94
|
1049 |
msgid "# Nombre de demandes d'aide"
|
1050 |
msgstr ""
|
1051 |
|
1052 |
+
#: src/components.py:99
|
1053 |
msgid "# Nombre d'interventions"
|
1054 |
msgstr ""
|
1055 |
|
1056 |
+
#: src/components.py:104
|
1057 |
msgid "# Nombre de demandes résolues"
|
1058 |
msgstr ""
|
1059 |
|
1060 |
+
#: src/components.py:109
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1061 |
msgid "📝 **Donations**"
|
1062 |
msgstr ""
|
1063 |
|
1064 |
+
#: src/components.py:112
|
1065 |
msgid ""
|
1066 |
"\n"
|
1067 |
" <div style=\"text-align: center;\">\n"
|
|
|
1078 |
" "
|
1079 |
msgstr ""
|
1080 |
|
1081 |
+
#: src/components.py:128
|
1082 |
msgid ""
|
1083 |
"\n"
|
1084 |
" <div style=\"text-align: center;\">\n"
|
|
|
1095 |
" "
|
1096 |
msgstr ""
|
1097 |
|
1098 |
+
#: src/components.py:145
|
1099 |
msgid ""
|
1100 |
"\n"
|
1101 |
" <div style=\"text-align: center;\">\n"
|
|
|
1172 |
msgid "Choose status"
|
1173 |
msgstr ""
|
1174 |
|
|
|
|
|
|
|
|
|
1175 |
#: src/dataframes.py:7
|
1176 |
+
msgid ""
|
1177 |
+
"https://docs.google.com/spreadsheets/"
|
1178 |
+
"d/1PXcAtI5L95hHSXAiRl3Y4v5O4coG39S86OTfBEcvLTE/edit#gid=0"
|
|
|
|
|
1179 |
msgstr ""
|
1180 |
|
1181 |
#: src/dataframes.py:9
|
1182 |
+
msgid ""
|
1183 |
+
"https://docs.google.com/spreadsheets/"
|
1184 |
+
"d/1gYoBBiBo1L18IVakHkf3t1fOGvHWb23loadyFZUeHJs/edit#gid=966953708"
|
1185 |
msgstr ""
|
1186 |
|
1187 |
+
#: src/dataframes.py:11
|
1188 |
+
msgid ""
|
1189 |
+
"https://docs.google.com/spreadsheets/"
|
1190 |
+
"d/1eXOTqunOWWP8FRdENPs4cU9ulISm4XZWYJJNR1-SrwY/edit#gid=2089222765"
|
1191 |
msgstr ""
|
1192 |
|
1193 |
+
#: src/dataframes.py:13
|
1194 |
msgid "data/regions.json"
|
1195 |
msgstr ""
|
1196 |
|
1197 |
+
#: src/dataframes.py:20 src/dataframes.py:22
|
1198 |
msgid "Automatic Extracted Coordinates"
|
1199 |
msgstr ""
|
1200 |
|
1201 |
+
#: src/dataframes.py:26 src/dataframes.py:27
|
1202 |
msgid "Status"
|
1203 |
msgstr ""
|
1204 |
|
1205 |
+
#: src/dataframes.py:58
|
1206 |
msgid "Display the dataframe in a table"
|
1207 |
msgstr ""
|
1208 |
|
1209 |
+
#: src/dataframes.py:65
|
1210 |
msgid "🔍 Search for information / بحث عن المعلومات"
|
1211 |
msgstr ""
|
1212 |
|
1213 |
+
#: src/dataframes.py:65
|
1214 |
#, python-brace-format
|
1215 |
msgid "query_{df_hash}"
|
1216 |
msgstr ""
|
1217 |
|
1218 |
+
#: src/dataframes.py:69
|
1219 |
msgid "🔍 Search for an id / بحث عن رقم"
|
1220 |
msgstr ""
|
1221 |
|
1222 |
+
#: src/dataframes.py:74
|
1223 |
#, python-brace-format
|
1224 |
msgid "id_{df_hash}"
|
1225 |
msgstr ""
|
1226 |
|
1227 |
+
#: src/dataframes.py:78
|
1228 |
msgid "🗓️ Status / حالة"
|
1229 |
msgstr ""
|
1230 |
|
1231 |
+
#: src/dataframes.py:78
|
1232 |
msgid "all / الكل"
|
1233 |
msgstr ""
|
1234 |
|
1235 |
+
#: src/dataframes.py:78 src/dataframes.py:95
|
1236 |
msgid "Done / تم"
|
1237 |
msgstr ""
|
1238 |
|
1239 |
+
#: src/dataframes.py:78 src/dataframes.py:98
|
1240 |
msgid "Planned / مخطط لها"
|
1241 |
msgstr ""
|
1242 |
|
1243 |
+
#: src/dataframes.py:78
|
1244 |
#, python-brace-format
|
1245 |
msgid "status_{df_hash}"
|
1246 |
msgstr ""
|
1247 |
|
1248 |
+
#: src/dataframes.py:94
|
1249 |
+
msgid ""
|
1250 |
+
"Pouvez-vous nous préciser si vous êtes déjà intervenus ou si vous prévoyez "
|
1251 |
+
"de le faire | Tell us if you already made the intervention, or if you're "
|
1252 |
+
"planning to do it"
|
1253 |
msgstr ""
|
1254 |
|
1255 |
+
#: src/dataframes.py:96 src/dataframes.py:99
|
1256 |
msgid "Intervention déjà passée / Past intevention"
|
1257 |
msgstr ""
|
1258 |
|
1259 |
+
#: src/dataframes.py:105
|
1260 |
#, python-brace-format
|
1261 |
msgid ""
|
1262 |
"To view the full Google Sheet for advanced filtering go to: {data_url} "
|
1263 |
"**لعرض الورقة كاملة، اذهب إلى**"
|
1264 |
msgstr ""
|
1265 |
|
1266 |
+
#: src/dataframes.py:110
|
1267 |
msgid ""
|
1268 |
"We are hiding contact information to protect the privacy of the victims. If "
|
1269 |
"you are an NGO and want to contact the victims, please contact us at "
|
1270 | |
1271 |
msgstr ""
|
1272 |
|
1273 |
+
#: src/dataframes.py:113
|
1274 |
msgid ""
|
1275 |
"\n"
|
1276 |
" <div style=\"text-align: left;\">\n"
|
requirements.txt
CHANGED
@@ -1,3 +1,2 @@
|
|
1 |
-
folium
|
2 |
-
streamlit_folium
|
3 |
-
plotly
|
|
|
1 |
+
folium
|
2 |
+
streamlit_folium
|
|
src/components.py
CHANGED
@@ -2,22 +2,7 @@ import streamlit as st
|
|
2 |
from datetime import datetime
|
3 |
from huggingface_hub import HfApi
|
4 |
from src.text_content import REVIEW_TEXT, INTRO_TEXT_AR, INTRO_TEXT_EN, INTRO_TEXT_FR
|
5 |
-
from src.dataframes import INTERVENTIONS_PROCESSED_URL, VERIFIED_REQUESTS_PROCESSED_URL
|
6 |
-
from src.utils import parse_gg_sheet
|
7 |
|
8 |
-
import plotly.express as px
|
9 |
-
|
10 |
-
PIE_CHART_COLOR_MAP = {
|
11 |
-
"REFUGE / SHELTER": "#83C9FD",
|
12 |
-
"COUVERTURES / COVERS": "#FFABAB",
|
13 |
-
"OTHER": "#7FEFA5",
|
14 |
-
"SECOURS / RESCUE": "#FFD171",
|
15 |
-
"KITCHEN TOOLS / USTENSILES DE CUISINE": "#FF8718",
|
16 |
-
"ALIMENTATION ET EAU / FOOD AND WATER": "#0068C7",
|
17 |
-
"ASSISTANCE MÉDICALE / MEDICAL ASSISTANCE": "#2CB09E",
|
18 |
-
"VÊTEMENTS / CLOTHES": "#FF2B2B",
|
19 |
-
"PHARMACEUTICALS / MEDICAMENTS": "#6D40BD"
|
20 |
-
}
|
21 |
|
22 |
def id_review_submission(api: HfApi):
|
23 |
"""Id review submission form"""
|
@@ -63,14 +48,11 @@ def show_embed_code():
|
|
63 |
)
|
64 |
|
65 |
|
66 |
-
def show_dataframes_metrics(len_requests, len_interventions, len_solved_verified_requests, lang
|
67 |
if lang == "en":
|
68 |
# with st.expander("📝 Nt3awnou Platform Description"):
|
69 |
st.markdown(INTRO_TEXT_EN, unsafe_allow_html=True)
|
70 |
-
|
71 |
-
col1, col2, col3 = st.columns([1, 1, 1])
|
72 |
-
else:
|
73 |
-
col1, col2 = st.columns([1, 1])
|
74 |
with col1:
|
75 |
st.metric(
|
76 |
"# Number of help requests",
|
@@ -81,19 +63,15 @@ def show_dataframes_metrics(len_requests, len_interventions, len_solved_verified
|
|
81 |
"# Number of interventions",
|
82 |
len_interventions + len_solved_verified_requests,
|
83 |
)
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
)
|
90 |
elif lang == "ar":
|
91 |
# with st.expander("📝 شرح منصة نتعاونو"):
|
92 |
st.markdown(INTRO_TEXT_AR, unsafe_allow_html=True)
|
93 |
-
|
94 |
-
col1, col2, col3 = st.columns([1, 1, 1])
|
95 |
-
else:
|
96 |
-
col1, col2 = st.columns([1, 1])
|
97 |
with col1:
|
98 |
st.metric(
|
99 |
"# عدد طلبات المساعدة",
|
@@ -104,19 +82,15 @@ def show_dataframes_metrics(len_requests, len_interventions, len_solved_verified
|
|
104 |
"# عدد التدخلات",
|
105 |
len_interventions + len_solved_verified_requests,
|
106 |
)
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
)
|
113 |
elif lang == "fr":
|
114 |
# with st.expander("📝 Description de la plateforme Nt3awnou"):
|
115 |
st.markdown(INTRO_TEXT_FR, unsafe_allow_html=True)
|
116 |
-
|
117 |
-
col1, col2, col3 = st.columns([1, 1, 1])
|
118 |
-
else:
|
119 |
-
col1, col2 = st.columns([1, 1])
|
120 |
with col1:
|
121 |
st.metric(
|
122 |
"# Nombre de demandes d'aide",
|
@@ -127,91 +101,15 @@ def show_dataframes_metrics(len_requests, len_interventions, len_solved_verified
|
|
127 |
"# Nombre d'interventions",
|
128 |
len_interventions + len_solved_verified_requests,
|
129 |
)
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
)
|
136 |
-
|
137 |
-
|
138 |
-
@st.cache_data(ttl=60 * 60 * 24)
|
139 |
-
def cached_parse_gg_sheet(url):
|
140 |
-
return parse_gg_sheet(url)
|
141 |
-
|
142 |
-
|
143 |
-
def show_charts():
|
144 |
-
st.subheader(_("📊 **Charts**"))
|
145 |
-
col1, col2 = st.columns([1, 1])
|
146 |
-
|
147 |
-
# interventions_categories
|
148 |
-
interventions_processed_df = cached_parse_gg_sheet(INTERVENTIONS_PROCESSED_URL)
|
149 |
-
supply_data = (
|
150 |
-
interventions_processed_df["supplies_category"]
|
151 |
-
.str.split(",")
|
152 |
-
.explode()
|
153 |
-
.str.strip("[] '")
|
154 |
-
.dropna()
|
155 |
-
.astype("category")
|
156 |
-
)
|
157 |
-
interv_fig = px.pie(supply_data, names="supplies_category", color='supplies_category', color_discrete_map=PIE_CHART_COLOR_MAP)
|
158 |
-
interv_fig.update_layout(
|
159 |
-
autosize=True,
|
160 |
-
legend=dict(
|
161 |
-
orientation="h",
|
162 |
-
# entrywidth=40,
|
163 |
-
yanchor="bottom",
|
164 |
-
y=1.02,
|
165 |
-
xanchor="right",
|
166 |
-
x=1,
|
167 |
-
font=dict(
|
168 |
-
# family="Courier",
|
169 |
-
# size=10,
|
170 |
-
# color="black"
|
171 |
-
),
|
172 |
-
itemwidth=100,
|
173 |
-
),
|
174 |
-
)
|
175 |
-
with col1:
|
176 |
-
st.subheader(_("Supplies Categories"))
|
177 |
-
st.plotly_chart(interv_fig, use_container_width=True)
|
178 |
-
|
179 |
-
# requests_categories
|
180 |
-
requests_processed_df = cached_parse_gg_sheet(VERIFIED_REQUESTS_PROCESSED_URL)
|
181 |
-
need_data = (
|
182 |
-
requests_processed_df["need_category"].str.split(",").explode().str.strip("[] '").dropna().astype("category")
|
183 |
-
)
|
184 |
-
req_fig = px.pie(need_data, names="need_category", color='need_category', color_discrete_map=PIE_CHART_COLOR_MAP)
|
185 |
-
req_fig.update_layout(
|
186 |
-
autosize=True,
|
187 |
-
legend=dict(
|
188 |
-
orientation="h",
|
189 |
-
# entrywidth=40,
|
190 |
-
yanchor="bottom",
|
191 |
-
y=1.02,
|
192 |
-
xanchor="right",
|
193 |
-
x=1,
|
194 |
-
font=dict(
|
195 |
-
# family="Courier",
|
196 |
-
# size=10,
|
197 |
-
# color="black"
|
198 |
-
),
|
199 |
-
itemwidth=100,
|
200 |
-
),
|
201 |
-
)
|
202 |
-
with col2:
|
203 |
-
st.subheader(_("Needs Categories"))
|
204 |
-
st.plotly_chart(req_fig, use_container_width=True)
|
205 |
-
|
206 |
|
207 |
def show_donations(lang):
|
208 |
st.subheader(_("📝 **Donations**"))
|
209 |
if lang == "en":
|
210 |
-
st.markdown(
|
211 |
-
"""
|
212 |
-
<b>Notice:</b> We are not responsible for the donations collection. This is the official bank account dedicated to tackle the consequences of the earthquake.""",
|
213 |
-
unsafe_allow_html=True,
|
214 |
-
)
|
215 |
st.markdown(
|
216 |
"""
|
217 |
<div style="text-align: center;">
|
@@ -228,12 +126,6 @@ def show_donations(lang):
|
|
228 |
unsafe_allow_html=True,
|
229 |
)
|
230 |
elif lang == "ar":
|
231 |
-
st.markdown(
|
232 |
-
"""
|
233 |
-
<b>ملاحظة:</b> نحن لسنا مسؤولين عن جمع التبرعات. هذا هو الحساب البنكي الرسمي المخصص لمواجهة عواقب الزلزال.
|
234 |
-
""",
|
235 |
-
unsafe_allow_html=True,
|
236 |
-
)
|
237 |
st.markdown(
|
238 |
"""
|
239 |
<div style="text-align: center;">
|
@@ -251,12 +143,6 @@ def show_donations(lang):
|
|
251 |
unsafe_allow_html=True,
|
252 |
)
|
253 |
elif lang == "fr":
|
254 |
-
st.markdown(
|
255 |
-
"""
|
256 |
-
<b>Remarque:</b> Nous ne sommes pas responsables de la collecte des dons. Ceci est le compte bancaire officiel dédié à la lutte contre les conséquences du séisme.
|
257 |
-
""",
|
258 |
-
unsafe_allow_html=True,
|
259 |
-
)
|
260 |
st.markdown(
|
261 |
"""
|
262 |
<div style="text-align: center;">
|
@@ -271,4 +157,4 @@ def show_donations(lang):
|
|
271 |
<br>
|
272 |
""",
|
273 |
unsafe_allow_html=True,
|
274 |
-
)
|
|
|
2 |
from datetime import datetime
|
3 |
from huggingface_hub import HfApi
|
4 |
from src.text_content import REVIEW_TEXT, INTRO_TEXT_AR, INTRO_TEXT_EN, INTRO_TEXT_FR
|
|
|
|
|
5 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
|
7 |
def id_review_submission(api: HfApi):
|
8 |
"""Id review submission form"""
|
|
|
48 |
)
|
49 |
|
50 |
|
51 |
+
def show_dataframes_metrics(len_requests, len_interventions, len_solved_verified_requests, lang):
|
52 |
if lang == "en":
|
53 |
# with st.expander("📝 Nt3awnou Platform Description"):
|
54 |
st.markdown(INTRO_TEXT_EN, unsafe_allow_html=True)
|
55 |
+
col1, col2, col3 = st.columns([1, 1, 1])
|
|
|
|
|
|
|
56 |
with col1:
|
57 |
st.metric(
|
58 |
"# Number of help requests",
|
|
|
63 |
"# Number of interventions",
|
64 |
len_interventions + len_solved_verified_requests,
|
65 |
)
|
66 |
+
with col3:
|
67 |
+
st.metric(
|
68 |
+
"# Number of solved requests",
|
69 |
+
len_solved_verified_requests,
|
70 |
+
)
|
|
|
71 |
elif lang == "ar":
|
72 |
# with st.expander("📝 شرح منصة نتعاونو"):
|
73 |
st.markdown(INTRO_TEXT_AR, unsafe_allow_html=True)
|
74 |
+
col1, col2, col3 = st.columns([1, 1, 1])
|
|
|
|
|
|
|
75 |
with col1:
|
76 |
st.metric(
|
77 |
"# عدد طلبات المساعدة",
|
|
|
82 |
"# عدد التدخلات",
|
83 |
len_interventions + len_solved_verified_requests,
|
84 |
)
|
85 |
+
with col3:
|
86 |
+
st.metric(
|
87 |
+
"# عدد الطلبات المستجاب لها",
|
88 |
+
len_solved_verified_requests,
|
89 |
+
)
|
|
|
90 |
elif lang == "fr":
|
91 |
# with st.expander("📝 Description de la plateforme Nt3awnou"):
|
92 |
st.markdown(INTRO_TEXT_FR, unsafe_allow_html=True)
|
93 |
+
col1, col2, col3 = st.columns([1, 1, 1])
|
|
|
|
|
|
|
94 |
with col1:
|
95 |
st.metric(
|
96 |
"# Nombre de demandes d'aide",
|
|
|
101 |
"# Nombre d'interventions",
|
102 |
len_interventions + len_solved_verified_requests,
|
103 |
)
|
104 |
+
with col3:
|
105 |
+
st.metric(
|
106 |
+
"# Nombre de demandes résolues",
|
107 |
+
len_solved_verified_requests,
|
108 |
+
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
109 |
|
110 |
def show_donations(lang):
|
111 |
st.subheader(_("📝 **Donations**"))
|
112 |
if lang == "en":
|
|
|
|
|
|
|
|
|
|
|
113 |
st.markdown(
|
114 |
"""
|
115 |
<div style="text-align: center;">
|
|
|
126 |
unsafe_allow_html=True,
|
127 |
)
|
128 |
elif lang == "ar":
|
|
|
|
|
|
|
|
|
|
|
|
|
129 |
st.markdown(
|
130 |
"""
|
131 |
<div style="text-align: center;">
|
|
|
143 |
unsafe_allow_html=True,
|
144 |
)
|
145 |
elif lang == "fr":
|
|
|
|
|
|
|
|
|
|
|
|
|
146 |
st.markdown(
|
147 |
"""
|
148 |
<div style="text-align: center;">
|
|
|
157 |
<br>
|
158 |
""",
|
159 |
unsafe_allow_html=True,
|
160 |
+
)
|
src/data_analysis.py
DELETED
@@ -1,242 +0,0 @@
|
|
1 |
-
"""
|
2 |
-
This file contains some functions used to analyze the data from requests and interventions.
|
3 |
-
"""
|
4 |
-
|
5 |
-
import re
|
6 |
-
import datetime as dt
|
7 |
-
import pandas as pd
|
8 |
-
import plotly.express as px
|
9 |
-
import plotly.graph_objects as go
|
10 |
-
from torch import Tensor
|
11 |
-
from transformers import AutoModel, AutoTokenizer
|
12 |
-
import torch.nn.functional as F
|
13 |
-
|
14 |
-
|
15 |
-
SUPPLIES_TAGS = {
|
16 |
-
'alimentation': 'ALIMENTATION ET EAU / FOOD AND WATER / الغذاء والماء',
|
17 |
-
'eau': 'ALIMENTATION ET EAU / FOOD AND WATER / الغذاء والماء',
|
18 |
-
'food': 'ALIMENTATION ET EAU / FOOD AND WATER / الغذاء والماء',
|
19 |
-
'water': 'ALIMENTATION ET EAU / FOOD AND WATER / الغذاء والماء',
|
20 |
-
'nourriture': 'ALIMENTATION ET EAU / FOOD AND WATER / الغذاء والماء',
|
21 |
-
'medical': 'ASSISTANCE MÉDICALE / MEDICAL ASSISTANCE / المساعدة الطبية',
|
22 |
-
'médical': 'ASSISTANCE MÉDICALE / MEDICAL ASSISTANCE / المساعدة الطبية',
|
23 |
-
'doctor': 'ASSISTANCE MÉDICALE / MEDICAL ASSISTANCE / المساعدة الطبية',
|
24 |
-
'vêtements': 'VÊTEMENTS / CLOTHES / الملابس',
|
25 |
-
'clothes': 'VÊTEMENTS / CLOTHES / الملابس',
|
26 |
-
'secours': 'SECOURS / RESCUE / الإنقاذ',
|
27 |
-
'rescue': 'SECOURS / RESCUE / الإنقاذ',
|
28 |
-
'refuge': 'REFUGE / SHELTER / المأوى',
|
29 |
-
'shelter': 'REFUGE / SHELTER / المأوى',
|
30 |
-
'couvertures': 'COUVERTURES / COVERS / البطانيات',
|
31 |
-
'covers': 'COUVERTURES / COVERS / البطانيات',
|
32 |
-
'pharmaceuticals': 'PHARMACEUTICALS / MEDICAMENTS / الأدوية',
|
33 |
-
'medicaments': 'PHARMACEUTICALS / MEDICAMENTS / الأدوية',
|
34 |
-
'pharmacy': 'PHARMACEUTICALS / MEDICAMENTS / الأدوية',
|
35 |
-
'medicine': 'PHARMACEUTICALS / MEDICAMENTS / الأدوية',
|
36 |
-
'blankets': 'COUVERTURES / COVERS / البطانيات',
|
37 |
-
'tents': 'REFUGE / SHELTER / المأوى',
|
38 |
-
'couches': 'PHARMACEUTICALS / MEDICAMENTS / الأدوية'
|
39 |
-
}
|
40 |
-
|
41 |
-
SUPPLIES_NEEDS_CATEGORIES = ['ALIMENTATION ET EAU / FOOD AND WATER / الغذاء والماء',
|
42 |
-
'ASSISTANCE MÉDICALE / MEDICAL ASSISTANCE / المساعدة الطبية',
|
43 |
-
'VÊTEMENTS / CLOTHES / الملابس',
|
44 |
-
'SECOURS / RESCUE / الإنقاذ',
|
45 |
-
'REFUGE / SHELTER / المأوى',
|
46 |
-
'COUVERTURES / COVERS / البطانيات',
|
47 |
-
# 'KITCHEN TOOLS / USTENSILES DE CUISINE / أدوات المطبخ',
|
48 |
-
'PHARMACEUTICALS / MEDICAMENTS / الأدوية',
|
49 |
-
'OTHER']
|
50 |
-
|
51 |
-
TRANSLATION_DICT = {
|
52 |
-
'أغطية': 'covers',
|
53 |
-
'أسرة': 'beds',
|
54 |
-
'وسادات': 'pillows',
|
55 |
-
'مصابح': 'lamps',
|
56 |
-
'خيام': 'tents',
|
57 |
-
'ألعاب أطفال': 'toys',
|
58 |
-
'قليل من المواد الغذائية': 'food',
|
59 |
-
'افرشة': 'covers',
|
60 |
-
'جلباب': 'clothes',
|
61 |
-
'ملابس': 'clothes',
|
62 |
-
'لديهم كل شيء': 'unknown'
|
63 |
-
}
|
64 |
-
|
65 |
-
|
66 |
-
def clean_text(text):
|
67 |
-
"""
|
68 |
-
remove special characters from text
|
69 |
-
"""
|
70 |
-
pattern = re.compile(r'[\u200e\xa0()\u200f]')
|
71 |
-
cleaned_text = pattern.sub('', text)
|
72 |
-
return cleaned_text
|
73 |
-
|
74 |
-
|
75 |
-
def contains_arabic(text):
|
76 |
-
"""
|
77 |
-
check if the text contains arabic characters
|
78 |
-
"""
|
79 |
-
arabic_pattern = re.compile(r'[\u0600-\u06FF]+')
|
80 |
-
if type(text)!=str:
|
81 |
-
return False
|
82 |
-
return arabic_pattern.search(text) is not None
|
83 |
-
|
84 |
-
|
85 |
-
def arabic_to_latin_punctuation(text):
|
86 |
-
"""
|
87 |
-
replace arabic punctuation with latin punctuation
|
88 |
-
"""
|
89 |
-
punctuation_mapping = {
|
90 |
-
'،': ',',
|
91 |
-
'؛': ';',
|
92 |
-
'ـ': '_',
|
93 |
-
'؟': '?',
|
94 |
-
'٪': '%',
|
95 |
-
'٫': '.',
|
96 |
-
}
|
97 |
-
|
98 |
-
for arabic_punct, latin_punct in punctuation_mapping.items():
|
99 |
-
text = text.replace(arabic_punct, latin_punct)
|
100 |
-
|
101 |
-
return text
|
102 |
-
|
103 |
-
|
104 |
-
def plot_timeline(df: pd.DataFrame, today: dt.datetime, date_col: str):
|
105 |
-
"""Plot the timeline of requests and interventions.
|
106 |
-
"""
|
107 |
-
df_past = df[df[date_col]<=today.date()]
|
108 |
-
df_future = df[df[date_col]>today.date()]
|
109 |
-
|
110 |
-
count_past = (df_past
|
111 |
-
.groupby(date_col)
|
112 |
-
.size()
|
113 |
-
.rename('count')
|
114 |
-
.reset_index())
|
115 |
-
past_date_range = pd.date_range(start=min(count_past[date_col]),
|
116 |
-
end=today.date(),
|
117 |
-
freq='D')
|
118 |
-
count_past = (count_past
|
119 |
-
.set_index(date_col)
|
120 |
-
.reindex(past_date_range, fill_value=0)
|
121 |
-
.reset_index())
|
122 |
-
|
123 |
-
if len(df_future)>0:
|
124 |
-
count_future = df_future.groupby(date_col).size().rename('count').reset_index()
|
125 |
-
future_date_range = pd.date_range(start=today.date()+dt.timedelta(days=1),
|
126 |
-
end=max(count_future[date_col]),
|
127 |
-
freq='D')
|
128 |
-
count_future = (count_future
|
129 |
-
.set_index(date_col)
|
130 |
-
.reindex(future_date_range, fill_value=0)
|
131 |
-
.reset_index())
|
132 |
-
else:
|
133 |
-
count_future = pd.DataFrame()
|
134 |
-
|
135 |
-
bridge_date = today.date()
|
136 |
-
bridge_data = pd.DataFrame(
|
137 |
-
{'index': bridge_date, 'form_date':count_past.iloc[-1]['count']}, index=[0])
|
138 |
-
count_future = pd.concat([bridge_data, count_future], ignore_index=True)
|
139 |
-
|
140 |
-
# Plot
|
141 |
-
fig = go.Figure()
|
142 |
-
# past
|
143 |
-
fig.add_trace(go.Scatter(x=count_past['index'],
|
144 |
-
y=count_past['count'],
|
145 |
-
mode='lines',
|
146 |
-
name='Past Interventions',
|
147 |
-
line=dict(color='blue')))
|
148 |
-
# future
|
149 |
-
fig.add_trace(go.Scatter(x=count_future['index'],
|
150 |
-
y=count_future['count'],
|
151 |
-
mode='lines',
|
152 |
-
name='Future Interventions',
|
153 |
-
line=dict(color='orange')))
|
154 |
-
|
155 |
-
fig.add_vline(x=today.date(), line_dash="dash", line_color="black")
|
156 |
-
|
157 |
-
fig.update_layout(yaxis_title="#", xaxis_title='date')
|
158 |
-
return fig
|
159 |
-
|
160 |
-
|
161 |
-
def classify_supplies_rule_based(text: pd.DataFrame, keep_raw: bool = False):
|
162 |
-
""" Classifies text into supplies categories from SUPPLIES_TAGS
|
163 |
-
using a rule-based approach."""
|
164 |
-
classes = []
|
165 |
-
lowercase_text = text.lower() # case-insensitive matching
|
166 |
-
|
167 |
-
for keyword, category in SUPPLIES_TAGS.items():
|
168 |
-
if keyword in lowercase_text:
|
169 |
-
classes.append(category)
|
170 |
-
|
171 |
-
if keep_raw:
|
172 |
-
classes.append(lowercase_text)
|
173 |
-
|
174 |
-
elif not classes:
|
175 |
-
classes.append('OTHER')
|
176 |
-
|
177 |
-
return list(set(classes))
|
178 |
-
|
179 |
-
|
180 |
-
def classify_multilingual_field_e5(df: pd.DataFrame,
|
181 |
-
field_to_tag: str = 'supplies',
|
182 |
-
categories: list = SUPPLIES_NEEDS_CATEGORIES):
|
183 |
-
"""
|
184 |
-
Tag supplies/requests into categories using multilingual-e5-large model.
|
185 |
-
Returns a dataframe with a new column containing the list of predicted categories.
|
186 |
-
Requires CUDA
|
187 |
-
"""
|
188 |
-
def average_pool(last_hidden_states: Tensor, attention_mask: Tensor) -> Tensor:
|
189 |
-
last_hidden = last_hidden_states.masked_fill(
|
190 |
-
~attention_mask[..., None].bool(), 0.0)
|
191 |
-
return last_hidden.sum(dim=1) / attention_mask.sum(dim=1)[..., None]
|
192 |
-
|
193 |
-
tokenizer = AutoTokenizer.from_pretrained('intfloat/multilingual-e5-large')
|
194 |
-
model = AutoModel.from_pretrained('intfloat/multilingual-e5-large')
|
195 |
-
model.cuda()
|
196 |
-
|
197 |
-
# classify ar supplies
|
198 |
-
processed_df = df.copy()
|
199 |
-
values_to_classify = processed_df[field_to_tag]
|
200 |
-
|
201 |
-
mapped_inputs = dict()
|
202 |
-
|
203 |
-
for text in values_to_classify:
|
204 |
-
gt = [f"{s}" for s in categories]
|
205 |
-
qr = [f"{v}" for v in re.split("\.|,| و", text)]
|
206 |
-
input_texts = qr + gt
|
207 |
-
|
208 |
-
# Tokenize the input texts
|
209 |
-
batch_dict = tokenizer(
|
210 |
-
input_texts, max_length=512, padding=True, truncation=True, return_tensors='pt')
|
211 |
-
batch_dict = {k: v.cuda() for k, v in batch_dict.items()}
|
212 |
-
|
213 |
-
outputs = model(**batch_dict)
|
214 |
-
embeddings = average_pool(outputs.last_hidden_state, batch_dict['attention_mask'])
|
215 |
-
|
216 |
-
# normalize embeddings
|
217 |
-
embeddings = F.normalize(embeddings, p=2, dim=1)
|
218 |
-
scores = (embeddings[:len(qr)] @ embeddings[len(qr):].T) * 100
|
219 |
-
|
220 |
-
mapped_inputs[text] = list(
|
221 |
-
set([categories[int(scores[i,:].argmax())] for i in range(len(qr))]))
|
222 |
-
|
223 |
-
processed_df.loc[values_to_classify.index, f'{field_to_tag}_category'] = list(
|
224 |
-
mapped_inputs.values())
|
225 |
-
|
226 |
-
return processed_df
|
227 |
-
|
228 |
-
|
229 |
-
def plot_categories_share(raw_df: pd.DataFrame,
|
230 |
-
today: dt.datetime,
|
231 |
-
field: str = 'supplies'):
|
232 |
-
"""
|
233 |
-
Plot the share of each category of requests/supplies.
|
234 |
-
"""
|
235 |
-
df = raw_df[[field, f'{field}_category']].explode(f'{field}_category')
|
236 |
-
pie_data = df.groupby(f'{field}_category', as_index=False).size().rename('n')
|
237 |
-
fig = px.pie(pie_data,
|
238 |
-
names=f'{field}_category',
|
239 |
-
values='n',
|
240 |
-
title=f'# per {field} category up till {today.date()}',
|
241 |
-
labels={f'{field}_category': f'{field}', 'n': '%'})
|
242 |
-
return fig
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/dataframes.py
CHANGED
@@ -1,15 +1,17 @@
|
|
|
|
1 |
import streamlit as st
|
2 |
from src.utils import add_latlng_col, parse_gg_sheet, parse_json_file, is_request_in_list
|
3 |
import pandas as pd
|
4 |
|
5 |
-
VERIFIED_REQUESTS_URL =
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
|
|
|
|
10 |
DOUARS_URL = "data/regions.json"
|
11 |
|
12 |
-
|
13 |
def load_data(show_unverified, selected_options, options):
|
14 |
df = parse_gg_sheet(REQUESTS_URL)
|
15 |
if show_unverified:
|
@@ -32,9 +34,7 @@ def load_data(show_unverified, selected_options, options):
|
|
32 |
verified_df["id"] = verified_df.index # Needed to display request id
|
33 |
# keep rows with at least one request in selected_options
|
34 |
filtered_df = df[
|
35 |
-
df["ما هي احتياجاتك؟ (أضفها إذا لم يتم ذكرها)"].apply(
|
36 |
-
lambda x: is_request_in_list(x, selected_options, options)
|
37 |
-
)
|
38 |
]
|
39 |
filtered_verified_df = verified_df[
|
40 |
verified_df["Help Details"].apply(lambda x: is_request_in_list(x, selected_options, options))
|
@@ -53,6 +53,7 @@ def load_data(show_unverified, selected_options, options):
|
|
53 |
)
|
54 |
|
55 |
|
|
|
56 |
def display_dataframe(df, drop_cols, data_url, search_id=True, status=False, for_help_requests=False, show_link=True):
|
57 |
"""Display the dataframe in a table"""
|
58 |
col_1, col_2 = st.columns([1, 1])
|
@@ -116,3 +117,4 @@ def display_dataframe(df, drop_cols, data_url, search_id=True, status=False, for
|
|
116 |
""",
|
117 |
unsafe_allow_html=True,
|
118 |
)
|
|
|
|
1 |
+
|
2 |
import streamlit as st
|
3 |
from src.utils import add_latlng_col, parse_gg_sheet, parse_json_file, is_request_in_list
|
4 |
import pandas as pd
|
5 |
|
6 |
+
VERIFIED_REQUESTS_URL = (
|
7 |
+
"https://docs.google.com/spreadsheets/d/1PXcAtI5L95hHSXAiRl3Y4v5O4coG39S86OTfBEcvLTE/edit#gid=0"
|
8 |
+
)
|
9 |
+
REQUESTS_URL = "https://docs.google.com/spreadsheets/d/1gYoBBiBo1L18IVakHkf3t1fOGvHWb23loadyFZUeHJs/edit#gid=966953708"
|
10 |
+
INTERVENTIONS_URL = (
|
11 |
+
"https://docs.google.com/spreadsheets/d/1eXOTqunOWWP8FRdENPs4cU9ulISm4XZWYJJNR1-SrwY/edit#gid=2089222765"
|
12 |
+
)
|
13 |
DOUARS_URL = "data/regions.json"
|
14 |
|
|
|
15 |
def load_data(show_unverified, selected_options, options):
|
16 |
df = parse_gg_sheet(REQUESTS_URL)
|
17 |
if show_unverified:
|
|
|
34 |
verified_df["id"] = verified_df.index # Needed to display request id
|
35 |
# keep rows with at least one request in selected_options
|
36 |
filtered_df = df[
|
37 |
+
df["ما هي احتياجاتك؟ (أضفها إذا لم يتم ذكرها)"].apply(lambda x: is_request_in_list(x, selected_options, options))
|
|
|
|
|
38 |
]
|
39 |
filtered_verified_df = verified_df[
|
40 |
verified_df["Help Details"].apply(lambda x: is_request_in_list(x, selected_options, options))
|
|
|
53 |
)
|
54 |
|
55 |
|
56 |
+
|
57 |
def display_dataframe(df, drop_cols, data_url, search_id=True, status=False, for_help_requests=False, show_link=True):
|
58 |
"""Display the dataframe in a table"""
|
59 |
col_1, col_2 = st.columns([1, 1])
|
|
|
117 |
""",
|
118 |
unsafe_allow_html=True,
|
119 |
)
|
120 |
+
|
src/filters.py
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
-
import streamlit as st
|
2 |
|
|
|
3 |
|
4 |
def show_requests_filters():
|
5 |
HEADERS_MAPPING = {
|
6 |
-
"إغاثة": _("Rescue"),
|
7 |
"مساعدة طبية": _("Medical Assistance"),
|
8 |
"مأوى": _("Shelter"),
|
9 |
"طعام وماء": _("Food & Water"),
|
@@ -39,10 +39,9 @@ def show_requests_filters():
|
|
39 |
format_func=lambda x: HEADERS_MAPPING[x],
|
40 |
label_visibility="collapsed",
|
41 |
)
|
42 |
-
|
43 |
return selected_options, options, show_unverified, show_interventions
|
44 |
|
45 |
-
|
46 |
def show_interventions_filters():
|
47 |
st.markdown(
|
48 |
_("👉 **State of villages visited by NGOs**"),
|
|
|
|
|
1 |
|
2 |
+
import streamlit as st
|
3 |
|
4 |
def show_requests_filters():
|
5 |
HEADERS_MAPPING = {
|
6 |
+
"إغاثة" : _("Rescue"),
|
7 |
"مساعدة طبية": _("Medical Assistance"),
|
8 |
"مأوى": _("Shelter"),
|
9 |
"طعام وماء": _("Food & Water"),
|
|
|
39 |
format_func=lambda x: HEADERS_MAPPING[x],
|
40 |
label_visibility="collapsed",
|
41 |
)
|
42 |
+
|
43 |
return selected_options, options, show_unverified, show_interventions
|
44 |
|
|
|
45 |
def show_interventions_filters():
|
46 |
st.markdown(
|
47 |
_("👉 **State of villages visited by NGOs**"),
|
src/fuzzy_matching.py
DELETED
@@ -1,258 +0,0 @@
|
|
1 |
-
"""
|
2 |
-
Problem:
|
3 |
-
Nt3awnou's platform collects raw data filled manually by users (people in need).
|
4 |
-
Among this data is the user's localisation.
|
5 |
-
The localisation is a text input that is not standardized:
|
6 |
-
i.e. a user can input a single or multiple locations
|
7 |
-
(either douars/provinces/communes/regions or all combined),
|
8 |
-
in arabic or latin, with misspellings etc.
|
9 |
-
This doesn't help in visualization or in statistics
|
10 |
-
where localisations can be redundant because they were written in different manners.
|
11 |
-
|
12 |
-
Examples
|
13 |
-
```
|
14 |
-
دوار تجكَالت
|
15 |
-
ابرداتن ازكور
|
16 |
-
خزامة
|
17 |
-
Tansgharte
|
18 |
-
دوار امندار
|
19 |
-
Douar Essour Tidrara Aghwatim Tahnaouet Al Haouz
|
20 |
-
دوار تكاديرت
|
21 |
-
Douar Essour tidrara- aghouatine- Tahanaout-El Haouz
|
22 |
-
```
|
23 |
-
Solution:
|
24 |
-
We collected a reference dataset that contains all douar names (arabic and latin)
|
25 |
-
with their corresponding regions, communes and provinces.
|
26 |
-
We developed methods using fuzzy matching and phonetics
|
27 |
-
to map the user's localisation to the closest match in the reference dataset
|
28 |
-
|
29 |
-
"""
|
30 |
-
|
31 |
-
from typing import Tuple
|
32 |
-
from pyphonetics import RefinedSoundex, Metaphone
|
33 |
-
import math
|
34 |
-
import difflib
|
35 |
-
import re
|
36 |
-
|
37 |
-
|
38 |
-
EPICENTER_LOCATION = [31.12210171476489, -8.42945837915193]
|
39 |
-
certainty_threshold = 1
|
40 |
-
|
41 |
-
|
42 |
-
def extract_ngrams(text, n):
|
43 |
-
"""
|
44 |
-
A function that returns a list of n-grams from a text
|
45 |
-
"""
|
46 |
-
ngrams = []
|
47 |
-
|
48 |
-
if n < 1 or n > len(text):
|
49 |
-
return ngrams # Return an empty list if n is invalid
|
50 |
-
|
51 |
-
# Iterate through the text and extract n-grams
|
52 |
-
for i in range(len(text) - n + 1):
|
53 |
-
ngram = text[i:i + n]
|
54 |
-
ngrams.append(' '.join(ngram))
|
55 |
-
|
56 |
-
return ngrams
|
57 |
-
|
58 |
-
|
59 |
-
def get_phonetics_distance(w1, w2):
|
60 |
-
"""
|
61 |
-
A function that calculates levenhstein distance between phonetics
|
62 |
-
representation of two words: add error term to the score
|
63 |
-
"""
|
64 |
-
rs = RefinedSoundex()
|
65 |
-
mt = Metaphone()
|
66 |
-
d1 = mt.distance(w1, w2, metric='levenshtein')
|
67 |
-
d2 = rs.distance(w1, w2, metric='levenshtein')
|
68 |
-
res = (d1 + d2) / 2 + 0.05
|
69 |
-
return res
|
70 |
-
|
71 |
-
|
72 |
-
def get_top_n_phonetics_matches(
|
73 |
-
w: str, ref_words: list, threshold=1, top_n=1) -> list[Tuple]:
|
74 |
-
"""
|
75 |
-
A function that returns the top_n closest words to w from ref_words
|
76 |
-
for which distance <= threshold
|
77 |
-
using phonetical representation
|
78 |
-
"""
|
79 |
-
if not w:
|
80 |
-
return list()
|
81 |
-
distances = {x: get_phonetics_distance(w, x) for x in ref_words}
|
82 |
-
selected_words = {x: d for x, d in distances.items() if d<=threshold}
|
83 |
-
sorted_d = dict(sorted(selected_words.items(), key=lambda item: item[1]))
|
84 |
-
|
85 |
-
return list(sorted_d.items())[:top_n]
|
86 |
-
|
87 |
-
|
88 |
-
def get_geometric_distance(lat1: float, lon1: float, lat2: float, lon2: float) -> float:
|
89 |
-
"""
|
90 |
-
A function that returns the distance between two points on earth
|
91 |
-
using the haversine formula
|
92 |
-
"""
|
93 |
-
dlon = math.radians(lon2 - lon1)
|
94 |
-
dlat = math.radians(lat2 - lat1)
|
95 |
-
a0 = (math.sin(dlat / 2)) ** 2 + math.cos(math.radians(lat1))
|
96 |
-
a = a0 * math.cos(math.radians(lat2)) * (math.sin(dlon / 2)) ** 2
|
97 |
-
c = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a))
|
98 |
-
distance = 6371 * c
|
99 |
-
return distance
|
100 |
-
|
101 |
-
|
102 |
-
def are_village_names_similar(village_a: str, village_b: str) -> float:
|
103 |
-
"""
|
104 |
-
A function that returns True if the two villages
|
105 |
-
are similar using strict fuzzy matching
|
106 |
-
"""
|
107 |
-
if difflib.SequenceMatcher(None, village_a, village_b).ratio() >= 0.90:
|
108 |
-
return True
|
109 |
-
return False
|
110 |
-
|
111 |
-
|
112 |
-
def get_uncertainty_range(input_dict: dict, threshold: float) -> list:
|
113 |
-
"""
|
114 |
-
A function that returns a list of tuples of the closest matches
|
115 |
-
"""
|
116 |
-
if len(input_dict)<=1:
|
117 |
-
return input_dict
|
118 |
-
|
119 |
-
# sort by distance
|
120 |
-
sorted_items = sorted(input_dict.items(), key=lambda item: item[1][1])
|
121 |
-
data = {key: value for key, value in sorted_items}
|
122 |
-
|
123 |
-
# Iterate through the keys in the dictionary
|
124 |
-
keys = list(data.keys())
|
125 |
-
min_key = keys[0]
|
126 |
-
min_value = data[min_key][1]
|
127 |
-
|
128 |
-
# Initialize a list to store the result tuples
|
129 |
-
result = {f"{min_key}":data[min_key]}
|
130 |
-
|
131 |
-
for j in range(1, len(keys)):
|
132 |
-
key2 = keys[j]
|
133 |
-
value2 = data[key2][1]
|
134 |
-
|
135 |
-
# Calculate the absolute difference between the float values
|
136 |
-
difference = abs(min_value - value2)
|
137 |
-
|
138 |
-
# If the difference is less than the threshold, add the tuple to the result
|
139 |
-
if difference <= threshold:
|
140 |
-
result[key2] = data[key2]
|
141 |
-
else:
|
142 |
-
break
|
143 |
-
|
144 |
-
return result
|
145 |
-
|
146 |
-
|
147 |
-
def match_word(w, ref_dict, select_one_match=False):
|
148 |
-
"""
|
149 |
-
A function that returns the closest match of w from ref_dict
|
150 |
-
using phonetical representation and fuzzy matching
|
151 |
-
"""
|
152 |
-
w = w.strip().upper()
|
153 |
-
|
154 |
-
if len(w)==0:
|
155 |
-
return {}
|
156 |
-
|
157 |
-
else:
|
158 |
-
closest_ref_w = dict()
|
159 |
-
use_phonetics = True
|
160 |
-
|
161 |
-
for category, names in ref_dict.items():
|
162 |
-
# check exact matching
|
163 |
-
if w in names:
|
164 |
-
use_phonetics = False
|
165 |
-
closest_ref_w[category] = (w, 0)
|
166 |
-
break
|
167 |
-
|
168 |
-
# check textual similarity (fuzzy matching)
|
169 |
-
sim = list(map(lambda x:are_village_names_similar(w,x), names))
|
170 |
-
similar_names = [names[i] for i in range(len(names)) if sim[i]==True]
|
171 |
-
if similar_names:
|
172 |
-
use_phonetics = False
|
173 |
-
closest_ref_w[category] = (similar_names[0], 0.01) if select_one_match else list(map(lambda x:(x, 0.01), similar_names))
|
174 |
-
|
175 |
-
# if no similar name was found check phonetical similarity
|
176 |
-
else:
|
177 |
-
res = get_top_n_phonetics_matches(w, names, threshold=2, top_n=1)
|
178 |
-
if res:
|
179 |
-
closest_ref_w[category] = res[0] # get closest match
|
180 |
-
|
181 |
-
if closest_ref_w and use_phonetics:
|
182 |
-
if not select_one_match:
|
183 |
-
closest_ref_w = get_uncertainty_range(closest_ref_w, certainty_threshold)
|
184 |
-
else:
|
185 |
-
k, v = min(closest_ref_w.items(), key=lambda x: x[1][1])
|
186 |
-
closest_ref_w = {k: v}
|
187 |
-
|
188 |
-
return closest_ref_w
|
189 |
-
|
190 |
-
|
191 |
-
def parse_and_map_localisation(text: str, ref_dict: dict, select_one_match: bool=True):
|
192 |
-
"""
|
193 |
-
A function that parses text containing users localisation
|
194 |
-
and returns the closest matches per categoty from ref_dict
|
195 |
-
Example:
|
196 |
-
input = COMMUNE MZODA : DOUARS : TOUKHRIBIN –TLAKEMT - COMMUNE IMINDOUNITE : DOUAR AZARZO
|
197 |
-
output = {'commune_fr': ('IMINDOUNIT', 0.01), 'nom_fr': ('TOUKHRIBINE', 0.01)}
|
198 |
-
"""
|
199 |
-
toxic = r"\bدوار|مصلى|\(|\)|douars?|communes?|cercles?|provinces?|villes?|regions?|caidate?|and|جماعة|\b|:|-|\d"
|
200 |
-
text = re.sub(toxic, '', text.lower())
|
201 |
-
regex_pattern = r"\|| |\.|,|/|et |و "
|
202 |
-
tokens = re.split(regex_pattern, text.replace('-', ' '))
|
203 |
-
filtered_tokens = [s for s in tokens if s.strip() != '']
|
204 |
-
|
205 |
-
ngrams_mapping = {}
|
206 |
-
|
207 |
-
for n in range(1, len(filtered_tokens)+1):
|
208 |
-
|
209 |
-
# generate ngrams
|
210 |
-
ngrams = extract_ngrams(filtered_tokens, n)
|
211 |
-
|
212 |
-
# init dict with ngram mapping
|
213 |
-
mapping_ngram = {}
|
214 |
-
|
215 |
-
# generate a mapping for the ngram with argmin matches
|
216 |
-
for tok in ngrams:
|
217 |
-
res = match_word(tok, ref_dict, select_one_match=select_one_match)
|
218 |
-
if not res:
|
219 |
-
continue
|
220 |
-
|
221 |
-
min_k, min_v = min(res.items(), key=lambda x:x[1][1])
|
222 |
-
|
223 |
-
# if min_k in previous tokens, then choose the min, else add it to mapping
|
224 |
-
if min_k in mapping_ngram:
|
225 |
-
saved_match, saved_distance = mapping_ngram[min_k]
|
226 |
-
|
227 |
-
if saved_distance > min_v[1]:
|
228 |
-
mapping_ngram[min_k] = min_v
|
229 |
-
|
230 |
-
else:
|
231 |
-
continue
|
232 |
-
|
233 |
-
else:
|
234 |
-
mapping_ngram[min_k] = min_v
|
235 |
-
|
236 |
-
ngrams_mapping[n] = mapping_ngram
|
237 |
-
|
238 |
-
|
239 |
-
# first squeeze dict s.t. one match remains per category
|
240 |
-
categories = ref_dict.keys()
|
241 |
-
result = {}
|
242 |
-
for _, inner_dict in ngrams_mapping.items():
|
243 |
-
for k in categories:
|
244 |
-
# Check if the key exists in the inner dictionary
|
245 |
-
if k in inner_dict:
|
246 |
-
current_match, current_val = inner_dict[k]
|
247 |
-
if k in result:
|
248 |
-
previous_match, previous_val = result[k]
|
249 |
-
if current_val < previous_val:
|
250 |
-
result[k] = (current_match, current_val)
|
251 |
-
else:
|
252 |
-
result[k] = (current_match, current_val)
|
253 |
-
|
254 |
-
# then, discard matches with a high distance from min (set 0.5+min_d as threshold)
|
255 |
-
thresh = min(result.values(), key=lambda x:x[1])[1] + 0.5
|
256 |
-
output = {k: v_d for k, v_d in result.items() if v_d[1]<=thresh}
|
257 |
-
|
258 |
-
return output
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/map_utils.py
CHANGED
@@ -2,8 +2,7 @@ from branca.element import Template, MacroElement
|
|
2 |
|
3 |
|
4 |
def get_legend_macro(show_unverified):
|
5 |
-
|
6 |
-
"""
|
7 |
<li><span style='background:#CE3C28;opacity:0.7;'></span>Rescue</li>
|
8 |
<li><span style='background:#ED922E;opacity:0.7;'></span>Medical Assistance</li>
|
9 |
<li><span style='background:#FFCA92;opacity:0.7;'></span>Shelter</li>
|
@@ -12,20 +11,17 @@ def get_legend_macro(show_unverified):
|
|
12 |
<li><span style='background:#6EAA25;opacity:0.7;'></span>Done</li>
|
13 |
<li><span style='background:#023020;opacity:0.7;'></span>Partial</li>
|
14 |
<li><span style='background:#FF91E8;opacity:0.7;'></span>Planned</li>
|
15 |
-
"""
|
16 |
-
|
17 |
-
labels_verified = _(
|
18 |
-
"""
|
19 |
<li><span style='background:#CE3C28;opacity:0.7;'></span>High Emergency</li>
|
20 |
<li><span style='background:#ED922E;opacity:0.7;'></span>Medium Emergency</li>
|
21 |
<li><span style='background:#FFCA92;opacity:0.7;'></span>Low Emergency</li>
|
22 |
<li><span style='background:#6EAA25;opacity:0.7;'></span>Done</li>
|
23 |
<li><span style='background:#023020;opacity:0.7;'></span>Partial</li>
|
24 |
<li><span style='background:#FF91E8;opacity:0.7;'></span>Planned</li>
|
25 |
-
"""
|
26 |
-
)
|
27 |
|
28 |
-
|
29 |
{% macro html(this, kwargs) %}
|
30 |
|
31 |
<!doctype html>
|
@@ -66,7 +62,7 @@ def get_legend_macro(show_unverified):
|
|
66 |
<ul class='legend-labels'>
|
67 |
|
68 |
"""
|
69 |
-
|
70 |
</ul>
|
71 |
</div>
|
72 |
</div>
|
@@ -122,11 +118,8 @@ def get_legend_macro(show_unverified):
|
|
122 |
</style>
|
123 |
{% endmacro %}"""
|
124 |
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
)
|
129 |
-
return legend_macro
|
130 |
-
|
131 |
|
132 |
-
__all__ = ["get_legend_macro"]
|
|
|
2 |
|
3 |
|
4 |
def get_legend_macro(show_unverified):
|
5 |
+
labels_unverified_requests=_("""
|
|
|
6 |
<li><span style='background:#CE3C28;opacity:0.7;'></span>Rescue</li>
|
7 |
<li><span style='background:#ED922E;opacity:0.7;'></span>Medical Assistance</li>
|
8 |
<li><span style='background:#FFCA92;opacity:0.7;'></span>Shelter</li>
|
|
|
11 |
<li><span style='background:#6EAA25;opacity:0.7;'></span>Done</li>
|
12 |
<li><span style='background:#023020;opacity:0.7;'></span>Partial</li>
|
13 |
<li><span style='background:#FF91E8;opacity:0.7;'></span>Planned</li>
|
14 |
+
""")
|
15 |
+
labels_verified=_("""
|
|
|
|
|
16 |
<li><span style='background:#CE3C28;opacity:0.7;'></span>High Emergency</li>
|
17 |
<li><span style='background:#ED922E;opacity:0.7;'></span>Medium Emergency</li>
|
18 |
<li><span style='background:#FFCA92;opacity:0.7;'></span>Low Emergency</li>
|
19 |
<li><span style='background:#6EAA25;opacity:0.7;'></span>Done</li>
|
20 |
<li><span style='background:#023020;opacity:0.7;'></span>Partial</li>
|
21 |
<li><span style='background:#FF91E8;opacity:0.7;'></span>Planned</li>
|
22 |
+
""")
|
|
|
23 |
|
24 |
+
template_1 = """
|
25 |
{% macro html(this, kwargs) %}
|
26 |
|
27 |
<!doctype html>
|
|
|
62 |
<ul class='legend-labels'>
|
63 |
|
64 |
"""
|
65 |
+
template_2 = """
|
66 |
</ul>
|
67 |
</div>
|
68 |
</div>
|
|
|
118 |
</style>
|
119 |
{% endmacro %}"""
|
120 |
|
121 |
+
legend_macro = MacroElement()
|
122 |
+
legend_macro._template = Template(template_1 + (labels_unverified_requests if show_unverified else labels_verified) + template_2)
|
123 |
+
return legend_macro
|
|
|
|
|
|
|
124 |
|
125 |
+
__all__ = ["get_legend_macro"]
|
src/markers.py
CHANGED
@@ -18,8 +18,7 @@ ICON_MAPPING = {
|
|
18 |
"طعام وماء": "cutlery", # cutlery (fork and knife) for food & water
|
19 |
"مخاطر (تسرب الغاز، تلف في الخدمات العامة...)": "Warning" # warning triangle for dangers
|
20 |
}
|
21 |
-
|
22 |
-
return ord(x) - ord("A")
|
23 |
|
24 |
def marker_request(request):
|
25 |
# in case of multiple requests we use the first one for the marker's icon
|
@@ -83,7 +82,7 @@ def display_interventions(interventions_df, selected_statuses, map_obj, interven
|
|
83 |
douar_name = row[interventions_df.columns[numcol("M")]]
|
84 |
commune = row[interventions_df.columns[numcol("N")]]
|
85 |
caidat = row[interventions_df.columns[numcol("O")]]
|
86 |
-
row[interventions_df.columns[numcol("P")]]
|
87 |
accessibility_to_douar = row[interventions_df.columns[numcol("Q")]]
|
88 |
type_of_accessibility = row[interventions_df.columns[numcol("R")]]
|
89 |
population = row[interventions_df.columns[numcol("S")]]
|
|
|
18 |
"طعام وماء": "cutlery", # cutlery (fork and knife) for food & water
|
19 |
"مخاطر (تسرب الغاز، تلف في الخدمات العامة...)": "Warning" # warning triangle for dangers
|
20 |
}
|
21 |
+
numcol = lambda x: ord(x) - ord("A")
|
|
|
22 |
|
23 |
def marker_request(request):
|
24 |
# in case of multiple requests we use the first one for the marker's icon
|
|
|
82 |
douar_name = row[interventions_df.columns[numcol("M")]]
|
83 |
commune = row[interventions_df.columns[numcol("N")]]
|
84 |
caidat = row[interventions_df.columns[numcol("O")]]
|
85 |
+
google_maps_link = row[interventions_df.columns[numcol("P")]]
|
86 |
accessibility_to_douar = row[interventions_df.columns[numcol("Q")]]
|
87 |
type_of_accessibility = row[interventions_df.columns[numcol("R")]]
|
88 |
population = row[interventions_df.columns[numcol("S")]]
|
src/text_content.py
CHANGED
@@ -1,6 +1,7 @@
|
|
|
|
1 |
INTRO_TEXT_EN = """
|
2 |
<div style="text-align: left;">
|
3 |
-
Nt3awnou نتعاونو is a non-profit organization and a collaborative platform dedicated to aiding individuals impacted by the recent earthquake in Morocco. Our core mission is to streamline and coordinate timely assistance for everyone affected. How do we achieve this? We assist those in need by allowing them to communicate their location and the specific aid they require, either by completing a form or sending a voice message via WhatsApp to the number <b>
|
4 |
<br>⚠️ Warning : There are still rocks falling down the mountains, making the roads to the affected areas very dangerous. We advise volunteers to donate directly to specialized NGOs.<br>
|
5 |
<br>
|
6 |
<b>✉️ You can contact us via email at </b><a href="mailto:[email protected]">[email protected]</a> or via Instagram <a href="https://www.instagram.com/nt3awnou_morocco/">@nt3awnou_morocco</a> <br>
|
@@ -14,7 +15,7 @@ INTRO_TEXT_EN = """
|
|
14 |
INTRO_TEXT_AR = """
|
15 |
<div style="text-align: right;-webkit-rtl-ordering: logical;">
|
16 |
|
17 |
-
نتعاونو هي منصة تعاونية غير ربحية لمساعدة الأفراد المتضررين من الزلزال الأخير في المغرب. مهمتنا هي تسهيل تقديم المساعدة في الوقت المناسب و بفاعلية و تنظيم لجميع المتضررين. كيفاش؟ كنعاونو الناس لي محتاجين للمساعدة إعلمونا بمكانهم و نوع المساعدة لي محتاجين ليها سواء عن طريق ملأ الاستمارة أو عن طريق إرسال تسجيل صوتي عبر واتساب إلى رقم مخصص<b>
|
18 |
<br> تحذير : نظرا لخطورة الطرقان بسبب الحجر اللي كيطيح من الجبال، ننصح المتطوعين اللي بغاو ي��اعدو المناطق المتضررة يتبرعو عن طريق الجمعيات المختصة⚠️
|
19 |
<br>
|
20 |
<br>
|
@@ -27,10 +28,10 @@ INTRO_TEXT_AR = """
|
|
27 |
</div>
|
28 |
<br>
|
29 |
"""
|
30 |
-
|
31 |
INTRO_TEXT_FR = """
|
32 |
<div style="text-align: left;">
|
33 |
-
Nt3awnou نتعاونو est une plateforme collaborative à but non-lucratif dédiée à l'aide aux personnes touchées par le récent tremblement de terre au Maroc. Notre mission principale est de rationaliser et de coordonner une assistance rapide pour toutes les personnes touchées. Comment y parvenons-nous ? Nous aidons les personnes dans le besoin en leur permettant de communiquer leur localisation et l'aide spécifique dont elles ont besoin, soit en remplissant un formulaire, soit en envoyant un message vocal via WhatsApp à un numéro <b>
|
34 |
<br> ⚠️ Avertissement : Il y a encore des chutes de pierres dans les montagnes, ce qui rend les routes vers les zones touchées très dangereuses. Nous conseillons aux volontaires de faire des dons directement aux associations spécialisées.
|
35 |
<br>
|
36 |
<br>
|
@@ -53,6 +54,7 @@ CREDITS_TEXT = """
|
|
53 |
<hr>
|
54 |
<div style="text-align: center;">
|
55 |
<p>By <b>Moroccans</b> for <b>Moroccans</b> 🤝</p>
|
|
|
56 |
<p>Reach out to us at <a href="mailto:[email protected]">[email protected]</a></p>
|
57 |
"""
|
58 |
|
|
|
1 |
+
|
2 |
INTRO_TEXT_EN = """
|
3 |
<div style="text-align: left;">
|
4 |
+
Nt3awnou نتعاونو is a non-profit organization and a collaborative platform dedicated to aiding individuals impacted by the recent earthquake in Morocco. Our core mission is to streamline and coordinate timely assistance for everyone affected. How do we achieve this? We assist those in need by allowing them to communicate their location and the specific aid they require, either by completing a form or sending a voice message via WhatsApp to the number <b>0652573987</b>. Once we receive and process this information, it can be viewed in our dashboard, which allows NGOs to organize and precisely target their interventions, ensuring swift assistance reaches those in need. Any organization that has taken initiative in a particular area can notify us by completing a dedicated form. This data is also incorporated into the dashboard so that other NGOs can help affected areas that still haven't received help.
|
5 |
<br>⚠️ Warning : There are still rocks falling down the mountains, making the roads to the affected areas very dangerous. We advise volunteers to donate directly to specialized NGOs.<br>
|
6 |
<br>
|
7 |
<b>✉️ You can contact us via email at </b><a href="mailto:[email protected]">[email protected]</a> or via Instagram <a href="https://www.instagram.com/nt3awnou_morocco/">@nt3awnou_morocco</a> <br>
|
|
|
15 |
INTRO_TEXT_AR = """
|
16 |
<div style="text-align: right;-webkit-rtl-ordering: logical;">
|
17 |
|
18 |
+
نتعاونو هي منصة تعاونية غير ربحية لمساعدة الأفراد المتضررين من الزلزال الأخير في المغرب. مهمتنا هي تسهيل تقديم المساعدة في الوقت المناسب و بفاعلية و تنظيم لجميع المتضررين. كيفاش؟ كنعاونو الناس لي محتاجين للمساعدة إعلمونا بمكانهم و نوع المساعدة لي محتاجين ليها سواء عن طريق ملأ الاستمارة أو عن طريق إرسال تسجيل صوتي عبر واتساب إلى رقم مخصص<b>0652573987</b>. بعد معالجة هاد المعلومات، كنجمعوهم فخريطة كتمكن الجمعيات من تنظيم و استهداف تدخلاتهم بدقة باش توصل المساعدة للناس لي محتاجين في وقت أسرع. و كل جمعية قامت باللازم في منطقة معينة تقدر تعلمنا عن طريق ملأ استمارة مخصصة لهاد الأمر. هاد المعلومات كذلك كتضاف للخريطة باش باقي الجمعيات يتاجهو لمناطق أخرى مازال ماوصلاتهم مساعدة.
|
19 |
<br> تحذير : نظرا لخطورة الطرقان بسبب الحجر اللي كيطيح من الجبال، ننصح المتطوعين اللي بغاو ي��اعدو المناطق المتضررة يتبرعو عن طريق الجمعيات المختصة⚠️
|
20 |
<br>
|
21 |
<br>
|
|
|
28 |
</div>
|
29 |
<br>
|
30 |
"""
|
31 |
+
|
32 |
INTRO_TEXT_FR = """
|
33 |
<div style="text-align: left;">
|
34 |
+
Nt3awnou نتعاونو est une plateforme collaborative à but non-lucratif dédiée à l'aide aux personnes touchées par le récent tremblement de terre au Maroc. Notre mission principale est de rationaliser et de coordonner une assistance rapide pour toutes les personnes touchées. Comment y parvenons-nous ? Nous aidons les personnes dans le besoin en leur permettant de communiquer leur localisation et l'aide spécifique dont elles ont besoin, soit en remplissant un formulaire, soit en envoyant un message vocal via WhatsApp à un numéro <b>0652573987</b>. Une fois reçues et traitées, ces informations peuvent être consultées dans notre tableau de bord, qui permet aux associations d'organiser et de cibler précisément leurs interventions, afin que l'aide parvienne rapidement à ceux qui en ont besoin. Toute organisation ayant pris une initiative dans une zone particulière peut nous en informer en remplissant un formulaire prévu à cet effet. Ces données sont également intégrées au tableau de bord afin que d'autres associations puissent aider les zones touchées qui n'ont pas encore reçu d'aide.
|
35 |
<br> ⚠️ Avertissement : Il y a encore des chutes de pierres dans les montagnes, ce qui rend les routes vers les zones touchées très dangereuses. Nous conseillons aux volontaires de faire des dons directement aux associations spécialisées.
|
36 |
<br>
|
37 |
<br>
|
|
|
54 |
<hr>
|
55 |
<div style="text-align: center;">
|
56 |
<p>By <b>Moroccans</b> for <b>Moroccans</b> 🤝</p>
|
57 |
+
<p> Special thanks for <a href="https://www.annarabic.com/">Annarabic</a> and <a href="https://summerschool.morocco.ai/">AI Summer School</a> for their support</p>
|
58 |
<p>Reach out to us at <a href="mailto:[email protected]">[email protected]</a></p>
|
59 |
"""
|
60 |
|