aboutsummaryrefslogtreecommitdiffstats
path: root/3rdparty/imgui/examples/imgui_impl_dx9.cpp
blob: 4aa139d44c2a9030a59f9d746d709d4c16c39b14 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
// dear imgui: Renderer for DirectX9
// This needs to be used along with a Platform Binding (e.g. Win32)

// Implemented features:
//  [X] Renderer: User texture binding. Use 'LPDIRECT3DTEXTURE9' as ImTextureID. Read the FAQ about ImTextureID in imgui.cpp.

// You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this.
// If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp.
// https://github.com/ocornut/imgui

// CHANGELOG 
// (minor and older changes stripped away, please see git history for details)
//  2018-06-08: Misc: Extracted imgui_impl_dx9.cpp/.h away from the old combined DX9+Win32 example.
//  2018-06-08: DirectX9: Use draw_data->DisplayPos and draw_data->DisplaySize to setup projection matrix and clipping rectangle.
//  2018-05-07: Render: Saving/restoring Transform because they don't seem to be included in the StateBlock. Setting shading mode to Gouraud.
//  2018-02-16: Misc: Obsoleted the io.RenderDrawListsFn callback and exposed ImGui_ImplDX9_RenderDrawData() in the .h file so you can call it yourself.
//  2018-02-06: Misc: Removed call to ImGui::Shutdown() which is not available from 1.60 WIP, user needs to call CreateContext/DestroyContext themselves.

#include "imgui.h"
#include "imgui_impl_dx9.h"

// DirectX
#include <d3d9.h>
#define DIRECTINPUT_VERSION 0x0800
#include <dinput.h>

// DirectX data
static LPDIRECT3DDEVICE9        g_pd3dDevice = NULL;
static LPDIRECT3DVERTEXBUFFER9  g_pVB = NULL;
static LPDIRECT3DINDEXBUFFER9   g_pIB = NULL;
static LPDIRECT3DTEXTURE9       g_FontTexture = NULL;
static int                      g_VertexBufferSize = 5000, g_IndexBufferSize = 10000;

struct CUSTOMVERTEX
{
    float    pos[3];
    D3DCOLOR col;
    float    uv[2];
};
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE|D3DFVF_TEX1)

