Initial commit

This commit is contained in:
cpinte 2024-06-20 16:46:25 +02:00
commit 6b5a84dfa4
33 changed files with 1535 additions and 0 deletions

55
404.html Normal file
View file

@ -0,0 +1,55 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<title>404</title>
<meta charset="UTF-8">
<style>
*{
transition: all 0.6s;
}
html {
height: 100%;
}
body{
font-family: 'Lato', sans-serif;
color: #888;
margin: 0;
}
#main{
display: table;
width: 100%;
height: 100vh;
text-align: center;
}
.fof{
display: table-cell;
vertical-align: middle;
}
.fof h1{
font-size: 50px;
display: inline-block;
padding-right: 12px;
animation: type .5s alternate infinite;
}
@keyframes type{
from{box-shadow: inset -3px 0px 0px #888;}
to{box-shadow: inset -3px 0px 0px transparent;}
}
</style>
</head>
<body>
<div id="main">
<div class="fof">
<h1>Error 404</h1>
</div>
</div>
</body>
</html>

86
core/core.php Normal file
View file

@ -0,0 +1,86 @@
<?php
require('functions.php');
$parameters = $product . "/" . $year;
$path = $year . "/" . $product;
$resource_url = resource_url();
$canonical_url = current_url($lang, $parameters);
$data_path = "data/wine/" . $path . ".json";
$img = $resource_url."img/" . $path . ".webp";
//JSON
$data = json_decode(file_get_contents($data_path));
$translation = json_decode(file_get_contents("data/translations.json"));
// DATA
$product_name = $data->product;
$parcel = $data->parcel;
$region = $data->region;
$winegrower = $data->winegrower;
$capacity = $data->capacity;
$alcohol = $data->alcohol;
$energy = $data->energy;
$energy_converted = floor(kcal2kj($energy));
$fats = $data->fats;
$saturated_fats = $data->saturated_fats;
$carbohydrates = $data->carbohydrates;
$sugar = $data->sugar;
$proteins = $data->proteins;
$salt = $data->salt;
$color = $data->color;
$composition = $data->composition;
// TRANSLATIONS
$tr_lang = $translation->$lang->lang;
$tr_ingredients = $translation->$lang->ingredients;
$tr_nutrional = $translation->$lang->nutrional;
$tr_capacity = $translation->$lang->capacity;
$tr_energy = $translation->$lang->energy;
$tr_fats = $translation->$lang->fats;
$tr_saturated_fats = $translation->$lang->saturated_fats;
$tr_carbohydrates = $translation->$lang->carbohydrates;
$tr_sugar = $translation->$lang->sugar;
$tr_proteins = $translation->$lang->proteins;
$tr_salt = $translation->$lang->salt;
$tr_color = $translation->$lang->$color;
$tr_title = $translation->$lang->title;
$tr_description = $translation->$lang->description;
// STRING BUILDERS
$name = $product_name . " " . $year;
$details = $tr_color . " / " . $capacity . "L / " . $alcohol . "% vol";
$head_title = $name . " | " . $winegrower . " | " . $tr_title;
$head_description = sprintf($tr_description, $name, $winegrower);
//INGREDIENTS
$ingredients = "";
$nb_components = 0;
foreach ($composition as $component) {
$ingredients .= translate_and_format($translation->$lang, $component);
$sub_components = isset($component->components) ? $component->components : null;
if ($sub_components != null) {
$ingredients .= ' (';
$nb_sub_components = 0;
foreach ($sub_components as $sub_component) {
$ingredients .= translate_and_format($translation->$lang, $sub_component);
$nb_sub_components++;
if($nb_sub_components < sizeof($sub_components)){
$ingredients .= ', ';
}
}
$ingredients .= ')';
}
$nb_components++;
if($nb_components < sizeof($composition)){
$ingredients .= ', ';
}
}
?>

51
core/functions.php Normal file
View file

@ -0,0 +1,51 @@
<?php
function kcal2kj(int $kcal)
{
return $kcal * 4.1868;
}
function is_https(){
return !empty($_SERVER['HTTPS']) &&
(strtolower($_SERVER['HTTPS']) == 'on' ||
$_SERVER['HTTPS'] == '1');
}
function base_url()
{
$protocol = is_https() ? 'https://' : 'http://';
$server = $_SERVER['SERVER_NAME'];
//$port = $_SERVER['SERVER_PORT'] ? ':'.$_SERVER['SERVER_PORT'] : '';
return $protocol.$server;
}
function resource_url()
{
return base_url() . dirname($_SERVER['PHP_SELF'])."/";;
}
function current_url($lang, $parameters){
return resource_url() . $lang . "/" . $parameters;
}
{
$protocol = is_https() ? 'https://' : 'http://';
$server = $_SERVER['SERVER_NAME'];
//$port = $_SERVER['SERVER_PORT'] ? ':'.$_SERVER['SERVER_PORT'] : '';
return $protocol.$server;
}
function translate_and_format($translation, $ingredient)
{
$ingredient_id = $ingredient->id;
$tranlated = $translation->$ingredient_id;
$is_allergen = isset($ingredient->allergen) ? $ingredient->allergen : false;
if ($is_allergen) {
$format = '<strong>%s</strong>';
$tranlated = sprintf($format, $tranlated);
}
return $tranlated;
}
?>

132
core/layout.php Executable file
View file

@ -0,0 +1,132 @@
<!DOCTYPE html>
<html lang="<?= $lang ?>">
<head>
<title><?= $head_title ?></title>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="description" content="<?= $head_description ?>" />
<meta name="msapplication-TileColor" content="#da532c" />
<meta name="theme-color" content="#ffffff" />
<link rel="canonical" href="<?= $canonical_url ?>" />
<!--<link rel="icon" href="images/icons/favicon.ico">
<link rel="icon" type="image/svg+xml" href="images/icons/favicon.svg">
<link rel="icon" type="image/png" href="images/icons/favicon.png">
<link rel="apple-touch-icon" sizes="180x180" href="images/icons/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="images/icons/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="images/icons/favicon-16x16.png">
<link rel="mask-icon" href="images/icons/safari-pinned-tab.svg" color="#5bbad5">-->
<link rel="stylesheet" type="text/css" href="<?= $resource_url ?>css/main.css" />
</head>
<body>
<nav class="mega-menu">
<ul class="mega-menu-main">
<li class="lvl-0">
<span class="lang">
<a href="#"><?= $tr_lang ?></a>
<img alt="lang" src="<?= $resource_url ?>icon/lang.svg" loading="lazy" />
</span>
<ul class="mega-menu-tab">
<li class="lvl-1">
<ul class="lvl-2">
<li><a href="<?= current_url("bg", $parameters) ?>">български език</a></li>
<li><a href="<?= current_url("cs", $parameters) ?>">Česky</a></li>
<li><a href="<?= current_url("da", $parameters) ?>">Dansk</a></li>
<li><a href="<?= current_url("de", $parameters) ?>">Deutsch</a></li>
<li><a href="<?= current_url("el", $parameters) ?>">Ελληνικά</a></li>
<li><a href="<?= current_url("en", $parameters) ?>">English</a></li>
<li><a href="<?= current_url("es", $parameters) ?>">Español</a></li>
</ul>
</li>
<li class="lvl-1">
<ul class="lvl-2">
<li><a href="<?= current_url("et", $parameters) ?>">Eesti keel</a></li>
<li><a href="<?= current_url("fi", $parameters) ?>">Suomen kieli</a></li>
<li><a href="<?= current_url("fr", $parameters) ?>">Français</a></li>
<li><a href="<?= current_url("ga", $parameters) ?>">Gaeilge</a></li>
<li><a href="<?= current_url("hr", $parameters) ?>">Hrvatski</a></li>
<li><a href="<?= current_url("hu", $parameters) ?>">Magyar</a></li>
<li><a href="<?= current_url("it", $parameters) ?>">Italiano</a></li>
</ul>
</li>
<li class="lvl-1">
<ul class="lvl-2">
<li><a href="<?= current_url("lt", $parameters) ?>">Lietuvių kalba</a></li>
<li><a href="<?= current_url("mt", $parameters) ?>">Malti</a></li>
<li><a href="<?= current_url("pl", $parameters) ?>">Polski</a></li>
<li><a href="<?= current_url("ro", $parameters) ?>">Română</a></li>
<li><a href="<?= current_url("sk", $parameters) ?>">Slovenčina</a></li>
<li><a href="<?= current_url("sl", $parameters) ?>">Slovenščina</a></li>
<li><a href="<?= current_url("sv", $parameters) ?>">Svenska</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</nav>
<div class="content">
<section class="main">
<img src="<?= $img ?>" alt="<?= $name ?>" loading="lazy" />
</section>
<section class="details">
<div class="name">
<h1><?= $name ?></h1>
<p><?= $parcel ?></p>
</div>
<h2><?= $winegrower ?></h2>
<h3><?= $details ?></h3>
<p><?= $region ?></p>
</section>
<section class="ingredients">
<h4><?= $tr_ingredients ?></h4>
<p><?= $ingredients ?></p>
</section>
<section class="facts">
<h4><?= $tr_nutrional ?></h4>
<table>
<tr>
<td></td>
<td><?= $tr_capacity ?></td>
</tr>
<tr>
<td><?= $tr_energy ?></td>
<td><?= $energy_converted ?>kJ - <?= $energy ?>kcal</td>
</tr>
<tr>
<td>
<div><?= $tr_fats ?></div>
<div class="marged"><?= $tr_saturated_fats ?></div>
</td>
<td>
<div><?= $fats ?>g</div>
<div><?= $saturated_fats ?>g</div>
</td>
</tr>
<tr>
<td>
<div><?= $tr_carbohydrates ?></div>
<div class="marged"><?= $tr_sugar ?></div>
</td>
<td>
<div><?= $carbohydrates ?>g</div>
<div><?= $sugar ?>g</div>
</td>
</tr>
<tr>
<td><?= $tr_proteins ?></td>
<td><?= $proteins ?>g</td>
</tr>
<tr>
<td><?= $tr_salt ?></td>
<td>&#60;<?= $salt ?>g</td>
</tr>
</table>
</section>
</div>
</body>
</html>

213
css/main.css Normal file
View file

@ -0,0 +1,213 @@
@font-face {
font-family: Prociono;
src: url('../font/Prociono.ttf');
font-display: swap;
}
* {
box-sizing: border-box;
margin: 0;
padding: 0;
font-family: Prociono;
}
.content {
max-width: 900px;
margin: 50px auto;
display: grid;
grid-template-columns: repeat(2, 1fr);
grid-gap: 10px;
grid-auto-rows: minmax(50px, auto);
}
section {
margin-bottom: 30px;
}
h4 {
font-size: 22px;
margin-bottom: 10px;
}
.main {
grid-column: 1;
grid-row: 1;
}
.main > img {
width: 100%;
}
.details {
grid-column: 2;
grid-row: 1;
margin-top: auto;
margin-bottom: 35px;
margin-left: 20px;
letter-spacing: 0.35em;
line-height: 1.6;
}
.name {
margin-bottom: 10px;
}
.ingredients {
grid-column: 1 / 3;
grid-row: 2;
}
.facts {
grid-column: 1 / 3;
grid-row: 3;
}
table {
border-collapse: collapse;
width: 100%;
}
tr:nth-child(odd) {
background-color: ButtonFace;
}
td {
padding-left: 10px;
}
td > .marged {
margin-left: 20px;
}
/*Nav*/
li {
list-style: none;
}
.lang {
display: flex;
align-items: center;
padding-right: 100px;
}
.lang img {
width: 60px;
margin-left: 10px;
}
.mega-menu a {
display: block;
color: grey;
text-decoration: none;
}
.mega-menu a:hover {
background: lightgrey;
}
.mega-menu-main {
display: flex;
position: relative;
background: white;
flex-direction: row-reverse;
}
.lvl-0 > a {
padding: 12px 25px;
}
.lvl-0:hover > ul {
display: flex;
}
.mega-menu-tab {
display: none;
/*display: flex;*/
position: absolute;
top: 100%;
left: 0;
width: 100%;
background: white;
}
.lvl-1 {
flex: 1;
width: 100%;
margin: 0 15px;
}
.lvl-1 h2 {
margin: 0;
padding: 0;
color: white;
}
.lvl-2 {
padding-top: 15px;
}
.lvl-2 a {
padding: 8px 0;
}
@media(max-width:950px) {
.content {
max-width: 700px;
}
.details {
letter-spacing: 0.2em;
}
}
@media(max-width:750px) {
.content {
max-width: 600px;
}
.details {
letter-spacing: 0.1em;
}
}
@media(max-width:650px) {
.content {
max-width: max-content;
margin-left: 20px;
margin-right: 20px;
}
.main {
grid-column: 1 / 3;
grid-row: 2;
text-align: center;
}
.main > img {
width: 75%;
}
.details {
grid-column: 1 / 3;
grid-row: 1;
text-align: center;
letter-spacing: 0.35em;
}
.ingredients {
grid-row: 3;
}
.facts {
grid-column: 1 / 3;
grid-row: 4;
}
}
@media(max-width:500px) {
.details {
letter-spacing: 0.2em;
}
}

548
data/translations.json Normal file
View file

@ -0,0 +1,548 @@
{
"bg":{
"lang": "български език",
"ingredients":"Съставки",
"nutrional":"Хранителни факти",
"capacity":"За 100 g или 100 mL",
"energy":"Енергия",
"fats":"Мазнини",
"saturated_fats":"От тях наситени мазнини",
"carbohydrates":"Въглехидрати",
"sugar":"Със захар",
"proteins":"Протеини",
"salt":"Сол",
"red":"Червено вино",
"white":"Бяло вино",
"title":"Факти за бургундското вино",
"description": "Хранителна информация за Pommard 2023, произведен от Domaine Pinte",
"GR":"Грозде",
"CGR":"концентрирана гроздова мъст",
"AR":"регулатор на киселинността",
"LT":"L-винена киселина",
"GA":"арабска гума",
"PS":"консервант",
"STR":"сулфити",
"SLR":"серен диоксид",
"LZ":"лизозим"
},
"cs":{
"lang": "Česky",
"ingredients":"Složení",
"nutrional":"Výživové údaje",
"capacity":"Na 100 g nebo 100 ml",
"energy":"Energie",
"fats":"Tuk",
"saturated_fats":"Z toho nasycené mastné kyseliny",
"carbohydrates":"Sacharidy",
"sugar":"S cukrem",
"proteins":"Bílkoviny",
"salt":"Sůl",
"red":"Červené víno",
"white":"Bílé víno",
"title":"Burgundské víno Fakta",
"description": "Výživové údaje o Pommardu 2023 z produkce Domaine Pinte",
"GR":"Hrozny",
"CGR":"zahuštěný hroznový mošt",
"AR":"regulátor kyselosti",
"LT":"kyselina L-vinná",
"GA":"arabská guma",
"PS":"konzervační látka",
"STR":"siřičitany",
"SLR":"oxid siřičitý",
"LZ":"lysozym"
},
"da":{
"lang": "Dansk",
"ingredients":"Ingredienser",
"nutrional":"Ernæringsmæssige fakta",
"capacity":"For 100 g eller 100 ml",
"energy":"Energi",
"fats":"Fedt",
"saturated_fats":"Heraf mættede fedtsyrer",
"carbohydrates":"Kulhydrater",
"sugar":"Med sukker",
"proteins":"Proteiner",
"salt":"Salt",
"red":"Rødvin",
"white":"Hvidvin",
"title":"Fakta om Bourgogne-vin",
"description": "Ernæringsmæssige fakta om Pommard 2023 produceret af Domaine Pinte ",
"GR":"Druer",
"CGR":"Koncentreret druemost",
"AR":"surhedsregulerende middel",
"LT":"L-vinsyre",
"GA":"Arabisk gummi",
"PS":"Konserveringsmiddel",
"STR":"Sulfitter",
"SLR":"Sulfitter",
"LZ":"Lysozym"
},
"de":{
"lang": "Deutsch",
"ingredients":"Zutaten",
"nutrional":"Nährwertangaben",
"capacity":"Für 100g oder 100ml",
"energy":"Energie",
"fats":"Fett",
"saturated_fats":"davon gesättigte Fettsäuren",
"carbohydrates":"Kohlenhydrate",
"sugar":"Mit Zucker",
"proteins":"Proteine",
"salt":"Salz",
"red":"Rotwein",
"white":"Weißwein",
"title":"Burgunderwein Fakten",
"description": "Nährwertangaben zum Pommard 2023 der Domaine Pinte",
"GR":"Trauben",
"CGR":"konzentrierter Traubenmost",
"AR":"Säureregulator",
"LT":"L-Weinsäure",
"GA":"Gummiarabikum",
"PS":"Konservierungsmittel",
"STR":"Sulfite",
"SLR":"Schwefeldioxid",
"LZ":"Lysozym"
},
"el":{
"lang": "Ελληνικά",
"ingredients":"Συστατικά",
"nutrional":"Διατροφικά στοιχεία",
"capacity":"Για 100g ή 100ml",
"energy":"Ενέργεια",
"fats":"Λίπος",
"saturated_fats":"εκ των οποίων κορεσμένα",
"carbohydrates":"Υδατάνθρακες",
"sugar":"Με ζάχαρη",
"proteins":"Πρωτεΐνες",
"salt":"Αλάτι",
"red":"Κόκκινο κρασί",
"white":"Λευκό κρασί",
"title":"Στοιχεία για το κρασί της Βουργουνδίας",
"description": "Διατροφικά στοιχεία για το Pommard 2023 που παράγεται από το Domaine Pinte",
"GR":"Σταφύλια",
"CGR":"συμπυκνωμένο γλεύκος σταφυλιών",
"AR":"ρυθμιστής οξύτητας",
"LT":"L- τρυγικό οξύ",
"GA":"αραβικό κόμμι",
"PS":"συντηρητικό",
"STR":"θειώδη",
"SLR":"διοξείδιο του θείου",
"LZ":"λυσοζύμη"
},
"en":{
"lang": "English",
"ingredients":"Ingredients",
"nutrional":"Nutritional facts",
"capacity":"For 100g or 100ml",
"energy":"Energy",
"fats":"Fat",
"saturated_fats":"Of which saturates",
"carbohydrates":"Carbohydrates",
"sugar":"With sugar",
"proteins":"Proteins",
"salt":"Salt",
"red":"Red wine",
"white":"White wine",
"title":"Burgundy Wine Facts",
"description": "Nutritional facts about Pommard 2023 produced by Domaine Pinte",
"GR":"Grapes",
"CGR":"concentrated grape must",
"AR":"acidity regulator",
"LT":"L-tartaric acid",
"GA":"gum arabic",
"PS":"preservative",
"STR":"sulphites",
"SLR":"sulphur dioxide",
"LZ":"lysozyme"
},
"es":{
"lang": "Español",
"ingredients":"Ingredients",
"nutrional":"Nutritional facts",
"capacity":"For 100g or 100ml",
"energy":"Energy",
"fats":"Fat",
"saturated_fats":"Of which saturates",
"carbohydrates":"Carbohydrates",
"sugar":"With sugar",
"proteins":"Proteins",
"salt":"Salt",
"red":"Red wine",
"white":"White wine",
"title":"Burgundy Wine Facts",
"description": "Información nutricional sobre el Pommard 2023 producido por Domaine Pinte ",
"GR":"Uvas",
"CGR":"mosto de uva concentrado",
"AR":"regulador de la acidez",
"LT":"ácido L-tartárico",
"GA":"goma arábiga",
"PS":"conservante",
"STR":"sulfitos",
"SLR":"dióxido de azufre",
"LZ":"lisozima"
},
"et":{
"lang": "Eesti keel",
"ingredients":"Koostisosad",
"nutrional":"Toitumisfaktid",
"capacity":"100g või 100ml kohta",
"energy":"Energia",
"fats":"Rasv",
"saturated_fats":"millest küllastunud rasvhappeid",
"carbohydrates":"Süsivesikud",
"sugar":"Suhkruga",
"proteins":"Valgud",
"salt":"Sool",
"red":"Punane vein",
"white":"Valge vein",
"title":"Burgundia veini faktid",
"description": "Domaine Pinte'i toodetud Pommard 2023 toitumisfaktid ",
"GR":"Viinamarjad",
"CGR":"kontsentreeritud viinamarjavirre",
"AR":"happesuse regulaator",
"LT":"L-viinhape",
"GA":"kummiaraabikumi",
"PS":"säilitusaine",
"STR":"sulfitid",
"SLR":"vääveldioksiid",
"LZ":"lüsosüüm"
},
"fi":{
"lang": "Suomen kieli",
"ingredients":"Ingredientes",
"nutrional":"Información nutricional",
"capacity":"Para 100 g o 100 ml",
"energy":"Energía",
"fats":"Grasas",
"saturated_fats":"De las cuales saturadas",
"carbohydrates":"Hidratos de carbono",
"sugar":"Con azúcar",
"proteins":"Proteínas",
"salt":"Sal",
"red":"Vino tinto",
"white":"Vino blanco",
"title":"Datos sobre el vino de Borgoña",
"description": "Domaine Pinte -viinin tuottaman Pommard 2023 -viinin ravitsemukselliset seikat",
"GR":"Viinirypäleet",
"CGR":"tiivistetty rypäleen puristemehu",
"AR":"happamuuden säätelijä",
"LT":"L-viinihappo",
"GA":"arabikumi",
"PS":"säilöntäaine",
"STR":"sulfiitit",
"SLR":"rikkidioksidi",
"LZ":"lysotsyymi"
},
"fr":{
"lang": "Français",
"ingredients":"Ingrédients",
"nutrional":"Valeurs nutritionnelles",
"capacity":"Pour 100g ou 100 ml",
"energy":"Énergie",
"fats":"Matières grasses",
"saturated_fats":"Dont acides gras saturés",
"carbohydrates":"Glucides",
"sugar":"Dont sucres",
"proteins":"Protéines",
"salt":"Sel",
"red":"Vin rouge",
"white":"Vin Blanc",
"title":"Infos Vins Bourgogne",
"description": "Informations nutritionnelles relatives au %s produit par le %s",
"GR":"Raisins",
"CGR":"moût de raisin concentré",
"AR":"régulateur d'acidité",
"LT":"acide L-tartrique",
"GA":"gomme arabique",
"PS":"conservateur",
"STR":"sulfites",
"SLR":"dioxyde de soufre",
"LZ":"lysozyme"
},
"ga":{
"lang": "Gaeilge",
"ingredients":"Comhábhair",
"nutrional":"Fíricí cothaitheacha",
"capacity":"Le haghaidh 100g nó 100ml",
"energy":"Fuinneamh",
"fats":"Saill",
"saturated_fats":"Mar atá sáitheán",
"carbohydrates":"Carbaihiodráití",
"sugar":"Le siúcra",
"proteins":"Próitéiní",
"salt":"Salann",
"red":"Fíon dearg",
"white":"Fíon bán",
"title":"Fíricí Fíon Burgúine",
"description": "Fíricí cothaitheacha faoi Pommard 2023 arna dtáirgeadh ag Domaine Pinte",
"GR":"Fíonchaora",
"CGR":"úrfhíon fíonchaor tiubhaithe",
"AR":"rialtóir aigéadachta",
"LT":"Aigéad L-tartarach",
"GA":"guma Arabach",
"PS":"leasaitheach",
"STR":"suilfítí",
"SLR":"dé-ocsaíd sulfair",
"LZ":"lísisím"
},
"hr":{
"lang": "Hrvatski",
"ingredients":"Sastojci",
"nutrional":"Nutritivne činjenice",
"capacity":"Za 100g ili 100ml",
"energy":"Energija",
"fats":"Mast",
"saturated_fats":"Od čega zasićene",
"carbohydrates":"Ugljikohidrati",
"sugar":"Sa šećerom",
"proteins":"Proteini",
"salt":"Sol",
"red":"Crno vino",
"white":"Bijelo vino",
"title":"Činjenice o Burgundskom vinu",
"description": "Nutritivne činjenice o Pommardu 2023. proizvođača Domaine Pinte",
"GR":"Grožđe",
"CGR":"koncentrirani mošt od grožđa",
"AR":"regulator kiselosti",
"LT":"L-vinska kiselina",
"GA":"arapska guma",
"PS":"konzervans",
"STR":"sulfiti",
"SLR":"sumporov dioksid",
"LZ":"lizozim"
},
"hu":{
"lang": "Magyar",
"ingredients":"Összetevők",
"nutrional":"Táplálkozási adatok",
"capacity":"100g vagy 100ml",
"energy":"Energia",
"fats":"Zsír",
"saturated_fats":"Ebből telített zsírsavak",
"carbohydrates":"Szénhidrátok",
"sugar":"Cukorral",
"proteins":"Fehérjék",
"salt":"Só",
"red":"Vörösbor",
"white":"Fehérbor",
"title":"Burgundi bor tények",
"description": "A Domaine Pinte által termelt Pommard 2023 tápértékadatai ",
"GR":"Szőlő",
"CGR":"sűrített szőlőmust",
"AR":"savtartalom-szabályozó",
"LT":"L-borkősav",
"GA":"gumiarábikum",
"PS":"tartósítószer",
"STR":"szulfitok",
"SLR":"kén-dioxid",
"LZ":"lizozim"
},
"it":{
"lang": "Italiano",
"ingredients":"Ingredienti",
"nutrional":"Dati nutrizionali",
"capacity":"Per 100g o 100ml",
"energy":"Energia",
"fats":"Grassi",
"saturated_fats":"Di cui saturi",
"carbohydrates":"Carboidrati",
"sugar":"Con zucchero",
"proteins":"Proteine",
"salt":"Il sale",
"red":"Vino rosso",
"white":"Vino bianco",
"title":"Fatti sul vino di Borgogna",
"description": "Informazioni nutrizionali sul Pommard 2023 prodotto da Domaine Pinte",
"GR":"Uva",
"CGR":"mosto d'uva concentrato",
"AR":"regolatore di acidità",
"LT":"acido L-tartarico",
"GA":"gomma arabica",
"PS":"conservante",
"STR":"solfiti",
"SLR":"anidride solforosa",
"LZ":"lisozima"
},
"lt":{
"lang": "Lietuvių kalba",
"ingredients":"Sudedamosios dalys",
"nutrional":"Maistingumo faktai",
"capacity":"100 g arba 100 ml",
"energy":"Energijos",
"fats":"Riebalai",
"saturated_fats":"Iš jų sočiųjų riebalų rūgščių",
"carbohydrates":"Angliavandeniai",
"sugar":"Su cukrumi",
"proteins":"Baltymai",
"salt":"Druska",
"red":"Raudonasis vynas",
"white":"Baltasis vynas",
"title":"Burgundijos vyno faktai",
"description": "Maistingumo faktai apie Domaine Pinte gaminamą Pommard 2023 ",
"GR":"Vynuogės",
"CGR":"koncentruota vynuogių misa",
"AR":"rūgštingumą reguliuojanti medžiaga",
"LT":"L-vyno rūgštis",
"GA":"gumiarabikas",
"PS":"konservantas",
"STR":"sulfitai",
"SLR":"sieros dioksidas",
"LZ":"lizocimas"
},
"mt":{
"lang": "Malti",
"ingredients":"Ingredjenti",
"nutrional":"Fatti nutrittivi",
"capacity":"Għal 100g jew 100ml",
"energy":"Enerġija",
"fats":"Xaħam",
"saturated_fats":"Li minnhom saturati",
"carbohydrates":"Karboidrati",
"sugar":"Biz-zokkor",
"proteins":"Proteini",
"salt":"Melħ",
"red":"Inbid aħmar",
"white":"Inbid abjad",
"title":"Fatti dwar l-Inbid ta' Bourgogne",
"description": "Fatti nutrittivi dwar Pommard 2023 prodott minn Domaine Pinte",
"GR":"Għeneb",
"CGR":"most tal-għeneb ikkonċentrat",
"AR":"regolatur tal-aċidità",
"LT":"L-aċidu tartariku",
"GA":"gomma Għarbija",
"PS":"preservattiv",
"STR":"sulfiti",
"SLR":"dijossidu tal-kubrit",
"LZ":"liżożima"
},
"pl":{
"lang": "Polski",
"ingredients":"Składniki",
"nutrional":"Wartości odżywcze",
"capacity":"Dla 100g lub 100ml",
"energy":"Energia",
"fats":"Tłuszcz",
"saturated_fats":"W tym kwasy tłuszczowe nasycone",
"carbohydrates":"Węglowodany",
"sugar":"Z cukrem",
"proteins":"Białka",
"salt":"Sól",
"red":"Czerwone wino",
"white":"Białe wino",
"title":"Fakty na temat wina burgundzkiego",
"description": "Wartości odżywcze Pommard 2023 produkowanego przez Domaine Pinte",
"GR":"Winogrona",
"CGR":"skoncentrowany moszcz winogronowy",
"AR":"regulator kwasowości",
"LT":"kwas L-winowy",
"GA":"guma arabska",
"PS":"konserwant",
"STR":"siarczyny",
"SLR":"dwutlenek siarki",
"LZ":"lizozym"
},
"ro":{
"lang": "Română",
"ingredients":"Ingrediente",
"nutrional":"Informații nutriționale",
"capacity":"Pentru 100g sau 100ml",
"energy":"Energie",
"fats":"Grăsime",
"saturated_fats":"Din care saturate",
"carbohydrates":"Carbohidrați",
"sugar":"Cu zahăr",
"proteins":"Proteine",
"salt":"Sare",
"red":"Vin roșu",
"white":"Vin alb",
"title":"Vinul de Burgundia fapte",
"description": "Informații nutriționale despre Pommard 2023 produs de Domaine Pinte",
"GR":"Struguri",
"CGR":"must de struguri concentrat",
"AR":"regulator de aciditate",
"LT":"acid L-tartric",
"GA":"gumă arabică",
"PS":"conservant",
"STR":"sulfiți",
"SLR":"dioxid de sulf",
"LZ":"lizozimă"
},
"sk":{
"lang": "Slovenčina",
"ingredients":"Zložky",
"nutrional":"Výživové údaje",
"capacity":"Na 100 g alebo 100 ml",
"energy":"Energia",
"fats":"Tuk",
"saturated_fats":"Z toho nasýtené mastné kyseliny",
"carbohydrates":"Sacharidy",
"sugar":"S cukrom",
"proteins":"Bielkoviny",
"salt":"Soľ",
"red":"Červené víno",
"white":"Biele víno",
"title":"Burgundské víno Fakty",
"description": "Nutričné fakty o Pommard 2023 od Domaine Pinte",
"GR":"Hrozno",
"CGR":"mzahustený hroznový mušt",
"AR":"regulátor kyslosti",
"LT":"kyselina L-vínna",
"GA":"arabská guma",
"PS":"konzervačný prostriedok",
"STR":"siričitany",
"SLR":"oxid siričitý",
"LZ":"lyzozým"
},
"sl":{
"lang": "Slovenščina",
"ingredients":"Sestavine",
"nutrional":"Prehranske vrednosti",
"capacity":"Za 100 g ali 100 ml",
"energy":"Energija",
"fats":"Maščobe",
"saturated_fats":"Od tega nasičene maščobe",
"carbohydrates":"Ogljikovi hidrati",
"sugar":"S sladkorjem",
"proteins":"Beljakovine",
"salt":"Sol",
"red":"Rdeče vino",
"white":"Belo vino",
"title":"Dejstva o burgundskem vinu",
"description": "Prehranska dejstva o Pommardu 2023, ki ga proizvaja Domaine Pinte",
"GR":"Grozdje",
"CGR":"zgoščen grozdni mošt",
"AR":"regulator kislosti",
"LT":"L-vinska kislina",
"GA":"arabski gumi",
"PS":"konzervans",
"STR":"sulfiti",
"SLR":"žveplov dioksid",
"LZ":"lizocim"
},
"sv":{
"lang": "Svenska",
"ingredients":"Ingredienser",
"nutrional":"Näringsvärde",
"capacity":"För 100 g eller 100 ml",
"energy":"Energi",
"fats":"Fett",
"saturated_fats":"Varav mättat fett",
"carbohydrates":"Kolhydrater",
"sugar":"Med socker",
"proteins":"Proteiner",
"salt":"Salt",
"red":"Rött vin",
"white":"Vitt vin",
"title":"Fakta om vin från Bourgogne",
"description": "Näringsfakta om Pommard 2023 producerad av Domaine Pinte ",
"GR":"Druvor",
"CGR":"koncentrerad druvmust",
"AR":"Reglering av surhetsgrad",
"LT":"L-vinsyra",
"GA":"Arabiskt gummi",
"PS":"konserveringsmedel",
"STR":"sulfiter",
"SLR":"svaveldioxid",
"LZ":"lysozym"
}
}

View file

@ -0,0 +1,33 @@
{
"winegrower": "Domaine Pinte",
"product": "Aloxe Corton",
"year": "2023",
"color": "red",
"capacity":0.75,
"region": "Bourgogne / Côte de Beaune",
"alcohol":13,
"energy":67,
"fats":0.0,
"saturated_fats":0.0,
"carbohydrates":3.8,
"sugar":0.9,
"proteins":0.1,
"salt":0.1,
"composition":[
{"id":"GR", "allergen": false},
{"id":"CGR", "allergen": false},
{"id":"AR",
"components":[
{"id":"LT", "allergen": false},
{"id":"GA", "allergen": false}
]
},
{"id":"PS",
"components":[
{"id":"STR", "allergen": true},
{"id":"SLR", "allergen": true},
{"id":"LZ", "allergen": true}
]
}
]
}

View file

@ -0,0 +1,33 @@
{
"winegrower": "Domaine Pinte",
"product": "Bourgogne Aligoté",
"year": "2023",
"color": "white",
"capacity":0.75,
"region": "Bourgogne / Côte de Beaune",
"alcohol":13,
"energy":67,
"fats":0.0,
"saturated_fats":0.0,
"carbohydrates":3.8,
"sugar":0.9,
"proteins":0.1,
"salt":0.1,
"composition":[
{"id":"GR", "allergen": false},
{"id":"CGR", "allergen": false},
{"id":"AR",
"components":[
{"id":"LT", "allergen": false},
{"id":"GA", "allergen": false}
]
},
{"id":"PS",
"components":[
{"id":"STR", "allergen": true},
{"id":"SLR", "allergen": true},
{"id":"LZ", "allergen": true}
]
}
]
}

View file

@ -0,0 +1,34 @@
{
"winegrower": "Domaine Pinte",
"product": "Bourgogne",
"parcel": "Hautes-Côtes de Beaune",
"year": "2023",
"color": "red",
"capacity":0.75,
"region": "Bourgogne / Côte de Beaune",
"alcohol":13,
"energy":67,
"fats":0.0,
"saturated_fats":0.0,
"carbohydrates":3.8,
"sugar":0.9,
"proteins":0.1,
"salt":0.1,
"composition":[
{"id":"GR", "allergen": false},
{"id":"CGR", "allergen": false},
{"id":"AR",
"components":[
{"id":"LT", "allergen": false},
{"id":"GA", "allergen": false}
]
},
{"id":"PS",
"components":[
{"id":"STR", "allergen": true},
{"id":"SLR", "allergen": true},
{"id":"LZ", "allergen": true}
]
}
]
}

View file

@ -0,0 +1,34 @@
{
"winegrower": "Domaine Pinte",
"product": "Bourgogne",
"parcel": "Mont Battois",
"year": "2023",
"color": "white",
"capacity":0.75,
"region": "Bourgogne / Côte de Beaune",
"alcohol":13,
"energy":67,
"fats":0.0,
"saturated_fats":0.0,
"carbohydrates":3.8,
"sugar":0.9,
"proteins":0.1,
"salt":0.1,
"composition":[
{"id":"GR", "allergen": false},
{"id":"CGR", "allergen": false},
{"id":"AR",
"components":[
{"id":"LT", "allergen": false},
{"id":"GA", "allergen": false}
]
},
{"id":"PS",
"components":[
{"id":"STR", "allergen": true},
{"id":"SLR", "allergen": true},
{"id":"LZ", "allergen": true}
]
}
]
}

View file

@ -0,0 +1,33 @@
{
"winegrower": "Domaine Pinte",
"product": "Bourgogne",
"year": "2023",
"color": "red",
"capacity":0.75,
"region": "Bourgogne / Côte de Beaune",
"alcohol":13,
"energy":67,
"fats":0.0,
"saturated_fats":0.0,
"carbohydrates":3.8,
"sugar":0.9,
"proteins":0.1,
"salt":0.1,
"composition":[
{"id":"GR", "allergen": false},
{"id":"CGR", "allergen": false},
{"id":"AR",
"components":[
{"id":"LT", "allergen": false},
{"id":"GA", "allergen": false}
]
},
{"id":"PS",
"components":[
{"id":"STR", "allergen": true},
{"id":"SLR", "allergen": true},
{"id":"LZ", "allergen": true}
]
}
]
}

View file

@ -0,0 +1,33 @@
{
"winegrower": "Domaine Pinte",
"product": "Chorey les Beaune",
"year": "2023",
"color": "red",
"capacity":0.75,
"region": "Bourgogne / Côte de Beaune",
"alcohol":13,
"energy":67,
"fats":0.0,
"saturated_fats":0.0,
"carbohydrates":3.8,
"sugar":0.9,
"proteins":0.1,
"salt":0.1,
"composition":[
{"id":"GR", "allergen": false},
{"id":"CGR", "allergen": false},
{"id":"AR",
"components":[
{"id":"LT", "allergen": false},
{"id":"GA", "allergen": false}
]
},
{"id":"PS",
"components":[
{"id":"STR", "allergen": true},
{"id":"SLR", "allergen": true},
{"id":"LZ", "allergen": true}
]
}
]
}

View file

@ -0,0 +1,33 @@
{
"winegrower": "Domaine Pinte",
"product": "Côte de Beaune Village",
"year": "2023",
"color": "red",
"capacity":0.75,
"region": "Bourgogne / Côte de Beaune",
"alcohol":13,
"energy":67,
"fats":0.0,
"saturated_fats":0.0,
"carbohydrates":3.8,
"sugar":0.9,
"proteins":0.1,
"salt":0.1,
"composition":[
{"id":"GR", "allergen": false},
{"id":"CGR", "allergen": false},
{"id":"AR",
"components":[
{"id":"LT", "allergen": false},
{"id":"GA", "allergen": false}
]
},
{"id":"PS",
"components":[
{"id":"STR", "allergen": true},
{"id":"SLR", "allergen": true},
{"id":"LZ", "allergen": true}
]
}
]
}

View file

@ -0,0 +1,33 @@
{
"winegrower": "Domaine Pinte",
"product": "Pernand Vergelesses",
"year": "2023",
"color": "red",
"capacity":0.75,
"region": "Bourgogne / Côte de Beaune",
"alcohol":13,
"energy":67,
"fats":0.0,
"saturated_fats":0.0,
"carbohydrates":3.8,
"sugar":0.9,
"proteins":0.1,
"salt":0.1,
"composition":[
{"id":"GR", "allergen": false},
{"id":"CGR", "allergen": false},
{"id":"AR",
"components":[
{"id":"LT", "allergen": false},
{"id":"GA", "allergen": false}
]
},
{"id":"PS",
"components":[
{"id":"STR", "allergen": true},
{"id":"SLR", "allergen": true},
{"id":"LZ", "allergen": true}
]
}
]
}

View file

@ -0,0 +1,33 @@
{
"winegrower": "Domaine Pinte",
"product": "Pommard",
"year": "2023",
"color": "red",
"capacity":0.75,
"region": "Bourgogne / Côte de Beaune",
"alcohol":13,
"energy":67,
"fats":0.0,
"saturated_fats":0.0,
"carbohydrates":3.8,
"sugar":0.9,
"proteins":0.1,
"salt":0.1,
"composition":[
{"id":"GR", "allergen": false},
{"id":"CGR", "allergen": false},
{"id":"AR",
"components":[
{"id":"LT", "allergen": false},
{"id":"GA", "allergen": false}
]
},
{"id":"PS",
"components":[
{"id":"STR", "allergen": true},
{"id":"SLR", "allergen": true},
{"id":"LZ", "allergen": true}
]
}
]
}

View file

@ -0,0 +1,34 @@
{
"winegrower": "Domaine Pinte",
"product": "Savigny les Beaune",
"parcel": "1er Cru Les Narbantons",
"year": "2023",
"color": "red",
"capacity":0.75,
"region": "Bourgogne / Côte de Beaune",
"alcohol":13,
"energy":67,
"fats":0.0,
"saturated_fats":0.0,
"carbohydrates":3.8,
"sugar":0.9,
"proteins":0.1,
"salt":0.1,
"composition":[
{"id":"GR", "allergen": false},
{"id":"CGR", "allergen": false},
{"id":"AR",
"components":[
{"id":"LT", "allergen": false},
{"id":"GA", "allergen": false}
]
},
{"id":"PS",
"components":[
{"id":"STR", "allergen": true},
{"id":"SLR", "allergen": true},
{"id":"LZ", "allergen": true}
]
}
]
}

View file

@ -0,0 +1,34 @@
{
"winegrower": "Domaine Pinte",
"product": "Savigny les Beaune",
"parcel": "Les Vermots",
"year": "2023",
"color": "white",
"capacity":0.75,
"region": "Bourgogne / Côte de Beaune",
"alcohol":13,
"energy":67,
"fats":0.0,
"saturated_fats":0.0,
"carbohydrates":3.8,
"sugar":0.9,
"proteins":0.1,
"salt":0.1,
"composition":[
{"id":"GR", "allergen": false},
{"id":"CGR", "allergen": false},
{"id":"AR",
"components":[
{"id":"LT", "allergen": false},
{"id":"GA", "allergen": false}
]
},
{"id":"PS",
"components":[
{"id":"STR", "allergen": true},
{"id":"SLR", "allergen": true},
{"id":"LZ", "allergen": true}
]
}
]
}

View file

@ -0,0 +1,33 @@
{
"winegrower": "Domaine Pinte",
"product": "Savigny les Beaune",
"year": "2023",
"color": "red",
"capacity":0.75,
"region": "Bourgogne / Côte de Beaune",
"alcohol":13,
"energy":67,
"fats":0.0,
"saturated_fats":0.0,
"carbohydrates":3.8,
"sugar":0.9,
"proteins":0.1,
"salt":0.1,
"composition":[
{"id":"GR", "allergen": false},
{"id":"CGR", "allergen": false},
{"id":"AR",
"components":[
{"id":"LT", "allergen": false},
{"id":"GA", "allergen": false}
]
},
{"id":"PS",
"components":[
{"id":"STR", "allergen": true},
{"id":"SLR", "allergen": true},
{"id":"LZ", "allergen": true}
]
}
]
}

BIN
font/Prociono.ttf Normal file

Binary file not shown.

5
icon/lang.svg Normal file
View file

@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path d="M304 416H24c-13.255 0-24-10.745-24-24V120c0-13.255 10.745-24 24-24h280v320zm-120.676-72.622A12 12 0 0 0 194.839 352h22.863c8.22 0 14.007-8.078 11.362-15.861L171.61 167.085a12 12 0 0 0-11.362-8.139h-32.489a12.001 12.001 0 0 0-11.362 8.139L58.942 336.139C56.297 343.922 62.084 352 70.304 352h22.805a12 12 0 0 0 11.535-8.693l9.118-31.807h60.211l9.351 31.878zm-39.051-140.42s4.32 21.061 7.83 33.21l10.8 37.531h-38.07l11.07-37.531c3.51-12.15 7.83-33.21 7.83-33.21h.54zM616 416H336V96h280c13.255 0 24 10.745 24 24v272c0 13.255-10.745 24-24 24zm-36-228h-64v-16c0-6.627-5.373-12-12-12h-16c-6.627 0-12 5.373-12 12v16h-64c-6.627 0-12 5.373-12 12v16c0 6.627 5.373 12 12 12h114.106c-6.263 14.299-16.518 28.972-30.023 43.206-6.56-6.898-12.397-13.91-17.365-20.933-3.639-5.144-10.585-6.675-15.995-3.446l-7.28 4.346-6.498 3.879c-5.956 3.556-7.693 11.421-3.735 17.117 6.065 8.729 13.098 17.336 20.984 25.726-8.122 6.226-16.841 12.244-26.103 17.964-5.521 3.41-7.381 10.556-4.162 16.19l7.941 13.896c3.362 5.883 10.935 7.826 16.706 4.276 12.732-7.831 24.571-16.175 35.443-24.891 10.917 8.761 22.766 17.102 35.396 24.881 5.774 3.556 13.353 1.618 16.717-4.27l7.944-13.903c3.213-5.623 1.37-12.76-4.135-16.171a312.737 312.737 0 0 1-26.06-18.019c21.024-22.425 35.768-46.289 42.713-69.85H580c6.627 0 12-5.373 12-12v-16c0-6.625-5.373-11.998-12-11.998z"/></svg>
<!--
Font Awesome Free 5.2.0 by @fontawesome - https://fontawesome.com
License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
-->

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
img/2023/aloxe-corton.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
img/2023/bourgogne.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

BIN
img/2023/pommard.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

45
index.php Executable file
View file

@ -0,0 +1,45 @@
<?php
//Get parameters
$parameters = $_SERVER['REQUEST_URI'];
$regex = '/^\/winapp\/((\w{2})\/)?([\w-]+)\/(\d{4})\/?$/m';
preg_match_all($regex, $parameters, $matches, PREG_SET_ORDER, 0);
$isOK = true;
if (sizeof($matches) === 1 && sizeof($matches[0]) === 5) {
//Init parameters
$lang = $matches[0][2];
$product = $matches[0][3];
$year = $matches[0][4];
$acceptLang = ['bg', 'cs', 'da', 'de', 'el', 'en', 'es', 'et', 'fi', 'fr',
'ga', 'hr', 'hu', 'it', 'lt', 'lv', 'mt', 'pl', 'ro', 'sk',
'sl', 'sv'];
if ($lang != null) {
$isOK = in_array($lang, $acceptLang);
} else {
$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
}
if ($isOK) {
require 'core/core.php';
$lang = in_array($lang, $acceptLang) ? $lang : 'en';
$isOK = file_exists(dirname(__FILE__) . "/" . $data_path);
}
} else {
$isOK = false;
}
if (!$isOK) {
http_response_code(404);
require '404.html';
} else {
require 'core/layout.php';
}
?>