Add translation for all machine view fields.

This commit is contained in:
2020-05-23 05:01:17 +01:00
parent b3414bde1d
commit 269609826f
4 changed files with 595 additions and 109 deletions

View File

@@ -1,3 +1,5 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation"> <wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:Boolean x:Key="/Default/UserDictionary/Words/=Marechai/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/UserDictionary/Words/=Marechai/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Portillo/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=SIMD/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=videogame/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary> <s:Boolean x:Key="/Default/UserDictionary/Words/=videogame/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>

View File

@@ -2,7 +2,7 @@
<Project Sdk="Microsoft.NET.Sdk.Web"> <Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup> <PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework> <TargetFramework>netcoreapp3.1</TargetFramework>
<Version>3.0.99.971</Version> <Version>3.0.99.973</Version>
<Company>Canary Islands Computer Museum</Company> <Company>Canary Islands Computer Museum</Company>
<Copyright>Copyright © 2003-2020 Natalia Portillo</Copyright> <Copyright>Copyright © 2003-2020 Natalia Portillo</Copyright>
<Product>Canary Islands Computer Museum Website</Product> <Product>Canary Islands Computer Museum Website</Product>

View File

@@ -32,7 +32,6 @@
} }
@page "/machine/{Id:int}" @page "/machine/{Id:int}"
@using Marechai.Database @using Marechai.Database
@inherits OwningComponentBase<MachinesService> @inherits OwningComponentBase<MachinesService>
@inject IStringLocalizer<MachinesService> L @inject IStringLocalizer<MachinesService> L
@@ -73,7 +72,7 @@
_machine.Introduced.Value.Year == 1000) _machine.Introduced.Value.Year == 1000)
{ {
<b> <b>
<div style="text-align: center;">PROTOTYPE</div> <div style="text-align: center;">@L["PROTOTYPE"]</div>
</b> </b>
} }
<b> <b>
@@ -87,7 +86,7 @@
<tr> <tr>
<th scope=row width="37%"> <th scope=row width="37%">
<div align=right> <div align=right>
Introduction date @L["Introduction date"]
</div> </div>
</th> </th>
<td width="63%"> <td width="63%">
@@ -101,7 +100,7 @@
<tr> <tr>
<th scope=row width="37%"> <th scope=row width="37%">
<div align=right> <div align=right>
Family @L["Family"]
</div> </div>
</th> </th>
<td width="63%"> <td width="63%">
@@ -115,7 +114,7 @@
<tr> <tr>
<th scope=row width="37%"> <th scope=row width="37%">
<div align=right> <div align=right>
Model @L["Model"]
</div> </div>
</th> </th>
<td width="63%"> <td width="63%">
@@ -128,7 +127,7 @@
<tr> <tr>
<th scope=row> <th scope=row>
<div align=right> <div align=right>
Processors @L["Processors"]
</div> </div>
</th> </th>
<td> <td>
@@ -140,14 +139,14 @@
<td> <td>
@if (processor.Speed > 0) @if (processor.Speed > 0)
{ {
@(processor.GprSize > 0 ? $"{processor.Name} @ {processor.Speed}Mhz ({processor.GprSize} bits)" : $"{processor.Name} @ {processor.Speed}Mhz") @(processor.GprSize > 0 ? string.Format(L["{0} @ {1}MHz ({2} bits)"], processor.Name, processor.Speed, processor.GprSize) : string.Format(L["{0} @ {1}MHz"], processor.Name, processor.Speed))
} }
else else
{ {
@($"{processor.Name}") @($"{processor.Name}")
} }
<a aria-controls="@($"cpuInfo{counter}")" aria-expanded="false" class="btn btn-link" data-toggle="collapse" href="@($"#cpuInfo{counter}")"> <a aria-controls="@($"cpuInfo{counter}")" aria-expanded="false" class="btn btn-link" data-toggle="collapse" href="@($"#cpuInfo{counter}")">
+info @L["+info"]
</a> </a>
<div class="collapse" id="@($"cpuInfo{counter}")"> <div class="collapse" id="@($"cpuInfo{counter}")">
<div class="card card-body"> <div class="card card-body">
@@ -156,12 +155,12 @@
processor.ModelCode != processor.Name) processor.ModelCode != processor.Name)
{ {
<tr> <tr>
<td>Model</td> <td>@L["Model"]</td>
<td>@processor.ModelCode</td> <td>@processor.ModelCode</td>
</tr> </tr>
} }
<tr> <tr>
<td>Manufacturer</td> <td>@L["Manufacturer"]</td>
<td> <td>
<a href="/processors/company/@processor.CompanyId"> <a href="/processors/company/@processor.CompanyId">
@processor.CompanyName</a> @processor.CompanyName</a>
@@ -170,22 +169,22 @@
@if (processor.Introduced != null) @if (processor.Introduced != null)
{ {
<tr> <tr>
<td>Introduction date</td> <td>@L["Introduction date"]</td>
<td>@($"{processor.Introduced:yyyy}")</td> <td>@($"{processor.Introduced:yyyy}")</td>
</tr> </tr>
} }
@if (processor.InstructionSet != null) @if (processor.InstructionSet != null)
{ {
<tr> <tr>
<td>Instruction set</td> <td>@L["Instruction set"]</td>
<td>@processor.InstructionSet</td> <td>@processor.InstructionSet</td>
</tr> </tr>
} }
@if (processor.Speed > 0) @if (processor.Speed > 0)
{ {
<tr> <tr>
<td>Nominal speed</td> <td>@L["Nominal speed"]</td>
<td>@processor.Speed MHz</td> <td>@string.Format(L["{0} MHz"], processor.Speed)</td>
</tr> </tr>
} }
@if (processor.Gprs > 0 || @if (processor.Gprs > 0 ||
@@ -200,16 +199,30 @@
{ {
<tr> <tr>
<td> <td>
@processor.Gprs general purpose registers of @processor.GprSize bits
@if (processor.FprSize > 0 && @if (processor.FprSize > 0 &&
processor.Fprs == 0) processor.Fprs == 0 &&
{ processor.SimdSize > 0 &&
@($", that can be used as floating point registers of {processor.FprSize}")
}
@if (processor.SimdSize > 0 &&
processor.SimdRegisters == 0) processor.SimdRegisters == 0)
{ {
@($", that can be used as SIMD registers of {processor.FprSize}") @(string.Format(L["{0} general purpose registers of {1} bits that can be used as floating point registers of {2} bits and SIMD registers of {3} bits."],
processor.Gprs, processor.GprSize, processor.FprSize, processor.SimdSize))
}
else if (processor.FprSize > 0 &&
processor.Fprs == 0)
{
@(string.Format(L["{0} general purpose registers of {1} bits that can be used as floating point registers of {2} bits."],
processor.Gprs, processor.GprSize, processor.FprSize))
}
else if (processor.FprSize == 0 &&
processor.SimdSize > 0 &&
processor.SimdRegisters == 0)
{
@(string.Format(L["{0} general purpose registers of {1} bits that can be used as SIMD registers of {2} bits."],
processor.Gprs, processor.GprSize, processor.SimdSize))
}
else
{
@(string.Format(L["{0} general purpose registers of {1} bits."], processor.Gprs, processor.GprSize))
} }
</td> </td>
</tr> </tr>
@@ -218,11 +231,16 @@
{ {
<tr> <tr>
<td> <td>
@processor.Fprs floating-point registers of @processor.FprSize bits
@if (processor.SimdSize > 0 && @if (processor.SimdSize > 0 &&
processor.SimdRegisters == 0) processor.SimdRegisters == 0)
{ {
@($", that can be used as SIMD registers of {processor.FprSize}") @(string.Format(L["{0} floating point registers of {1} bits that can be used as SIMD registers of {2} bits."],
processor.Fprs, processor.FprSize, processor.SimdSize))
}
else
{
@(string.Format(L["{0} floating point registers of {1} bits."],
processor.Fprs, processor.FprSize))
} }
</td> </td>
</tr> </tr>
@@ -231,8 +249,9 @@
{ {
<tr> <tr>
<td> <td>
@processor.SimdRegisters <abbr title="@L["Single instruction, multiple data"]">
<abbr title="Single instruction, multiple data">SIMD</abbr>registers of @processor.SimdSize bits @string.Format(L["{0} SIMD registers of {1} bits."], processor.SimdRegisters, processor.SimdSize)
</abbr>
</td> </td>
</tr> </tr>
} }
@@ -243,22 +262,18 @@
@if (processor.Cores > 1) @if (processor.Cores > 1)
{ {
<tr> <tr>
<td>Multi-core</td> <td>@L["Multi-core"]</td>
<td>@processor.Cores cores</td> <td>@string.Format(L["{0} cores."], processor.Cores)</td>
</tr> </tr>
} }
@if (processor.ThreadsPerCore > 1) @if (processor.ThreadsPerCore > 1)
{ {
<tr> <tr>
<td> <td>
<abbr title="Simultaneous multithreading">SMT</abbr> <abbr title="@L["Simultaneous multithreading"]">SMT</abbr>
</td> </td>
<td> <td>
@processor.ThreadsPerCore threads @string.Format(processor.Cores > 1 ? L["{0} threads per core."] : L["{0} threads."], processor.ThreadsPerCore)
@if (processor.Cores > 1)
{
@(" per core")
}
</td> </td>
</tr> </tr>
} }
@@ -266,14 +281,14 @@
processor.AddrBus > 0) processor.AddrBus > 0)
{ {
<tr> <tr>
<td>Bus</td> <td>@L["Bus"]</td>
<td> <td>
<table> <table>
@if (processor.DataBus > 0) @if (processor.DataBus > 0)
{ {
<tr> <tr>
<td> <td>
@processor.DataBus-bit data @string.Format(L["{0}-bit data."], processor.DataBus)
</td> </td>
</tr> </tr>
} }
@@ -281,7 +296,7 @@
{ {
<tr> <tr>
<td> <td>
@processor.AddrBus-bit address @string.Format(L["{0}-bit address."], processor.AddrBus)
</td> </td>
</tr> </tr>
} }
@@ -296,14 +311,14 @@
processor.L2 > 0) processor.L2 > 0)
{ {
<tr> <tr>
<td>Cache</td> <td>@L["Cache"]</td>
<td> <td>
<table> <table>
@if (processor.L1Instruction > 0) @if (processor.L1Instruction > 0)
{ {
<tr> <tr>
<td> <td>
@(processor.L1Data < 0 ? $"{processor.L1Instruction}KiB combined instruction-data L1" : $"{processor.L1Instruction}KiB instruction L1") @string.Format(processor.L1Data < 0 ? L["{0}KiB combined instruction-data L1"] : L["{0}KiB instruction L1"], processor.L1Instruction)
</td> </td>
</tr> </tr>
} }
@@ -311,7 +326,7 @@
{ {
<tr> <tr>
<td> <td>
@($"{processor.L1Data}KiB data L1") @string.Format(L["{0}KiB data L1"], processor.L1Data)
</td> </td>
</tr> </tr>
} }
@@ -319,7 +334,7 @@
{ {
<tr> <tr>
<td> <td>
@($"{processor.L2}KiB L2") @string.Format(L["{0}KiB L2"], processor.L2)
</td> </td>
</tr> </tr>
} }
@@ -327,7 +342,7 @@
{ {
<tr> <tr>
<td> <td>
@($"{processor.L3}KiB L3") @string.Format(L["{0}KiB L3"], processor.L3)
</td> </td>
</tr> </tr>
} }
@@ -338,7 +353,7 @@
@if (processor.Package != null) @if (processor.Package != null)
{ {
<tr> <tr>
<td>Package</td> <td>@L["Package"]</td>
<td>@processor.Package</td> <td>@processor.Package</td>
</tr> </tr>
} }
@@ -346,18 +361,30 @@
processor.ProcessNm > 0) processor.ProcessNm > 0)
{ {
<tr> <tr>
<td>Manufacturing process</td> <td>@L["Manufacturing process"]</td>
<td> <td>
@if (processor.Process != null && @if (processor.Process != null &&
processor.ProcessNm > 0) processor.ProcessNm > 0)
{ {
@processor.Process if (processor.ProcessNm > 100)
@("@") {
@(processor.ProcessNm > 100 ? $"{processor.ProcessNm / 100}µm" : $"{processor.ProcessNm}nm") @(string.Format(L["{0} @ {1}µm"], processor.Process, processor.ProcessNm / 100))
}
else
{
@(string.Format(L["{0} @ {1}nm"], processor.Process, processor.ProcessNm))
}
} }
else if (processor.ProcessNm > 0) else if (processor.ProcessNm > 0)
{ {
@(processor.ProcessNm > 100 ? $"{processor.ProcessNm / 100}µm" : $"{processor.ProcessNm}nm") if (processor.ProcessNm > 100)
{
@(string.Format(L["{0}µm"], processor.ProcessNm / 100))
}
else
{
@(string.Format(L["{0}nm"], processor.ProcessNm))
}
} }
else else
{ {
@@ -369,14 +396,14 @@
@if (processor.DieSize > 0) @if (processor.DieSize > 0)
{ {
<tr> <tr>
<td>Die size</td> <td>@L["Die size"]</td>
<td>@processor.DieSize mm&sup2;</td> <td>@string.Format(L["{0} mm&sup2;"], processor.DieSize)</td>
</tr> </tr>
} }
@if (processor.Transistors > 0) @if (processor.Transistors > 0)
{ {
<tr> <tr>
<td>Transistors</td> <td>@L["Transistors"]</td>
<td>@processor.Transistors</td> <td>@processor.Transistors</td>
</tr> </tr>
} }
@@ -398,7 +425,7 @@
<tr> <tr>
<th scope=row> <th scope=row>
<div align=right> <div align=right>
Memory @L["Memory"]
</div> </div>
</th> </th>
<td> <td>
@@ -408,49 +435,49 @@
string memValue; string memValue;
if (memory.Size > 1073741824) if (memory.Size > 1073741824)
{ {
memValue = $"{memory.Size / 1073741824} GiB"; memValue = string.Format(L["{0} GiB"], memory.Size / 1073741824);
} }
else if (memory.Size > 1048576) else if (memory.Size > 1048576)
{ {
memValue = $"{memory.Size / 1048576} MiB"; memValue = string.Format(L["{0} MiB"], memory.Size / 1048576);
} }
else if (memory.Size > 1024) else if (memory.Size > 1024)
{ {
memValue = $"{memory.Size / 1024} KiB"; memValue = string.Format(L["{0} KiB"], memory.Size / 1024);
} }
else if (memory.Size > 0) else if (memory.Size > 0)
{ {
memValue = $"{memory.Size} bytes"; memValue = string.Format(L["{0} bytes"], memory.Size);
} }
else else
{ {
memValue = "Unknown size"; memValue = L["Unknown size"];
} }
string speedValue; string speedValue;
if (memory.Speed > 1000000000) if (memory.Speed > 1000000000)
{ {
speedValue = $"{memory.Speed / 1000000000} GHz"; speedValue = string.Format(L["{0} GHz"], memory.Speed / 1000000000);
} }
else if (memory.Speed > 1000000) else if (memory.Speed > 1000000)
{ {
speedValue = $"{memory.Speed / 1000000} MHz"; speedValue = string.Format(L["{0} MHz"], memory.Speed / 1000000);
} }
else if (memory.Speed > 1000) else if (memory.Speed > 1000)
{ {
speedValue = $"{memory.Speed / 1000} KHz"; speedValue = string.Format(L["{0} KHz"], memory.Speed / 1000);
} }
else if (memory.Speed > 0) else if (memory.Speed > 0)
{ {
speedValue = $"{memory.Speed} Hz"; speedValue = string.Format(L["{0} Hz"], memory.Speed);
} }
else else
{ {
speedValue = "unknown speed"; speedValue = L["unknown speed"];
} }
<tr> <tr>
<td>@memValue of @memory.Usage memory (@memory.Type at @speedValue)</td> <td>@string.Format(L["{0} of {1} memory ({2} at {3})"], memValue, memory.Usage, memory.Type, speedValue)</td>
</tr> </tr>
} }
</table> </table>
@@ -462,7 +489,7 @@
<tr> <tr>
<th scope=row> <th scope=row>
<div align=right> <div align=right>
Graphics processing units @L["Graphics processing units"]
</div> </div>
</th> </th>
<td> <td>
@@ -473,14 +500,13 @@
if (gpu.Id == -2) if (gpu.Id == -2)
{ {
<td> <td>
Framebuffer @L["Framebuffer"]
<a aria-controls="@($"gpuInfo{counter}")" aria-expanded="false" class="btn btn-link" data-toggle="collapse" href="@($"#gpuInfo{counter}")"> <a aria-controls="@($"gpuInfo{counter}")" aria-expanded="false" class="btn btn-link" data-toggle="collapse" href="@($"#gpuInfo{counter}")">
+info @L["+info"]
</a> </a>
<div class="collapse" id="@($"gpuInfo{counter}")"> <div class="collapse" id="@($"gpuInfo{counter}")">
<div class="card card-body"> <div class="card card-body">
This computer directly draws pixels from software to a memory region that's converted to video output by a @L["This machine directly draws pixels from software to a memory region that's converted to video output by a DAC or similar without using any specific graphics processing unit."]
<abbr title="Digital to Analog Converter">DAC</abbr> or similar without using any specific graphics processing unit.
</div> </div>
</div> </div>
</td> </td>
@@ -490,7 +516,7 @@
<td> <td>
@($"{gpu.Name}") @($"{gpu.Name}")
<a aria-controls="@($"gpuInfo{counter}")" aria-expanded="false" class="btn btn-link" data-toggle="collapse" href="@($"#gpuInfo{counter}")"> <a aria-controls="@($"gpuInfo{counter}")" aria-expanded="false" class="btn btn-link" data-toggle="collapse" href="@($"#gpuInfo{counter}")">
+info @L["+info"]
</a> </a>
<div class="collapse" id="@($"gpuInfo{counter}")"> <div class="collapse" id="@($"gpuInfo{counter}")">
<div class="card card-body"> <div class="card card-body">
@@ -499,12 +525,12 @@
gpu.ModelCode != gpu.Name) gpu.ModelCode != gpu.Name)
{ {
<tr> <tr>
<td>Model</td> <td>@L["Model"]</td>
<td>@gpu.ModelCode</td> <td>@gpu.ModelCode</td>
</tr> </tr>
} }
<tr> <tr>
<td>Manufacturer</td> <td>@L["Manufacturer"]</td>
<td> <td>
<a href="/gpus/company/@gpu.CompanyId"> <a href="/gpus/company/@gpu.CompanyId">
@gpu.Company</a> @gpu.Company</a>
@@ -513,14 +539,14 @@
@if (gpu.Introduced != null) @if (gpu.Introduced != null)
{ {
<tr> <tr>
<td>Introduction date</td> <td>@L["Introduction date"]</td>
<td>@($"{gpu.Introduced:yyyy}")</td> <td>@($"{gpu.Introduced:yyyy}")</td>
</tr> </tr>
} }
@if (gpu.Package != null) @if (gpu.Package != null)
{ {
<tr> <tr>
<td>Package</td> <td>@L["Package"]</td>
<td>@gpu.Package</td> <td>@gpu.Package</td>
</tr> </tr>
} }
@@ -528,18 +554,30 @@
gpu.ProcessNm > 0) gpu.ProcessNm > 0)
{ {
<tr> <tr>
<td>Manufacturing process</td> <td>@L["Manufacturing process"]</td>
<td> <td>
@if (gpu.Process != null && @if (gpu.Process != null &&
gpu.ProcessNm > 0) gpu.ProcessNm > 0)
{ {
@gpu.Process if (gpu.ProcessNm > 100)
@("@") {
@(gpu.ProcessNm > 100 ? $"{gpu.ProcessNm / 100}µm" : $"{gpu.ProcessNm}nm") @(string.Format(L["{0} @ {1}µm"], gpu.Process, gpu.ProcessNm / 100))
}
else
{
@(string.Format(L["{0} @ {1}nm"], gpu.Process, gpu.ProcessNm))
}
} }
else if (gpu.ProcessNm > 0) else if (gpu.ProcessNm > 0)
{ {
@(gpu.ProcessNm > 100 ? $"{gpu.ProcessNm / 100}µm" : $"{gpu.ProcessNm}nm") if (gpu.ProcessNm > 100)
{
@(string.Format(L["{0}µm"], gpu.ProcessNm / 100))
}
else
{
@(string.Format(L["{0}nm"], gpu.ProcessNm))
}
} }
else else
{ {
@@ -551,14 +589,14 @@
@if (gpu.DieSize > 0) @if (gpu.DieSize > 0)
{ {
<tr> <tr>
<td>Die size</td> <td>@L["Die size"]</td>
<td>@gpu.DieSize mm&sup2;</td> <td>@string.Format(L["{0} mm&sup2;"], gpu.DieSize)</td>
</tr> </tr>
} }
@if (gpu.Transistors > 0) @if (gpu.Transistors > 0)
{ {
<tr> <tr>
<td>Transistors</td> <td>@L["Transistors"]</td>
<td>@gpu.Transistors</td> <td>@gpu.Transistors</td>
</tr> </tr>
} }
@@ -578,7 +616,7 @@
<tr> <tr>
<th scope=row> <th scope=row>
<div align=right> <div align=right>
Sound synthetizers @L["Sound synthetizers"]
</div> </div>
</th> </th>
<td> <td>
@@ -590,14 +628,13 @@
@if (sound.Id == -2) @if (sound.Id == -2)
{ {
<td> <td>
Software @L["Software"]
<a aria-controls="@($"synthInfo{counter}")" aria-expanded="false" class="btn btn-link" data-toggle="collapse" href="@($"#synthInfo{counter}")"> <a aria-controls="@($"synthInfo{counter}")" aria-expanded="false" class="btn btn-link" data-toggle="collapse" href="@($"#synthInfo{counter}")">
+info @L["+info"]
</a> </a>
<div class="collapse" id="@($"synthInfo{counter}")"> <div class="collapse" id="@($"synthInfo{counter}")">
<div class="card card-body"> <div class="card card-body">
This computer directly sends data to a @L["This machine directly sends data to a DAC or similar connected to the audio output."]
<abbr title="Digital to Analog Converter">DAC</abbr> or similar connected to the audio output.
</div> </div>
</div> </div>
</td> </td>
@@ -607,7 +644,7 @@
<td> <td>
@($"{sound.Name}") @($"{sound.Name}")
<a aria-controls="@($"synthInfo{counter}")" aria-expanded="false" class="btn btn-link" data-toggle="collapse" href="@($"#synthInfo{counter}")"> <a aria-controls="@($"synthInfo{counter}")" aria-expanded="false" class="btn btn-link" data-toggle="collapse" href="@($"#synthInfo{counter}")">
+info @L["+info"]
</a> </a>
<div class="collapse" id="@($"synthInfo{counter}")"> <div class="collapse" id="@($"synthInfo{counter}")">
<div class="card card-body"> <div class="card card-body">
@@ -616,14 +653,14 @@
sound.ModelCode != sound.Name) sound.ModelCode != sound.Name)
{ {
<tr> <tr>
<td>Model</td> <td>@L["Model"]</td>
<td>@sound.ModelCode</td> <td>@sound.ModelCode</td>
</tr> </tr>
} }
@if (sound.CompanyId != null) @if (sound.CompanyId != null)
{ {
<tr> <tr>
<td>Manufacturer</td> <td>@L["Manufacturer"]</td>
<td> <td>
<a href="/soundsynths/company/@sound.CompanyId"> <a href="/soundsynths/company/@sound.CompanyId">
@sound.CompanyName</a> @sound.CompanyName</a>
@@ -633,7 +670,7 @@
@if (sound.Introduced != null) @if (sound.Introduced != null)
{ {
<tr> <tr>
<td>Introduction date</td> <td>@L["Introduction date"]</td>
<td>@($"{sound.Introduced:yyyy}")</td> <td>@($"{sound.Introduced:yyyy}")</td>
</tr> </tr>
} }
@@ -642,25 +679,25 @@
sound.WhiteNoise != 0) sound.WhiteNoise != 0)
{ {
<tr> <tr>
<td>Generators</td> <td>@L["Generators"]</td>
<td> <td>
<table> <table>
@if (sound.Voices != 0) @if (sound.Voices != 0)
{ {
<tr> <tr>
<td>@sound.Voices voices</td> <td>@string.Format(L["{0} voices"], sound.Voices)</td>
</tr> </tr>
} }
@if (sound.SquareWave != 0) @if (sound.SquareWave != 0)
{ {
<tr> <tr>
<td>@sound.SquareWave square wave</td> <td>@string.Format(L["{0} square wave"], sound.SquareWave)</td>
</tr> </tr>
} }
@if (sound.WhiteNoise != 0) @if (sound.WhiteNoise != 0)
{ {
<tr> <tr>
<td>@sound.WhiteNoise white noise</td> <td>@string.Format(L["{0} white noise"], sound.WhiteNoise)</td>
</tr> </tr>
} }
</table> </table>
@@ -671,26 +708,44 @@
sound.Frequency > 0) sound.Frequency > 0)
{ {
<tr> <tr>
<td>Sample rate</td> <td>@L["Sample rate"]</td>
<td> <td>
<table> <table>
@if (sound.Depth != 0 && @if (sound.Depth != 0 &&
sound.Frequency > 0) sound.Frequency > 0)
{ {
<tr> <tr>
<td>@sound.Depth bits at @(sound.Frequency > 1000 ? $"{sound.Frequency / 1000}KHz" : $"{sound.Frequency}Hz")</td> <td>
@if (sound.Frequency > 1000)
{
@string.Format(L["{0} bits at {1} KHz"], sound.Depth, sound.Frequency / 1000)
}
else
{
@string.Format(L["{0} bits at {1} Hz"], sound.Depth, sound.Frequency)
}
</td>
</tr> </tr>
} }
else if (sound.Depth != 0) else if (sound.Depth != 0)
{ {
<tr> <tr>
<td>@sound.Depth bits</td> <td>@string.Format(L["{0} bits"], sound.Depth)</td>
</tr> </tr>
} }
else else
{ {
<tr> <tr>
<td>@(sound.Frequency > 1000 ? $"{sound.Frequency / 1000}KHz" : $"{sound.Frequency}Hz")</td> <td>
@if (sound.Frequency > 1000)
{
@string.Format(L["{0} KHz"], sound.Frequency / 1000)
}
else
{
@string.Format(L["{0} Hz"], sound.Frequency)
}
</td>
</tr> </tr>
} }
</table> </table>
@@ -700,7 +755,7 @@
@if (sound.Type != 0) @if (sound.Type != 0)
{ {
<tr> <tr>
<td>Synthetizer type</td> <td>@L["Synthesizer type"]</td>
<td> <td>
@sound.Type @sound.Type
</td> </td>
@@ -723,7 +778,7 @@
<tr> <tr>
<th scope=row> <th scope=row>
<div align=right> <div align=right>
Storage @L["Storage"]
</div> </div>
</th> </th>
<td> <td>
@@ -736,25 +791,25 @@
{ {
if (storage.Type == StorageType.CompactCassette) if (storage.Type == StorageType.CompactCassette)
{ {
capString = $"{storage.Capacity} bps"; capString = string.Format(L["{0} bps"], storage.Capacity);
} }
else else
{ {
if (storage.Capacity > 1073741824) if (storage.Capacity > 1073741824)
{ {
capString = $"{storage.Capacity / 1073741824} GiB"; capString = string.Format(L["{0} GiB"], storage.Capacity / 1073741824);
} }
else if (storage.Capacity > 1048576) else if (storage.Capacity > 1048576)
{ {
capString = $"{storage.Capacity / 1048576} MiB"; capString = string.Format(L["{0} MiB"], storage.Capacity / 1048576);
} }
else if (storage.Capacity > 1024) else if (storage.Capacity > 1024)
{ {
capString = $"{storage.Capacity / 1024} KiB"; capString = string.Format(L["{0} KiB"], storage.Capacity / 1024);
} }
else if (storage.Capacity > 0) else if (storage.Capacity > 0)
{ {
capString = $"{storage.Capacity} bytes"; capString = string.Format(L["{0} bytes"], storage.Capacity);
} }
else else
{ {
@@ -768,17 +823,17 @@
{ {
if (storage.Type == StorageType.Empty) if (storage.Type == StorageType.Empty)
{ {
<td>Available @storage.Interface interface.</td> <td>@string.Format(L["Available {0} interface."], storage.Interface)</td>
} }
else else
{ {
if (capString != null) if (capString != null)
{ {
<td>@storage.Type connected thru a @storage.Interface interface with a nominal capacity of @capString</td> <td>@string.Format(L["{0} connected thru a {1} interface with a nominal capacity of {2}"], storage.Type, storage.Interface, capString)</td>
} }
else else
{ {
<td>@storage.Type connected thru a @storage.Interface interface</td> <td>@string.Format(L["{0} connected thru a {1} interface"], storage.Type, storage.Interface)</td>
} }
} }
} }
@@ -786,7 +841,7 @@
{ {
if (capString != null) if (capString != null)
{ {
<td>@storage.Type with a nominal capacity of @capString</td> <td>@string.Format(L["{0} with a nominal capacity of {1}"], storage.Type, capString)</td>
} }
else else
{ {

View File

@@ -0,0 +1,429 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- ReSharper disable MarkupTextTypo -->
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Loading..." xml:space="preserve">
<value>Cargando...</value>
<comment>Message that appears while data is being loaded from database</comment>
</data>
<data name="Machine not found in database" xml:space="preserve">
<value>Máquina no encontrada en la base de datos</value>
<comment>Not found</comment>
</data>
<data name="+info" xml:space="preserve">
<value>+info</value>
<comment>Abbreviation of information</comment>
</data>
<data name="PROTOTYPE" xml:space="preserve">
<value>PROTOTIPO</value>
<comment>Caps or other way of denoting importance</comment>
</data>
<data name="Introduction date" xml:space="preserve">
<value>Fecha de introducción</value>
<comment>Date</comment>
</data>
<data name="Family" xml:space="preserve">
<value>Familia</value>
<comment>Set of variations of the same machine</comment>
</data>
<data name="Model" xml:space="preserve">
<value>Modelo</value>
<comment>Model</comment>
</data>
<data name="Processors" xml:space="preserve">
<value>Procesadores</value>
<comment>General purpose processors or coprocessors, including math ones, not including graphical or sound oriented ones</comment>
</data>
<data name="{0} @ {1}MHz ({2} bits)" xml:space="preserve">
<value>{0} a {1}Mhz ({2} bits)</value>
<comment>{0} name, {1} speed in megahertz, {2} general purpose registers size in bits</comment>
</data>
<data name="{0} @ {1}MHz" xml:space="preserve">
<value>{0} a {1}MHz</value>
<comment>AAAA</comment>
</data>
<data name="Manufacturer" xml:space="preserve">
<value>Fabricante</value>
<comment>Manufacturer</comment>
</data>
<data name="Instruction set" xml:space="preserve">
<value>Arquitectura</value>
<comment>Instruction set, aka, architecture</comment>
</data>
<data name="Nominal speed" xml:space="preserve">
<value>Velocidad nominal</value>
<comment>Nominal speed</comment>
</data>
<data name="{0} general purpose registers of {1} bits that can be used as floating point registers of {2} bits and SIMD registers of {3} bits." xml:space="preserve">
<value>{0} registros de propósito general de {1} bits que pueden ser usados como registros de coma flotante de {2} bits y como registros SIMD de {3} bits.</value>
<comment>{0} general purpose registers, {1} {2} and {3} their size in bits.</comment>
</data>
<data name="{0} general purpose registers of {1} bits that can be used as floating point registers of {2} bits." xml:space="preserve">
<value>{0} registros de propósito general de {1} bits que pueden ser usados como registros de coma flotante de {2} bits.</value>
<comment>{0} general purpose registers, {1} and {2} their size in bits.</comment>
</data>
<data name="{0} general purpose registers of {1} bits that can be used as SIMD registers of {2} bits." xml:space="preserve">
<value>{0} registros de propósito general de {1} bits que pueden ser usados como registros SIMD de {2} bits.</value>
<comment>{0} general purpose registers, {1} and {2} their size in bits.</comment>
</data>
<data name="{0} general purpose registers of {1} bits." xml:space="preserve">
<value>{0} registros de propósito general de {1} bits.</value>
<comment>{0} general purpose registers, {1} their size in bits.</comment>
</data>
<data name="{0} floating point registers of {1} bits that can be used as SIMD registers of {2} bits." xml:space="preserve">
<value>{0} registros de coma flotante de {1} bits que pueden ser usados como registros SIMD de {2} bits.</value>
<comment>{0} floating point registers, {1} and {2} their size in bits.</comment>
</data>
<data name="{0} floating point registers of {1} bits." xml:space="preserve">
<value>{0} registros de coma flotante de {1} bits.</value>
<comment>{0} general purpose registers, {1} their size in bits.</comment>
</data>
<data name="Single instruction, multiple data" xml:space="preserve">
<value>Instrucción sencilla, múltiples datos</value>
<comment>Definition of SIMD</comment>
</data>
<data name="{0} SIMD registers of {1} bits." xml:space="preserve">
<value>{0} registros SIMD de {1} bits.</value>
<comment>{0} SIMD registers, {1} their size in bits.</comment>
</data>
<data name="Multi-core" xml:space="preserve">
<value>Multi-núcleo</value>
<comment>Multi core</comment>
</data>
<data name="{0} cores." xml:space="preserve">
<value>{0} núcleos.</value>
<comment>{0} is number of cores</comment>
</data>
<data name="Simultaneous multithreading" xml:space="preserve">
<value>Multi-hilo simultáneo</value>
<comment>Definition of SMT</comment>
</data>
<data name="{0} threads per core." xml:space="preserve">
<value>{0} hilos por núcleo.</value>
<comment>{0} is number of threads per core</comment>
</data>
<data name="{0} threads." xml:space="preserve">
<value>{0} hilos.</value>
<comment>{0} is number of threads per core</comment>
</data>
<data name="Bus" xml:space="preserve">
<value>Bus</value>
<comment>Computer bus</comment>
</data>
<data name="{0}-bit data." xml:space="preserve">
<value>{0} bits de datos.</value>
<comment>{0} is number of bits in data bus</comment>
</data>
<data name="{0}-bit address." xml:space="preserve">
<value>{0} bits de direcciones.</value>
<comment>{0} is number of bits in address bus</comment>
</data>
<data name="Cache" xml:space="preserve">
<value>Caché</value>
<comment>Cache</comment>
</data>
<data name="{0}KiB combined instruction-data L1" xml:space="preserve">
<value>{0} KiB de L1 combinada de instrucciones y datos</value>
<comment>{0} is number of kibibytes in combined instruction and data L1 cache</comment>
</data>
<data name="{0}KiB instruction L1" xml:space="preserve">
<value>{0} KiB de L1 de instrucciones</value>
<comment>{0} is number of kibibytes in L1 instruction cache</comment>
</data>
<data name="{0}KiB data L1" xml:space="preserve">
<value>{0} KiB de L1 de datos</value>
<comment>{0} is number of kibibytes in L1 data cache</comment>
</data>
<data name="{0}KiB L2" xml:space="preserve">
<value>{0} KiB de L2</value>
<comment>{0} is number of kibibytes in L2 cache</comment>
</data>
<data name="{0}KiB L3" xml:space="preserve">
<value>{0} KiB de L3</value>
<comment>{0} is number of kibibytes in L3 cache</comment>
</data>
<data name="Package" xml:space="preserve">
<value>Empaquetado</value>
<comment>Chip package</comment>
</data>
<data name="Manufacturing process" xml:space="preserve">
<value>Proceso de fabricación</value>
<comment>Chip manufacturing process</comment>
</data>
<data name="{0} @ {1}µm" xml:space="preserve">
<value>{0} en {1}µm</value>
<comment>{0} is manufacturing process and {1} is micrometers</comment>
</data>
<data name="{0} @ {1}nm" xml:space="preserve">
<value>{0} en {1}nm</value>
<comment>{0} is manufacturing process and {1} is nanometers</comment>
</data>
<data name="{0}µm" xml:space="preserve">
<value>{0}µm</value>
<comment>{0} is micrometers</comment>
</data>
<data name="{0}nm" xml:space="preserve">
<value>{0}nm</value>
<comment>{0} is nanometers</comment>
</data>
<data name="Die size" xml:space="preserve">
<value>Área</value>
<comment>Die area size</comment>
</data>
<data name="{0} mm²" xml:space="preserve">
<value>{0} mm²</value>
<comment>{0} is squared milimeters</comment>
</data>
<data name="Transistors" xml:space="preserve">
<value>Transitores</value>
<comment>Transistors of chip</comment>
</data>
<data name="Memory" xml:space="preserve">
<value>Memoria</value>
<comment>Memory</comment>
</data>
<data name="{0} GiB" xml:space="preserve">
<value>{0} GiB</value>
<comment>gibibytes</comment>
</data>
<data name="{0} MiB" xml:space="preserve">
<value>{0} MiB</value>
<comment>mebibytes</comment>
</data>
<data name="{0} KiB" xml:space="preserve">
<value>{0} KiB</value>
<comment>kibibytes</comment>
</data>
<data name="{0} bytes" xml:space="preserve">
<value>{0} bytes</value>
<comment>bytes</comment>
</data>
<data name="Unknown size" xml:space="preserve">
<value>Tamaño desconocido</value>
<comment>Unknown size</comment>
</data>
<data name="{0} GHz" xml:space="preserve">
<value>{0} GHz</value>
<comment>gigahertz</comment>
</data>
<data name="{0} MHz" xml:space="preserve">
<value>{0} MHz</value>
<comment>megahertz</comment>
</data>
<data name="{0} KHz" xml:space="preserve">
<value>{0} KHz</value>
<comment>kilohertz</comment>
</data>
<data name="{0} Hz" xml:space="preserve">
<value>{0} Hz</value>
<comment>hertz</comment>
</data>
<data name="unknown speed" xml:space="preserve">
<value>velocidad desconocida</value>
<comment>unknown speed</comment>
</data>
<data name="{0} of {1} memory ({2} at {3})" xml:space="preserve">
<value>{0} de memoria de {1} ({2} a {3})</value>
<comment>{0} size with above prefix, {1} usage, {2} type, {3} speed with above prefix</comment>
</data>
<data name="Graphics processing units" xml:space="preserve">
<value>Unidades de proceso de gráficos</value>
<comment>Chips that generate graphical output on a screen</comment>
</data>
<data name="Framebuffer" xml:space="preserve">
<value>Framebuffer</value>
<comment>Buffer or memory that directly stores the frame</comment>
</data>
<data name="This machine directly draws pixels from software to a memory region that's converted to video output by a DAC or similar without using any specific graphics processing unit." xml:space="preserve">
<value>Esta máquina dibuja los píxeles directamente del software a una región de memoria que es convertida a una señal analógica sin ninguna unidad de proceso de gráficos.</value>
<comment>Description of what a framebuffer is</comment>
</data>
<data name="Sound synthetizers" xml:space="preserve">
<value>Sintetizadores de sonido</value>
<comment>Sound synthetizers</comment>
</data>
<data name="Software" xml:space="preserve">
<value>Software</value>
<comment>Means that the software directly sends signals to a dac</comment>
</data>
<data name="This machine directly sends data to a DAC or similar connected to the audio output." xml:space="preserve">
<value>Esta máquina envía señales desde el software directamente a un conversor digital a analógico conectado a la salida de sonido.</value>
<comment>Description of how software audio works</comment>
</data>
<data name="Generators" xml:space="preserve">
<value>Generadores</value>
<comment>Sound waves generatos</comment>
</data>
<data name="{0} voices" xml:space="preserve">
<value>{0} voces</value>
<comment>Number of pulsed, modulated, or wave-tabled simultaneous voices</comment>
</data>
<data name="{0} square wave" xml:space="preserve">
<value>{0} de onda cuadrada</value>
<comment>{0} is number of square wave generators</comment>
</data>
<data name="{0} white noise" xml:space="preserve">
<value>{0} de ruido blanco</value>
<comment>{0} is number of white noise generators</comment>
</data>
<data name="Sample rate" xml:space="preserve">
<value>Muestreo</value>
<comment>Sample rate</comment>
</data>
<data name="Storage" xml:space="preserve">
<value>Almacenamiento</value>
<comment>Storage</comment>
</data>
<data name="{0} bits at {1} KHz" xml:space="preserve">
<value>{0} bits a {1} KHz</value>
<comment>{0} number of bits of sampling rate at {1} kilohertz</comment>
</data>
<data name="{0} bits at {1} Hz" xml:space="preserve">
<value>{0} bits a {1} Hz</value>
<comment>{0} number of bits of sampling rate at {1} hertz</comment>
</data>
<data name="{0} bits" xml:space="preserve">
<value>{0} bits</value>
<comment>{0} is number of bits</comment>
</data>
<data name="Synthesizer type" xml:space="preserve">
<value>Tipo de síntesis</value>
<comment>Synthesis type</comment>
</data>
<data name="{0} bps" xml:space="preserve">
<value>{0} bps</value>
<comment>bits per second</comment>
</data>
<data name="Available {0} interface." xml:space="preserve">
<value>Interfaz {0} disponible.</value>
<comment>{0} is interface name</comment>
</data>
<data name="{0} connected thru a {1} interface with a nominal capacity of {2}" xml:space="preserve">
<value>{0} conectado por una interfaz {1} con una capacidad norminal de {2}</value>
<comment>{0} is storage type, {1} is interface name, {2} is nominal capacity number formatted with above bytes or bps prefixes</comment>
</data>
<data name="{0} connected thru a {1} interface" xml:space="preserve">
<value>{0} conectado por una interfaz {1}</value>
<comment>{0} is storage type, {1} is interface name</comment>
</data>
<data name="{0} with a nominal capacity of {1}" xml:space="preserve">
<value>{0} con una capacidad norminal de {1}</value>
<comment>{0} is storage type, {1} is nominal capacity number formatted with above bytes or bps prefixes</comment>
</data>
</root>