// Render function.
// (this used to be set in io.RenderDrawListsFn and called by ImGui::Render(), but you can now call this directly from your main loop)
void ImGui_ImplDX9_RenderDrawData(ImDrawData* draw_data)
{
    // Avoid rendering when minimized
    if (draw_data->DisplaySize.x <= 0.0f || draw_data->DisplaySize.y <= 0.0f)
        return;

    // Create and grow buffers if needed
    if (!g_pVB || g_VertexBufferSize < draw_data->TotalVtxCount)
    {
        if (g_pVB) { g_pVB->Release(); g_pVB = NULL; }
        g_VertexBufferSize = draw_data->TotalVtxCount + 5000;
        if (g_pd3dDevice->CreateVertexBuffer(g_VertexBufferSize * sizeof(CUSTOMVERTEX), D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &g_pVB, NULL) < 0)
            return;
    }
    if (!g_pIB || g_IndexBufferSize < draw_data->TotalIdxCount)
    {
        if (g_pIB) { g_pIB->Release(); g_pIB = NULL; }
        g_IndexBufferSize = draw_data->TotalIdxCount + 10000;
        if (g_pd3dDevice->CreateIndexBuffer(g_IndexBufferSize * sizeof(ImDrawIdx), D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY, sizeof(ImDrawIdx) == 2 ? D3DFMT_INDEX16 : D3DFMT_INDEX32, D3DPOOL_DEFAULT, &g_pIB, NULL) < 0)
            return;
    }

    // Backup the DX9 state
    IDirect3DStateBlock9* d3d9_state_block = NULL;
    if (g_pd3dDevice->CreateStateBlock(D3DSBT_ALL, &d3d9_state_block) < 0)
        return;

    // Backup the DX9 transform (DX9 documentation suggests that it is included in the StateBlock but it doesn't appear to)
    D3DMATRIX last_world, last_view, last_projection;
    g_pd3dDevice->GetTransform(D3DTS_WORLD, &last_world);
    g_pd3dDevice->GetTransform(D3DTS_VIEW, &last_view);
    g_pd3dDevice->GetTransform(D3DTS_PROJECTION, &last_projection);

    // Copy and convert all vertices into a single contiguous buffer, convert colors to DX9 default format.
    // FIXME-OPT: This is a waste of resource, the ideal is to use imconfig.h and
    //  1) to avoid repacking colors:   #define IMGUI_USE_BGRA_PACKED_COLOR
    //  2) to avoid repacking vertices: #define IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT struct ImDrawVert { ImVec2 pos; float z; ImU32 col; ImVec2 uv; }
    CUSTOMVERTEX* vtx_dst;
    ImDrawIdx* idx_dst;
    if (g_pVB->Lock(0, (UINT)(draw_data->TotalVtxCount * sizeof(CUSTOMVERTEX)), (void**)&vtx_dst, D3DLOCK_DISCARD) < 0)
        return;
    if (g_pIB->Lock(0, (UINT)(draw_data->TotalIdxCount * sizeof(ImDrawIdx)), (void**)&idx_dst, D3DLOCK_DISCARD) < 0)
        return;
    for (int n = 0; n < draw_data->CmdListsCount; n++)
    {
        const ImDrawList* cmd_list = draw_data->CmdLists[n];
        const ImDrawVert* vtx_src = cmd_list->VtxBuffer.Data;
        for (int i = 0; i < cmd_list->VtxBuffer.Size; i++)
        {
            vtx_dst->pos[0] = vtx_src->pos.x;
            vtx_dst->pos[1] = vtx_src->pos.y;
            vtx_dst->pos[2] = 0.0f;
            vtx_dst->col = (vtx_src->col & 0xFF00FF00) | ((vtx_src->col & 0xFF0000) >> 16) | ((vtx_src->col & 0xFF) << 16);     // RGBA --> ARGB for DirectX9
            vtx_dst->uv[0] = vtx_src->uv.x;
            vtx_dst->uv[1] = vtx_src->uv.y;
            vtx_dst++;
            vtx_src++;
        }
        memcpy(idx_dst, cmd_list->IdxBuffer.Data, cmd_list->IdxBuffer.Size * sizeof(ImDrawIdx));
        idx_dst += cmd_list->IdxBuffer.Size;
    }
    g_pVB->Unlock();
    g_pIB->Unlock();
    g_pd3dDevice->SetStreamSource(0, g_pVB, 0, sizeof(CUSTOMVERTEX));
    g_pd3dDevice->SetIndices(g_pIB);
    g_pd3dDevice->SetFVF(D3DFVF_CUSTOMVERTEX);

    // Setup viewport
    D3DVIEWPORT9 vp;
    vp.X = vp.Y = 0;
    vp.Width = (DWORD)draw_data->DisplaySize.x;
    vp.Height = (DWORD)draw_data->DisplaySize.y;
    vp.MinZ = 0.0f;
    vp.MaxZ = 1.0f;
    g_pd3dDevice->SetViewport(&vp);

    // Setup render state: fixed-pipeline, alpha-blending, no face culling, no depth testing, shade mode (for gradient)
    g_pd3dDevice->SetPixelShader(NULL);
    g_pd3dDevice->SetVertexShader(NULL);
    g_pd3dDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
    g_pd3dDevice->SetRenderState(D3DRS_LIGHTING, false);
    g_pd3dDevice->SetRenderState(D3DRS_ZENABLE, false);
    g_pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, true);
    g_pd3dDevice->SetRenderState(D3DRS_ALPHATESTENABLE, false);
    g_pd3dDevice->SetRenderState(D3DRS_BLENDOP, D3DBLENDOP_ADD);
    g_pd3dDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
    g_pd3dDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
    g_pd3dDevice->SetRenderState(D3DRS_SCISSORTESTENABLE, true);
    g_pd3dDevice->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD);
    g_pd3dDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
    g_pd3dDevice->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
    g_pd3dDevice->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
    g_pd3dDevice->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);
    g_pd3dDevice->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
    g_pd3dDevice->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE);
    g_pd3dDevice->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
    g_pd3dDevice->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);

    // Setup orthographic projection matrix
    // Our visible imgui space lies from draw_data->DisplayPos (top left) to draw_data->DisplayPos+data_data->DisplaySize (bottom right).
    // Being agnostic of whether <d3dx9.h> or <DirectXMath.h> can be used, we aren't relying on D3DXMatrixIdentity()/D3DXMatrixOrthoOffCenterLH() or DirectX::XMMatrixIdentity()/DirectX::XMMatrixOrthographicOffCenterLH()
    {
        float L = draw_data->DisplayPos.x + 0.5f;
        float R = draw_data->DisplayPos.x + draw_data->DisplaySize.x + 0.5f;
        float T = draw_data->DisplayPos.y + 0.5f;
        float B = draw_data->DisplayPos.y + draw_data->DisplaySize.y + 0.5f;
        D3DMATRIX mat_identity = { { 1.0f, 0.0f, 0.0f, 0.0f,  0.0f, 1.0f, 0.0f, 0.0f,  0.0f, 0.0f, 1.0f, 0.0f,  0.0f, 0.0f, 0.0f, 1.0f } };
        D3DMATRIX mat_projection =
        {
            2.0f/(R-L),   0.0f,         0.0f,  0.0f,
            0.0f,         2.0f/(T-B),   0.0f,  0.0f,
            0.0f,         0.0f,         0.5f,  0.0f,
            (L+R)/(L-R),  (T+B)/(B-T),  0.5f,  1.0f,
        };
        g_pd3dDevice->SetTransform(D3DTS_WORLD, &mat_identity);
        g_pd3dDevice->SetTransform(D3DTS_VIEW, &mat_identity);
        g_pd3dDevice->SetTransform(D3DTS_PROJECTION, &mat_projection);
    }

    // Render command lists
    int vtx_offset = 0;
    int idx_offset = 0;
    ImVec2 pos = draw_data->DisplayPos;
    for (int n = 0; n < draw_data->CmdListsCount; n++)
    {
        const ImDrawList* cmd_list = draw_data->CmdLists[n];
        for (int cmd_i = 0; cmd_i < cmd_list->CmdBuffer.Size; cmd_i++)
        {
            const ImDrawCmd* pcmd = &cmd_list->CmdBuffer[cmd_i];
            if (pcmd->UserCallback)
            {
                pcmd->UserCallback(cmd_list, pcmd);
            }
            else
            {
                const RECT r = { (LONG)(pcmd->ClipRect.x - pos.x), (LONG)(pcmd->ClipRect.y - pos.y), (LONG)(pcmd->ClipRect.z - pos.x), (LONG)(pcmd->ClipRect.w - pos.y) };
                const LPDIRECT3DTEXTURE9 texture = (LPDIRECT3DTEXTURE9)pcmd->TextureId;
                g_pd3dDevice->SetTexture(0, texture);
                g_pd3dDevice->SetScissorRect(&r);
                g_pd3dDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, vtx_offset, 0, (UINT)cmd_list->VtxBuffer.Size, idx_offset, pcmd->ElemCount/3);
            }
            idx_offset += pcmd->ElemCount;
        }
        vtx_offset += cmd_list->VtxBuffer.Size;
    }

    // Restore the DX9 transform
    g_pd3dDevice->SetTransform(D3DTS_WORLD, &last_world);
    g_pd3dDevice->SetTransform(D3DTS_VIEW, &last_view);
    g_pd3dDevice->SetTransform(D3DTS_PROJECTION, &last_projection);

    // Restore the DX9 state
    d3d9_state_block->Apply();
    d3d9_state_block->Release();
}

bool ImGui_ImplDX9_Init(IDirect3DDevice9* device)
{
    g_pd3dDevice = device;
    return true;
}

void ImGui_ImplDX9_Shutdown()
{
    ImGui_ImplDX9_InvalidateDeviceObjects();
    g_pd3dDevice = NULL;
}

static bool ImGui_ImplDX9_CreateFontsTexture()
{
    // Build texture atlas
    ImGuiIO& io = ImGui::GetIO();
    unsigned char* pixels;
    int width, height, bytes_per_pixel;
    io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height, &bytes_per_pixel);

    // Upload texture to graphics system
    g_FontTexture = NULL;
    if (g_pd3dDevice->CreateTexture(width, height, 1, D3DUSAGE_DYNAMIC, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &g_FontTexture, NULL) < 0)
        return false;
    D3DLOCKED_RECT tex_locked_rect;
    if (g_FontTexture->LockRect(0, &tex_locked_rect, NULL, 0) != D3D_OK)
        return false;
    for (int y = 0; y < height; y++)
        memcpy((unsigned char *)tex_locked_rect.pBits + tex_locked_rect.Pitch * y, pixels + (width * bytes_per_pixel) * y, (width * bytes_per_pixel));
    g_FontTexture->UnlockRect(0);

    // Store our identifier
    io.Fonts->TexID = (ImTextureID)g_FontTexture;

    return true;
}

bool ImGui_ImplDX9_CreateDeviceObjects()
{
    if (!g_pd3dDevice)
        return false;
    if (!ImGui_ImplDX9_CreateFontsTexture())
        return false;
    return true;
}

void ImGui_ImplDX9_InvalidateDeviceObjects()
{
    if (!g_pd3dDevice)
        return;
    if (g_pVB)
    {
        g_pVB->Release();
        g_pVB = NULL;
    }
    if (g_pIB)
    {
        g_pIB->Release();
        g_pIB = NULL;
    }

    // At this point note that we set ImGui::GetIO().Fonts->TexID to be == g_FontTexture, so clear both.
    ImGuiIO& io = ImGui::GetIO();
    IM_ASSERT(g_FontTexture == io.Fonts->TexID);
    if (g_FontTexture)
        g_FontTexture->Release();
    g_FontTexture = NULL;
    io.Fonts->TexID = NULL;
}

void ImGui_ImplDX9_NewFrame()
{
    if (!g_FontTexture)
        ImGui_ImplDX9_CreateDeviceObjects();
}
pan> <string name="public_key_deletetion_confirmation">¿De veras quiere borrar la clave pública \'%s\'?\n¡No puede deshacer esto!</string> <string name="also_export_secret_keys">Exportar también claves secretas (privadas)</string> <string name="key_exported">Se ha exportado 1 clave satisfactoriamente.</string> <string name="keys_exported">%d claves exportadas satisfactoriamente.</string> <string name="no_keys_exported">No se han exportado claves.</string> <string name="key_creation_el_gamal_info">Nota: Sólo las subclaves soportan ElGamal.</string> <string name="key_not_found">No se puede encontrar la clave %08X.</string> <plurals name="bad_keys_encountered"> <item quantity="one">%d mala clave secreta ignorada. Quizás hayas exportado con la opción\n--export-secret-subkeys\nAsegúrate de que exportas con\n--export-secret-keys\nen su lugar.</item> <item quantity="other">%d malas claves secretas ignoradas. Quizás hayas exportado con la opción\n--export-secret-subkeys\nAsegúrate de que exportas con\n--export-secret-keys\nen su lugar.</item> </plurals> <string name="key_send_success">Clave cargada al servidor satisfactoriamente</string> <string name="key_certify_success">Identidades certificadas con éxito</string> <string name="list_empty">¡Esta lista está vacía!</string> <string name="nfc_successful">¡Clave enviada con éxito vía NFC Beam (haz NFC)!</string> <string name="key_copied_to_clipboard">¡La clave ha sido copiada al portapapeles!</string> <string name="fingerprint_copied_to_clipboard">¡La huella de validación de clave se ha copiado al portapapeles!</string> <string name="select_key_to_certify">Por favor ¡seleccione una clave para ser usada en certificación!</string> <string name="key_too_big_for_sharing">¡La clave es demasiado grande para ser compartida de esta forma!</string> <!--errors no punctuation, all lowercase, they will be put after "error_message", e.g. "Error: file not found"--> <string name="error_file_delete_failed">ha fallado el borrado de \'%s\'</string> <string name="error_file_not_found">archivo no encontrado</string> <string name="error_no_secret_key_found">no se ha encontrado una clave secreta adecuada</string> <string name="error_external_storage_not_ready">el almacenamiento externo no está preparado</string> <string name="error_key_size_minimum512bit">el tamaño de clave debe ser de al menos 512bit</string> <string name="error_unknown_algorithm_choice">elegido algoritmo desconocido</string> <string name="error_user_id_no_email">no se ha encontrado un email</string> <string name="error_key_needs_a_user_id">necesita al menos una identidad</string> <string name="error_no_signature_passphrase">no has proporcionado una frase de contraseña</string> <string name="error_no_signature_key">no has proporcionado una clave de firma</string> <string name="error_invalid_data">cifrado de datos no válido</string> <string name="error_integrity_check_failed">¡ha fallado la comprobación de integridad! ¡Los datos han sido modificados!</string> <string name="error_wrong_passphrase">frase de contraseña incorrecta</string> <string name="error_could_not_extract_private_key">no se puede extraer la clave privada</string> <!--errors without preceeding Error:--> <string name="error_jelly_bean_needed">¡Necesita Android 4.1 para usar la característica NFC Beam (haz NFC) de Android!</string> <string name="error_nfc_needed">¡NFC no está disponible en tu dispositivo!</string> <string name="error_nothing_import">¡No se encontraron claves!</string> <string name="error_query_too_short">Petición de búsqueda demasiado corta. Por favor, ¡refine su petición!</string> <string name="error_searching_keys">Ocurrió un error al buscar claves.</string> <string name="error_too_many_responses">La petición de búsqueda de claves devolvió demasiados candidatos. Por favor.¡refine su petición!</string> <string name="error_too_short_or_too_many_responses">O no hay claves, o bien se han encontrado demasiadas. Por favor, ¡mejore su petición!</string> <string name="error_import_no_valid_keys">¡No se encontraron claves válidas en Fichero/Portapapeles!</string> <string name="error_generic_report_bug">Ha ocurrido un error genérico, por favor, informa de este bug a OpenKeychain</string> <plurals name="error_import_non_pgp_part"> <item quantity="one">parte del archivo cargado es un objeto OpenPGP válido pero no una clave OpenPGP</item> <item quantity="other">partes del archivo cargado son objetos OpenPGP válidos pero no claves OpenPGP</item> </plurals> <!--results shown after decryption/verification--> <string name="decrypt_result_invalid_signature">¡Firma no válida!</string> <string name="decrypt_result_signature_unknown_pub_key">Clave pública desconocida</string> <string name="decrypt_result_signature_uncertified">Firma válida (no certificada)</string> <string name="decrypt_result_signature_certified">Firma válida (certificada)</string> <string name="decrypt_result_decrypted">Descifrado con éxito</string> <string name="decrypt_result_decrypted_unknown_pub_key">Descifrado con éxito pero clave pública desconocida</string> <string name="decrypt_result_decrypted_and_signature_uncertified">Descifrado con éxito y firma válida (no certificada)</string> <string name="decrypt_result_decrypted_and_signature_certified">Descifrado con éxito y firma válida (certificada)</string> <!--progress dialogs, usually ending in '…'--> <string name="progress_done">Hecho.</string> <string name="progress_cancel">Cancelar</string> <string name="progress_saving">guardando...</string> <string name="progress_importing">importando...</string> <string name="progress_exporting">exportando...</string> <string name="progress_uploading">subiendo...</string> <string name="progress_building_key">construyendo la clave...</string> <string name="progress_building_master_key">construyendo el anillo maestro...</string> <string name="progress_generating_rsa">generando nueva clave RSA...</string> <string name="progress_generating_dsa">generando nueva clave DSA...</string> <string name="progress_generating_elgamal">generando nueva clave ElGamal...</string> <string name="progress_modify">modificando juego de claves...</string> <string name="progress_modify_unlock">desbloqueando juego de claves...</string> <string name="progress_modify_adduid">añadiendo identidades de usuario...</string> <string name="progress_modify_revokeuid">revocando identidades de usuario...</string> <string name="progress_modify_primaryuid">cambiando identidad primaria de usuario...</string> <string name="progress_modify_subkeychange">modificando subclaves...</string> <string name="progress_modify_subkeyrevoke">revocando subclaves...</string> <string name="progress_modify_subkeyadd">añadiendo subclaves...</string> <string name="progress_modify_passphrase">cambiando frase contraseña...</string> <plurals name="progress_exporting_key"> <item quantity="one">exportando clave...</item> <item quantity="other">exportando claves...</item> </plurals> <string name="progress_extracting_signature_key">extrayendo la clave de firma...</string> <string name="progress_extracting_key">extrayendo la clave...</string> <string name="progress_preparing_streams">preparando las transmisiones...</string> <string name="progress_encrypting">cifrando los datos...</string> <string name="progress_decrypting">descifrando los datos...</string> <string name="progress_preparing_signature">preparando la firma...</string> <string name="progress_generating_signature">generando la firma...</string> <string name="progress_processing_signature">procesando la firma...</string> <string name="progress_verifying_signature">verificando la firma...</string> <string name="progress_signing">firmando...</string> <string name="progress_certifying">certificando...</string> <string name="progress_reading_data">leyendo los datos...</string> <string name="progress_finding_key">localizando la clave...</string> <string name="progress_decompressing_data">descomprimiendo los datos...</string> <string name="progress_verifying_integrity">verificando la integridad...</string> <string name="progress_deleting_securely">borrando \'%s\' de forma segura…</string> <string name="progress_deleting">borrando claves...</string> <string name="progress_con_saving">consolidación: guardando en caché...</string> <string name="progress_con_reimport">consolidación: reimportando</string> <!--action strings--> <string name="hint_keyserver_search_hint">Nombre/Correo electrónico/Identidad de clave...</string> <string name="hint_keybase_search_hint">Nombre/Correo electrónico/Prueba/Clave...</string> <!--key bit length selections--> <string name="key_size_512">512</string> <string name="key_size_768">768</string> <string name="key_size_1024">1024</string> <string name="key_size_1536">1536</string> <string name="key_size_2048">2048</string> <string name="key_size_3072">3072</string> <string name="key_size_4096">4096</string> <string name="key_size_8192">8192</string> <string name="key_size_custom">Tamaño de clave personalizado</string> <string name="key_size_custom_info">Escriba el tamaño personalizado de la clave (en bits):</string> <string name="key_size_custom_info_rsa">El tamaño de la clave RSA tiene que ser mayor que 1024 y como mucho de 16384. También debe ser un múltiplo de 8.</string> <string name="key_size_custom_info_dsa">El tamaño de la clave DSA debe ser de un mínimo de 512 y un máximo de 1024. También debe ser múltiplo de 64.</string> <!--compression--> <string name="compression_fast">rápido</string> <string name="compression_very_slow">muy lento</string> <!--Help--> <string name="help_tab_start">Comenzar</string> <string name="help_tab_faq">FAQ</string> <string name="help_tab_wot">Web of Trust</string> <string name="help_tab_nfc_beam">NFC Beam</string> <string name="help_tab_changelog">Registro de cambios</string> <string name="help_tab_about">A cerca de</string> <string name="help_about_version">Versión:</string> <!--Import--> <string name="import_tab_keyserver">Servidor de claves</string> <string name="import_tab_direct">Fichero/Portapapeles</string> <string name="import_tab_qr_code">Código QR/NFC</string> <string name="import_tab_keybase">Keybase.io</string> <string name="import_import">Importar las claves seleccionadas</string> <string name="import_qr_code_wrong">¡El código QR está deformado! ¡Por favor, prueba de nuevo!</string> <string name="import_qr_code_too_short_fingerprint">La huella de validación (fingerprint) de clave es demasiado corta (&lt; 16 caracteres)</string> <string name="import_qr_code_button">Escaneando código QR...</string> <!--Import result toast--> <plurals name="import_keys_added_and_updated_1"> <item quantity="one">Clave importada con éxito</item> <item quantity="other">%1$d claves importadas con éxito</item> </plurals> <plurals name="import_keys_added_and_updated_2"> <item quantity="one">y actualizada clave%2$s.</item> <item quantity="other">y actualizadas %1$d claves%2$s.</item> </plurals> <plurals name="import_keys_added"> <item quantity="one">Clave%2$s importada con éxito.</item> <item quantity="other">%1$d claves%2$s importadas con éxito.</item> </plurals> <plurals name="import_keys_updated"> <item quantity="one">Clave%2$s actualizada con éxito.</item> <item quantity="other">%1$d claves%2$s actualizadas con éxito.</item> </plurals> <string name="view_log">Ver registro (log)</string> <string name="import_error_nothing">No hay nada que importar.</string> <string name="import_error">¡Error importando claves!</string> <string name="import_with_warnings">, con advertencias</string> <!--Intent labels--> <string name="intent_decrypt_file">Descifrar archivo con OpenKeychain</string> <string name="intent_import_key">Importar clave con OpenKeychain</string> <string name="intent_send_encrypt">Cifrar con OpenKeychain</string> <string name="intent_send_decrypt">Descifrar con OpenKeychain</string> <!--Remote API--> <string name="api_no_apps">¡No hay aplicaciones registradas!\n\n¡Puede encontrar una lista de aplicaciones de terceros soportadas en la \'Ayuda\'!</string> <string name="api_settings_show_info">Mostrar información avanzada</string> <string name="api_settings_hide_info">Ocultar información avanzada</string> <string name="api_settings_show_advanced">Mostrar la configuración avanzada</string> <string name="api_settings_hide_advanced">Ocultar la configuración avanzada</string> <string name="api_settings_no_key">No se ha seleccionado ninguna clave</string> <string name="api_settings_select_key">Seleccionar clave</string> <string name="api_settings_create_key">Crear una nueva clave para esta cuenta</string> <string name="api_settings_save">Guardar</string> <string name="api_settings_cancel">Cancelar</string> <string name="api_settings_revoke">Revocar acceso</string> <string name="api_settings_start">Iniciar aplicación</string> <string name="api_settings_delete_account">Borrar cuenta</string> <string name="api_settings_package_name">Nombre de paquete</string> <string name="api_settings_package_signature">SHA-256 de firma de paquete</string> <string name="api_settings_accounts">Cuentas</string> <string name="api_settings_accounts_empty">No hay cuentas adjuntas a esta aplicación</string> <string name="api_create_account_text">La aplicación solicita la creación de una nueva cuenta. Por favor, seleccione una de sus claves existentes o cree una nueva.\n¡Las aplicaciones están restringidas al uso de las claves que usted seleccione aquí!</string> <string name="api_update_account_text">La clave guardada para esta cuenta ha sido borrada. ¡Por favor seleccione una diferente!\n¡Las aplicaciones están restringidas al uso de las claves que seleccione aquí!</string> <string name="api_register_text">La aplicación mostrada quiere cifrar, descrifrar y firmar mensajes en su nombre.\n¿Permitir acceso?\n\nADVERTENCIA: Si no sabe por qué apareció esta pantalla, ¡no permita el acceso! Puede revocar el acceso más tarde usando la pantalla de \'Aplicaciones\'.</string> <string name="api_register_allow">Permitir el acceso</string> <string name="api_register_disallow">Denegar el acceso</string> <string name="api_register_error_select_key">¡Por favor, selecciona una clave!</string> <string name="api_select_pub_keys_missing_text">No se encontraron claves para estas identidades:</string> <string name="api_select_pub_keys_dublicates_text">Existe más de una clave para estas identidades:</string> <string name="api_select_pub_keys_text">¡Por favor, revisa la lista de destinatarios!</string> <string name="api_select_pub_keys_text_no_user_ids">¡Por favor seleccione los receptores!</string> <string name="api_error_wrong_signature">¡La comprobación de la firma ha fallado! ¿Has instalado esta app desde una fuente distinta? Si estás seguro de que esto no es un ataque, revoca el registro de esta app en OpenKeychain y regístrala de nuevo.</string> <!--Share--> <string name="share_qr_code_dialog_title">Compartir con código QR</string> <string name="share_nfc_dialog">Compartir con NFC</string> <!--Key list--> <plurals name="key_list_selected_keys"> <item quantity="one">1 clave seleccionada.</item> <item quantity="other">%d claves seleccionadas.</item> </plurals> <string name="key_list_empty_text1">Aún no hay claves disponibles...</string> <string name="key_list_empty_text2">Puedes empezar por</string> <string name="key_list_empty_text3">o</string> <string name="key_list_empty_button_create">crear tu propia clave</string> <string name="key_list_empty_button_import">importando una clave existente.</string> <!--Key view--> <string name="key_view_action_edit">Editar clave</string> <string name="key_view_action_encrypt">Cifrar con esta clave</string> <string name="key_view_action_certify">Certificar identidades</string> <string name="key_view_action_update">Actualizar desde el servidor de claves</string> <string name="key_view_action_share_with">Compartir con...</string> <string name="key_view_action_share_nfc">Compartir sobre NFC juntando los dispositivos por el reverso</string> <string name="key_view_action_upload">Actualizar al servidor de claves</string> <string name="key_view_tab_main">Información principal</string> <string name="key_view_tab_share">Compartir</string> <string name="key_view_tab_keys">Subclaves</string> <string name="key_view_tab_certs">Certificados</string> <string name="user_id_info_revoked_title">Revocada</string> <string name="user_id_info_revoked_text">Esta identidad ha sido revocada por el propietario de la clave. En adelante no es válida.</string> <string name="user_id_info_verified_title">Verificada</string> <string name="user_id_info_verified_text">Esta identidad ha sido verificada</string> <string name="user_id_info_not_verified_title">No verificada</string> <string name="user_id_info_not_verified_text">Esta identidad no se ha verificado aún. No puede estar seguro de si la identidad realmente corresponde a una persona en concreto.</string> <string name="user_id_info_invalid_title">No válido</string> <string name="user_id_info_invalid_text">¡Algo está mal con esta identidad!</string> <!--Edit key--> <string name="edit_key_action_change_passphrase">Cambiar frase contraseña</string> <string name="edit_key_action_add_identity">Añadir identidad</string> <string name="edit_key_action_add_subkey">Añadir subclave</string> <string name="edit_key_edit_user_id_title">¡Seleccione una acción!</string> <string-array name="edit_key_edit_user_id"> <item>Cambiar a la identidad primaria</item> <item>Revocar identidad</item> </string-array> <string-array name="edit_key_edit_user_id_revert_revocation"> <item>Revertir revocación</item> </string-array> <string name="edit_key_edit_user_id_revoked">Esta identidad se ha revocado. Esto no puede deshacerse.</string> <string name="edit_key_edit_subkey_title">¡Seleccione una acción!</string> <string-array name="edit_key_edit_subkey"> <item>Cambiar periodo hasta la expiración</item> <item>Revocar subclave</item> </string-array> <string name="edit_key_new_subkey">nueva</string> <string name="edit_key_select_flag">¡Por favor, seleccione al menos un indicador!</string> <!--Create key--> <string name="create_key_upload">Subir clave al servidor de claves</string> <string name="create_key_empty">Este campo es obligatorio</string> <string name="create_key_passphrases_not_equal">Las frases contraseña no coinciden</string> <string name="create_key_final_text">Ha introducido la siguiente identidad:</string> <string name="create_key_final_robot_text">Crear una clave puede llevar un tiempo, hágase con una taza de café entre tanto...\n(3 subclaves, RSA 4096 bits)</string> <string name="create_key_text">Introduzca su nombre completo, dirección de correo electrónico, y elija una frase contraseña.</string> <string name="create_key_hint_full_name">Nombre completo, ej. Max Mustermann</string> <!--View key--> <string name="view_key_revoked">¡Esta clave ha sido revocada!</string> <string name="view_key_expired">¡Esta clave ha expirado!</string> <!--Navigation Drawer--> <string name="nav_keys">Claves</string> <string name="nav_encrypt">Firmar y cifrar</string> <string name="nav_decrypt">Descifrar y verificar</string> <string name="nav_apps">Aplicaciones</string> <string name="drawer_open">Abrir el Navigation Drawer</string> <string name="drawer_close">Cerrar el Navigation Drawer</string> <string name="my_keys">Mis claves</string> <!--hints--> <string name="encrypt_content_edit_text_hint">El mensaje introducido aquí estará firmado usando la clave seleccionada en \'Desde\' y cifrada para todos los receptores seleccionados en \'Hacia\'.</string> <string name="decrypt_content_edit_text_hint">Introduce aquí el texto cifrado para descifrarlo y/o verificarlo...</string> <!--certs--> <string name="cert_default">predeterminado</string> <string name="cert_none">ninguno</string> <string name="cert_casual">casual</string> <string name="cert_positive">positivo</string> <string name="cert_revoke">revocada</string> <string name="cert_verify_ok">Correcto</string> <string name="cert_verify_failed">¡falló!</string> <string name="cert_verify_error">¡error!</string> <string name="cert_verify_unavailable">clave no disponible</string> <!--Import Public log entries--> <string name="msg_ip_apply_batch">Aplicando operación de inserción por lote.</string> <string name="msg_ip_bad_type_secret">Se intentó importar un juego de claves (keyring) secreto como público. Esto es un fallo, por favor ¡consigne un informe!</string> <string name="msg_kc_error_v3">Esta clave es una clave OpenPGP versión 3 y por tanto insegura. No ha sido importada.</string> <string name="msg_ip_delete_old_fail">No se borró ninguna clave antigua (¿crear una nueva?)</string> <string name="msg_ip_delete_old_ok">Clave antigua borrada de la base de datos</string> <string name="msg_ip_encode_fail">La operación falló debido a un error de codificación</string> <string name="msg_ip_fail_io_exc">La operación falló debido a un error de E/S</string> <string name="msg_ip_fail_op_exc">La operación falló debido a un error de la base de datos</string> <string name="msg_ip_fail_remote_ex">La operación falló debido a un error interno</string> <string name="msg_ip">Importando juego de claves públicas %s</string> <string name="msg_ip_insert_keyring">Codificando datos del juego de claves (keyring)</string> <string name="msg_ip_insert_keys">Analizando claves</string> <string name="msg_ip_prepare">Preparando base de datos de operaciones</string> <string name="msg_ip_master">Procesando clave maestra %s</string> <string name="msg_ip_master_expired">El juego de claves expiró el %s</string> <string name="msg_ip_master_expires">El juego de claves expira el %s</string> <string name="msg_ip_master_flags_ces">Distintivos de clave maestra: certificar, cifrar, firmar</string> <string name="msg_ip_master_flags_cex">Distintivos de clave maestra: certificar, cifrar</string> <string name="msg_ip_master_flags_cxs">Distintivos de clave maestra: certificar, firmar</string> <string name="msg_ip_master_flags_xes">Distintivos de clave maestra: cifrar, firmar</string> <string name="msg_ip_master_flags_cxx">Distintivos de clave maestra: certificar</string> <string name="msg_ip_master_flags_xex">Distintivos de clave maestra: cifrar</string> <string name="msg_ip_master_flags_xxs">Distintivos de clave maestra: firmar</string> <string name="msg_ip_master_flags_xxx">Distintivos de clave maestra: ninguno</string> <string name="msg_ip_subkey">Procesando subclave %s</string> <string name="msg_ip_subkey_expired">La subclave expiró el %s</string> <string name="msg_ip_subkey_expires">La subclave expira el %s</string> <string name="msg_ip_subkey_flags_ces">Distintivos de subclave: certificar, cifrar, firmar</string> <string name="msg_ip_subkey_flags_cex">Distintivos de subclave: certificar, cifrar</string> <string name="msg_ip_subkey_flags_cxs">Distintivos de subclave: certificar, firmar</string> <string name="msg_ip_subkey_flags_xes">Distintivos de subclave: cifrar, firmar</string> <string name="msg_ip_subkey_flags_cxx">Distintivos de subclave: certificar</string> <string name="msg_ip_subkey_flags_xex">Distintivos de subclave: cifrar</string> <string name="msg_ip_subkey_flags_xxs">Distintivos de subclave: firmar</string> <string name="msg_ip_subkey_flags_xxx">Distintivos de subclave: ninguno</string> <string name="msg_ip_success">Juego de claves públicas importado con éxito</string> <string name="msg_ip_success_identical">El juego de claves no contiene nuevos datos, no hay nada que hacer</string> <string name="msg_ip_reinsert_secret">Re-insertando clave secreta</string> <string name="msg_ip_uid_cert_bad">¡Se encontró un certificado defectuoso!</string> <string name="msg_ip_uid_cert_error">¡Error procesando certificado!</string> <string name="msg_ip_uid_cert_good">La identidad del usuario está certificada por %1$s</string> <plurals name="msg_ip_uid_certs_unknown"> <item quantity="one">Ignorando un certificado publicado por una clave pública desconocida</item> <item quantity="other">Ignorando %s certificados publicados por claves públicas desconocidas</item> </plurals> <string name="msg_ip_uid_classifying_zero">Clasificando identidades de usuario (no hay claves de confianza disponibles)</string> <plurals name="msg_ip_uid_classifying"> <item quantity="one">Clasificando identidades de usuario (usando una clave de confianza)</item> <item quantity="other">Clasificando identidades de usuario (usando %s claves de confianza)</item> </plurals> <string name="msg_ip_uid_reorder">Re-ordenando identidades de usuario</string> <string name="msg_ip_uid_processing">Procesando identidad (id) de usuario %s</string> <string name="msg_ip_uid_revoked">La identificación de usuario está revocada</string> <string name="msg_is_bad_type_public">Se intentó importar un juego de claves (keyring) público como secreto. Esto es un fallo, por favor ¡consigne un informe!</string> <string name="msg_is_bad_type_uncanon">Se intentó importar un juego de claves sin canonicalización. ¡Esto es un fallo, por favor rellene un informe!</string> <!--Import Secret log entries--> <string name="msg_is">Importando clave secreta (privada) %s</string> <string name="msg_is_db_exception">¡Error de base de datos!</string> <string name="msg_is_importing_subkeys">Procesando subclaves secretas</string> <string name="msg_is_io_exc">Error codificando el juego de claves</string> <string name="msg_is_pubring_generate">Generando un juego de claves públicas desde el juego de claves secretas (privadas)</string> <string name="msg_is_subkey_nonexistent">Subclave %s no disponible en la clave pública</string> <string name="msg_is_subkey_ok">Se marcó %s como no disponible</string> <string name="msg_is_subkey_stripped">Se marcó %s como desnudo (de subclave)</string> <string name="msg_is_success_identical">El juego de claves no contiene nuevos datos, no hay nada que hacer</string> <string name="msg_is_success">Juego de claves secretas (privadas) importado con éxito</string> <!--Keyring Canonicalization log entries--> <string name="msg_kc_public">Canonicalizando juego de claves público %s</string> <string name="msg_kc_secret">Canonicalizando juego de claves secreto %s</string> <string name="msg_kc_error_no_uid">Fallo en la canonicalización de juego de claves: El juego de claves no tiene identificaciones de usuario válidas</string> <string name="msg_kc_master">Procesando clave maestra</string> <string name="msg_kc_revoke_bad_err">Eliminando certificado defectuoso de revocación de juego de claves</string> <string name="msg_kc_revoke_bad_local">Eliminando certificado de revocación de juego de claves, con distintivo \"local\"</string> <string name="msg_kc_revoke_bad_time">Eliminando certificado de revocación de juego de claves, con marca de tiempo futura</string> <string name="msg_kc_revoke_bad_type">Eliminando certificado de clave maestra, de tipo desconocido (%s)</string> <string name="msg_kc_revoke_bad_type_uid">Eliminando identidad de usuario en posición equivocada</string> <string name="msg_kc_revoke_bad">Eliminando certificado defectuoso de revocación de juego de claves</string> <string name="msg_kc_revoke_dup">Eliminando certificado redundante de revocación de juego de claves </string> <string name="msg_kc_sub">Procesando subclave %s</string> <string name="msg_kc_sub_bad">Eliminando certificado no válido de vinculación de subclave</string> <string name="msg_kc_sub_bad_err">Eliminando certificado defectuoso de vinculación de subclave</string> <string name="msg_kc_sub_bad_local">Eliminando certificado de vinculación de subclave, con distintivo \"local\"</string> <string name="msg_kc_sub_bad_keyid">La identidad del publicante de la vinculación de subclave no coincide</string> <string name="msg_kc_sub_bad_time">Eliminando certificado de vinculación de subclave, con marca de tiempo futura</string> <string name="msg_kc_sub_bad_type">Tipo de certificado de subclave desconocido: %s</string> <string name="msg_kc_sub_dup">Eliminando certificado redundante de vinculación de subclave</string> <string name="msg_kc_sub_primary_bad">Eliminando certificado de vinculación de subclave debido a un certificado de vinculación primario no válido</string> <string name="msg_kc_sub_primary_bad_err">Eliminando certificado de vinculación de subclave debido a un certificado de vinculación primario defectuoso</string> <string name="msg_kc_sub_primary_none">Eliminando certificado de vinculación de subclave debido a un certificado de vinculación primario ausente</string> <string name="msg_kc_sub_no_cert">No se encontró ningún certificado válido para %s, eliminándola del juego de claves</string> <string name="msg_kc_sub_revoke_bad_err">Eliminando certificado defectuoso de revocación de subclave</string> <string name="msg_kc_sub_revoke_bad">Eliminando certificado defectuoso de revocación de subclave</string> <string name="msg_kc_sub_revoke_dup">Eliminando certificado redundante de revocación de subclave</string> <string name="msg_kc_success">Canonicalización del juego de claves exitosa, no hay cambios</string> <plurals name="msg_kc_success_bad"> <item quantity="one">Canonicalización de juego de claves completada, se eliminó un certificado erróneo</item> <item quantity="other">Canonicalización de juego de claves completada, se eliminaron %d certificados erróneos</item> </plurals> <string name="msg_kc_success_bad_and_red">Canonicalización de juego de claves completada, eliminados %1$s certificados erróneos y %2$s redundantes </string> <plurals name="msg_kc_success_redundant"> <item quantity="one">Canonicalización de juego de claves completada, se eliminó un certificado redundante</item> <item quantity="other">Canonicalización de juego de claves completada, se eliminaron %d certificados redundantes</item> </plurals> <string name="msg_kc_uid_bad_err">Eliminando auto-certificado defectuoso para la identidad de usuario %s</string> <string name="msg_kc_uid_bad_local">Eliminando certificado de identidad de usuario, con distintivo \"local\"</string> <string name="msg_kc_uid_bad_time">Eliminando identidad de usuario con marca de tiempo futura</string> <string name="msg_kc_uid_bad_type">Eliminando certificado de identidad de usuario, de tipo desconocido (%s)</string> <string name="msg_kc_uid_bad">Eliminando auto-certificado defectuoso para la identidad de usuario \"%s\"</string> <string name="msg_kc_uid_cert_dup">Eliminando auto-certificado desactualizado para el identificador de usuario \"%s\"</string> <string name="msg_kc_uid_foreign">Eliminando certificado ajeno de identidad de usuario por %s</string> <string name="msg_kc_uid_revoke_dup">Eliminando certificado redundate de revocación para la identidad de usuario \"%s\"</string> <string name="msg_kc_uid_revoke_old">Eliminando certificado desactualizado de revocación para la identidad de usuario \"%s\"</string> <string name="msg_kc_uid_no_cert">No se encontró ningún auto-certificado válido para la identificación de usuario %s, eliminándola del juego de claves.</string> <string name="msg_kc_uid_remove">Eliminando identidad de usuario %s no válida</string> <!--Keyring merging log entries--> <string name="msg_mg_public">Incorporándolas en el juego de claves públicas %s</string> <string name="msg_mg_secret">Incorporándolas en el juego de claves secretas (privadas) %s</string> <string name="msg_mg_error_encode">Error fatal codificando la firma</string> <string name="msg_mg_error_heterogeneous">¡Se intentaron fusionar juegos de claves con diferentes huellas de validación de claves!</string> <string name="msg_mg_new_subkey">Añadiendo nueva subclave %s</string> <string name="msg_mg_found_new">Se encontraron %s nuevos certificados en el juego de claves</string> <string name="msg_mg_unchanged">No hay nuevos certificados</string> <!--createSecretKeyRing--> <string name="msg_cr">Generando nueva clave maestra</string> <string name="msg_cr_error_no_master">¡No se especificaron opciones de clave!</string> <string name="msg_cr_error_no_user_id">¡Los juegos de claves tienen que estar creados con al menos una identidad de usuario!</string> <string name="msg_cr_error_no_certify">¡La clave maestra debe tener el indicador de certificado!</string> <string name="msg_cr_error_null_expiry">El periodo hasta la expiración no puede ser \"el mismo que antes\" al crear la clave. Esto es un error de programación, por favor ¡rellene un informe de fallo!</string> <string name="msg_cr_error_keysize_512">¡El tamaño de la clave debe ser mayor o igual de 512!</string> <string name="msg_cr_error_internal_pgp">¡Error PGP interno!</string> <string name="msg_cr_error_unknown_algo">¡Seleccionado algoritmo defectuoso!</string> <string name="msg_cr_error_master_elgamal">¡La clave maestra no debe ser del tipo ElGamal!</string> <!--modifySecretKeyRing--> <string name="msg_mr">Modificando el juego de claves %s</string> <string name="msg_mf_error_encode">¡Excepción en la codificación!</string> <string name="msg_mf_error_fingerprint">¡La actual huella de validación de clave no coincide con la esperada!</string> <string name="msg_mf_error_keyid">No hay identidad de clave. Esto es un error interno, por favor ¡consigne un informe de error!</string> <string name="msg_mf_error_integrity">Error interno, ¡fallo en la comprobación de integridad!</string> <string name="msg_mf_error_master_none">¡No se encontró certificado maestro sobre el que operar! (¿Todos revocados?)</string> <string name="msg_mf_error_noexist_primary">¡Especificada identidad de usuario primaria defectuosa!</string> <string name="msg_mf_error_noexist_revoke">¡Se especificó una mala identidad de usuario para revocación!</string> <string name="msg_mf_error_revoked_primary">¡Las identidades de usuario revocadas no pueden ser primarias!</string> <string name="msg_mf_error_null_expiry">El periodo hasta la expiración no puede ser \"el mismo que antes\" al crear subclave. Esto es un error de programación, por favor ¡rellene un informe de fallo!</string> <string name="msg_mf_error_passphrase_master">¡Error fatal descrifrando la clave maestra! Probablemente esto se daba a un error de programación, por favor ¡rellene un informe de fallo!</string> <string name="msg_mf_error_pgp">¡Excepción interna de PGP!</string> <string name="msg_mf_error_sig">¡Excepción con la firma!</string> <string name="msg_mf_master">Modificando certificaciones maestras</string> <string name="msg_mf_passphrase">Cambiando frase contraseña para el juego de claves (keyring)...</string> <string name="msg_mf_passphrase_key">Re-cifrando subclave %s con nueva frase contraseña</string> <string name="msg_mf_passphrase_empty_retry">Fallo al establecer nueva frase contraseña, intentándolo de nuevo con una antigua frase contraseña vacía</string> <string name="msg_mf_passphrase_fail">¡La frase contraseña para la subclave no pudo cambiarse! (¿Tiene la subclave una diferente de la de las otras claves?)</string> <string name="msg_mf_primary_replace_old">Reemplazando certificado de la anterior identidad de usuario primaria </string> <string name="msg_mf_primary_new">Generando nuevo certificado para nueva identidad de usuario primaria</string> <string name="msg_mf_subkey_change">Modificando subclave %s</string> <string name="msg_mf_error_subkey_missing">¡Se intentó operar sobre una subclave desaparecida %s!</string> <string name="msg_mf_subkey_new">Añadiendo nueva subclave de tipo %2$s (%1$s bits)</string> <string name="msg_mf_subkey_new_id">Nueva identidad de subclave: %s</string> <string name="msg_mf_error_past_expiry">¡La fecha de expiración no puede ser del pasado!</string> <string name="msg_mf_subkey_revoke">Revocando subclave %s</string> <string name="msg_mf_success">Juego de claves modificado con éxito</string> <string name="msg_mf_uid_add">Añadiendo identidad de usuario %s</string> <string name="msg_mf_uid_primary">Cambiando identidad de usuario (uid) primaria a %s</string> <string name="msg_mf_uid_revoke">Revocando identidad de usuario %s</string> <string name="msg_mf_uid_error_empty">¡La identidad de usuario no debe estar vacía!</string> <string name="msg_mf_unlock_error">¡Error desbloqueando juego de claves!</string> <string name="msg_mf_unlock">Desbloqueando juego de claves (keyring)</string> <!--Consolidate--> <string name="msg_con">Consolidando base de datos</string> <string name="msg_con_error_bad_state">¡La consolidación se inició cuando ninguna base de datos estaba cacheada! Probablemente esto es un error de programación, por favor consigne un informe de fallo.</string> <string name="msg_con_error_concurrent">¡Consolidación abortada, ejecutándose ya en otro hilo!</string> <string name="msg_con_save_secret">Guardando juegos de claves secretas (privadas)</string> <string name="msg_con_save_public">Guardando juegos de claves públicas</string> <string name="msg_con_db_clear">Limpiando base de datos</string> <string name="msg_con_success">Base de datos consolidada con éxito</string> <string name="msg_con_critical_in">Entrando en fase crítica</string> <string name="msg_con_critical_out">Abandonando fase crítica</string> <string name="msg_con_delete_public">Borrando fichero de caché de juego de claves públicas</string> <string name="msg_con_delete_secret">Borrando fichero de caché de juego de claves secretas (privadas)</string> <string name="msg_con_error_db">¡Error al abrir la base de datos!</string> <string name="msg_con_error_io_public">¡Error de E/S al escribir claves públicas en caché!</string> <string name="msg_con_error_io_secret">¡Error de E/S al escribir claves secretas (privadas) en caché!</string> <string name="msg_con_error_public">¡Error al reimportar claves públicas!</string> <string name="msg_con_error_secret">¡Error reimportando claves secretas (privadas)!</string> <plurals name="msg_con_recover"> <item quantity="one">Recuperando consolidación con %1$d clave secreta (privada) y %2$d pública</item> <item quantity="other">Recuperando consolidación con %1$d claves secretas (privadas) y %2$d públicas</item> </plurals> <string name="msg_con_recover_unknown">Recuperando desde un estado desconocido</string> <plurals name="msg_con_reimport_public"> <item quantity="one">Reimportando una clave pública</item> <item quantity="other">Reimportando %d claves públicas</item> </plurals> <string name="msg_con_reimport_public_skip">No hay claves públicas a reimportar, omitiendo...</string> <plurals name="msg_con_reimport_secret"> <item quantity="one">Reimportando una clave secreta (privada)</item> <item quantity="other">Reimportando %d claves secretas (privadas)</item> </plurals> <string name="msg_con_reimport_secret_skip">No hay claves públicas a reimportar, omitiendo...</string> <string name="msg_con_warn_delete_public">Excepción borrando fichero de caché de claves públicas</string> <string name="msg_con_warn_delete_secret">Excepción al borrar fichero de caché de claves secretas (privadas)</string> <!--PassphraseCache--> <string name="passp_cache_notif_click_to_clear">Haga clic para limpiar las frases contraseña almacenadas en caché</string> <string name="passp_cache_notif_n_keys">OpenKeychain ha almacenado en caché %d frases contraseña</string> <string name="passp_cache_notif_keys">Frases contraseña almacenadas en caché:</string> <string name="passp_cache_notif_clear">Limpiar caché</string> <string name="passp_cache_notif_pwd">Contraseña</string> <!--unsorted--> <string name="internal_error">¡Error interno!</string> <string name="section_certifier_id">Certificador</string> <string name="section_cert">Detalles del certificado</string> <string name="label_user_id">Identidad</string> <string name="unknown_uid">&lt;desconocido&gt;</string> <string name="empty_certs">No hay certificados para esta clave</string> <string name="certs_text">Sólo los auto-certificados y los certificados creados con las claves de usted se muestran aquí.</string> <string name="section_uids_to_certify">Identidades a certificar</string> <string name="label_revocation">Razón de la revocación</string> <string name="label_verify_status">Estado de la verificación</string> <string name="label_cert_type">Tipo</string> <string name="error_key_not_found">¡Clave no encontrada!</string> <string name="error_key_processing">¡Error procesando clave!</string> <string name="key_stripped">desnudo, sin clave</string> <string name="secret_cannot_multiple">¡Sus claves propias sólo pueden ser borradas individualmente!</string> <string name="title_view_cert">Ver detalles del certificado</string> <string name="unknown_algorithm">desconocido</string> <string name="can_sign_not">no puede firmarse</string> <string name="error_no_encrypt_subkey">¡No hay subclave de cifrado disponible!</string> <string name="info_no_manual_account_creation">No cree Cuentas-OpenKeychain manualmente.\nPara más información, vea la Ayuda.</string> <string name="contact_show_key">Mostrar clave (%s)</string> <!--First Time--> <string name="first_time_text1">¡Recupere su privacidad con OpenKeychain!</string> <string name="first_time_create_key">Crear mi clave</string> <string name="first_time_import_key">Importar clave existente</string> <string name="first_time_skip">Omitir configuración</string> </resources>