维基导游
zhwikivoyage
https://zh.wikivoyage.org/wiki/%E9%A6%96%E9%A1%B5
MediaWiki 1.39.0-wmf.23
first-letter
Media
Special
Talk
User
User talk
Wikivoyage
Wikivoyage talk
File
File talk
MediaWiki
MediaWiki talk
Template
Template talk
Help
Help talk
Category
Category talk
TimedText
TimedText talk
Module
Module talk
Gadget
Gadget talk
Gadget definition
Gadget definition talk
Module:IsLatin
828
36
183904
191
2022-08-04T14:46:56Z
Xiplus
4323
已保护“[[Module:IsLatin]]”:高風險模板:988引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
Scribunto
text/plain
local i = {}
function i.IsLatin(frame)
local txt = frame.args[1];
if txt == '' then
return '';
end
local len = mw.ustring.len(txt);
local pos = 1;
while ( pos <= len ) do
charval = mw.ustring.codepoint(mw.ustring.sub(txt, pos))
-- note 8364 is the € symbol
if charval>687 and charval~=8364 then
return "no";
end
pos = pos + 1;
end
return "yes";
end
return i;
fyzom6qafnyyorrvcrjab9k1vwwhfpu
Module:IsRedirect
828
38
183906
195
2022-08-04T14:47:16Z
Xiplus
4323
已保护“[[Module:IsRedirect]]”:高風險模板:728引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
Scribunto
text/plain
local i = {}
function i.IsRedirect(frame)
local pagename = frame.args[1];
if pagename == '' then
return '';
end
local page = mw.title.new(pagename);
if page.isRedirect then
return 'yes';
else
return '';
end
end
return i;
m93xdiffiwwabk09s4mobweig8je4qj
Module:LinkPhone
828
39
183909
32671
2022-08-04T14:47:46Z
Xiplus
4323
已保护“[[Module:LinkPhone]]”:高風險模板:978引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
Scribunto
text/plain
local i = {}
function i.LinkPhone(frame)
local demo = frame.args["demo"] or '';
local txt = frame.args[1] or '';
local link = txt;
local catprefix = '';
local catMissingCountryCode = '';
local catFormatIssue = '';
local output;
if demo == 'true' then
catprefix = ':';
end
link = mw.ustring.gsub(txt, ' ', '');
link = mw.ustring.gsub(link, "'", "");
if link == "" then
return "";
end
if mw.ustring.sub(link, 1, 1) ~= '+' then
catMissingCountryCode = '[[' .. catprefix .. 'Category:缺失国家代码的电话]]'
end
if mw.ustring.match(link,"^%+[%d-() ]+$") ~= nil then
output = '<span class="plainlinks nourlexpansion">[tel:' .. link .. ' ' .. txt ..']</span>';
else
output = txt;
if mw.ustring.match('+' .. link,"^%+[%d-() ]+$") == nil then
catFormatIssue = '[[' .. catprefix .. 'Category:格式有问题的电话]]'
end
end
if mw.ustring.match(link,"%(0%)") ~= nil then
catFormatIssue = '[[' .. catprefix .. 'Category:格式有问题的电话]]'
end
-- Note the quote ("") below is not empty and actually contains a hidden unicode character.
-- if mw.ustring.match(link,"") ~= nil then
-- catFormatIssue = '[[' .. catprefix .. 'Category:Listing with hidden unicode character]]'
-- end
if catFormatIssue ~= '' then
output = txt;
end
return output .. catFormatIssue.. catMissingCountryCode;
end
return i;
9di8bslhvfkn87zrqqxgqcdj97esvk9
Module:Wikibase
828
48
183922
157807
2022-08-04T15:10:16Z
Xiplus
4323
已保护“[[Module:Wikibase]]”:高風險模板:5323引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
Scribunto
text/plain
local item = mw.wikibase.getEntityObject()
function getId( id )
if id then
return id
end
if item then
return item.id
end
return nil
end
-- Restituisce il collegamento corrispondente al codice fornito.
function sitelink(dbname)
if (dbname or '') == '' then
return ''
end
if item and item:getSitelink(dbname) then
return item:getSitelink(dbname)
end
return ''
end
-- Restituisce le coordinate geografiche corrispondenti all'elemento
function coords(typ, fallback)
if (fallback or '') ~= '' and string.match(fallback, '^<%!%-%-.*%-%->$') == nil then
return fallback
end
if item and item.claims then
local coords = item.claims.P625
if coords and #coords == 1 and coords[1].mainsnak and coords[1].mainsnak.datavalue and coords[1].mainsnak.datavalue.value then
return coords[1].mainsnak.datavalue.value[typ]
end
end
return ''
end
function normalize_timezone(tz)
local k = string.gsub(tz, '%+0(%d)$', '+%1')
k = string.gsub(k, '%+0(%d:%d%d)$', '+%1')
return string.gsub(k, '(%+%d%d?):00$', '%1')
end
function normalize_timezone_list(list)
--alphaindexline
return mw.text.listToText(list)
end
-- Restituisce l'elemento più aggiornato tra una serie di asserzioni
-- TODO: ranks
function aggiornato(item, prop, frame)
if item and item.claims and item.claims[prop] then
for index, claim in pairs(item.claims[prop]) do
local qual = claim.qualifiers
if qual == nil or qual.P582 == nil then
-- P582 è la data di fine, significa che non è il valore attuale
if claim.mainsnak and claim.mainsnak.datavalue and claim.mainsnak.datavalue.value then
local val = claim.mainsnak.datavalue.value
if val['numeric-id'] then
local id = 'Q'..val['numeric-id']
local sl = mw.wikibase.sitelink(id)
local lb = mw.wikibase.label(id)
if sl and sl ~= '' then
return frame:preprocess('[['..sl..'|'..lb..']]')
end
return lb
end
return val
end
end
end
end
return ''
end
local p = {}
--
-- Restituisce l'ID dell'elemento collegato alla pagina corrente.
function p.id(frame)
id = getId(frame.args[1])
if id then
return id
end
return '(nessun elemento trovato)'
end
-- Restituisce l'ID dell'elemento collegato alla pagina corrente sotto forma di link a Wikidata.
function p.idLink(frame)
local id = getId(frame.args[1])
if id then
return '[[d:' .. id .. '|' .. id .. ']]'
end
return '(nessun elemento trovato)'
end
-- Restituisce l'etichetta di un elemento.
function p.label(frame)
local id = getId(frame.args[1])
if id then
return mw.wikibase.label( id )
end
return '(nessun elemento trovato)'
end
-- Restituisce il primo valore non nullo (nell'ordine) tra il: parametro passato in ingresso, etichetta dell'entità Wikidata, nome della pagina.
function p.pagename(frame)
if (frame.args[1] or '') ~= '' then
return frame.args[1]
end
local id = getId()
if id then
return mw.wikibase.label( id )
end
return mw.title.getCurrentTitle().text
end
-- Restituisce la pagina locale dell'elemento di Wikidata fornito.
function p.page(frame)
local id = getId(frame.args[1])
if id then
return mw.wikibase.sitelink( id )
end
return '(nessun elemento trovato)'
end
-- Restituisce il collegamento corrispondente al codice fornito.
function p.sitelink(frame)
return sitelink(frame.args.dbname or frame.args[1])
end
-- Restituisce il collegamento corrispondente a Wikipedia in italiano.
function p.itwikilink(frame)
if (frame.args[1] or '') ~= '' then
return frame.args[1]
end
local sl = sitelink('itwiki')
if sl and sl ~= '' then
return sl
end
--[[ local t = mw.title.getCurrentTitle().text
if t and t ~= '' then
return t
end
]]
return ''
end
-- Restituisce il collegamento corrispondente a Wikiquote in italiano.
function p.itwikiquotelink(frame)
if (frame.args[1] or '') ~= '' then
return frame.args[1]
end
local sl = sitelink('itwikiquote')
if sl and sl ~= '' then
return sl
end
return ''
end
-- Restituisce il collegamento corrispondente a Wikisource in italiano.
function p.itwikisourcelink(frame)
if (frame.args[1] or '') ~= '' then
return frame.args[1]
end
local sl = sitelink('itwikisource')
if sl and sl ~= '' then
return sl
end
return ''
end
-- Restituisce il collegamento corrispondente a Wikinotizie in italiano.
function p.itwikinewslink(frame)
if (frame.args[1] or '') ~= '' then
return frame.args[1]
end
local sl = sitelink('itwikinews')
if sl and sl ~= '' then
return sl
end
return ''
end
-- Restituisce il nome della categoria di Commons collegata all'articolo attraverso Wikidata.
function p.commonslink(frame)
if (frame.args[1] or '') ~= '' then
return 'Category:'..frame.args[1]
end
if item and item.claims then
local cat = item.claims.P373
if cat and #cat == 1 and cat[1].mainsnak and cat[1].mainsnak.datavalue and cat[1].mainsnak.datavalue.value then
return 'Category:'..(cat[1].mainsnak.datavalue.value)
end
end
--[[ local t = mw.title.getCurrentTitle().text
if t and t ~= '' then
return 'Category:'..t
end
]]
return ''
end
-- Restituisce il nome della capitale o del capoluogo attuale dell'elemento.
function p.capitale(frame)
if (frame.args[1] or '') ~= '' then
return frame.args[1]
end
local parent = frame:getParent()
if parent and (parent.args.Capitale or '') ~= '' then
return parent.args.Capitale
end
return aggiornato(item,'P36',frame)
end
function p.capoluogo(frame)
return p.capitale(frame)
end
function p.valuta(frame)
if (frame.args[1] or '') ~= '' then
return frame.args[1]
end
local parent = frame:getParent()
if parent and (parent.args.Valuta or '') ~= '' then
return parent.args.Valuta
end
return aggiornato(item,'P38',frame)
end
function p.sito(frame)
if (frame.args[1] or '') ~= '' then
return frame.args[1]
end
local parent = frame:getParent()
if parent then
local args = parent.args
if (args.Sito or '') ~= '' then
return args.Sito
end
if (args['Sito ufficiale'] or '') ~= '' then
return args['Sito ufficiale']
end
end
return aggiornato(item,'P856',frame)
end
function p.banner(frame)
if (frame.args[1] or '') ~= '' then
return frame.args[1]
end
local parent = frame:getParent()
if parent and (parent.args.Banner or '') ~= '' then
return parent.args.Banner
end
return aggiornato(item,'P948',frame)
end
function p.stemma(frame)
if (frame.args[1] or '') ~= '' then
return frame.args[1]
end
local parent = frame:getParent()
if parent and (parent.args.Stemma or '') ~= '' then
return parent.args.Stemma
end
return aggiornato(item,'P94',frame)
end
function p.bandiera(frame)
if (frame.args[1] or '') ~= '' then
return frame.args[1]
end
local parent = frame:getParent()
if parent and (parent.args.Bandiera or '') ~= '' then
return parent.args.Bandiera
end
return aggiornato(item,'P41',frame)
end
function p.abitanti(frame)
if (frame.args[1] or '') ~= '' then
return frame.args[1]
end
local parent = frame:getParent()
if parent and (parent.args.Abitanti or '') ~= '' then
return parent.args.Abitanti
end
return aggiornato(item,'P1082',frame)
end
-- Restituisce l'etichetta dell'elemento rappresentante la bandiera relativa all'elemento dell'articolo
function p.bandiera_titolo(frame)
if item then
local claims = item.claims
if claims and claims.P163 and claims.P163[0] and claims.P163[1] == nil then
return mw.wikibase.label('Q'..claims.P163[0].mainsnak.datavalue.value['numeric-id'])
end
end
return mw.title.getCurrentTitle().text..' - Bandiera'
end
-- Restituisce l'etichetta dell'elemento rappresentante lo stemma relativo all'elemento dell'articolo
function p.stemma_titolo(frame)
if item then
local claims = item.claims
if claims and claims.P237 and claims.P237[0] and claims.P237[1] == nil then
return mw.wikibase.label('Q'..claims.P237[0].mainsnak.datavalue.value['numeric-id'])
end
end
return mw.title.getCurrentTitle().text..' - Stemma'
end
-- Restituisce la latitudine corrispondente all'articolo.
function p.latitudine(frame)
return coords('latitude',frame.args[1])
end
-- Restituisce la longitudine corrispondente all'articolo.
function p.longitudine(frame)
return coords('longitude',frame.args[1])
end
function p.fuso_orario(frame)
local link = false
for i, e in pairs(frame.args) do
if e == 'link' then
link = true
break
end
end
if item and item.claims and item.claims.P421 then
local claims = item.claims.P421
local zone = {}
for i, e in pairs(claims) do
local id = e.mainsnak.datavalue.value['numeric-id']
local z = normalize_timezone(mw.wikibase.label('Q'..id))
if link then
z = frame:preprocess('[[d:Q'..id..'|'..z..']]')
end
table.insert(zone, z)
end
return normalize_timezone_list(zone)
end
return ''
end
function p.disambig(frame)
if p.instanceof(4167410) then
return true
end
return false
end
function p.instanceof(arg)
-- arg = tonumber(arg.args[1] or arg)
if item and item.claims and item.claims.P31 then
local claims = item.claims.P31
for index, claim in pairs(claims) do
if claim.mainsnak and claim.mainsnak.datavalue then
local val = claim.mainsnak.datavalue.value
if val and val['numeric-id'] and arg == val['numeric-id'] then
return true
end
end
end
end
return false
end
return p
7izjyzdp22wpw0jtx5rgbc2acbdu6pg
Template:Anchor
10
65
183857
178481
2022-08-04T14:27:39Z
Xiplus
4323
已保护“[[Template:Anchor]]”:高風險模板:831引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
wikitext
text/x-wiki
{{#invoke:anchor|main}}<noinclude>
{{Documentation}}
</noinclude>
1yfzmrap4dbfhdb4n9r1o5o2u757mk7
Template:Do
10
159
183858
183043
2022-08-04T14:27:49Z
Xiplus
4323
已保护“[[Template:Do]]”:高風險模板:532引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
wikitext
text/x-wiki
<includeonly>{{listing
| type=do
| counter={{{counter|do}}}
| name={{{name|}}}
| alt={{{alt|}}}
| address={{{address|}}}
| directions={{{directions|}}}
| phone={{{phone|}}}
| tollfree={{{tollfree|}}}
| email={{{email|}}}
| fax={{{fax|}}}
| url={{{url|}}}
| hours={{{hours|}}}
| price={{{price|}}}
| lat={{{lat|}}}
| long={{{long|}}}
| lastedit={{{lastedit|}}}
| content={{{content|}}}
| image={{{image|}}}
| wikipedia={{{wikipedia|}}}
| wikidata={{{wikidata|}}}
| inline={{{inline|}}}
| {{{1|}}}}}</includeonly><noinclude>
{{documentation}}
</noinclude>
7hzo58bmqsnsj43ccnmvh7bocgs5srp
Template:Listing
10
287
183860
167250
2022-08-04T14:39:45Z
Xiplus
4323
已保护“[[Template:Listing]]”:高風險模板:2359引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
wikitext
text/x-wiki
<includeonly><bdi class="vcard"><!-- This is a microformat container class.
Anchor
-->{{#if:{{{wikidata|}}}
| {{anchor|{{{wikidata|}}}}}
}}<!--
Marker
-->{{Marker
|counter={{{counter|{{{type|listing}}}}}}
|type={{{type|listing}}}
|name={{{name|}}}
|lat={{{lat|}}}
|long={{{long|}}}
|image={{{image|}}}
|url={{{url|}}}
|islisting=yes
|wikidata={{{wikidata|}}}
}}<!--
名称和URL(以下不需要用到,打開後會出現重覆名稱)
--><!--{{#if: {{{url|}}}
|'''[{{{url}}} {{#if: {{{name|}}}| <span class="fn org listing-name">{{{name}}}</span>}}]'''
|{{#if: {{{name|}}}|<span class="fn org listing-name">'''{{{name}}}'''</span>}}
}}--><!--
别名
-->{{#if:{{{alt|}}}
|({{#ifeq:{{#invoke:IsLatin|IsLatin|{{{alt}}}}}|yes|''<span class="nickname listing-alt">{{{alt}}}</span>''|<span class="nickname listing-alt">{{{alt}}}</span>}})
}}<!--
地址
-->{{#if:{{{address|}}}
|{{#if:{{{name|}}}{{{url|}}}|,}}<span style="border:1px #444444 dashed;" cellpadding="1">地址</span> <span class="label listing-address">{{{address|}}}</span>
}}<!--
方位
-->{{#if:{{{directions|}}}
|(''<span class="listing-directions">{{{directions}}}</span>'')
}}<!--
电话
-->{{#if:{{{phone|}}}
|{{#if:{{{name|}}}{{{url|}}}{{{address|}}}{{{directions|}}}|,}}<abbr title="电话">📞</abbr> <span class="tel listing-phone">{{#invoke:LinkPhone|LinkPhone|{{{phone}}}}}</span>
}}<!--
免费电话
-->{{#if:{{{tollfree|}}}
|{{#if:{{{name|}}}{{{url|}}}{{{address|}}}{{{directions|}}}{{{phone|}}}|,}}<span style="border:1px #444444 dashed;" cellpadding="1">免费电话</span> <span class="tel listing-tollfree">{{#invoke:LinkPhone|LinkPhone|{{{tollfree}}}}}</span>
}}<!--
传真
-->{{#if:{{{fax|}}}
|{{#if:{{{name|}}}{{{url|}}}{{{address|}}}{{{directions|}}}{{{phone|}}}{{{tollfree|}}}|,}}<span class="tel"><span class="type"><abbr title="传真">📠</abbr></span><span class="value listing-fax">{{{fax}}}</span></span>
}}<!--
电子邮件
-->{{#if:{{{email|}}}
|{{#if:{{{name|}}}{{{url|}}}{{{address|}}}{{{directions|}}}{{{phone|}}}{{{tollfree|}}}{{{fax|}}}|,}}<abbr title="电子邮件">📧</abbr> <span class="email listing-email">[mailto:{{{email}}} {{{email}}}]</span>
}}。<!--
开放/营业时间
-->{{#if:{{{hours|}}}
|<abbr title="時間">🕘</abbr> <span class="note listing-hours">{{{hours}}}</span>。
}}<!--
入住与离店
-->{{#if:{{{checkin|}}}
|<span class="note"><span style="border:1px #444444 dashed;" cellpadding="1">入住</span> <span class="listing-checkin">{{{checkin}}}</span>{{#if:{{{checkout|}}}|,<span style="border:1px #444444 dashed;" cellpadding="1">離店</span> <span class="listing-checkout">{{{checkout}}}</span>}}</span>。|{{#if:{{{checkout|}}}
|<span class="note"><span style="border:1px #444444 dashed;" cellpadding="1">離店</span> <span class="listing-checkout">{{{checkout}}}</span></span>。
}}}}<!--
价格
-->{{#if:{{{price|}}}
|<abbr title="價格">💰</abbr> <span class="note listing-price">{{{price}}}</span>。
}}<!--
普通列表内容
-->{{#if:{{{content|}}}
|<span style="border:1px #444444 dashed;" cellpadding="1">簡介</span> <span class="note listing-content">{{{content|{{{1|}}}}}}</span>}}</span>{{#invoke:HiddenUnicode|HiddenUnicode|{{{name}}}{{{lat|}}}|{{{long|}}}{{{url|}}}{{{alt|}}}{{{address|}}}{{{directions|}}}{{{phone|}}}{{{tollfree|}}}{{{fax|}}}{{{email|}}}{{{hours|}}}{{{checkin|}}}{{{checkout|}}}{{{price|}}}{{{content|}}}{{{1|}}}}}<!--
維基計劃連結
-->{{#if:{{{wikipedia|}}}{{{wikidata|}}}
| <span class="listing-sister-icons">{{#if:{{{wikipedia|}}}
|  [[File:Wikipedia-icon.png|15px|class=listing-sister|link=w:{{{wikipedia|}}}|在維基百科上查看{{{wikipedia}}}]]
}}{{#if:{{{wikidata|}}}
|  [[File:Wikidata-logo.svg|16px|class=listing-sister|link=d:{{{wikidata|}}}|在維基數據上查看{{#invoke:Wikibase|label|{{{wikidata|}}}}}]]
}}</span>
}}<!--
Metadata - last edit date, "edit" link, etc.
Note: an additional edit link will be inserted by Javacript at end of this required "listing-metadata-items" span.
--><span class="listing-metadata"><!--
-->{{#if:{{{lastedit|}}}| (}}<!--
--><span class="listing-metadata-items"><!--
-->{{#if:{{{lastedit|}}}
| <bdi class="listing-lastedit">更新日期:{{#time: Y年M|{{{lastedit|}}}}}</bdi>
| <!-- "listing-metadata-items" must NOT be empty, otherwise the "edit" link (not generated but inserted by javascript) will be missing -->
}}<!--
--></span><!--
-->{{#if:{{{lastedit|}}}|)}}<!--
--></span><!--
-->{{#invoke:HiddenUnicode|HiddenUnicode|{{{name}}}{{{lat|}}}{{{long|}}}{{{url|}}}{{{alt|}}}{{{address|}}}{{{directions|}}}{{{phone|}}}{{{tollfree|}}}{{{fax|}}}{{{email|}}}{{{hours|}}}{{{checkin|}}}{{{checkout|}}}{{{price|}}}{{{content|{{{1|}}}}}}}}<!--
-->{{#invoke:EmailTracking|EmailTracking|email={{{email|}}}}}<!--
--></bdi>{{#if:{{{wikipedia|}}}| {{#if:{{{wikidata|}}}| | {{#ifeq:{{#invoke:String|find|{{{wikipedia|}}}|#}}|0|[[Category:列出了维基百科链接但未列出维基数据链接的条目]]|}} }} |}}</includeonly><noinclude>{{Documentation}}</noinclude>
jrbbcu7zcr8iko7dwa1kw5civlti8mh
Template:Mapframe
10
295
183861
109900
2022-08-04T14:39:55Z
Xiplus
4323
已保护“[[Template:Mapframe]]”:高風險模板:2456引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
wikitext
text/x-wiki
<includeonly>{{#invoke:map
| tag
| type=mapframe
| zoom={{{zoom|auto}}}
| align = {{{align|right}}}
| show={{{show | {{maplayers}} }}}
| latitude={{{1|}}}
| longitude={{{2|}}}
| text = {{#switch: {{{zoom|}}}
| 17 | 16 | 15 | 14 |13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1
| 0 = <div class="magnify" title="Enlarge map">{{maplink|{{{1|0}}}|{{{2|0}}}|zoom={{#expr: {{{zoom|}}} + 1 }} |class=no-icon}}</div>
}}{{{name|{{SUBPAGENAME}}的地图}}}<!--
-->{{#ifexist: Template:GPX/{{PAGENAME}} | <small id="GPX-track"> [[Template:GPX/{{PAGENAME}}|(编辑 GPX)]]</small>{{GPX indicator}} }}<!--
-->{{#if: {{{staticmap|}}} | <div class="wv-staticMap">[[File:{{{staticmap|}}}|{{#expr: {{{width|400}}} - 2 }}px|border|{{{name|Map of {{SUBPAGENAME}}}}}]]</div> }}
}}{{#ifeq: {{NAMESPACE}} | {{ns:0}}
| [[Category:拥有地图框架]]<!--
-->{{#if: {{{staticmap|}}} | [[Category:帶有靜態圖像的地圖]] }}<!--
-->{{#if: {{{align|}}} | [[Category:自定对齐方式地图]] }}<!--
-->{{#if: {{{height|}}}{{{width|}}} | [[Category:自定尺寸地图]] }}<!--
-->{{#ifexist: Template:GPX/{{PAGENAME}} | [[Category:Maps with GPX indicator]] }}
}}</includeonly><noinclude>{{documentation}}</noinclude>
rmwqto8jdzn1hrof2finipkds98xp90
Template:Marker
10
297
183866
167249
2022-08-04T14:40:45Z
Xiplus
4323
已保护“[[Template:Marker]]”:高風險模板:3011引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
wikitext
text/x-wiki
{{#ifeq:{{{islisting|}}}|yes||<span class="vcard">}}<!--
Item type and number holder
-->{{#invoke:map
| tag
| type=maplink
| geotype=Point
| ismarker=yes
| title={{{name|}}}
| url={{{url|}}}
| marker-symbol=-number-{{{counter|{{{type|listing}}}}}}
| marker-color={{#invoke:TypeToColor|convert|{{{type|listing}}}}}
| latitude={{{lat|}}}
| longitude={{{long|}}}
| zoom={{{zoom|17}}}
| group={{{group|{{{type|listing}}}}}}
| show = {{maplayers}}
| image={{{image|}}}
| wikidata={{{wikidata|}}}
| debug={{{debug|}}}
}}<!--
-->{{#ifeq:{{{islisting|}}}|yes||<!--
---->{{#if:{{#invoke:WikidataIB|getSiteLink|wiki=zhwikivoyage|qid={{{wikidata|}}}}}|{{#ifeq:{{#invoke:String|find|{{{name}}}|]]|plain=true}}|0|[[Category:附有維基導遊的標記,但沒有Wikilink]]|}}|
<!---->{{#if:{{#invoke:WikidataIB|getSiteLink|wiki=zhwiki|qid={{{wikidata|}}}}}|<span class="listing-sister-icons"> [[File:Antu wikipedia.svg|16px|class=listing-sister|link=w:{{#invoke:WikidataIB|getSiteLink|wiki=zhwiki|qid={{{wikidata|}}}}}|<bdi>{{#invoke:WikidataIB|getSiteLink|wiki=zhwiki|qid={{{wikidata|}}}}}</bdi> on Wikipedia]]</span><!--
------>|}}<!--
---->}}<!--
--></span>}}<noinclude>
{{documentation}}
</noinclude>
3qrbl8uwunecl2t75qsbnuxjqfnsjb0
Template:Outlinecity
10
344
183867
59811
2022-08-04T14:40:55Z
Xiplus
4323
已保护“[[Template:Outlinecity]]”:高風險模板:2418引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
wikitext
text/x-wiki
{{stbox|status=outline|type=city}}<noinclude>[[Category:条目分类模板]]</noinclude>
2vf8mknqv1to0153hy6kj2r55x4qvru
Template:Outlineregion
10
357
183868
59803
2022-08-04T14:41:05Z
Xiplus
4323
已保护“[[Template:Outlineregion]]”:高風險模板:972引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
wikitext
text/x-wiki
{{stbox|status=outline|type=region}}<noinclude>[[Category:条目分类模板]]</noinclude>
4s1dffmr0m4vppup731bvvbi9pnbgtw
Template:PoiMap2
10
378
183869
72660
2022-08-04T14:41:15Z
Xiplus
4323
已保护“[[Template:PoiMap2]]”:高風險模板:3799引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
wikitext
text/x-wiki
<includeonly>//tools.wmflabs.org/wikivoyage/w/poimap2.php?lat={{{1|51.47766}}}&lon={{{2|-0.00115}}}&zoom={{{3|15}}}&layer=W&lang={{CONTENTLANG}}&name={{FULLPAGENAMEE}}</includeonly><noinclude>{{Documentation}}
</noinclude>
0zphvzbdxgmx8awes8i8kt2zdr27tbq
Template:Regionlistitem
10
409
183870
2163
2022-08-04T14:41:25Z
Xiplus
4323
已保护“[[Template:Regionlistitem]]”:高風險模板:532引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
wikitext
text/x-wiki
{|
|-
| width="32px" bgcolor="{{{1}}}" | || '''{{{2}}}'''{{ #if: {{{3|}}} |({{{3}}})}}<br />{{{4}}}
|}<noinclude>
本模板為[[Template:Regionlist]]的一部分,請參見[[Template:Regionlist]]。
</noinclude>
h81sy8zyytjubklzae40cbc8j4zwbvq
Template:See
10
416
183871
158578
2022-08-04T14:41:35Z
Xiplus
4323
已保护“[[Template:See]]”:高風險模板:1906引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
wikitext
text/x-wiki
<includeonly>{{listing
| counter={{{counter|see}}}
| type=see
| name={{{name|}}}
| alt={{{alt|}}}
| address={{{address|}}}
| directions={{{directions|}}}
| phone={{{phone|}}}
| tollfree={{{tollfree|}}}
| email={{{email|}}}
| fax={{{fax|}}}
| url={{{url|}}}
| hours={{{hours|}}}
| price={{{price|}}}
| lat={{{lat|}}}
| long={{{long|}}}
| lastedit={{{lastedit|}}}
| content={{{content|}}}
| image={{{image|}}}
| wikipedia={{{wikipedia|}}}
| wikidata={{{wikidata|}}}
| inline={{{inline|}}}
| {{{1|}}}}}</includeonly><noinclude>
{{documentation}}
</noinclude>
kwsojksr4bc80gvp26tqgwxwi1wagdc
Template:Sleep
10
431
183873
101381
2022-08-04T14:41:45Z
Xiplus
4323
已保护“[[Template:Sleep]]”:高風險模板:576引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
wikitext
text/x-wiki
<includeonly>{{listing
|type=sleep
|counter={{{counter|sleep}}}
|name={{{name|}}}
|alt={{{alt|}}}
|address={{{address|}}}
|directions={{{directions|}}}
|phone={{{phone|}}}
|tollfree={{{tollfree|}}}
|email={{{email|}}}
|fax={{{fax|}}}
|url={{{url|}}}
|hours={{{hours|}}}
|checkin={{{checkin|}}}
|checkout={{{checkout|}}}
|price={{{price|}}}
|lat={{{lat|}}}
|long={{{long|}}}
|lastedit={{{lastedit|}}}
|content={{{content|{{{1|}}}}}}
|image={{{image|}}}
|wikipedia={{{wikipedia|}}}
|wikidata={{{wikidata|}}}
|inline={{{inline|}}}
}}</includeonly><noinclude>{{Documentation}}</noinclude>
7pkt7y9vacfqh6kl9jo7guj8cafpzgr
Template:WarningForPageRedirect
10
511
183875
31544
2022-08-04T14:42:05Z
Xiplus
4323
已保护“[[Template:WarningForPageRedirect]]”:高風險模板:726引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
wikitext
text/x-wiki
{{#ifeq:{{#invoke:IsRedirect|IsRedirect|{{{1|{{PAGENAME}}}}}}}|yes|
{{ombox
| type = move
| text = '''[[{{{1|{{PAGENAME}}}}}]]'''是一个重定向页,可能是由移动产生的。{{#ifexpr:{{PAGESINCATEGORY:{{{1|{{PAGENAME}}}}}}}>0|此分类中的子页面可能需要更新至新的分类中。检查页面底部的 {{#ifeq:{{{type|}}}|topic|PartOfTopic|IsPartOf}}模板并更改成新的参数。[[Category:移动页面后面包屑需修复的分类]]}}
}}[[Category:主页面是重定向的分类]]
}}<noinclude>
{{experimental}}
</noinclude>
kaywm1svbfi1c3hx2gnk90bc4zvpwjs
Template:交通
10
582
183876
161070
2022-08-04T14:42:15Z
Xiplus
4323
已保护“[[Template:交通]]”:高風險模板:669引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
wikitext
text/x-wiki
交通 [[File:Aiga groundtransportation.png|25px|link=]]<noinclude>[[Category:AIGA模板]]</noinclude>
c27p7ljdjnakrqp8abygcpz8ls85e2w
Template:住宿
10
586
183877
104714
2022-08-04T14:42:25Z
Xiplus
4323
已保护“[[Template:住宿]]”:高風險模板:774引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
wikitext
text/x-wiki
住宿 [[File:Aiga hotelinformation.svg|25px|link=]]<noinclude>[[Category:AIGA模板]]</noinclude>
a3m5aynl0jl1ls0wa4hy9b4e1vfv9zp
Template:客车
10
616
183878
104716
2022-08-04T14:42:35Z
Xiplus
4323
已保护“[[Template:客车]]”:高風險模板:1277引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
wikitext
text/x-wiki
-{zh-cn:客车;zh-hk:客車;zh-tw:公車;}- [[File:Aiga bus trans.svg|17px|link=]]<noinclude>[[Category:AIGA模板]]</noinclude>
4l9h0gemdiz4ixze7ccozunklflkfu7
Template:用餐
10
666
183879
161067
2022-08-04T14:42:45Z
Xiplus
4323
已保护“[[Template:用餐]]”:高風險模板:853引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
wikitext
text/x-wiki
用餐 [[File:Aiga restaurant.svg|12px|link=]]<noinclude>[[Category:AIGA模板]]</noinclude>
taubj4rpvtw6tthf940mjja2bfj468l
Template:航空
10
675
183880
104721
2022-08-04T14:42:55Z
Xiplus
4323
已保护“[[Template:航空]]”:高風險模板:1337引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
wikitext
text/x-wiki
航空 [[File:1a2.svg|20px|link=]]<noinclude>[[Category:AIGA模板]]</noinclude>
snjoz3y9uqezj9vllc1bko3i6lfbi01
Template:购物
10
685
183881
104722
2022-08-04T14:43:05Z
Xiplus
4323
已保护“[[Template:购物]]”:高風險模板:755引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
wikitext
text/x-wiki
購物 [[File:Aiga shops.svg|25px|link=]]<noinclude>[[Category:AIGA模板]]</noinclude>
cuyvvfgm4k7fok2ktkxbmtvzr42yqhs
Template:铁路
10
698
183883
104723
2022-08-04T14:43:25Z
Xiplus
4323
已保护“[[Template:铁路]]”:高風險模板:1364引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
wikitext
text/x-wiki
铁路 [[File:Bahn aus Zusatzzeichen 1024-15 A.png|25px|link=]]<noinclude>[[Category:AIGA模板]]</noinclude>
h8y597wtf3q2i3obl7wcos5w3ytuqjh
中国
0
1332
183849
183845
2022-08-04T12:02:54Z
Taxi passenger
15345
/* 移动支付 */
wikitext
text/x-wiki
{{pagebanner|China_Banner_2.jpg|disambig=中國}}
{{quickbar
| image=Gran Muralla China5184.JPG
| caption=The Great Wall of China.
| location=LocationPRChina.png
| flag=Flag of the People's Republic of China.svg
| capital=[[北京]]
| government=Single Party Socialist Republic
| currency=人民币/港幣/澳门元
| area=(中華人民共和國)9,596,960 km<sup>2</sup>
| population=(中華人民共和國)1,411,778,724(2020年官方统计值)
| language=官方語言:[[普通话会话手册|現代標準漢語(普通話/國語)]]<br>汉语地區語言:[[吴语会话手册|吳語]]、[[廣東話會話手冊|粵語]]、[[福州话会话手册|閩東語]]、[[閩南語會話手冊|閩南語]]、[[湘语会话手册|湘語]]、[[赣语会话手册|贛語]]、[[客家语会话手册|客家語]]等<br>其他少數語言:[[维吾尔语会话手册|维吾尔语]]、[[哈萨克语会话手册|哈萨克语]]、[[蒙古语会话手册|蒙古语]]、[[藏语会话手册|藏语]]、[[朝鲜语会话手册|朝鲜语]]、[[柯尔克孜语会话手册|柯尔克孜语]]、[[壮语会话手册|壮语]]
| religion= 道教 30%、佛教 11-18%、基督教(新教、天主教)3-5%、伊斯蘭教 1.5-2%、三教、無神論 53-59%.
| electricity=220V/50Hz (澳大利亞2/3腳插頭)
| callingcode=+86
| tld=.cn
| timezone=UTC +8
}}
{{COVID-19 box|[[2019冠状病毒病|新型冠状病毒感染的肺炎]]在中国大陆境内的流行高峰期已经过去,但中国政府仍然实施“动态清零”政策,部分城市有封锁措施,部分公共场所可能关闭,防疫政策未完全取消。为了阻断境外输入病例,境外来华人士需接受为期10天(7天集中隔离医学观察+3天居家健康监测)的隔离观察,[[2019冠状病毒病 (中国)|在中国大陆境内旅游]]也需要遵循当地的防疫政策。前往已开放的室内公共场所,请佩戴口罩并配合出示[[w:健康码|健康码]]、登记个人信息等要求。
具体请见[[2019冠状病毒病 (中国)]]}}
{{Disclaimerbox|'''注意:'''<br/>
#本文帶有歐美國家的地域中心傾向,請協助修正。<br/>
#由于现实原因,本文大多數內容'''僅僅涉及中国大陆地区''';關於其他地區,請見:[[香港]]、[[澳门]]及[[台湾]]。<br/><br/>
注:某些習慣上,'''中國'''有時候只指'''不包括香港、澳門地區的中華人民共和國實際領土'''。[[香港]]和[[澳门]]都是中華人民共和國的特别行政区,实行“一个国家,两种制度(一国两制)”,与現今中国大陆的社會主義不同;台湾本岛、[[金门]]、[[马祖]]和[[澎湖]]被中華民國政權管轄至今。这样编写,维基导游并不代表'''任何一方的政治立场'''。<br/>
}}
'''中国大陆'''是由'''中华人民共和国'''实际統治的区域。中华人民共和国位于[[东亚]],是世界人口最多,面积第三或第四大(官方声称是第三大)的主权国家。有14个陆上邻国,分别为[[东亚]]的[[朝鲜]]和[[蒙古]],[[南亚]]的[[阿富汗]]、[[巴基斯坦]]、[[印度]]、[[尼泊尔]]、[[不丹]],[[东南亚]]的[[缅甸]]、[[老挝]]、[[越南]],[[中亚]]的[[塔吉克斯坦]]、[[哈萨克斯坦]]和[[吉尔吉斯斯坦]],以及[[北亚]]横跨欧亚大陆的联邦制国家[[俄罗斯]]。
==了解==
中华文明五千余年的悠久历史中,既经历过长期的太平盛世,也经历过无数次巨大的动荡和革命。很多诸如马可波罗和戈特弗里德·莱布尼茨这样的西方人士通过丝绸之路和过去几个世纪更多的文化交流方式对中国产生了巨大的兴趣,中华文明的深邃和伟大让他们深深地着迷。同时,现今的中国也是世界上最具有影响力的国家之一,中华文明将继续让全世界的旅行者兴奋着迷。
===历史===
{{seealso|中國歷代首都之行}}
若想知道中国的历史,请点选[[w:中国历史|中国历史]]及[[w:中华人民共和国历史|中华人民共和国历史]],那两大维基的条目有做详尽的历史写照。中国历经过的时期有:史前时期、传说时期、夏商周时期(含春秋、战国时代)、秦汉时期、魏晋南北朝、隋唐五代时期、宋辽夏金元时期、明清时期、中华民国大陆时期及现今的中华人民共和国,至今约有五千来年的历史。
===政治===
中华人民共和国是一个目前由中国共产党执政的国家,而共产党作为执政党可以领导政府,共产党的最高负责人为总书记,一般也是国家的实际最高领导人。国家主席是礼仪性的国家元首,一般都由总书记兼任。中国共产党中央军事委员会主席是最高军事统帅,但一般和国家主席、中国共产党中央委员会总书记是同一个人,所以中国共产党中央委员会总书记是实际上的最高统帅。政府由行政部门——国务院、一院制的立法机构和最高权力机构——全国人民代表大会(但是实质上,几乎每项法案的提案都要经由中国共产党中央政治局讨论,是实质上的议会,相当于英国的下议院、美国的众议院;经中央政治局通过后,再提交到全国人民代表大会或其常设机构——全国人民代表大会常务委员会通过,才能形成正式法案),还有国家军委、最高人民法院和最高人民检察院组成。中央委员会总书记既是国家最高领导人,拥有治理国家的全部权利,身兼国家军事主权和政治主权。现任中共中央总书记兼国家主席是习近平,国务院总理是李克强。
中华人民共和国的行政规划,中华人民共和国共有34个省级行政区域,包括23个省,5个自治区,4个直辖市,2个特别行政区。
包括:北京市,天津市,上海市,重庆市,河北省,山西省,辽宁省,吉林省,黑龙江省,江苏省,浙江省,安徽省,福建省,江西省,山东省,河南省,湖北省,湖南省,广东省,海南省,四川省,贵州省,云南省,陕西省,甘肃省,青海省,台湾省,内蒙古自治区,广西壮族自治区,西藏自治区,宁夏回族自治区,新疆维吾尔自治区,香港特别行政区,澳门特别行政区。一般每个一级行政区下都设有若干地级市等二级行政区,但四个直辖市和两个特别行政区下不设地级市。省政府拥有各自省内事宜的权力,而自治区政府比一般省政府都更大的自治权,但现实中一般不认为自治区和省有太大差别,所有自治区的政府除了可以使用自己独立的民族语言外,并无其他独立的司法和行政权。
与上述地区相比,香港特别行政区、澳门特别行政区和台湾省都有相对独立的政府部门,但是大陆政府主张它们是中华人民共和国的一部分。实际上,这是一个长久的争议话题,包括港独、台独、藏独等均是政治敏感话题,请不要与本地人谈论这些问题,以避免争吵。
===民族和习惯===
中国是一个有着不同文化、语言、习惯和经济水平的充满差异性的国家。经济发展状况的差异在全国各地尤为明显。但自从1980年代以来,邓小平政府宣布改革开放,开始实行社会主义市场经济并推行经济体制改革。中国大陆近年至2010年,GDP超过72000亿美元,已经成为美国之后的世界第二经济大国,普遍认为中国目前仍然是世界上发展速度最快的经济体,但是人均国民生产总值仍位于世界中等水平(第89位),并逐渐受到资源限制和贫富差距加大的制约。中华人民共和国省份中,广东为GDP最高的第一强省,浙江为人均收入最高的第一富省。中国的贫富差距正在日益趋于平均,截止2016年中国国内以几乎消灭贫困。所有乡村(包括大山深处的村庄)全部铺设了现代化道路,设有路灯。
这样一个幅员辽阔的国家,文化的多样性自然就不足为奇了。中华人民共和国官方承认的民族有56个,最大的民族是汉族,大约占人口总数92%。即便是汉族,也有很多相互之间不能理解的地方方言(例如粤语、吴语、客家语等);大部分语言学家把这些方言归类为基本都使用同一套中文文字的不同语言。很多少数民族也都有他们各自的语言。和大部分人所认为的不同的是,并没有单独统一的汉文化,虽然他们都有共同之处,比如儒家和道教思想,汉族本身的区域性差异也是非常巨大的。很多习俗和神灵都是有着明显的地域(有时候甚至村与村都不一样)特征的。春节和其他全国性的节日在各地也有着很大的不同之处。很多和婚礼、葬礼、迎接新生儿有关的习俗也都大有不同。总体说来,现代的中国社会没有明显的宗教倾向,并且在日常生活的背后还是隐藏着中国的传统文化。在少数民族中,壮族、满族、回族和苗族人口是最多的。其他主要的少数民族包括:朝鲜族、藏族、蒙古族、维吾尔族、吉尔吉斯人甚至还有俄裔。事实上,中国是除了韩国和朝鲜之外朝鲜族人口最多的,而且中国的蒙古族人数比蒙古共和国的蒙古人都多。很多少数民族都有不同程度的语言和风俗的流逝。
在海外部分中国人的行为或许不能被接受:
* 吸烟:几乎所有地方,包括有“请勿吸烟”标示的地方,包括健身俱乐部、足球场甚至医院,都有人在角落吸烟。北京现在不允许在大部分餐厅吸烟,也很少有餐厅会有吸烟区域。对于公共场合禁烟,各地执行程度不一。在一些并不高档的场所,一般都没有摆设烟灰缸。在中国,民航客机和高速铁路列车是对禁烟执行的最为彻底的公共场所。如果您所在的国家在绝大数公共场合已经进行了禁烟,那么您可能会对中国社会的禁烟力度感到遗憾。
* 盯着看:这在很多国家都很常见,但是几乎都是出于好奇而不是敌意。如果有人向你走过来然后端详你(就像看电视那样),请不要过度反应,这是没有什么害处的!少部分时间中国人看待日本人是有一定敌意的,这个国家给中国造成了不可磨灭的民族伤痕。但这部分中国人中也有人开始逐渐接纳日本人的优点。
* 喝酒:在吃饭的时候晚辈给年长的人敬酒是很常见的。别人敬酒你不接(即使是出于善意)也会被认为是很大的不尊重。
* 大声说话、吵闹或者吵架:这都很常见。这估计是您刚到中国发现的第一个现象。大声说话虽然有可能是因为说话者生气了或者在吵架,但是并不一定是这样,中国的有一部分民族因为生活中需要大声交流,所以保留下来了说话声音比较大的习惯,但如果你能提醒他小声一点,只要能听得懂你的语言,所有中国人都会去注意自己的言行。在中国诸如打架这样的暴力事件并不常见,但是也会发生。如果发现这样的事情,请离开,不要参与。在中国几乎从来没有人将外国人做为攻击的目标,只要作为外国人的您不是十分过分,那么一般中国人都是非常尊重您的。如果您在乘长途汽车或者火车时无法接受这种现象可以寻找工作人员协助处理。
有些长期居住在中国的外国人说这些现象日益恶化,而有些人说的却正好相反。通常来说,有可能是因为有时大量对于城市生活不熟悉的农民工涌入了城市。
总体来说,中国人还是比较爱说爱笑的,因为中国本来就有很多民族,而且还有很多从其他地方来的外来人,所以他们也习惯了以不同的方式处理事情。确实,中国人走到一起的一个常见话题之一就是讨论各自方言之间的异同。他们都很习惯打手势,而且对于非语言的笑话或者双关语反应得很快。中国人非常喜欢小孩,对他们很宠爱,并且关心得无微不至,这是中国人民对生命的尊重,孩子是人类的未来。如果您有小孩的话,也一起带上吧!
====数字习俗====
对于大部分中国人来说3、6、8、和9是吉祥数字。
* “三”意味着三阳开泰,三阳预示着福、寿、禄三路神仙。
* “六”代表着六六大顺。很多人都选带六的日子来结婚,比如说6号,16号或者26号。
* “八”(bā)听起来像发(fā),所以很多人都相信八是和财运联系在一起的。所以,2008年的北京奥运会选在2008年8月8日开也没有什么好奇怪的了。
* “九”被认为有长长久久的意思,并且在中国人的思想中为最大。
* “四”(sì)对大多数中国人来说是一个忌讳,因为发音听起来像“死”(sǐ)。所以在中国的一些大型商场、住宅里面,索性直接跳过4号楼,3号楼的下一号楼是5号楼。
* “73”、“84”在中国老人中也是比较忌讳的两个数字。因为在中国古代的圣人中,孔子是在73岁时去世的,孟子是在84岁时去世的。
* “250”在中国大众中也是一个特别不受欢迎的数字。人们常把说话不正经、办事不认真、处事随便、好出洋相、脑袋很笨的人叫做“二百五”,是用来骂人的脏话。
* “38”多指比较八卦、啰嗦、嫌人的女人,也可以指有这些特征的像女人一样的男人,也是用来骂人的脏话。
* “2”是指对方极为愚蠢,笨蛋的脏话,主要用于北方地区。
* “18”,中国有“十八层地狱”一说,部分住宅的18层用17A代替或做其他用途。
总体而言,中国人喜欢谐音。有时“四”也可以是吉祥数字。很多人在2013年1月4日注册结婚证,因为那一天听起来像是“爱你一生一世(201314)”。
==== 送礼习俗 ====
{{cquote|礼尚往来,往而不来非礼也,来而不往亦非礼也。}}
说的便是中国人们的礼物交换。中国自古以来就有“礼仪之邦”之称,礼被认为是中国传统文化的核心,是中华民族宝贵的精神财富。“礼之用,和为贵”实际上揭示了中国传统礼的本质精神。邓云乡著《红楼风俗谭》把其中的送礼分为八类,概括了送礼的大体类型:
# 纯属友谊情感的馈赠。如第三十一回写史湘云送姐妹们绛纹石戒指,东西虽小,但有送有收,也属送礼。
# 初次见面的馈赠,即常说的见面礼。其中有为友情的,有因礼貌的,还有另存目的的,情况较为复杂。
# 红、白喜事的送礼。娶亲、聘女、过寿是红喜事;死人是丧事,但白寿也当喜事办,叫“白喜事”。此外尚有盖房上梁、乔迁新居、做佛事等,都当喜事送礼。各种红白喜事送礼,除关系特殊者外,一般是“礼”的成分多而“情”的成分少了。
# 生日送礼,一般生日与整寿祝寿的礼不同,所送礼物也因过生日者的身分地位而有区别。
# 节礼,过年、元宵、清明、端午、中秋、冬至、腊八等大小节日都要送礼。节礼亲友之间要送,上下级之间要送;宫廷也要向王公贵戚家送,不过不说“送”,而叫“赏”。还有借送节礼来“打秋风”的,即倚仗权势,借着给富豪之家送一点不值钱的礼物(如年节送对联等),换取银钱财物等价值更重的回礼,其送礼为名,图利是实。
# 送土特产,过去叫“馈送土仪”。古代旅行不易,长途跋涉到外地,总要带些地方特产送礼。如《红楼梦》第十六回写黛玉由江南回来,“将些纸笔等物分送与宝钗、迎春、宝玉等”,也属于这一类。
# 穷富亲友之间的礼物。如刘姥姥和荣国府之间的礼物往来,虽然刘姥姥只送了点瓜果干菜而却得到了更多的回礼和资助,但其性质不同于“打秋风”、敲竹杠。
# 钻营的送礼。即以送礼为手段去结交权贵,拉拢关系,进而达到投机钻营的目的,得到更大好处。这在政府的治理之下,逐渐减少了。
除此之外:
* 中国人忌讳送伞,因为“伞”(sǎn)谐音“散”(sàn)。
*在中国也尽量避免送鞋,特别是情侣之间。因为送鞋代表着分离,通常会用作分手礼品所用。
* 在中国,给人送礼千万不能送钟(尤其是给老人和病人),因为“送钟”在汉语中与“送终”(sòngzhōng)读音相同。
* 送水果时,不能送梨,因为中国人不喜欢分离。而“梨”与“离”(lí)同音。
* 中国人喜欢带有蝙蝠图案的物品,“蝠”与“福”(fú)同音。
* 中国人不会当着客人的面打开礼物,必须由收礼者打开,或者等到送礼人离开时才能打开。否则会被认为是不礼貌的行为。这与西方不同。
==== 做客习俗 ====
* 一般不用提前通知主人,但要接受别人的邀请,否则将被视作无礼。
* 在每个地区,都会有相应的礼节与忌讳,请入乡随俗。
===气候和地形===
由于中国地域广袤,所以气候会复杂多样,从南方的热带地区到北方的亚北极。[[海南]]岛的纬度和牙买加大致相同,而[[哈尔滨]],中国北方最大的城市之一,则和蒙特利尔的纬度和气候相当。中国北方四季分明,夏天炎热,冬天寒冷。而南方气候就会更加温润。越靠近西北气候越干燥。一旦您离开中国东部,踏上壮丽的西藏高原或者甘肃和新疆的草原,那么您会领略到那里的土地很辽阔。
在计划经济时代,规定在秦岭淮河以北地区可以供暖,而长江以南地区不能供暖——这意味着像上海、南京这样的城市,虽然温度经常低于零度,但是依然没有暖气。这一规定虽然早就失去了原来的作用了,但是影响还是显而易见的。总体说来,中国人暖气使用较少,建筑的隔热也较少,在相同的天气下,中国人比西方人穿得厚。在学校、商场或者办公楼,就算房间里面有供暖,过道也是没有的。很少有双层玻璃窗。学校的老师和学生在教室都穿冬装。空调虽然日渐普遍,但是过道同样没有,并且经常都是门窗大开。
中国的地形范围很广,内陆有山脉、高原,中部和西部有戈壁。东部则以平原、三角洲和丘陵为主。广州和香港周围的珠三角地区和上海周围长三角地区是全球经济的动力中心,还有北京周围的华北平原和黄河流域。[[珠穆朗玛峰]]处于西藏自治区和尼泊尔的边境上,高度为8848米,是世界上最高的山峰。西北部新疆维吾尔自治区的[[吐鲁番]]盆地是中国的最低点,海拔为-154米,它也是世界陆地中仅次于[[死海]]海拔第二低的地方。
===节假日===
{{seealso|中国黄金周}}
中国每年有六个重大节日:
* '''农历新年'''或者春节——是农历的新的一年的开始,但不止是农历正月初一,民间从农历十二月(被称为腊月)廿三(或廿四)到正月十五,公历一月底到二月中旬。春节是中国全民最大的节日,所有民族都会一同庆祝。相当于欧美国家的圣诞节。
* '''清明节'''——一般在4月的4-6日间,或者叫扫墓日,这一天所有人都去给自己的先人扫墓并送上祭拜品。通往公墓的交通在这一天会非常拥堵。
* '''劳动节'''——5月1日
* '''端午节'''——农历的五月初五,一般在公历的5月到6月之间。这一天人们要赛龙舟、吃粽子。
* '''中秋节'''——农历八月十五,一般在公历10月份。中秋节是中国仅次于春节的隆重节日。中秋节起源于上古时代,普及于汉代,定型于唐朝初年,盛行于宋朝以后。中秋节是秋季时令习俗的综合,其所包含的节俗因素,大都有着古老的渊源。中秋节以月之圆兆人之团圆,为寄托思念故乡,思念亲人之情,祈盼丰收、幸福,成为丰富多彩、弥足珍贵的文化遗产。在这天大家会一同食用月饼,又叫月团、丰收饼、宫饼、团圆饼等,是古代中秋祭拜月神的供品。月饼最初是用来祭奉月神的祭品,后来人们逐渐把中秋赏月与品尝月饼,作为家人团圆的一大象征。
* '''国庆节'''——10月1日,是为了庆祝1949年新中国成立。
春节和国庆节一般假期都不止一天;几乎所有工人春节假都有至少一星期,有的甚至有两星期或者三星期,学生会放四到六周寒假。国庆放假一般一星期。
'''春节'''期间一般都很忙。这不仅仅是最长的假期,而且也是传统走亲访友的时间。这一段时间,整个国家基本上都处于休息状态。基本上所有外出打工的人都会回家。这几乎是他们回家的唯一机会。人人都想回家,中国人口众多!在春节期间,很多商店都会关门好几天、一周,甚至更久,因此,如果您在中国大陆没有亲戚或者好友,那不建议您在这一段时间去中国旅游。
在七月初的中国大陆,会有大批大学生放假回家(约两千多万!),然后在八月底他们又要返校,这段时间从东部沿海地区到四川、甘肃、西藏和新疆的交通格外拥堵。
如果要列出一个中国节日的完整清单的话,那么这个清单就会很长,因为很多地区和民族都有他们独特的地方性节日。以下是上面没有提到的但是同样是非常重要的节日:
* '''元宵节'''(或者上元节)——农历正月十五,紧随春节,一般在公历的二月到三月。在很多城市,例如泉州,全市上下都会被装点上各式各样的灯笼。
* '''七夕'''——农历七月初七,是中国的情人节。
* '''中元節'''——农历七月十五,又称“鬼节”。
* '''重阳节'''——农历九月初九,一般在公历的10月份。
* '''冬至'''——12月22日或者23日。
除了以上的节日,中国很多地方,特别是大城市,也过西方的节日。在圣诞节期间,大街小巷都能听到圣诞颂歌,大部分都是英文的,也有中文版本的。很多商店都会进行装饰,有的店员会穿上圣诞的衣服。情人节期间,很多餐馆都会推出特殊的晚餐。中国大陆的基督徒也会在政府批准的新教和天主教教堂举行礼拜或者弥撒。
===书籍===
'''旅游篇:'''
* '''马可.波罗游记''',作者马可.波罗 - 威尼斯旅行家在中国的旅途故事(''参阅:'' [[On the trail of Marco Polo]])
* '''Dialogues Tibetan Dialogues Han''',作者:Hannü (''ISBN 9789889799939'')
* '''Behind the Wall- A journey through china''',作者:Colin Thubron. Thubron重述了他1987年在中国从北京到嘉峪关的旅行。
'''文学篇:'''
* '''《大地》''',作者赛珍珠 - 关于20世纪世纪之交时中国农民生活的经典之作,赛珍珠点燃了20世纪30年底美国公众对于中国的兴趣。赛珍珠女士关于中国的作品使她获得了1938年诺贝尔文学奖。
* '''《三国演义》''' - 中国经典名著,讲述了汉朝末年三国时期群雄并起的年代中的英雄豪杰。以对于兵法和政治策略的描述见长。四大名著之一。整个东亚地区,不断有关于这一题材的电视、电影、动画和游戏。
* '''《水浒传》''' - 一个关于在宋代时期居住在淮河流域的人和腐朽的政府相抗衡的故事。以主角们对于现实统治的反抗而著称。四大名著之一。
* '''《西游记》''' - 可能是最出名的中文小说,关于唐僧在孙悟空、猪悟能(八戒)和沙悟净的协助下西天取经的玄幻小说。以出色的想象力见长。四大名著之一。
* '''《红楼梦》''' - 贵族家庭三家人的恩恩怨怨。以对中国贵族家庭生活的入微描写而见长,被认为是中国文学的顶尖之作。四大名著之一。
* '''《红高粱家族》''' - 背景是民国时期的山东高密,男女主人公历经曲折后一起经营一家高粱酒坊。但是在日军侵略战争中,除男主人公(姜文扮演)及幼子外,女主人公和酒坊伙计均因参与抵抗运动被日本军虐杀的故事。作者莫言获得2012年诺贝尔文学奖。
'''历史篇:'''
* '''《紫禁城的黄昏》'''作者:R.F. Johnston (''ISBN 0968045952'')。Kindle上也有。Johnston(庄士敦)是历史上唯一一位被允许进入小朝廷的外国人,他生于英国,是皇上的老师。庄士敦身居高位,在紫禁城和颐和园都住过。《紫禁城的黄昏》是对于他亲眼所见的重大事情的陈述。
* '''《追寻现代中国》'''作者:Jonathan Spence - 是一部由耶鲁大学教授撰写的1644年以后的中国历史。
* '''《万历十五年》'''作者:黄仁宇 - 描述了中国明朝的一个多事之年。它是一部关于这个时期的最著名的史学著作。
* '''《中国新史》'''作者:John K. Fairbank - 一名美国著名学者的最后一部著作,它对现代汉学有着深远的影响。
* '''《剑桥中国史》''' - 剑桥大学出版社出版的一个系列,包括了早期和现代中国历史。这是最大最全面的关于中国历史的英文著作。
* '''《开放的帝国:1600年前的中国历史》'''作者:Valerie Hansen - 详细地描述了从商代到明朝中国历史、文化、社会经济的发展。
* '''《1421中国发现世界》'''作者:Gavin Menzies (''ISBN 0553815229'') - 关于中国对于探索世界并绘制世界地图所作出的努力,这本书颇有争议。有意思的是,本书暗含中国是发现新大陆的第一个国家,而各界对这一观点都表示批评的态度,并指出这是中国学术界的臆想。
* '''《北京的六分仪》'''作者:衞周安 - 总结了关于中国比想象中开放而且并不如想象中排外的近代思想。
* '''《南京大屠杀》''' 作者:Iris Chang (''ISBN 0140277447'') - 被世人遗忘的二战大屠杀。
* '''《拉贝日记》''' 作者:John Rabe - 对于二战中日本军人所犯罪行和Rabe最终成功拯救大约250000无辜生命的第一首描述。
* '''《红色中国布鲁斯——从毛到现在,我的长征》'''作者:黄明珍,加拿大环球邮报记者。概述描述了他作为第一个外国交换生在文革后的中国生活以及他一直到20世纪90年代中期作为一名记者在中国的生活经历。
===电影===
*贝纳多·贝托鲁奇 - '''《末代皇帝》''' (1987)
*张艺谋 - '''《大红灯笼高高挂》''' (1991)
*陈凯歌 - '''《霸王别姬》''' (1993)
*张艺谋 - '''《活着》''' (1994)
*吴子牛 - '''《南京1937》''' (1995)
*吴天明 - '''《变脸》''' (1996)
*张艺谋 - '''《有话好好说》''' (1997)
*谢晋 - '''《鸦片战争》''' (1997)
*张扬 - '''《洗澡》''' (1999)
*冯小刚 - '''《没完没了》''' (1999)
*张艺谋 - '''《一个都不能少》''' (1999)
*王小帅 – '''《十七岁的单车》''' (2001)
*张艺谋 - '''《千里走单骑》''' (2005)
*吉安尼·阿米里奥 - '''La stella che non c’è''' (《消失的星星》) (2006)
*张元 - '''《看上去很美》''' (2006)
*李仁港 - '''《三国之见龙卸甲》''' (2008)
*罗杰·斯波蒂伍德 - '''《黄石的孩子》''' (2008)
==地区==
一般情况下,中国被分作了七大地理区域,分别为华北、东北、西北、华东、中南和西南,这里并没有采用这样的划分方法,而是做了一些调整,使之更适应于旅行者。由于现实原因,这里只包含了中国大陆。
{{Regionlist
| regionmap=Map of China (zh-hans).png
| regionmaptext=中国大陆地理分区(此图不含[[南海诸岛]])
| regionmapsize=500px
| region1name=[[中国东北|东北]]
| region1color=#d5dc76
| region1items=[[辽宁]]、[[吉林]]、[[黑龙江]]
| region1description=历史上被称作满洲,而现在被称作东北,包含了“老工业区”城市、广阔的森林、漫长多雪的冬天。
| region2name=[[华北]]
| region2color=#b383b3
| region2items=[[山东]]、[[山西]]、[[内蒙古]]、[[河南]]、[[河北]]、[[北京]]、[[天津]]
| region2description=黄河流域,中华文明的摇篮和历史中心。
| region3name=[[中国西北|西北]]
| region3color=#71b37b
| region3items=[[陕西]]、[[甘肃]]、[[宁夏]]、[[青海]]、[[新疆]]
| region3description=长安,中国1000年来的故都,丝绸之路向西延伸横跨沙漠、山脉、草原游牧民族地区和伊斯兰地区。
| region4name=[[中国西南|西南]]
| region4color=#4da9c4
| region4items=[[西藏]]、[[云南]]、[[广西]]、[[贵州]]
| region4description=异国情调、少数民族、壮丽的景色和背包客的天堂。
| region5name=[[华南]]
| region5color=#a78379
| region5items=[[安徽]]、[[四川]]、[[重庆]]、[[湖北]]、[[湖南]]、[[江西]]
| region5description=长江流域、农场、山区、河流峡谷、温带和亚热带森林。
| region6name=[[中国东南|东南]]
| region6color=#ffd0d0
| region6items=[[广东]]、[[海南]]、[[福建]]
| region6description=传统贸易中心、强大的制造业与海外华人的祖籍。
| region7name=[[华东]]
| region7color=#d56d76
| region7items=[[江苏]]、[[上海]]、[[浙江]]
| region7description=“鱼米之乡”(相当于中国的“牛奶和蜂蜜的土地”),传统的水乡,和当代中国的主要经济中心。
}}
== 城市 ==
中国有许多著名的大城市。
* [[北京]],中国首都和文化中心,2008年奥运会和2022年冬奥会的举办城市。金、元、明、清、中华民国(北洋政府时期)等五个朝代在此定都,因此分布着大量的历史古迹。
* [[天津]],紧邻北京市的城市,有很多西方国家曾在此设立租界,因而拥有大量的西洋历史建筑,海河的夜景以及各式各样的桥梁是天津景观的特色。北京到天津的高速铁路车程约30分钟。
* [[上海]],中国人口最多的城市和经济中心,富有很多购物场所。
* [[南京]],“六朝古都”“十朝都会”,一个有很多历史古迹的地方,江苏省省会。
* [[苏州]],一座具有千年历史的古城,有着很多中式的园林。
* [[杭州]],“上有天堂下有苏杭”,著名的丝绸产地之一。
* [[郑州]],“绿城”,华夏文明发祥地,是轩辕皇帝的故里,河南省省会,具有少林寺等众多景点。
* [[西安]],“十三朝古都”,兵马俑、华山等旅游景点世界闻名,陕西省省会。
* [[厦门]],福建省沿海的滨海城市。
* [[大连]],辽宁省的滨海城市,世界花园城市,经济发达。
* [[青岛]],山东省的滨海城市,经济发达。
* [[广州]],中国南方最发达的城市之一,岭南地区的文化中心。
* [[深圳]],中国南方经济最发达的城市之一,以金融业和高科技产业而闻名,但旅游资源匮乏,与[[香港]]接壤。
* [[武汉]],中国中部经济最发达的城市之一,别称“江城、东方芝加哥”,湖北省省会,有“九省通衢”的美誉。
* [[成都]],中国西部经济中心之一,中国国宝大熊猫繁育基地所在地,三国时期“蜀国”的首府。
* [[重庆]],中国西部经济中心之一,在第二次世界大战期间为中华民国的临时首都,现为中国面积最大的直辖市。
* [[桂林]],“桂林山水甲天下”,是一个非常受欢迎的旅游目的地。
* [[昆明]],“春城”,云南省省会。
* [[沈阳]],“一朝发祥地,两代帝王都”,辽宁省省会。
* [[合肥]],综合性国家科学中心,“一带一路”和长江经济带战略双节点城市,国家重要的科研教育基地,现代制造业基地和综合交通枢纽,安徽省省会,700万人口。
* [[宁波]],简称甬,世界第四大港口城市,中国大陆综合发展水平前15强中心城市,长三角五大都市圈中心城市之一,长三角南翼经济中心,国家历史文化名城,连续五次蝉联全国文明城市。
你可以乘坐四通八达的[[高铁]]前往上述这些地方旅游。
==其他目的地==
* [[万里长城]] - 长度超过8000公里,这个古长城是中国的象征。
* [[兵马俑]] - 中国十大名胜之一,号称“世界第八大奇迹”,被联合国教科文组织列为世界文化遗产。
* [[海南]] - 热带天堂岛屿,目前正在进行大规模的旅游开发。
* [[九寨沟]] - 以熊猫栖息地、美丽的瀑布和多彩的湖泊闻名。
* [[乐山]] - 以一整座山雕刻而成的乐山大佛而闻名(靠近[[峨眉山]])。
* [[喜马拉雅山]] - 在西藏和尼泊尔交界处,世界上最高的山脉。
* [[泰山]] - “五岳”之首,中国道教五大圣山之一,由于其历史渊源也是登山人数最多的山。
* [[西藏]] - 西藏大部分都是藏佛教教徒,有浓郁的传统西藏文化,感觉好像身处于另一个世界。
* [[吐鲁番]] - 在新疆的穆斯林地区,这一地区以葡萄、严峻的天气条件和维吾尔族文化闻名。
* [[云冈石窟]] - 这些依山的洞穴和石窟总数超过50个,石窟中有超过51000个佛像。
* [[黄山]] - 中国十大风景名胜之一,世界文化与自然遗产,同时也为世界地质公园。
==抵达==
===签证===
{{seealso|w:中华人民共和国签证政策|香港出入境手冊|w:澳門簽證政策}}
大部分访问大陆的游客都需要签证(visa)。大部分情况下,您需要在离开前从中国大使馆或者领事馆获取签证。前往香港和澳门的签证也可以在中国大使馆或者领事馆申请,但是不能和前往大陆的签证有所区分。但是,[[香港]]和[[澳门]]对大部分西方国家游客免签。
但是,这一规定最重要的一个例外是在某些机场的转机大部分机场允许乘客没有签证而在机场待24小时(前提是旅客不离开机场),但是上海浦东机场和虹桥国际机场允许没有签证停留48小时。
对于大多数外国公民,以任何理由进入中国大陆基本上都是需要签证的。然而,[[日本]]、[[新加坡]]和[[文莱]]公民可以免签证在中国大陆停留15天。此外,根据双边协议,[[白俄罗斯]]、[[格林纳达]]、[[汤加]]、[[塞舌尔]]、[[巴哈马]]、[[巴巴多斯]]、[[斐济]]、[[卡塔尔]]、[[塞尔维亚]]、[[厄瓜多尔]]和[[阿联酋]]公民可以免签证在中国大陆停留30天。[[毛里求斯]]公民可以免签证在中国大陆停留60天。上述国家的公民以免签证待遇入境后只能进行旅游、探亲访友、商务等活动。[[圣马力诺]]、[[波黑]]和[[亚美尼亚]]公民则可以以任何理由免签证进入中国大陆并停留90天。
[[香港]]和[[澳门]]的中華人民共和國籍公民访问中国大陆时需要向中国旅行社申请回乡证,中旅是唯一的授权机构。回乡证大小和信用卡相同,有效期1年,在有效期内都可以停留,也没有雇佣方面的任何限制。[[臺灣|台湾]]居民可以在[[大连]]、[[福州]]、[[海口]]、[[青岛]]、[[三亚]]、[[上海]]、[[武汉]]、[[厦门]]的机场以及在[[香港]]和[[澳门]]的中旅申请有效期为3个月的入境文件。台湾旅客必须持中华民国护照、台湾人身份证和台胞证。可以在[[大连]]、[[福州]]、[[海口]]、[[青岛]]、[[三亚]]、[[上海]]、[[武汉]]、[[厦门]]机场申请台胞证。入境费用为100元加上50元一次性台胞证。旅客出行前须查看最新的政策信息。
{{infobox|签证类型|
* '''G签''' - 中转
* '''L签证''' - 旅游、访亲
* '''F签证''' - 商务、实习、短期调研
* '''Z签证''' - 工作签、多次出入
* '''X签证''' - 6个月以上学习
}}
旅游签证申请比较容易,也不需要邀请函(商务签和工作签都需要)。一般的单次旅游签停留期是30天,有效期是三个月。双次出入境签证有效期为六个月。有的国家的游客可以拿到90天的旅游签。
可以在各地出入境管理局申请旅游签延期,需要的资料是:有效护照、签证延期申请表(含两张2寸证件照),一份您在当地派出所拿到的临时居住表。[[上海]]的进出境管理局位于浦东明生路1500号。延期需要5个工作日。
有的旅客需要双次签证。例如,如果您持有单次签证,然后您去了香港或者澳门,从那里再次返回中国大陆则需要新的签证。按照规定,在香港,多次出入境签证只能给持香港身份的人,但是相关部门愿意稍加变通,也可以给短期的相关居民(包括交换生)三个月的多次出入境签证。在这种情况下,建议直接向中国政府申请,因为有的代理人不愿意代表您提交这样的申请。
落地签只能在[[深圳]]或者[[珠海]]的经济特区申请,也只能在这些地区使用。在经由罗湖火车站(一定记住不是[[落马洲]])前往[[深圳]]时,可以获取只限于深圳使用的有效期5天的签证,申请时间不限于工作时间,很多国籍游客([[爱尔兰]]、[[新西兰]]或者[[加拿大]])的现场申请费用为160元(2007年10月的价格),但是[[美国]]游客''不能申请'',而[[英国]]游客则须支付450元。现在该签证办公室只接受人民币,请一定记得带上足够的现金。
到2013年,大部分过境旅客可以获取仅适用于[[上海]]和[[北京]]的72小时的落地签。
由于政治原因,签证政策可能会不断变化。例如:
* 作为对[[美国]]提高中華人民共和國內地游客签证费用的报复,美国国籍游客签证费被增加到140美元(旅游团为110美元)
* 香港颁发的签证一般限制在30天内,多次出入境的签证变的很难拿到甚至会拿不到。
几年之前,Z(工作签)证是长期签证。现在Z证只能在中国国内待30天;一旦您在中国,雇主须为您办理居住证。实际上,这才是多次出入境签证,您可以用它往返中国。如果您持旅游签来中国,有的签证部门会拒绝为您办理居住证明。这种情况下,您需要使用工作签。工作签只能在国外申请,因此您可能需要去香港或者韩国(请注意,因为首尔的中国领事馆不给非韩国居民办理签证,所以没有外国人等级证的游客必须到釜山)。工作签需要雇主的邀请函。有时候也可以将L签(旅游签)转为Z签(工作签),这都取决于办理签证的具体公安局和您雇主是否有足够的关系。
和中国公民结婚的外国人(见[[中国婚姻]])可以选择办理6-12个月的''探亲''签证。''探亲''签实质上是L签,但是它允许您在签证有效期内一直停留在中国。想要申请''探亲''签的人要先以其他签证进入中国,之后在您婚姻登记所在地的公安局(一般是您配偶的户籍地)办理。办理时需要带上您的结婚照和您配偶的身份证。
大部分外国人可以在[[蒙古]]的[[乌兰巴托]]办理签证。[http://mn.china-embassy.org/eng/lsfw/ 领事馆网站]。在旺季,领馆可能在中午11点之后就拒绝办理。可能会有很长的队,所以您需要来的早一点。并且,中国重大节日期间,使领馆都会休息几天。
====住所登记====
如果您住在酒店或者宾馆中,在您入住时酒店人员可能会要求看甚至要扫描您的护照、签证和入境章。
如果您住在私人住所中,理论上需要您在到达的24小时(市区)或者72小时(农村)内在当地公安局登记,但是,这条法律在现实中很少(如果一定要说有的话)有人执行,只要您不惹麻烦就行。警察会问你要:
# 您护照的复印件
# 签证复印件
# 入境章复印件
# 照片
# 您居住场所的凭证。凭证上的名字可以不是您的名字。
* 您每次来中国都需要登记(有居住证的例外-居住证持有者只需在新签证办理完后登记即可)
* 如果您不登记,有可能会受到500元以下的罚款。
* 手续比较长(3个多小时),最好带上翻译(在上海,只要您有任何形式的居住许可就不用办理登记)。
===乘飞机===
进入中国大陸的主要门户有[[北京]]、[[上海]]和[[广州]];近來許多大型城市也陸續開通洲際航線,[[武漢]]、[[成都]]、[[西安]]、[[重慶]]、[[昆明]]等;[[烏魯木齊]]因為比鄰中亞的地緣優勢,也開通了前往獨立國協國家的航班。几乎每个有一定规模的城市都会有一个国际机场,但是運營範圍以區域航線如[[香港]]、[[韩国]]、[[日本]]、[[东南亚]]為主。
{{infobox|到香港和澳门|
如果您到了香港或者澳门,有渡船可以将您直接送到其他地方,比如蛇口、[[深圳宝安机场]]、[[澳门国际机场]]、[[珠海]]和其他地方,而不用“进入”香港或者澳门。有摆渡车将旅客直接送到轮船码头,这样他们的入境地点将会在轮航码头而非机场。请注意,轮航都有不同的运行时间。如果您的航班到港比较晚的话,您可能就需要进入港澳或者直接到您的最终目的地。例如,如果从香港国际机场通过澳门轮航码头到澳门的话,则需要办理移民手续。香港码头最新消息,请参阅[http://www.hongkongairport.com/eng/index.html 香港国际机场网站]。}}
虽然很多大的航空公司都有到[[北京]]、[[上海]]、[[广州]]和[[香港]]的航班,但是票价都比较高。要想买到较实惠的票,最好还是尽早订票。在夏初和夏末时候机票特别贵,因为这个时候中国学生都要回家或者飞往全世界各地的大学。和其他车票一样,飞机票在春节期间也会很难买。
如果您居住在海外华人社区较多的城市(例如:[[多伦多]]、[[旧金山|三藩]]、[[悉尼]]或者[[伦敦]]),那您可以看看华人社区或者中国人开的旅行社有没有低价的机票。有时候,航班只在中文报纸上广告,或者中国人的旅行社的航班价格就很低。
{{seealso|亚洲的廉价航线|中国主要民用机场列表}}
'''航空公司和航班'''
中国航空公司增长迅速。空客估计中国客机数量会从2009年的1400架增长到2029年的4200架。
中国航空公司也在努力提高价格和服务上的竞争力。航空公司包括[http://www.cs-air.com/en/ 南航],[http://www.chinaeastern.co.uk/ 东方航空],[http://www.air.com.cn/en/index.shtml 国航],和[http://global.hnair.com/ 海航]。
乘客可能会更喜欢亚洲的航空公司的航班,因为这些航班的乘务人员一般都较多,而且服务也比较好。可以选择香港的[http://www.cathaypacific.com 国泰航空]。其他的航空公司比如[http://www.singaporeair.com/saa/ 新加坡航空]、[http://www.jal.co.jp/en/ 日本航空]、[http://www.garuda-indonesia.com 印尼航空]。[http://www.koreanair.com 韩国航空]在亚洲范围内的航线价格都比较好,比如从[[曼谷]]经停[[首尔]]到北美。一般转接航班都比直航,这一点要记住。韩国航空也飞在中国十几个城市,包括上海。
*[[北美洲|北美]]:[http://www.delta.com 达美航空]经由[[成田]]飞香港、北京、上海和广州,也有从底特律、波士顿、和西雅图的直飞航班。[http://www.united.com/ 联合航空]直飞航班最多,从[[旧金山]]、[[Newark (New Jersey)|纽瓦克]]、和[[Washington, D.C.|华盛顿]]直飞香港、北京和上海,与此同时,联航还拥有从旧金山直飞成都的航班。[http://www.aa.com/homePage.do 美航]从芝加哥和达拉斯直飞北京 、上海和香港。[http://www.aircanada.com/ 加拿大航空]从[[多伦多]]和[[温哥华]]直飞上海、北京和香港。
* [[澳大利亚]]:[http://www.qantas.com 澳航]有从[[悉尼]]、[[墨尔本]]、[[布里斯班]]和[[佩斯]]到香港的直航。澳航从悉尼到上海和北京,但是从墨尔本到上海只有代码共享服务。经由东南亚的可能会有便宜的航班,那里有一些打折航班飞往澳大利亚。中国南方航空有从[[布里斯班]]、[[悉尼]]、和[[墨尔本]]直飞[[广州]]的直航,从那里您可以飞往其他主要城市。东
* [[新西兰]]:只有[http://www.airnz.co.nz 新西兰航空]有飞往中国大陆的直飞航班。直飞航线到北京、上海和香港。
* [[东南亚]]:据说由于新加坡有大量华人,所有[[新加坡]]的航线网络最好,往所有的大城市和一些区域性的中心城市(比如厦门、昆明和深圳)都有航班。除了新加坡,[[吉隆坡]]、[[曼谷]]和[[马尼拉]]的航线也不错。[http://www.tigerairways.com 老虎航空]、[http://www.jetstar.com Jetstar]、[http://www.airasia.com 亚洲航空]、和宿雾[http://www.cebupacificair.com 太平洋航空]也都有从[[东南亚]](曼谷、[[清迈]]、新加坡、吉隆坡和[[马尼拉]])到中国南方城市(包括厦门、[[景洪]]、广州、[[海口]]和澳门)的低价航班。
* [[欧洲]]: 欧洲大部分大的航空公司都有到香港、北京和上海的直航(有的也飞往广州),包括[http://www.airfrance.com/indexCOM.html 法国航空]、[http://www.britishairways.com/travel/globalgateway.jsp/global/public/en_ 英国航空]和[http://www.finnair.com/finnaircom/wps/portal/finnair/jump?locale=en_INT 芬兰航空]。但是很少有到其他中国城市的航线。例如[http://www.klm.com/travel/klm_splash/index.html 荷兰航空]有从[[阿姆斯特丹]]直飞[[成都]]、[[杭州]]和[[厦门]]的航班,[http://www.lufthansa.com/online/portal/lh/de/homepage?l=en 汉莎航空]有从[[法兰克福]]到[[南京]]、[[青岛]]和[[沈阳]]的航线。
* [[台湾]]:自2008年开始,两岸恢复直航,目前台湾和中国大陆的主要城市之间每天都有直航。
'''中国和欧洲之间的航班'''
{| class="wikitable sortable" border="1" cellspacing="0" cellpadding="3"
! 航空公司!! 起飞 !! 降落 !! 航班时间 !! 出发日期 !! 经济舱 P/W !! 说明
|-
| 芬兰航空 || 赫尔辛基 (HEL) || 北京 (PEK) || 7:50 || 周一到周日 || 32" / 18" ||
|-
| 芬兰航空 || 北京 (PEK) || 赫尔辛基 (HEL) || 8:30 || 周一到周六 || 32" / 18" ||
|-
| 芬兰航空 || 赫尔辛基 (HEL) || 重庆 (CKG) || 8:40 || 一三五六 || 32" / 18" || 2012.5.9开始
|-
| 芬兰航空 || 重庆 (CKG) || 赫尔辛基 (HEL) || 9:25 || 二四六日 || 32" / 18" || 2012.5.9开始
|-
| 芬兰航空 || 赫尔辛基 (HEL) || 上海 (PVG) || 9:05 || 周一到周日 || 32" / 18" ||
|-
| 芬兰航空 || 上海 (PVG) || 赫尔辛基 (HEL) || 10:15 || 周一到周日 || 32" / 18" ||
|-
| 海南航空 || 柏林 (TXL) || 北京 (PEK) || 9:25 || 三五日 || 32" / 19" ||
|-
| 海南航空 || 北京 (PEK) || 柏林 (TXL) || 10:20 || 三日 || 32" / 19" ||
|-
| 海南航空|| 布达佩斯 (BUD) || 北京 (PEK) || 9:20 || 一五 || 32" / 19" ||
|-
| 海南航空 || 北京 (PEK) || 布达佩斯 (BUD) || 10:10 || 一五 || 32" / 19" ||
|-
| 海南航空 || 布鲁塞尔 (BRU) || 北京 (PEK) || 9:40 || 二四六日 || 32" / 19" || 从2012年4月,周五也有,2012年7月开始周一也有
|-
| 海南航空 || 北京 (PEK) || 布鲁塞尔 (BRU) || 10:35 || 二四六日 || 32" / 19" || 从2012年4月,周五也有,2012年7月开始周一也有
|-
| 海南航空 || 布鲁塞尔 (BRU) || 上海 (PVG) || || || 32" / 19" ||
|-
| 海南航空 || 上海 (PVG) || 布鲁塞尔 (BRU) || || || 32" / 19" ||
|-
| 海南航空 || 苏黎世 (ZRH) || 北京 (PEK) || 10:00 || 二四六 || 32" / 19" ||
|-
| 海南航空 || 北京 (PEK) || 苏黎世 (ZRH) || 10:45 || 二四六 || 32" / 19" ||
|-
| 荷兰航空 || 阿姆斯特丹 (AMS) || 成都 (CTU) || 9:25 || || 31" / 17.5" ||
|-
| 荷兰航空 || 成都 (CTU) || 阿姆斯特丹 (AMS) || 10:35 || || 31" / 17.5" ||
|-
| 汉莎航空 || 法兰克福 (FRA) || 青岛 (TAO) || 13:10 || 一三五 || 32" / 17.5" || 经停沈阳
|-
| 汉莎航空 || 青岛 (TAO) || 法兰克福 (FRA) || 14:25 || 二四六 || 32" / 17.5" || 经停沈阳
|-
| 汉莎航空 || 法兰克福 (FRA) || 沈阳 (SHE) || 10:15 || 一三五 || 32" / 17.5" ||
|-
| 汉莎航空 || 沈阳 (SHE) || 法兰克福 (FRA) || 11:15 || 三五日 || 32" / 17.5" ||
|}
===火车===
可以从中国周边的邻国乘火车前往中国,甚至可以从欧洲一路乘火车到中国。
* '''俄罗斯&欧洲''' - [[西伯利亚铁路]]两条线(横穿蒙古和东北),从[[莫斯科]]和北京出发,经停俄罗斯多个城市,在蒙古境内经停[[乌兰巴托]]。这条铁路的沿途风景无比绚丽,但时间过长,需要140小时左右。
* '''哈萨克斯坦&中亚''' - 从哈萨克斯坦[[阿拉木图]]可以乘火车到新疆的[[乌鲁木齐]]。在过海关时候和换另一国的轨道轮距会等很长时间。
* '''香港''' - [[香港]]和中国大陆之间有固定列车。从香港的红磡和廣州东站之间有直达列车。海关手续在各自火车站办理。此外,香港亦有直通火車前往[[上海]]、[[北京]]、[[肇慶]]、[[佛山]]。香港的港鐵从香港市区到深圳边界的两个点有直达,分別是落馬州以及羅湖,但主要的过境点在罗湖,也是深圳的主站。
* '''越南''' - 从广西南宁经过友谊关到越南。自2002年起,从[[昆明]]发出的列车就被暂停了。
* '''朝鲜''' - 从平壤到北京之间每周有四列列车。
* '''老挝''' - 从昆明到万象直接于2021年末开行的列车
===公路===
中国和14个国家之间有陆地边境;这一邻国的数量只有[[俄罗斯]]可以与之匹敌。另外,中国大陆和[[香港]]和[[澳门]]特区之间都有路上边境,由于实际原因,这些边境和国际边境一样。中国西部边境都在遥远的山区,这些地方虽然难以到达和游览,但是游客们会在那里看到让人叹为观止的美景。
====[[印度]]====
这两个国家之间的关系总是处于欠佳状态,但是最近开放了从印度[[锡金]]到藏南的亚东口岸。但是,这个入境口不对游客开放,从这两个国家访问这个口岸都需要特殊的许可证。
====[[缅甸]]====
可以通过中国[[瑞丽]]到缅甸[[腊戍]]从缅甸进入中国,但是需要在缅甸政府办理许可。一般来说,您需要加入旅游团。
====[[越南]]====
对于大部分旅行者来说,走陆路到中国旅游的起点都在河内。有三个国际口岸:
* '''同登镇(越南)- 凭祥(中国)'''
:您可以从河内汽车东站(Ben Xe街,嘉林区,电话:04/827-1529)到谅山,从那里您需要转乘小型公共汽车或者摩的到同登镇的口岸。还有另一个选择就是选择旅行社(有急事的游客),他们可以提供酒店和过境服务。
:您可以从黄牛手中换外汇,但是之前要好好确认汇率。
:过境手续大约需要30分钟。在中国境内,穿过“友谊关”之后打个的(大约20元,使劲儿砍价!)去[[凭祥]]。小型公共汽车车费大约5元。汽车总站车站正对面就有一家中国银行;ATM机上可以用Maestro卡。您可以乘汽车或者火车到南宁。
* '''老街(越南)-河口(中国)'''
:您可以乘火车河内到老街,软卧大约420,000越南盾(截止2011年11月)。这一段大约8小时。从那里您可以走到老街/河口口岸(乘车5分钟)。
:过境很简单,填好出境卡然后排队等。他们会检查您的行李(特别是您的书/书面材料)。河口口岸外面是各种商店,汽车站离口岸有10分钟车程。从河口到昆明的车票大约¥140;时间大约7小时。
* '''芒街市(越南)-东兴(中国)'''
:您可以从东兴乘汽车去南宁,有到广州的卧铺大巴(票价大约180元)和到深圳的卧铺大巴(票价大约230元,12小时)。
====[[老挝]]====
您可以从[[琅南塔]]乘大约早上8点的车到[[磨憨]](中国口岸)和[[勐腊]]的汽车。但是您要有中国签证,因为口岸不能办理签证。海关手续需要整整一小时或许还要多。一趟大概需要45000基普(老挝货币)。
另外,从[[琅勃拉邦]]到昆明有直达的卧铺大巴(要大约32个小时)。您可以在从[[琅南塔]]的小巴碰到卧铺大巴的地方上车。车费不会超过200元的。
====[[巴基斯坦]]====
从[[巴基斯坦]]北部到中国西部的[[中巴公路]]是世界上最为壮观的公路之一。冬天会对旅客封路。因为走这条线的旅客不多以及两国的良好关系,所以过境很快。从中国喀什噶尔到巴基斯坦有长途汽车。
====[[尼泊尔]]====
[[尼泊尔#抵达|从尼泊尔]]到西藏的公路经过喜马拉雅山附近,穿越蔚为壮观的高山。从尼泊尔到西藏只能跟团,但是个人可以从西藏到尼泊尔旅游。
====[[蒙古]]====
蒙古1945年正式从中国独立,当时的中央政权是“国民政府”。现在的中国和蒙古有两个边境口岸。它们是[[二连浩特]]([[内蒙古]])/[[扎门乌德]]边境口岸和[[塔克什肯]]([[新疆]])/[[布尔干]] 边境口岸。
中国有从二连浩特开始的火车或者长途客车,经过扎门乌德到达乌兰巴托。火车和长途汽车站大多数大部分时间都是第一天晚上出发,第二天早上到达。边界在上午八点半左右开放。从二连浩特有去往中国其他地方的长途汽车和火车。
====[[哈萨克斯坦]]====
到中国的口岸分别在[[霍尔果斯]]、[[阿拉山口]]和[[吉木乃]]。几乎每一天都有汽车从[[阿拉木图]]到[[乌鲁木齐]]和[[伊宁]]。不能办理落地签,所以出发之前先保证您已经准备好了哈萨克签证和中国签证。
====[[吉尔吉斯斯坦]]====
可以通过[[图噜噶尔特山口]]进出吉尔吉斯斯坦,但是道路非常崎岖,并且这个口岸只在每年的夏季开放几个月(6月-9月)。也可以安排走喀什,但是先要准备好签证。
另外,另一条路(虽然风景略差,但是路况较好)是经过直达图噜噶尔特南部的[[伊尔克什坦口岸]]。这条路每周大约有2-3次大巴(卧铺),大巴行程大约24小时。
====[[塔吉克斯坦]]====
塔吉克斯坦和中国唯一的口岸在[[阔勒买]],这一口岸在五月到十一月之间的周日开放。从新疆[[喀什噶尔]]到塔吉克斯坦[[科洛格]]之间有大巴。但是这班车不对除塔吉克斯坦人和中国人以外的人开放。
====[[俄罗斯]]====
最主要的口岸是[[内蒙古]]的[[满洲里]]。从满洲里到俄罗斯的[[后贝加尔斯克]]有大巴。从[[黑河]]到布拉戈维申斯克、从抚远到哈巴罗夫斯克有渡轮。再往东,在[[绥芬河]]、东宁、和珲春都有路上口岸。在出发之前要保证您已经申请了俄罗斯签证。
====[[朝鲜|朝鮮民主主義人民共和國]]====
在中國前往朝鮮民主主義人民共和國(下称:朝鲜)要經由[[丹東]]/[[新义州]](신의주),而且必須預早在北京安排導遊。相反,從北韓旅遊後進入中國,則較容易。另外, 除了上述口岸外,在鴨綠江和圖們江亦有其他出入境口岸,但這些口岸可能不允許旅客通行。最後,在通關前,請確保阁下持有有效中國及北韓簽證。
====[[香港]]====
香港主要有四個陸路口岸進入中國大陆,分別是落馬洲、沙頭角、文錦渡以及深圳灣。某些國藉的旅客可於落馬洲申請落地簽證,但若使用其他口岸必須預先安排。
====[[澳門]]====
澳門分別有兩個陸路口岸連接[[珠海]],分別是關閘邊檢大樓(大陆稱:拱北口岸)以及路氹邊檢大樓(中國大陆稱:橫琴口岸)。持有某國藉的旅客可在路氹邊檢大樓申請簽證。
====其他====
暫時為止,旅客尚未可利用陸路前往[[不丹]]及[[阿富汗]]。
===水路===
====香港以及澳門====
香港和澳門與[[珠江三角洲]]的城市間,設有定期高速客輪服務,來往[[廣州]],[[深圳]]以及[[珠海]]等地。同時,[[香港赤臘角國際機場]]亦設有跨境快船轉駁服務,旅客無須入境香港而前往[[廣州]]、[[珠海]]等地。
====日本====
每星期有一至兩班(根據季節而定)定期客輪由[[上海]]和[[天津]]來往[[大阪]],船程約為兩天。此外,[[青島]]每星期有兩班客船來往[[下關]]以及每星期一班由[[上海]]來往[[長崎]]。
====南韓====
以下數個港口均有定期航班前往南韓仁川:[[上海]]、[[天津]]、[[青島]]、[[威海]]以及[[大連]]。
====台灣====
每日有18班渡輪由[[廈門]]來往[[金門]],行程約一小時三十分鐘。另外,每天亦有4班來往[[金門]]及[[泉州]],兩班來往[[馬祖]]及[[福州]]。此外,每星期亦有跨台灣海峽航班,由[[廈門]]至[[臺中|台中]]或[[基隆]]。
====泰國====
每星期有3班高速客輪來往[[雲南]][[景洪]]及[[泰國]][[清盛]]。盡管航班會經過[[緬甸]],[[老撾]]但旅客亦無需持有其簽證。
====遊輪====
在秋天,有數條遊輪航線會由[[美國]]前往[[亞洲]],例如:[[安克雷奇]]、[[溫哥華]]或[[西雅圖]]。另外,麗星郵輪亦有運作[[基隆]]、[[廈門]]以及一些[[日本]]外島的航線。
==交通==
===飞机===
中国幅员辽阔,所以,如果您不想浪费太多时间在路上的话,最好还是选择飞机出行。中国的大城市和主要旅游目的地之间有很多国内航班。三大国际航空公司分别是:国航、南航、和东航,除此之外也有一些地方航空公司,包括:海航、深圳航空、四川航空和上海航空。最近几年大城市和各省纷纷建立了自己的航空公司,包括:重庆航空、成都航空、河北航空等。海南航空的母公司发展了包括大新华航空,扬子江快运,香港航空公司、金鹿航空等11家航空公司。
中國香港特區或者中國澳门特區到內地城市的航线都算是国际航线,因此价格較為昂貴。因此,如果要在內地和香港或者澳门之间往返,那么走深圳或者珠海(跟香港或者澳门一江之隔)会便宜'''很多''',或者走广州(广州距离香港或者澳门较远,但是有往来航班的城市却更多)。例如,从福州到香港、深圳或者广州的距离相似,但是在2005年时,飞往香港的航班价格为1400元,但是飞往其他城市的价格仅为880元,飞往深圳的打折机票仅为550元。到这些城市称汽车的话价格约为250元。
国内航班都是有标准价的,但是都会打折,特别是比较繁忙的航线。大部分酒店和招待所都有订票服务,酒店订票可能会有7.5折到3折优惠。中国的所有城市都遍布着旅行社和票务公司,他们的折扣基本相当。 就算不打折,在中国乘飞机出行也并不贵。中国两大在线订票网站[http://www.elong.net/ 艺龙]和[http://english.ctrip.com/ 携程]都有英文网站,但是航空公司网页一般都只有中文,或者需要中国手机号码来订票。
在中国旅游,一般最好在旅行社买票最划算,或者只在中文网站上买。在国外买的话(例如,通过Expedia或者甚至通过国航网点买)都会贵很多,因为国外只卖全价票。而打折机票只在中国境内出售。国内航班的时刻表一般要到航班时间前2-3个月才能定下来。和大部分国家的空运市场不同的是,买的早的人要多付钱,因为到后面会有折扣。飞机越空的航班,越容易在航班起飞的前几天买到折扣比较高的票。只要您敲定了您的行程,建议您关注飞机票价,看看什么时候涨,什么时候跌(一般都会有波动的)。但是,如果在外出旺季出行(例如春节期间),建议尽早订票,以保证您能买到票。一些价格比较高的票可以允许先退票(退票费5%-20%),然后再买低价票。最近,国内航班的头等舱也可以打折了。有的线路头等舱和经济舱价格差异并不大,还是比较划算的。但是,请注意,在空港的很多福利(例如:候机大厅、额外的行李和积分等)就不适用于打折机票了。
请注意,虽然政府和顾客都给航空公司施压,但是毫无理由的飞机延误还是很正常的。有时候飞机出行还不如其他的选择。取消航班也并不罕见。如果您从中国的票务处买的票,他们一般会联系您(如果您留下了联系方式)并通知您航班的变化。如果您在国外买的票的话, 一定要在您乘机的前一两天查看航班状态。一旦出现航班延误,中国的航空公司很快就会送出餐盒或者点心(尽管这些盒饭/点心并不一定合西方人的口味)。建议在中国旅游时随时准备好B计划。水是过不了安检的,但是所有的中国机场都有开水处,所以您可以带上杯子和茶叶。
和全世界所有地方一样,中国机场的餐饮费用也贵的离奇。在市区25元的咖啡,在机场的相同连锁店里面可以卖到78元。KFC的价格好像没有变化;他们很多机场的门店的价格和其他地方门店的价格都一样的。花20元以上吃一顿KFC还不如在街对面吃一碗5块钱的面呢,但是在机场的话,KFC还是最划算的。
===火车===
{{infobox|中国的春运时的火车票|以春节为中心,共40天左右,每年农历腊月十五到次年正月廿五,那时候民工开始放假,纷纷乘交通工具回乡,在这个阶段,有30多亿人次的人口流动,占世界人口(约70亿人)的3/7,相当于全国人民进行两次大迁移,同时也是当今世界上规模最大的人口迁移。每年春运,铁路运输是重中之重,为了解决春运问题,中国政府每年都要提前部署,但仍无法满足春运要求。所以,在此期间尽量避免乘火车出行,因为买到火车票会非常困难。}}
[[File:A maglev train coming out, Pudong International Airport, Shanghai.jpg|right|thumb|200px|[[上海]]的磁悬浮列车]]
火车是大部分中国人长途旅行的首选。铁路线路网络不断在扩展,覆盖了全国各地。中国大约占据了全世界铁路交通的1/4。
中国目前正在建立一个高铁网,类似于法国的TGV和日本的新干线。中国现在已经有很多高铁线路在运行了。中国高铁叫做“和谐号”及“复兴号”,高铁列车车次通常以“G(高)”“C(城际)”“D(动)”开头。如果您的预算允许的话,乘高铁是“最好的出行方式”。更多详情,请参阅[[中国高速列车]]。
==== 火车类型 ====
中国的火车被分成了不同的类型,在各自的车票上都有显示。中国火车从最快的到最慢的分别如下:
* 高速動車組列車(高速「G」):營運最高時速380公里,現限速300公里 使用CRH系列「和諧號」高速電力動車組,列車車次為G1-G9998.注:2017.9.21 复兴号已经提速至350km/h,部分线路车次已经开始换装复兴号。
* 城際動車組列車(城際「C」):營運最高時速350公里,現限速200~300公里 使用CRH系列「和諧號」高速電力動車組,列車車次為C1-C9998(其中,京津城際鐵路使用C2000 - C2999作為其車次,鄭州鄭開城際鐵路使用C28xx作為其車次,上海金山鐵路使用C3000 - C3999作為其車次,武漢武咸城際鐵路,武黃城際鐵路使用C50xx,C55xx作為其車次,成都成灌鐵路,成綿樂客運專線使用C61xx - C63xx作為其車次,廣州廣深鐵路使用C70xx - C72xx作為其車次,珠海廣珠城際鐵路使用C76xx作為其車次)。
* 動車組列車(動車組「D」):最高時速200-300公里,現限速160-300km/h,使用CRH系列「和諧號」電力動車組,列車車次為D1- D9998。
* 直達特別旅客快車(直特「Z」):最高時速160公里、中途不停車或者僅停靠少數車站的夕發朝至跨局或管內列車(跨局列車是指可以在本鐵路局/公司管轄範圍以內和以外的綫路上行駛的列車),列車車次為Z1-Z9998。
* 特別旅客快車(特快「T」):最高時速140公里/160公里(少數按直達特快等級運行的列車)的跨局或管內列車(管內列車是指僅可以在本鐵路局/公司管轄範圍內運營的列車),列車車次為T1-T9998。
* 快速旅客列車(快速「K」):最高時速120公里/140公里的跨局或管內列車,列車車次為K1-K9998,亦有诸如K53,K54(北京-沈阳北)的夕发朝至直达卧铺列车。
* 普通旅客快車(普快):最高時速120公里的跨局或管內列車(直快僅限跨局列車),列車車次範圍是1001-5998,無字母。
* 普通旅客列車(普客):最高時速100公里的跨局或管內列車,列車車次範圍是6001-7598,無字母。
* 通勤或路用列車(通勤):用於沿線鐵路職工上下班通勤的列車,列車車次為7601-8998。
* 市郊動車組列車(市郊「S」):最高時速80公里的城市內動車組列車,使用和諧長城號內燃動車組,現僅運營於北京市郊鐵路S2線,列車車次為S201-S299。
* 臨時旅遊列車(旅遊「Y」):為旅遊高峰客流而開行的旅客列車,列車車次為Y1-Y998。
* 臨時旅客列車(臨客「L」):在春運、暑運等客流高峰開行的列車,列車車次為L1-L9998。
另外從2015年春運起,L字頭臨客列車已大為減少,普速臨客列車車次多為3xxx、K4xxx、K5xxx、K6xxx、T3xx、T4xx、Z4xxx、Z9xxx;動車組臨客列車車次為D4xxx、D9xx;城際動車組臨客列車車次為C9xxx;高速動車組臨客列車車次為G4xxx,G9xxx。
==== 座位级别 ====
普通的非和谐号列车主要有五个座位级别:
[[File:Soft sleeper compartment for train T138 from Shanghai to Xi'an.jpg|thumb|特快火车软卧车厢]]
* '''软卧'''是最舒服的出行方式,以西方的标准很便宜。软卧的一个包厢有四个铺位,两个一列(现在更新的列车也有两个铺位的包厢),门可以上锁,空间也比较大。
* '''硬卧'''的话,一排有3张铺位,没有门。上铺很高,而且床的上面空间很小。上铺最适合身高较高的游客(1.9米以上),因为您的脚可以伸出去,而且不必担心被碰到。如果您有需要藏起来的东西(例如:照相机)的话,上铺也是最好的选择。东西放在上铺的枕头下面,一般小偷是够不到的。硬卧并不是硬板床,也是有个床垫的,而且也还比较舒服。所有的卧铺都有枕头和床单。
* '''软座'''是一种很少见的可以放下来的座位。软在只在4-8小时的短途日间列车和高速列车(D以上)会有。
* '''硬座'''就是一般的座位票,一排有5个座位,过道两边一边2个座位,一边3个。大部分的背包游客都选择硬座出行。虽然有“请勿吸烟”的提示牌,但是仅在车厢内禁止吸烟。一般在两节车厢的连接处都会有很多人在吸烟,烟就会源源不断的飘进车厢。大部分火车车厢的连接处都是吸烟区,那里有中文提示“吸烟区”。乘硬座车过夜是非常不舒服的,漫漫长夜而又无法入睡的感觉确实很不好。
* '''无座'''票是在硬座车厢的,但是没有座位。站票的话,您可以随身带一个小马扎。 价格和硬座相同。
此外,还有单人独包,高级软卧等相对等级、价格更高的铺位,不过一般只在部分高等级列车才会出现。
目前,中国的列车大部分都是全封闭的空调车厢。
和谐号一般有5个等级 - '''二等座'''(3+2的座位),'''一等座'''(2+2的座位)和三个'''VIP舱'''(2+1的座位,连着驾驶室)。VIP舱位也分三个等级,分别是“商务座”、“观光座”、和“特等座”。和飞机不同的是,和谐号的商务座实际上比“一等座”好。 商务座和观光座价格一样,但是特等座一般比“一等座”要贵,但比商务座和观光座便宜。
==== 火车票 ====
[[File:China G Train Ticket.jpg|220px|thumb|带有文字说明的中国纸质火车票]]
一般车票在列车开车前30天就可以买了(12306订票提前30天,电话提前28天)。开车之后,可能会有少量的车票给途经的较大的站预留的。如果您想找个座位,或者想补个卧铺,您可以找到列车员然后他会告诉您还有没有,需求量最大的为硬座票和硬卧票,所以这种方式能够得到您心仪的几率很少。从2012年一月份开始,所有的购票人都必须持'''有效证件'''来买票(一般就是身份证或者护照)。中国铁路客运部门在2020年6月份起,不再发行纸质火车票,实行电子票(可以在App12306中查看)。对于仍然需要纸质信息的乘客,中国铁路客运部门会提供一张载明乘车日期、车次、发到站、发车时间、席位号等信息的纸质凭条帮助旅客乘车。
在市区很多地方都有火车票代售点的,那里很清楚地以中英文标注着“火车票代售点”,还有火车头的图标,但是因为这些代售点都很小,可能也不是很好找。代售点的电脑和车站的订票系统是联网的。在代售点一般可以买到10天以前的票,而且都是按照票面价格卖的。工作人员一般不会说英语。
就算在大城市也不要指望车站的售票员会讲英语。就算售票员找到会讲英语的同事,不要指望他会操作订票系统。因此,如果您不会讲中文,那么就将始发站和到达站、开车时间、车次和要买的票的类型用中文写在纸上。车站名称您可以写拼音,因为售票员输入的也是拼音。请注意,很多城市的普通车站和高铁车站都不在一起。高铁车站一般都带方向的(例如:北京南、杭州东等)。
在出行高峰时段(例如,春节期间),车站的票一下就卖完了。最好还是找中介提前订票。在大城市里,也有稍微加一点手续费的票务机构。这些手续费可以省去在车站排长队,还是很值的。旅行社会收你的钱,然后提前订票,但是,在车站放票之前没人可以保证您一定就可以买到票,车站放票之后旅行社才会去买他们之前向您“保证了”的车票。
==== 旅途须知 ====
普通火车上的厕所一般比汽车上或者大部分公共场所的厕所要“好”一些,因为火车上的厕所非常简单,小部分直接把排泄物抛洒在铁轨上,火车上的厕所味道没有那么刺鼻,但是现在大部分的火车都已经安装或者部分安装了真空集便装置。软卧车一般在车的一头有欧式的坐便器,另一头是中式的蹲坑式的厕所。请注意,直接将排泄物抛洒在铁轨上的列车在车站停车时列车员会将厕所临时关闭,以防止排泄物抛洒在车站范围内的铁轨上。
长途车会有餐车,餐车会有热饭,但是一般都会很贵,都在15-45元,而且确实不好吃。菜单都是中文,但是如果您愿意冒个险的话,您可以记住几个中文字,或者问问看常见的菜有没有。如果您的预算有限,那只能等到站的时候。站台上的小贩一般会卖面条、小吃和水果,价格一般会稍微好一点。车上一般都有开水处,所以您可以带上茶叶和泡面等。
在火车上要留心自己的财物,这几年公共交通设施上财物失窃的事情越来越常见了。
大部分比较高级一点的车上(T、K、Z和和谐号列车),都会播放实现录制好的中文、英文、粤语(如果火车路过广东或者香港)、蒙古语(内蒙)、藏语(西藏)或者维吾尔族语(新疆)的报站广播。但是,在短途列车上没有英文报站,因此,知道从哪里下车很重要。
如果晕车的话,建议备好晕车药。如果睡觉怕被吵到,建议戴耳塞。长途卧铺车厢上铺的空调在夏天会很凉。如果担心因为自己的不注意而错过到达站,您还可以跟列车员讲在即将到站时来通知你一声,列车员很乐意帮找你。
如果您有可以和大家一起分享的东西的话,那时间会好过一点。旅途中的中国人也都一样觉得很无聊,他们很乐意和您聊一聊,或者一起在电脑上看一部电影。总的来说,乘火车看看中国乡村风景还是挺不错的。
在出入站时都要验票,一般在进候车大厅、上车和出站出都有人检票。进了候车大厅后,在电子显示屏上找对应的站台上车(虽然是中文,但是会显示您票上印的车次)。在上车前大约10分钟的样子,就可以进站检票了,进站后您只需要跟着人流走就好了,一定要确保您不要坐在错误的候车区域了,因为一般火车在一般的站只停几分钟。一些比较新的站是高站台,这样站台会和车门齐平,但是小站的站台都很低,然后上车都要走几步很陡的台阶,所以如果您有大件行李的话,要有心理准备。一般的乘客也都很友好的,都会主动伸手帮您一把的。
在车厢内部是不允许抽烟的,但是在两节车厢的连接过道处是可以的。所有的高铁车组及动车车组都属于全列车禁烟列车。车站也不许吸烟,但是设有单独的吸烟室,但这些吸烟室里面都很糟糕,而且通风也很差。
==== 有用的网站 ====
*[http://kyfw.12306.cn 12306]是中国铁路总公司的官方购票网站,有用性不言而喻。购票高峰期会出现各种不可预测的故障(因为中国在运输高峰期时会有十几亿客流量通过铁路发送,购票者过多导致跟DDoS类似。)注意,这是中国铁路(含高速铁路)购票唯一的官方网站。
*[http://www.seat61.com/China.htm Seat 61]网站上关于中国列车的介绍较为全面。
*[http://www.absolutechinatours.com/china-trains Absolute China Tours]或者[http://www.chinahighlights.com/china-trains/ China Highlights]有票价信息(注意,这里的信息虽然非常有用,但是也并不是100%的全的)。
*[http://www.oklx.com/cn/train/search_station.aspx OK Travel]有更多车次。这个网站大部分都是中文但是,地名都用的是罗马字母,这样您不懂中文也没有关系了。在搜索页面,只要从列表中选择就可以了:左手边是始发地,右手边是目的地。注意,您需要在下拉栏中选择省份或者区域之后才会出现相应的城市。选择您需要的城市,然后点击左下方的按钮(“确认”)进行搜索。如果您可以输入汉字,这个网站还可以帮你计划转车。
*[http://www.cnvol.com CNVOL]有中国国内运行的所有列车车次,而且更新很快。只要输入您旅途的起点和终点,您就会找到所有往来的车次(包括过路车),每列车注明了始发站、终点站和时间。点击您喜欢的车次,然后您可以看到各个座位的票价。
*[http://huoche.wiki 火车Wiki]讓您可以了解某个车次的车辆情况。
*[http://piao.today 票.今天]让您可以了解某个区间的余票趋势。因中国客运分淡旺季,所以淡季内的趋势一般来说是相同的;旺季同理。有时12306因为客流量过大导致前端无法访问时(前提后端正常),也可以在该网站上查询余票。因该网站查询实时余票时会同时将所有的票价同时抓取,导致速度较慢,除非12306出现前端技术故障,否则不建议使用该网站的实时余票功能。由于12306接口关闭,本站只能浏览以前的数据,而不能使用查询实时余票/添加新趋势等功能。
*[http://yupiao.info 余票网]著名的火车票查询网站,可以显示出预售期内所有指定区间有票的车次,方便购票。但是因为原作者停止维护,所以本网站可能随时下线/出现暂时性的故障。
*[https://www.ctrip.com/ 携程]现今中国最大的旅游、住宿、车票、机票等预定网站,美国纳达斯科上市企业。有多国语言支持。提供可以发送到电子邮箱的电子行程单。
=== 汽车 ===
城际'''公共汽车'''或者长途汽车并不贵,非常适用于市内和短途的交通运输。
每个城市的公交车各有不同---但一般情况下都是塑料座椅、人多、没有英文标识、司机态度一般。当然,如果您对于公交车线路比较熟悉的话,这不失是一种非常经济而且四通八达的出行方式。一般情况下,公交车上都会播放报站录音,例如“下一站:中山路(Next stop is Zhongshan Road)”,或者“上海南站到了(We are now at Shanghai South Railway Station)”。一些大城市,例如北京或者杭州,的一些主要线路上有英文报站。票价一般为1到2元(一般1元为老式公交车,2元为新式带空调公交车),如果公交车路线到了市郊,票价会相应高一些。大部分公交车已经没有售票员了(收钱、找零、撕车票),取而代之的是上客门旁边都有个自动投币的铁箱,您可以把您要支付的票价投入投币箱内(不找零,所以要自备零钱)。注意,一般公交车司机都会开的比较快,不怎么会在乎乘客的感受,所以要扶好站稳。
{{Infobox|卧铺大巴(已弃用)|卧铺大巴在中国20世纪初很常见;车上没有座位,取而代之的是卧铺床位。中国交通部门在2020年发布关于卧铺大巴禁行公告。这是长途旅行不错的选择— 大巴在高速公路上的夜间行驶速度一般为100KM或者更快— 因为铺位空间有限,可能有的身高比较高或者块头比较大的旅客会觉得不舒服。
一般来说,在发达的沿海省份,这还是比较舒适和便捷的交通方式,但是在欠发达地区就不一样了。尽量不要买车位的铺位,因为车在过减速带的时候,车位的乘客晃动比较厉害,可能会有晕车症状。
在有的地方,在您上车时必须要先脱掉鞋子;车上会提供一个塑料袋放鞋子。如果到了服务区或者上厕所的时候,您需要再穿上鞋子。如果您平时穿靴子的话,建议您随身再带上一双拖鞋。}}
各地的大巴,或者'''长途大巴'''的情况各不一样,有的很舒适,而有的地方的大巴就会很不舒适。一般从东南沿海较大城市发出的大巴都带有空调、软座。东南沿海地区的路况非常好,车开的很平稳,您可以欣赏沿途风景或者小睡一会儿。一般汽车会比火车会贵一点,但是要舒服一点。大巴的乘务员都很愿意帮忙,但是和空乘人员相比,他们对于外国人就没那么熟悉,能说英语的非常少。有的大巴有厕所,但是一般都很脏,而且汽车转弯比较多,造成使用厕所比较不便。
中国农村地区的大巴就完全不同了。 车站里面的表示要么只要中文要么只要本地语言,路线都是贴在车窗上的,在您走过的时候司机或者招揽客会向您大声喊叫他这趟车的目的地,一般大巴的车牌号应该印在票上的,但是通常票上印的车牌号都是错的。由于风俗习惯等的差异,外国人可能会觉得大巴司乘人员不够礼貌,乘客素质也欠佳,他们会随地吐痰和抽烟。如果司机一路都想多上人的话,巴士可能会非常拥挤。中国农村地区的道路通常都是坑坑洼洼的,这样乘坐巴士就会非常颠簸;如果您坐在巴士靠后的座位上,那么颠簸会更加厉害。发车和到达时间都只是预计时间,因为很多车票不卖完不走(这可能使发车延误数小时),加上车有点小问题和其他事情,您的行程可能会被大幅延长。如果您要在这样的车况和路况下乘车10个甚至20个小时的话,那您一定会感觉痛苦难忍的。虽然这样的车程让人非常不舒服,但是在中国很多地方,这样的大巴是唯一的交通方式。当然,好的一点是,如果您想去比较偏远而且又没有直达车的地方旅行的话,您可以在路上随时下车。而且,您也可以在路上随时拦车,一般车票都是视路程长短而不同的。
在中国,司机不遵守交规是一种普遍现象,而且中国的交通事故也比较多发。突然急转弯或者刹车都会造成人员受伤,所以上车后要坐稳扶好。中国的司机经常按喇叭,所以,如果您想在路上睡一会儿,还是带上衣服耳塞的好。
买票有时候会比较难。大的车站有售票柜台,票面上印的有出发时间、上车闸口、和您所乘车的车牌号(有时候不准),票价是固定的。小一点的车站到处都是招揽乘客的人在大声喊叫自己车辆的目的地,他们会把您领过去,然后您上车后再买票。就算在大的车站也有招揽客,他们会给司机打电话让司机等,然后用摩托车把您拉过去,您到了之后可以和司机讲价。这种情况有时候可能完全就是一个骗局,有时候您可以省下35%的车费(取决于您的砍价水平和中文水平)。
===地铁===
大城市 — 至上北京、天津、上海、广州、深圳、武汉、沈阳、郑州、西安、重庆、成都和南京等 — 都有了地铁系统。重庆还有单轨轨交系统。这些设施总体都比较现代、干净而且高效。标识和售票机都是中英双语的。
这些轨交系统现在都在逐步地建设和扩建中,几乎每个有地铁系统的大城市都在修建新的线路。中国在这方面的长期目标非常大胆,每个大城市都在计划修建多条线路。到2020年,中国可能会有世界上最大规模的城市交通基础设施。很多城市都在规划诸如广州和深圳之间的区域间轨交系统。
===出租车===
出租车(或者的士)比较常见,而且价格也比较合理。起步费一般从5元到15元,一般超过起步费范围每公里2元左右(3千米起步)。一般在市内打车费用在10到50元以内。行李不另行收费,但是很多城市夜间打车费要高一些。不用给小费。有些地区还会收取附加燃油费一般1元到2元,视地区而定。
出租车司机故意选一条较长的线路来欺骗乘客的事情虽然不是没有,但是也并不常见,所以不必过于担心这一点。就算司机选了较长的路线,车费也不会差很大。但是,如果您觉得在去酒店的路上被出租车司机骗了,并且您住在中高端的酒店(一般都有门童),您可以向门童和/或者前台人员寻求帮助:一般一句能揭穿他的骗局的话就足以解决问题了。
小心一些黑出租,他们会在机场或者车站里面或者门口跟上您,然后会跟您谈一个带您去某地的固定价格,他们的收费往往是打表费用的1-3倍。如果您对所在城市不熟悉,那么一定要去机场外面指定的出租车区域,并且坚持让司机打表。出租车费率一般都标注在车外的醒目位置。
在高峰时段打车比较困难。如果再遇到下雨天,那就更是难上加难了。尽量避免高峰时段(特别是晚高峰),打车之后一定要记得拿小票。在中国,打车和其他所有事情一样,小费可以给也可以不给,中国人没有给小费的习惯,所以不给也没有人在意。
可以坐在副驾位置;有时候只有副驾位置能看清楚计价器。出租车司机有可能摇下自己那边的窗户就直接开始抽烟,而不会征求乘客意见。在有的城市,出租车还会在沿途搭客(在大致方向一致的情况下)。每个乘客都要付全价,但是这样会省去乘客们等车的时间。
虽然北京在迎奥运和上海迎世博期间做过一些工作,但是即便在这两个城市也很难找到会讲英语的出租车司机。在其他的城市基本上是不可能的。如果您试着用您带口音的普通话说出您要去的目的地,司机也有可能会理解不了。所以,建议您随身携带一张写着您打车要去的目的地的纸条。纸条上最好写汉字(而不是拼音),因为一个拼音可能对应好几个不同的汉字。带着您所在酒店和您喜欢的餐厅的名片,必要时出示给出租车司机。您可以先学一点儿基本的中文简单对话,这类的教材网上都是有的。
如果您在中国待的时间较长,那么考虑买一张中国的SIM卡,这样您可以给您在中国的朋友打电话,然后让他们跟司机说说您要去哪里。SIM卡在中国很容易可以买到。
有的城市的出租车公司有对司机的评级系统,从0到5星,这个打分器在仪表板上方的司机信息牌上,一般在副驾座前面。一般0或者较低分数虽然不一定代表司机不好,但是5星则表示司机对城市很熟悉,并且会以最短的路程将您带到目的地。另一种识别司机能力的方式同样是看司机信息牌---上面的司机代号。一般代号越小,则说明这个师傅从业时间比较长,可能对市区路线会更熟悉一些。如果您觉得被出租车司机骗了,很简单的一个办法就可以引起出租车司机的重视,那就是下车后马上把出租车车牌号抄下来,如果您会说简单的中文的话,您可以告诉他您要向市政机构或者出租车公司举报他。大部分司机都是诚实的,车费也不会太高,但是也有小部分不好的司机会利用您不会讲中文来侵害您的利益。
中国人在打车的时候一般不会让别人的。拦到车的人不一定就可以乘这个车。别人跑到搭车人前面先上车或者把拦出租车的人挤开自己上车的事情也并不是没有。如果一起有几个人都在打车,那么在拦到车后尽快上车。不过随着uber、滴滴等出行工具的普及,通过移动网络预约出租车成为绝大多数乘坐出租车的人的首选,在街上随手拦下一辆出租车的情况已经很少见了。
出租车司机可能会说您不用系安全带,但是无论怎样上车后一定要系上安全带(如果能找到的话)。
===电车===
有的城市有电车。电车一般经停站比轻轨要多,如果您要去的城市有的话,电车不失为一种出行的一种很实用的选择。但是,电车的话有可能会有堵车情况。
===自行车===
自行车、电瓶车和摩托车是中国最常见的交通方式;在高峰时期,中国的各个城市都有成千上万的两轮车。大部分自行车都是不可调速的老式车型,但是普通的山地车也比较常见。对于乘客来说,骑自行车要比挤进高峰时段的公交车要经济而且便利的多。
在中国对于骑自行车的人来说,有两大'''危险''':
* 一个是其他的'''交通车辆''';汽车和摩托车会经常让人毫无准备地拐出来,有的地方的红绿灯纯属摆设。更多相关评论,见[[中国驾驶习惯]].
* 在中国各个城市中'''偷车贼都很猖獗'''。需要观察其他人是如何停放自行车的。有的地方的当地居民会随手停放自行车,但是在其他很多城市中,人们都会将自行车锁在饭店或者网吧中。这就是一种警示。不要认为您的高档锁能确保您的自行车万无一失(偷车贼只需要摆弄一下就能打开)。建议尽可能将您的自行车停在有管理员的指定的停车区域;一般您只需要交1-2元钱。有的当地居民会故意买二手的老旧自行车,这样小偷就不会惦记着了。
在绝大多数景区 — 无论是像[[北京]]这样的大城市还是像[[阳朔]]这样游客云集的小镇 — 租车和修车都是非常方便的。而且都有骑行旅游的指南。
在中国,购买自行车是一件非常容易的事情。大行、美利达和捷安特是业余和半职业市场上最流行的三个品牌,所有的城市都有这些品牌的分销商。很多超市也会出售款式繁多的自行车。价格一般从150元到10000元不等。如果要在像西藏这样的地区骑行的话,一般3000到4500元价位的山地车就可以了。诸如上海和北京这样的大城市一般会有更多的职业高端自行车,但是如果您的要求非常特殊,那么香港就是您最后的希望了。
无论是在城市还是在乡村,修车铺随处可见;语言不通的外国游客可能不是很容易能找到,但是您只要找外面摆着自行车和自行车胎的店铺就可以了。要是车胎漏气这样的小问题的话,路边上有很多地方放着一盆水和一些自行车胎的地方都能修。但是如果是刹车碟这样的特殊部件的话,建议您在城区以外的地方骑行时还是随身携带好备件吧。
中国幅员辽阔,她的高山和沙漠都给专业的骑行者提供了无尽的挑战。但是,截止2010年5月,如果外国游客要在西藏高原上骑行,则必须''依照法律获取许可并须雇用一名导游''。
一段风光超越想象但是却艰难异常的自行车骑行线路,请参阅[[中巴公路|喀喇昆仑公路]]。中国自行车网和Intrepid Travel都在这条线路上组织小规模的骑行观光。
=== 共享单车 ===
在中国的许多城市,除了城市公共自行车以外,您还会在大街上看到一些装饰相同并装有二维码智能锁的自行车,这些就是共享单车了。
它们与城市公共自行车相比,最大的特点是无桩,您可以自由地在街边租还共享单车,它在城市交通中已经占了很重要的地位。您在旅游一些城市时,可以用共享单车到达目的地,也可以领略城市各个角落的风景
共享单车品牌繁多,不同品牌的押金和收费也不尽相同,但绝大多数品牌的共享单车价格都比较低廉,目前摩拜单车和青桔单车占据了大部分市场。您除了可以下载应用程序打开共享单车,还可以用微信和支付宝打开一些品牌的共享单车。
=== 自驾 ===
{{参见|在中国驾驶}}
截止到2022年,中国已经实现与阿联酋、比利时、法国和塞尔维亚4国驾驶证互认换领。注意,中国大陆将香港和澳门的驾照都视为外国驾照,因此,就算您有这两个地方的驾照,也不应该在中国大陆开车。这一情况在07年有所改变---没有中国驾照的短途驾驶成为合法。但是,和很多中国的法律一样,官方的变更和现实中的改变并不一定完全是一致的;直到2008年12月,没有中国驾照在中国开车仍然是违法的。除非您有外交身份,否则,要把外国的车运进中国基本是不可能的。
租的车大部分都是带司机的,和北美的一种租车服务remises类似;租带司机的车是游览中国最好的方式。就算您有初级的中文读写能力,而且取得了中国驾照,建议最好还是''不要''您自己驾车出游---当然,如果您已经习惯非常混乱的交通状况的话除外。如果您没有足够的勇气,请不要在中国的市内开车,并且停车位也非常难找。但是,尽管如此,在中国开车比在亚洲其他发展中国家,例如越南,要好很多。中国是属于靠右道行驶的国家。中国很多邻国,例如印度、巴基斯坦、尼泊尔、不丹以及香港和澳门特别行政区都是靠左行驶的。
在西方游客比较多的大城市,比如北京、上海还有其他的大城市中英文指示标识随处可见。但是,在其他较小的城市,英文标识就非常少,而在农村英文的标识基本上就不存在。因此,最好每次都带上写有您目的地名称(中文汉字)的纸条,这样,即便您迷路了,当地人也可以给您指路。
建议外国人不要在大城市之外的地方开车,“单行道”标识一般都是“并不一定是单行”。在高速上,仍然有的一小部分司机开过了出口匝道后会减速,然后转个270°的弯转上匝道。司机本会有各式各样的穿插技术。
在过马路时,一定把路两边都看清楚。不仅仅是自行车可能逆行,而且越来越常见的电动车也会---并且它们都没有什么声音的。
=== 摩托车 ===
{{参见|在中国驾驶#机车}}
摩的在中国很常见,特别是在小城市和农村地区。摩的一般都很便宜,而且很灵活高效(但是偶尔有点儿吓人)。车费可以讲价。
各个地方对于摩托车的管理规定有所不同。在有的地方,50cc的輕便摩托可以不用驾照,但是由于事故频发,目前很多地方都已经禁止了这种摩托,或者对这种摩托有了新的规定。要在中国骑“真正的”摩托可就难多了-这一部分是因为骑摩托车需要中国的驾照,一部分是因为很多城市都禁止摩托车驾驶,还有一部分是因为由于汽车和电瓶车的发展摩托车的生产和进口大幅下降了。中国的摩托车一般都是125cc的,一般可以到100km/h,大部分都是老式的。这种车速度一般都比较慢,也不是特别好骑。由于政府对于发动机尺寸的限制,所以赛车比较少,但是也不是找不到。还有一种比较流行的是仿制本田CN250的“Maxi”摩托车,它速度更快而且也比较舒适,可以自动换挡,这样在市区里骑会容易一点。
大部分城市都有各种摩托车市场,卖给您的车一般都是假的牌照或者非法牌照-在中国骑摩托车的外国人并不多,很容易被警察注意到。骑“真正的”自行车必须戴头盔,但是电瓶车就不用。理论上说来,您要去办理个牌照:摩托车牌照是黄色或者蓝色,电瓶车是绿色或者红色牌照。自己申请牌照的费用可能要好几千(电瓶车几十元),但是您也可以花很少的钱弄到假牌照——后果自负。
===三轮车(人力车)===
{{infobox|名称中有什么差异?|在中国的外国人通常会混用三轮车和人力车这两个词,但是它们指的却是两种不同的运输方式-其中一种已经不再存在。著名(臭名昭著)的人力车是一种前面有两个把手的两轮车,车夫拉着把手把乘客送到(走路或者跑步)目的地。人力车在19世纪晚期尤为盛行,但是在20世纪50年代逐渐被淘汰了。西方的精英分子坐着中国工人拉着的人力车上打马球的视频显示了人力车剥夺和压榨的本质。在很多小的欠发达城市还能看到人力车的衍生品,工人们每天早上拉着类似人力车的车子等待运输建筑材料和其他东西。三轮车已经取代了人力车---三轮车是一种类似自行车的有三个轮子的车辆。}}
在有的中型城市里,短距离出行的话三轮车会方便很多。三轮车有人力脚踏的和动力的两种,在中国农村地区和大城市的较不发达(也就是游人较少)的区域非常常见。上车前一定记得要先谈好价钱。
对于“司机经常欺骗游客”的报道一般多指像在北京秀水街、王府井、和老舍茶馆这些旅游景点发生的事情。一般的规则是“要提防在旅游区兜售任何东西的任何人”。
如果您看到一般的中国人使用“三轮”,例如,从北京动物园到最近的地铁站-那这就是安全的。不要乘任何穿着老式服装以吸引游客的师傅的车。他会收您市价上10倍的车费。
可能的话,尽量选乘脚踏三轮车。在选乘脚踏三轮车的同时,您也在帮助确实比较贫困的人,让他们有生意可做,而且您也在帮助中国留下一些传统的东西。在上海,由脚踏三轮车发展和改进而来的电动的三轮车占大多数。
==语言==
[[File:Map of sinitic languages-en.svg|thumb|240px|中国方言地图]]
中国官方语言是'''[[漢語會話手冊|标准普通话]]''',它主要是基于北京方言发展演化而来的。从20世纪50年代以来,普通话是中国教育系统使用的唯一的语言,所以大部分人都会说。普通话是有声调的,声调正确对于学习和使用普通话很重要。
中国很多地区,特别是东南和南部地区都有他们自己的“方言”。这些方言其实就像完全不同的语言,就好像法语和意大利语一样。这些“方言”和普通话一样也都是有声调的。即便同样是普通话(地图中大片的棕色区域),各地方的口音也不一样,而且各地都夹杂着自己本地的俚语和一些很鲜活的地方语言。除了普通话,使用最多的方言是'''[[吳語會話手冊|吴语]]''',主要集中在上海、浙江和[[江苏]]省南部地区;其次是'''[[廣東話會話手冊|广东话]]''',集中在广东省大部、香港和澳门;再次是'''闽语'''(福建)语支,它包括 '''在[[厦门]]周边区域和台湾使用较多的[[閩南語會話手冊|闽南语]]'''(闽南语有一种次方言叫做潮州话,主要在潮汕地区使用),和在[[福州]]周边地区使用较多的'''闽东语''' 。大部分中国人都可以讲自己的家乡话(方言)和普通话两种语言。有的上年纪的和受教育较少的人可能只会讲他们的家乡话,但是这对游客没多大影响。最好能有一个可以讲本地方言的导游,讲本地语言就说明这个人是对本地比较熟悉。虽然您凭着一口标准的普通话就能在中国大部分地区畅游无阻,但是如果您可以试着和当地人讲几句他们的当地方言,那他们是会非常高兴的,所以学习几句简单的方言问候语或者俚语会让您很快就和本地人熟悉了。一般来说,如果能听懂或者比较喜欢当地的方言的话会对去比较偏远地区旅行是很有帮助的。当然,在这些偏远区域,带上一本中文常用语手册还是很有必要的,因为全国的中文写出来都基本是一样的。
无论各地方言差异有多大,所有正式的书面中文都是一样的。甚至很多日文和韩文都用很多相同的汉字,而且和中文中的意思一样或者相似。但是,要注意的是中国大陆使用的是“简体中文”,这种简体中文是在20世纪50年代中期为了消除文盲而发展出来的。香港、台湾、澳门和很多海外华人都在使用繁体中文,但是在大陆的的一些广告和商业标识上也能看到繁体字。汉字简化总体还是比较系统化的,一般以简体中文为母语的人基本也能阅读繁体字,反之亦然,所以只要学会书写一种中文一般就足够了。
注意,在书法中不同由于书法家有不同的风格,所以每个字的笔画差异非常大。中文有五种字体:篆书(篆書)、隶书(隸書)、楷书(楷書)、行书(行書)、和草书(草書),其中楷书是中国的官方字体。去中国旅游只要知道一种字体就可以了。对于对中国传统文化有深厚兴趣的人来说,学习中文字体肯定会大有裨益。
在中国遥远的西部,有的少数民族会使用土耳其语系中的[[維吾爾語會話手冊|维吾尔语]]、吉尔吉斯语、哈萨克语以及其他语言(例如:[[藏語會話手冊|藏语]])。在中国的北部和东北部少数民族聚集的地方,这些少数民族会使用自己各自的语言,例如满语、[[蒙古語會話手冊|蒙古语]]、[[朝鮮語會話手冊|朝鲜语]] 等。在中国云南、贵州、海南和广西居住着许多少数民族,例如:苗族、侗族、壮族、白族等,他们都使用自己各自民族的语言。除了这些地区的老年人,一般的年轻人都能说普通话,而且大部分年轻人都既可以说普通话又可以说自己的民族语言。很可惜的是,很多少数民族语言(如:满语)都在慢慢的消亡。
===英语和其他外语===
在过去20年中,从小学高年级或者初中开始英语便成了他们的必修课。大学里面无论你是什么专业,一定的英语等级都和学位挂钩。但是,所有的教学的终点都在正式语法,轻听说而重读写。
上海、北京、广州和深圳能讲英语的本地居民比例较高。在有的城市,除了在有涉外服务的旅游景点和场所外很难找到能讲英语的本地人。航空公司和大酒店-特别是国际连锁店的员工基本都会讲一些基本的英语,但是能用英语深入交流的非常少。
国际机场、警察局、医院等公共服务提供场所的接待人士基本都会说初级英语——尤其是年轻的,因为中国是在近几年开始重视英语的。
在中国讲英文的时候,请尽量简化您的英语语言:讲慢一些,标准一些(就像您在电视上看到的新闻主持人一样),避免俚语、成语或者较长的单词,尽量使用简单的现在时态和一些陈述语句结构。不要说“Would you mind if I come back tomorrow?”直接说简单的(尽管可能有些唐突无礼),例如“Tomorrow I will return.”这样说和中文语义更加相近,而更容易被理解。
同时,部分中国人的英语可能有口音(像中文一样抑扬顿挫或者单词等时),此时请叫
在中国结交朋友的一个方法就是询问“英语角”- 英语角是指本地居民约定好一个时间和地点一起见面并练习英语的地方。一般都由一个外国人主持,一般时间都在周五晚上、周六晚上或者周日,在公共公园、英语培训学校、书店和大学校园。可能还会有其他的比如“法语角”、“俄语角”、“德语角”等。
如果您要去比较偏远的地区,建议在您旅途开始之前找一个导游帮您安排行程。这至少会帮您克服语言障碍,因为这些地方的本地居民基本不可能会讲任何外语的。
===学习中文===
''參見:'' [[#学习|学习]]
在西方,不知何故,中文以她的难懂而闻名。虽然中文和西方语言有所不同,但是旅客们会很吃惊地发现中文的基本语法还是比较简单的。动词不分人称和时态。名词没有词性(注:很多语言,如法语,名字有阴性和阳性之分)。最主要的难点在于中文使用了欧洲语系中不存在的几个辅音以及声调。
普通话和越南语以及泰语一样都是声调语言,它们使用不同的语调来表示不同的意思。“Ma”这个发音可以代表妈、马、麻、骂四个字中任意一个,完全取决于音调。中文的同音字非常常见;即就是音调一样的一个读音都会有十几个不同的汉字。“Zhōng”可以是中、忠、钟、终等。中国人在报出自己的名字的时候一般都会逐个字来解释。“我叫王菲,王是三横王,菲是是非的非加草头。”
对于很多人来说,书面的中文看起来跟一个个神秘代码相去并不远,但是如果您都可以辨识那么多的商标图案(这些图案一般并没有逻辑联系),那么就说明您也有认识大量汉字的潜在能力。并且,大部分汉字之间都是有逻辑联系或者有规律可循的。
理论上来说,中文有5万多个汉字。好的一点是,这其中85%的都是不常见字。跟很多种语言是一样的,大部分中国人也不知道要看一本中文书需要认识多少个汉字,永远都不要去数哪个中国人认识多少汉字。有的人声称小学生应该至少学习2000个汉字,大学毕业生则至少认识5000个。
拼音的发展是为了弥补识字和发音之间的鸿沟,拼音使用了罗马字母,是中国人学习中文的辅助工具。不能按直觉对拼音进行发音,因为有的字母和辅音辅音连缀代表了很多欧洲语系并不存在的发音,因此很多拼音的发音和西方人士想象的并不一样。中国人不认识以拼音写出来的地名和地址;建议使用中文汉字来记录书面信息。
==观光==
中国有着无尽的美景,您在中国永远不会无处可去。特别是在沿海地区,如果您已经游遍了繁华闹市中的景点的话,那么随便乘一趟短途火车您就会发现下一个美景。
无论您是痴迷于历史、寄情于山水,还是只想找个怡人的沙滩放松放松,从[[北京]]雄伟的紫禁城到令人叹为观止的[[九寨沟]],您想要的中国都能给您。就算您已经在中国生活了很多年了,但是在这个幅员辽阔的国家的其他地方总有一些新的景物和事情有待您去发现。或许是由于中国疆土的辽阔和历史的源远流长,中国在联合国教科文组织中的世界遗产数目位列第三(第一第二分别是意大利和西班牙)。
[[Image:Diecaishan.jpg|thumb|240px|喀斯特地貌、桂林]]
=== 主要景点 ===
* [[万里长城]]
* [[天坛]]
* [[天安门]]
* [[秦始皇陵和兵马俑]]
* [[鼓浪屿]]
*[[黄山]]
* [[壶口瀑布]]
*[[西安|西安城墙]]
* [[布达拉宫]]
* [[婺源|婺源古镇]]
* [[泰山]]
* [[黄果树瀑布|黄果树大瀑布]]
* [[颐和园]]
*[[北京/故宫|故宫]]
* [[苏州园林]]
* [[东方明珠塔]]
* [[外滩]]
* [[华山]]
* [[大三巴牌坊]]
* [[少林寺]]
* [[九寨沟]]
[[File:1 jiuzhaigou valley national park wu hua hai.jpg|thumbnail|九寨沟的五花海]]
* [[张家界]]
* [[漓江山水]]
[[File:Lijiang River scenery.jpg|thumbnail|桂林漓江山水]]
* [[天涯海角]]
[[File:Sanya Sun Photo by Dale Preston.jpg|thumbnail|right|海南省风光]]
===喀斯特地貌===
'''山丘绵延、奇石陡峰'''是的中国艺术家梦寐以求的一种传统风景。中国的南部和西南部多这中形态各异的岩溶地貌,又称“喀斯特地貌”。喀斯特是一种石灰岩地貌,是以[[南斯拉夫]]石灰岩高原的地名命名。随着石灰岩被化学腐蚀,密度较大的抗腐蚀性石头或者地块形成了各异的山峰。山下形成的山洞会坍塌而形成落水洞和暗流,它们和地下河道连通。在喀斯特地貌中,溶蚀形成了星罗棋布的山峰、拱形洞穴和通道。其中最著名的例子就是云南省昆明附近的石林。中国很多最著名的景区都以喀斯特地貌风光著称— [[广西]]的[[桂林]]和[[阳朔]]和贵州省中部和西部等地。
===圣地===
中国的如下景点有非常著名的佛教艺术:
* [[山西]]的[[Datong#See|云冈石窟]] - 石窟依山开凿,有五万一千多个佛像雕刻,可以追溯到1500多年以前
* [[甘肃]]的[[Dunhuang#See|莫高窟]] - 可以追溯到公元4世纪的艺术和壁画
* 重庆附近的[[重庆/大足|大足石刻]] - 可以追溯到7-13世纪之间
* 洛阳附近的[[Longmen National Park|龙门石窟]] - 可以追溯到5-10世纪。
===圣山===
中国有很多圣山。
和道教有关的“五岳”:
* [[泰山]] ,山东(海拔1545米)
* [[华山]],陕西(海拔2054米)
* [[衡山]],湖南(海拔1290米)
* [[恒山]],山西(海拔2017米)
* [[嵩山]] (嵩山),河南省(著名的少林寺也在河南)(海拔1494米)
和佛教有关的“四大佛教名山”:
* [[峨嵋山]],四川(海拔3099米)
*[[青阳|九华山]],安徽(海拔1342米)
* [[普陀山]],浙江(海拔297米,是一个岛)
* [[五台山]],山西(海拔3058米)
西藏佛教三大主要圣山:
* [[冈仁波齐峰]],[[西藏]](海拔5656米),它也是印度教徒朝圣的印度教最神圣的山峰之一
* [[梅里雪山]]
* [[阿尼玛卿雪山]]
中国还有很多其他非常有名的大山。在中国很多大山即便并没有身处圣地,当时还是有很多庙宇:
* [[黄山]],安徽,风景秀丽,景色引人入胜。
* [[青城山]],四川
* [[龙虎山]],江西
*[[青岛|崂山]],山东
* [[武夷山]],福建,主要的旅游胜地,有大片的茶山
* [[喜马拉雅山]],横亘尼泊尔和西藏边界,世界上最高的山脉
* [[武当山]],在湖北[[丹江口]]附近,道教圣地,是太极和武当拳的发源地
*[[长白山自然保护区|长白山]](朝鲜语:백두산),对于满族人和朝鲜族人来说是世界上最神圣的山脉,位于中国和朝鲜的边界处。
===革命圣地===
* [[韶山]] - 中国共产党第一人主席和中国领导人毛泽东故乡
* [[井冈山]] - 共产党在1927年国民党围剿后的第一个农村根据地
* [[瑞金]] - 1929到1934年间中华苏维埃共和国所在地
* [[遵义]] - 遵义会议所在地,之后毛泽东进入政治局常委
* [[泸定]] - 传说中飞夺泸定桥所在地
* [[延安]] - 从1939年到1945年中共产党的主要根据地所在地
* [[武汉]] - 推翻清廷的武昌起义发源地
* [[广州]] - 黄埔军校所在地,国民党和共产党的很多领导人(蒋介石、周恩来、毛泽东)都曾有黄埔军校经历,在1926-27年被北伐前开展了很多军事和政治学习。
===旅游线路===
以下是全程都在中国境内的一些旅游线路:
* [[中国两周到一月游]]
* [[香港附近一周游]]
* [[长江沿线|长江沿线游]]
* [[黄河沿线|黄河沿线游]]
* [[京杭大运河流域|大运河沿线游]]
* [[云南游]]
* [[西藏游]]
* [[长征]]
其他涉及中国的旅游线路:
* [[欧洲到南亚陆路旅游]]
* [[丝绸之路]] - 古代从中国到欧洲的商队之路
* [[中巴公路|喀喇昆仑公路]] - 从中国经由喜马拉雅山到巴基斯坦
* [[马可·波罗的足迹|探寻马可·波罗的脚步]]
* [[昆明到香港陆上行]]
==活动==
===按摩===
中国按摩场所遍布全国,而且一般都物美价廉。在亚洲,盲人有从事按摩的传统。一般比较专业的按摩价格在20元到40元一小时之间。
* 基本上所有的理发师都可以帮您洗头,并且给您做一个头部按摩,只收20块钱。这一般还包括帮您清理耳屎和一些颈部和手臂按摩。加上理发和/或刮面,一般收15元到25元。在大城市里,理发费用一般在50元以上。
* 足疗的地方也很多,一般足疗场所的招牌上都有光脚图片作为标示。价格一般在20元到100元。
* 全身按摩场所也非常多,价格一般在每小时15元以上。一般有两种:按摩一般就是普通的按摩;而推拿可能会用到针灸中使用的中草药。最专业的按摩一般都在专门的按摩医院或者一般的中医院,价格一般都在50元每小时以上。性价比最高的一些在不明显场所的盲人按摩。
很多地方这三种按摩都有。
有的按摩场所其实就是妓院。卖淫在中国虽然非法,但是却很普遍并且经常会以按摩作为掩护。很多温泉和桑拿场所都提供“全套”放松服务。在一些小地方,只要您看到粉红色的灯光和穿短裙的女孩子,那么很有可能他们提供的就不仅仅是按摩,而且她们也不怎么会按摩。很多发廊也是这样,既是按摩场所也是妓院。
没有粉红色灯光的地方一般都提供很不错的按摩服务,而不提供性服务。如果某个按摩场所的广告中注明了是盲人按摩,那么这基本上是合法场所。
在很多按摩场所您可以小睡几个小时,甚至在那里过夜都可以。理发店一般没有可供睡觉的地方,但是您也可以在做全身按摩的时候在按摩桌上睡一会,或者在做足部按摩的时候在沙发上睡一会儿。一般费用都不会很高,这估计是在中国最便宜的过夜的方式。但是,请注意,除了带有独立包间的高端桑拿场所,在其他的按摩/桑拿场所中,您都要和那里的员工公用厕所,而且不能将您的行李锁起来。寄存行李最好的办法是把行李寄存在火车站(所有火车站都有行李寄存处),一般价格在10-20元左右。
===传统艺术===
如果您计划在中国停留的时间比较长,那么建议您学一点中国传统艺术。毕竟,人在中国本身就是学习中国传统艺术的绝佳机会,如果您对某项中国传统艺术已经略懂一二,那么通过直接向这一艺术所在国度的大师学习可以提升您的技能。很多城市都有很多知识分子接收初学者,而且不懂中文也不碍事,因为您可以通过实例或者模仿进行学习。书法现在仍然是中国人热爱的一种艺术。很多城市的书法家都用毛笔蘸水在城市公园的人行道上练习。其他的您可以参加培训班的传统艺术包括演奏中国传统乐器(您可以询问买中国传统乐器的商店,很多商店就有培训班)、中国厨艺、甚至京剧演唱。费用一般都非常合理,而且也不需要特别大量的辅助材料。唯一的要求就是要在一个地方足够久;最好不要在旅游景点参加这样的培训课程。
===武术和太极===
和中国传统文化艺术一样,有兴趣、有时间的人可以学学中国久负盛名的武术。有的武术,譬如说太极,学习的方法很简单,清晨直接去市区的随便哪个公园跟着那里的人练就可以了。您会发现那里有很多人很乐意做你的老师的。其他的武术就需要更加深入的学习了。著名的武术培训地有[[嵩山]]的少林寺和[[大理]]附近的无为寺。
===传统的消遣活动===
中国有很多可以在茶室、公共公园甚至在大街上玩的传统消遣。只要有摊子,一般都会吸引很多路人。起源于中国的策略游戏有围棋和中国象棋。麻将是一种以麻将牌作为道具的游戏,麻将在中国非常流行而且经常(也不是没有例外)都是玩钱的。各地的麻将规则不一样,所以每到一处,你都要学习新的麻将规则。麻将最有名的打法是广东麻将、台湾麻将和日本麻将。跳棋虽然不是起源于中国,但是在中国也有很多人在玩。很多中国打扑克的技艺都很精湛;邓小平先生对于桥牌的钟爱是远近闻名的。
==购物==
中国的官方货币是人民币,经常缩写为RMB。人民币基本单位是元(在纸币上写作“圆”),它的国际货币代码是CNY。所有的标记都是以元为单位的,不是¥就是“元”。在[[香港]]和[[澳门]]特别行政区人民币'''不是'''法定货币,这两地都自行发行货币。当然,香港有的地方也接受人民币,但是都是按照人民币和港币1:1的汇率来算的(截止2017年9月17日,1人民币=1.2400港元)。1人民币元=0.1581美元,1美元=6.3246人民币元(截止2018年3月20日)
{{infobox|小贴士|* 10 ''分''等于1 ''角''
* 10 ''角''等于1 ''元'',基本单位
* ''元'' 也称''块''
* ''角''也称''毛''
* 10大写为''十'',或者''拾''
* 100大写为''百'',或者''佰''
* 1000大写为''千'',或者''仟''
* 10000大写为''万''}}
元的下面是角,10角为一元,之后是分,10分为1角。分币现在基本上已经非常难看到了(可能在非常贫困的地区偶尔能看到)。一般价值10分的硬币叫做1角而不是10分。但是在口语[[漢語|普通话]]中,人们一般都说''块''而不是''元'',说''毛''而不说''角''。例如3.7元一般会被念成3块7(最后一位单位会被省略)。
在数字方面,请注意一般都会省略最后一位的单位,例如:530,会被念成五百三。而且注意在中文中有一个单位叫做''万''(十千),所以50000一般叫做五万而不是五十千。
中国的很多钱币都既有纸币又有硬币,包括很多零钱。有的地区纸币用的多一些,有的地方硬币用的多一些,但是无论纸币还是硬币在哪里都能用,根据中国法律,拒收人民币属于违法行为。角(1元的十分之一)也有纸币和两种版本的硬币。相反,一元却有硬币和两个版本的纸币(1999版人民币一元纸币底色为绿色,正面为花纹和毛泽东像,背面为杭州西湖“三潭印月”景色)。您最要会辨认不同版本的钱币。
===假币===
假币是一个很严重的问题。所有在中国待过几个月的人都会或多或少的有这方面的经历。从1元的硬币到10元、20元、50元和100元,都有假币。在中国生活的第一步是收到钱(即使是硬币)之后要仔细看看。看的时候主要要注意不同部分的质地、金线、和在不同光线下颜色的变化。如果您不懂您可以问别人,每个人都有自己的办法。
收银员在收到您的纸币后经常会仔细辨认。请不要生气,这并不表示他们怀疑您用假币。只是他们要负责任的。在您拿到零钱后也要仔细看看,特别是50元以上的。售货员有可能会想办法把他们从别人那里拿到的假币给您。
最近几年,ATM机吐假币(虽然不常见)成为一个很热门的话题。如果您担心从ATM机里拿到假币,那么请去银行柜台上,并告诉银行操作人员“我怕拿到假钱了”。一般银行人员都会理解的。
也听说有黄牛在中国边境处将假币兑换给游客,强烈建议去银行兑换货币(部分银行网点不能兑换)。
一般当您在商店或者出租车里支付50元或者100元时,您可以记住这张钱编号的最后几位。可能他会说您的钱是假的,这时候您可以保证他退回来的和您给出去的是同一张。
===货币兑换===
虽然中国现在仍然实行外汇管制政策,但是在很多国家都可以很容易换到人民币,特别是在亚洲。在中国兑换美元、加元、欧元、英镑、澳元、日元和韩元都是比较容易的。除了新加坡币之外,东南亚其他国家的货币一般比较难兑换。建议尽量到比较大的银行(比如BOC中国银行)或者授权的货币兑换点(一般高端酒店或者机场都有,但是汇率一般会有差异)兑换货币。
确实存在货币兑换的黑市,但是强烈建议您不要在黑市兑换因为在中国兑换货币时'''假币'''情况非常严重。对于在市场找到的或者银行周围溜达的黄牛一定要小心。虽然他们的汇率非常诱人,但是如果没有当地的朋友帮忙的话,'''不要'''跟他们兑换。经常会有兑换了一大笔钱之后发现拿到的大部分是假币。尽量在'''中国银行'''或者其他银行的柜台进行兑换,虽然他们的汇率相对要差一点,但是拿到假币的可能性几乎为零。
中国外汇管制很严格。在全世界的旅游景点和购物中心都很常见的私人的货币兑换点在中国却并不常见。在银行兑换货币一般需要5分钟到60分钟左右,有时候在酒店兑换会更快一点。一般就算大城市的支行都会对兑换流程很熟悉,操作的很快,而三四线城市的分行却不熟悉,操作相对要慢一些。
无论在哪里兑换,您都需要填一张表并出示您的护照。一般都要扫描您的护照并需要一份护照复印件。如果您计划带着较大金额离开中国的话,兑换收据要留好。注意,并不是每个有“Exchange”标识的银行都会给不是他们客户的人提供现金兑换服务。例如,渣打银行就只给他们的客户提供美元和港币货币兑换(但是,就算您拿到是旅游签证,开户也是可以的,而且他们的汇率要比大部分本地银行要优惠)。
用美元兑换人民币程序很简单,但是一般在兑换之前银行对您的钱看的很仔细。如果有机会在国外买入人民币的话(比如通过香港或者越南入境的话),应该在国外换,因为国外的汇率要好一些。要卖出人民币也是一样的,出中国边境之后卖出人民币的汇率也会更好一点。另外,大部分国际银行的储蓄卡或者信用卡都可以在中国的ATM机中直接支取人民币现金。但是,这样做的汇率非常不利而且手续费会非常高。建议随身带一点儿国际货币,例如英镑、美元或者日元以防您在附近找不到柜员机。
===銀行卡===
在中国接受銀行卡消費的小商鋪較為少见,多為大型消费场所接受。絕大多數接受銀行卡的商鋪均只接受中國銀聯卡。有部分较多中国以外游客受众的场所可接受 Visa/MasterCard 等国际组织通道的银行卡 ,但一般也是大型消费场所,如国际酒店,且有可能要求收取額外手續費。發現(Discover)卡與中國銀聯簽署了協議,允許於大陸地區的收銀機上作為銀聯卡使用,然而發現卡近期發行的芯片卡則可能需要多嘗試幾次或根本無法使用,且發現卡於線上並不能作為銀聯卡消費使用。雖然大來卡(Diner's club)目前屬於發現卡公司所有,但是於中國大陸並不可以作為發現卡或銀聯卡使用,覆蓋情況與美國運通(American Express)類似。
中国到处都有 ATM 机,所有的 ATM 机均接受中国银联卡,其中大部分的 ATM 也可接受 Visa/ MasterCard 卡组织的卡,部分机器也会支持 JCB/ 美国运通卡 ,中国以外发行的卡片在使用时必须在发卡方开通跨境取款功能,此外发卡方、卡组织、取款的 ATM 所属银行都有可能收取一定的手续费或兑汇费。
注意:虽然中國農業銀行、民生银行、深圳发展银行和上海银行等等許多銀行的 ATM 机上有时候会有 PLUS/ Cirrus/ Maestro 等标志,但是实际上只有个别的 ATM 机可以真正接受这些卡。而且能不能用只有您试了以后才能知道。絕對不可以依賴銀行卡作為唯一的支付與提現手段。
===移動支付===
中國的移動支付正在蓬勃發展中,類似微信支付、支付寶等基於二維碼(QR)的移動支付目前已經普及。幾乎所有接受小額支付的商鋪,甚至一些接受大額支付的商鋪,均接受至少一種使用二維碼的移動支付方式。如果您於商舖中看到一個印有上述軟體的 Logo 的二維碼,便意味著您很可能可以使用微信支付、支付寶等方式付款。随着该支付方式的发展,很多中国人已很少使用现金,甚至出门不需要带钱包了。
然而基於 NFC 技術的移動支付方式卻尚未於中國普及。虽然大部分终端已支持非接触式支付,但一般也仅限于使用银联芯片卡非接触,而不是通过手机 NFC ,即使可以使用,小型商铺的店员也会已不会使用等理由拒绝,接受 Apple Pay 的商鋪亦只能使用中国区或香港区 Apple Pay 中綁定的銀聯卡。 不过目前通过银联云闪付乘坐公共交通(城市内的公交,地铁等)已经被普及了,故在一定场合内NFC是可以使用的.
Google Pay 由于 Google 遭到封锁,故不可在银联终端上使用,即使您遇到接受 Visa/ MasterCard 的终端也不大有机会通过 Google Pay 消费,因为这些终端通常位于机场、国际酒店等大额消费场所,使用 NFC 非接是不被接受的,其他区域的 Apple Pay 同理。
截止2022年中国官方目前仍在部分地区试点数字人民币,数字人民币是与纸币一样,是中国官方承认的法定货币,具有可溯源的属性。可以实现无网络离线支付。
==饮食==
{{seealso|中華美食}}
中国有很多饭店和路边摊。如果您第一次来中国建议先尝试一下街头小吃。这一般比较便宜。
===地方菜系===
[[File:Guangzhou-Nur-Bostani-Restaurant-pseudo-bagels-0473.jpg|thumb|各种烘焙食品是中国西北穆斯林民族的饮食特点]]
*京菜:家庭面条和包子、北京烤鸭、甘蓝菜、棒极了的泡菜,不喜欢也可以极大的满足。
*宫廷菜:晚清宫廷食品,由慈禧而出名,可在北京的高端专业餐厅品尝。美食结合满族食品如独特的新奇事物如驼掌、鹿肉、鱼翅和燕窝。
*徽菜:中国八大菜系之一,特色菜品如毛豆腐,臭鳜鱼等。
*粤菜:大多数西方游客的风格在某种程度上已经很熟悉了。不是太辣,重点是新鲜煮熟的食材和海鲜。点心通常在早餐或午餐吃,是一个亮点。也就是说,正宗的粤菜在中国的各种菜系中广东的是有名的,即使在中国,他们非常广泛的定义什么是食物。
*沪菜:由于其地理位置,上海菜被认为是一个很好的混合北部和南部中国烹饪风格。最著名的菜肴是小笼包和韭菜饺子。另一个特色是“拉面”,从日本拉面和韩国碗拉面被认为是来自于此。糖通常被添加到炒的菜给上海菜味道甜甜的。
*川菜
*豫菜:即河南菜系,是对在带有中原传统文化内涵的烹饪理论指导下,运用具备中原地域特点的技术和材料所制作的菜肴、面点和筵席的总称。豫菜是中国各大菜系的渊源,被中国烹饪界称为中国八大菜系的“母菜”,有“烹饪鼻祖”和“中华厨祖”之称的伊尹便出生于河南[[洛阳]],当代豫菜是在原宫廷菜、官府菜、市肆菜和民间菜的基础上,根据中原物质条件,逐步积累演变而发展起来的。
因河南地处中原地区,其饮食文化口味因地域影响,河南北部多为面食,南部多为米饭。豫菜中一些菜名比较华丽优美,主要因为一些菜式源自于汉宋唐宫廷,有些饮食文化历史可以追溯到商周时期。
*湘菜
*潮州菜
*闽菜
*黔菜
*浙菜
*琼菜
*鲁菜:中国四大菜系之一(与川、粤、苏菜并称),选料考究,技艺精湛,主要流行与北方地区,对京津、东北等地的饮食产生影响。分为济南、孔府、胶东三支,代表菜有奶汤蒲菜、九转大肠、葱烧海参、油爆双脆、一品豆腐等。选料多为海鲜和肉类,孔府菜擅长素菜烹饪。口味偏重偏咸,擅长奶汤料理。除代表菜外,鲁菜家常菜也非常流行。
===快餐===
[[File:Xiao Long Bao by Junhao!.jpg|thumb|包子是一种很常见的食物]]
[[File:Chuan'r LED sign hanging in front of Beijing shop.jpg|right|thumb|烤串店可能会在店铺门口挂出来一个呈“串”字形状的灯]]
各种类型的中国食品都特别的快速、便宜、美味、方便。从各个城市都可以去买到吃的。[[北京]]王府井地区的小吃街是一个非常值得注意的旅游区,适合街头食品。在一些讲[[粤语]]的地区(主要是[[广东]],但不包括[[深圳]]),街头食品摊贩叫做盖宾洞,这样的企业可以发展成为一个实质性的业务,而在传统的街头食品意义上,这些摊位几乎不能“流动”。全国各地的快餐包括:
* 特别多的面包店。在中国发现的各种糖果和甜食通常作为零食销售,而不是西餐馆的餐后甜点套餐。
* 各种烤肉,包括羊肉串是非常常见的。
* 饺子,可以用来煮,蒸或油炸馄饨样物品与各种馅料。而且几乎遍布了亚洲。
* 包子,馒头里面塞满咸,里面是甜的或蔬菜馅或者肉馅。
* 馒头,可以看成是带皮的白色面包,也可以在中间加一点吃的。
* 兰州拉面,这个行业主要由回族族裔所主宰——寻找一家拥有穆斯林服饰工作人员的小餐厅,男士们戴着白色的帽子,女士们则戴着头巾。
* 在广东和其他地方则有点心,在中国的任何主要旅游目的地,您都可以找到为香港客户提供点心的人。
* 煎饼,一个鸡蛋煎饼,裹在一个带有酱汁的饼干和可选的辣椒酱。又被称为“煎饼果子”。
西方的快餐概念可以说与国内品种一样受欢迎。肯德基、麦当劳、赛百味和必胜客在中等城市及以上地区都是无处不在。汉堡王和棒约翰等中国连锁店也很普遍。这些包括德克士:鸡肉汉堡,薯条等,比肯德基便宜,有些人说得更好 - 还有(真功夫)——有更多的中国菜单。
===礼节===
尊老爱幼,文明用餐。
===买单===
在中国没有给小费的习惯,所以不需要,如果你想给服务员小费,他们可能会觉得这很奇怪;在中国使用移动支付非常方便,可以不带现金,非常方便的使用微信支付或者支付宝支付,但出门身上最好携带一些现金,以防出现意外,例如无法使用移动支付,或某些商人因过于年迈而未配备移动支付。
===在餐厅用餐===
===独自用餐===
==夜生活==
中国有很多酒吧、KTV等娱乐场所。有人说这很不安全。但是请放心,中国有全世界反应能力最快的警察制度。如果遇到危险请拨打报警电话110,警察会赶到并为你解决危险。
==住宿==
在中国只要不是偏远山区,就会有酒店。但是请注意在旅游景点,尤其是节假日时酒店价格会非常贵,高星级酒店为800<nowiki>~</nowiki>5000+元。
以上海迪士尼乐园酒店为例,(2017/09/18-2017/09/19 ,1 间房间 ,1 宾客)
9月份平常工作日价格(豪华花园景观房)为¥1,950元每晚(不含服务费)
10月份国庆假期价格(2017/10/03-2017/10/04 ,1 间房间 ,1 宾客)(豪华花园景观房)为¥2,750元每晚(不含服务费)
您可以在一些提供酒店预定服务的网站或者APP上提前查找并预定酒店,也许可以找到一些价格低廉的房间,有时候甚至可以用一百多人民币在北京住上两晚。
至于您选择的时间及其房型价格到底划不划算,就是仁者见仁智者见智了。
==学习==
{{seealso|前往中国留学}}
中國大陆主要大學有清华大学、北京大學、武汉大學、华中科技大学、南京大学、中山大学、浙江大学、上海交通大學、深圳大学、同济大学和复旦大學等。
==工作==
{{seealso|前往中國工作}}
近年来,中国增长非常之快,这有望成为世界上最大的经济体。尽管劳动力市场对于外国人的访问是困难的,然而,对于那些希望体验中国的人来说,有重要的机会。
就业机会包括英语教学,工程及跨国公司工作。
==安全==
在中国,游客的人身安全总体上可以得到保障,夜间主要街道也都基本安全,但是在人多的场合请务必保管好个人财物以免遭遇盗窃,小额的财物损失较难获得警方重视,追回的概率也不大,中国民间几乎没有枪械。中国的报警电话是110,火警是119,急救电话是120。
==医疗==
===流行病学===
除了所有旅行者均应接种的常规疫苗外,美国的疾病预防和控制中心(CDC)建议对下述传染性病原体缺乏免疫力的人士额外接种疫苗:
*大部分旅行者应接种
**甲肝疫苗(HAV)
**伤寒疫苗(Thyroid)
*部分旅行者应该接种
**乙肝疫苗(HBV),如果您可能与当地人发生性行为,或者在当地接受手术和纹身。
**日本脑炎疫苗(JE),如果您的旅程超过一个月或者您打算访问乡村地区。
**小儿麻痹症疫苗(Polio),如果您打算访问新疆。
**狂犬疫苗(Rabies),如果您可能接触犬类。
**黄热病疫苗(Yellow Fever)(中国境内并没有感染黄热病的风险,这么建议是因为中国政府强制性要求部分来自黄热病疫区的旅客接种,否则不让过关。如果您并非来自疫区,可以不接种)
**疟疾疫苗(Malaria),如果您前往亚热带地区。
有些疫苗从首次接种到免疫获得可能长达6个月,因此请提前接种。由于访问东亚国家时,大量推荐疫苗都是重复的,所以尽早接种,就算去不了也不亏,这免疫力以后还能用得上。
在新冠疫情影响下,注射满全流程新冠疫苗在入境前也是必须的.
==举止==
通常的'''[[用电|电力系统]]'''使用是220伏/50赫兹。一般都能支持两针欧洲和北美,以及三针澳式插头。但是,请仔细阅读设备上的电压信息,以确保它们在插入之前接受220V(两倍于许多国家使用的110V)的电压,否则可能会导致倦怠和对诸如吹风机和剃须刀等设备的永久性损坏。可以处理各种插头形状(包括英国)的通用延长线被广泛使用。
中国是右行制国家,这意味这车辆、行人、电车、火车等均应当靠右行驶——这和一些地方不一样。
对于比较长的街道的名称通常以中间词语表示街道的一部分。例如,白马街或白马路可以拆分为白马路、白马北路、白马中路和白马南路。除此之外,也可以使用“东”或者是“西”。
然而,在一些城市,这些名称并不表示某条街道的一部分。例如在[[厦门]],湖滨北路和湖滨南路平行,在湖的南北两侧东西走向。在[[南京]],中山路,中山北路和中山东路是三条独立的主要道路。
'''洗衣'''服务可能价格昂贵或难以找到。在一些高端酒店,每件衣物洗涤费用为10-30元人民币。一些地区的廉价酒店甚至没有洗衣服务,但在其他地区,如沿着[[云南]]的旅游线路,这项服务是常见的,而且往往是免费的。在大部分地区,除大城市中心地区外,您可以找到可以洗衣服的小商店。在大门上寻找的标志是洗衣,或者是从天花板上垂下来的衣服。成本约为每件2-5元人民币。在即使是最小的城市,干洗店网点的分布也广泛,可以洗衣服,但在某些地区,您将被卡在手洗衣服这个环节,这是耗时且令人厌烦的,所以可能选择快速干燥的面料,如聚酯或丝绸,如果你确实找到一家洗衣店的酒店,通常他们会把所有的衣服放在一起洗,甚至与酒店的其他物品一起洗,所以最好用携带浅色的衣服。
[[File:Jianshui - old city - P1370481.JPG|thumb|用来销售的传统烟管]]
禁止在公共建筑和公共交通工具上'''吸烟''',除了一些餐厅和酒吧(包括KTV)——其中许多是很明显的吸烟场所,虽然许多跨国连锁餐厅禁止吸烟。这些禁令在全国范围内得到执行。一般来说,[[上海]]和[[北京]]的吸烟法律是最严格的,而在其他地方则更为严格。许多地方(特别是火车站,医院,办公楼和机场)都会设有吸烟室,一些长途列车可能在每辆汽车的尽头都有吸烟区,'''中国高速铁路列车全列禁烟'''。非吸烟者的设施往往很差;在大多数餐馆,酒吧和酒店除了高端设施外不会有非吸烟区,尽管许多现代化的建筑物都有排烟系统,通过天花板通风口将香烟烟雾吸出房间——这意味着烟雾不会在室内飘着。
{{Cquote|我可以吸烟吗?}}
{{Cquote|禁止吸烟!}}
中国的公众假期值得关注。尽管在最受欢迎的旅游景点中,你永远不会独处,其中包括特殊山区,周末和公众假期的热门徒步旅行,但由于当地旅游业的关系,这些地区可能会接近无法通行。你可能计划作为一个沉思的徒步旅行,可能会变成一个多小时的队列!了解国庆节日期并据此计划([[w:中华人民共和国节日与公众假期|参见]])。
关于香港、台湾的政治和所属话题,请不要发表您的意见,也不要与人谈论——这涉及到较大的政治争议。
==通讯==
=== 电话 ===
{{seealso|中国大陆电话区号}}
中国大陆有三大国营电信运营商:中国联通、中国电信和中国移动。中国联通和中国电信涵盖移动电话和固定电话业务,中国移动只有移动电话业务(和铁通合并后也有固定电话业务),为大陆规模最大的移动运营商。不过近年来也有虚拟运营商开始提供移动通信服务,这类运营商使用的170、171、173、176号段都是虚拟运营商的专用号段。
中国比较大型的酒店一般都有直拨国际电话IDD,可以拨打国际和港澳台电话。很多酒店都有网线接口、无线Wi-Fi上网、语音留言系统、视频系统等,实现了方便快捷的通讯服务。
移动通信方面,中国联通主要使用FDD-LTE、中国电信使用FDD-LTE、中国移动仅使用TD-LTE作为4G制式。各家移动运营商的信号覆盖都很广。
电信诈骗案件在中国时有发生,如果你接到了陌生的电话或短信,千万不要向对方转账或付款。
=== 网络 ===
中国电信和中国联通是中国境内两大拥有全国性骨干网的典型运营商,因此相对于其他小型运营商而言,这两家的网络性能较好,同时价格也更高。大部分宾馆客房里都有互联网连接,不少机场、商场、饭店等公共场所也有无线网络覆盖,不过它们大多需要经过手机短信验证等步骤才能使用。
中国的网络审查很严格,连接部分外国网站时可能会遇到长城防火墙(GFW)封锁,Facebook、 Twitter、 Google(包括维基百科,YouTube)等服务也在其中(见[[w:中华人民共和国被封锁网站列表|已被大陆封锁的网站]]),不过有些技术(VPN)可以绕过此类封锁,建议有需求的游客提前下载好相应软件并做好配置(Google Play 商店 在中国也被封锁,因此 Android 设备用户须提前准备)。值得注意的是,私自使用VPN浏览被封锁的网站在中国大陆系违法行为,但警察通常不会对使用者进行处罚。
{{usablecountry}}
{{位于|东亚}}
{{geo|39|103|zoom=4}}
{{related|在中國駕駛}}
bm63kbfyooevtrcfw9cvuwmjp0hwxis
183850
183849
2022-08-04T12:34:52Z
Taxi passenger
15345
/* 电话 */
wikitext
text/x-wiki
{{pagebanner|China_Banner_2.jpg|disambig=中國}}
{{quickbar
| image=Gran Muralla China5184.JPG
| caption=The Great Wall of China.
| location=LocationPRChina.png
| flag=Flag of the People's Republic of China.svg
| capital=[[北京]]
| government=Single Party Socialist Republic
| currency=人民币/港幣/澳门元
| area=(中華人民共和國)9,596,960 km<sup>2</sup>
| population=(中華人民共和國)1,411,778,724(2020年官方统计值)
| language=官方語言:[[普通话会话手册|現代標準漢語(普通話/國語)]]<br>汉语地區語言:[[吴语会话手册|吳語]]、[[廣東話會話手冊|粵語]]、[[福州话会话手册|閩東語]]、[[閩南語會話手冊|閩南語]]、[[湘语会话手册|湘語]]、[[赣语会话手册|贛語]]、[[客家语会话手册|客家語]]等<br>其他少數語言:[[维吾尔语会话手册|维吾尔语]]、[[哈萨克语会话手册|哈萨克语]]、[[蒙古语会话手册|蒙古语]]、[[藏语会话手册|藏语]]、[[朝鲜语会话手册|朝鲜语]]、[[柯尔克孜语会话手册|柯尔克孜语]]、[[壮语会话手册|壮语]]
| religion= 道教 30%、佛教 11-18%、基督教(新教、天主教)3-5%、伊斯蘭教 1.5-2%、三教、無神論 53-59%.
| electricity=220V/50Hz (澳大利亞2/3腳插頭)
| callingcode=+86
| tld=.cn
| timezone=UTC +8
}}
{{COVID-19 box|[[2019冠状病毒病|新型冠状病毒感染的肺炎]]在中国大陆境内的流行高峰期已经过去,但中国政府仍然实施“动态清零”政策,部分城市有封锁措施,部分公共场所可能关闭,防疫政策未完全取消。为了阻断境外输入病例,境外来华人士需接受为期10天(7天集中隔离医学观察+3天居家健康监测)的隔离观察,[[2019冠状病毒病 (中国)|在中国大陆境内旅游]]也需要遵循当地的防疫政策。前往已开放的室内公共场所,请佩戴口罩并配合出示[[w:健康码|健康码]]、登记个人信息等要求。
具体请见[[2019冠状病毒病 (中国)]]}}
{{Disclaimerbox|'''注意:'''<br/>
#本文帶有歐美國家的地域中心傾向,請協助修正。<br/>
#由于现实原因,本文大多數內容'''僅僅涉及中国大陆地区''';關於其他地區,請見:[[香港]]、[[澳门]]及[[台湾]]。<br/><br/>
注:某些習慣上,'''中國'''有時候只指'''不包括香港、澳門地區的中華人民共和國實際領土'''。[[香港]]和[[澳门]]都是中華人民共和國的特别行政区,实行“一个国家,两种制度(一国两制)”,与現今中国大陆的社會主義不同;台湾本岛、[[金门]]、[[马祖]]和[[澎湖]]被中華民國政權管轄至今。这样编写,维基导游并不代表'''任何一方的政治立场'''。<br/>
}}
'''中国大陆'''是由'''中华人民共和国'''实际統治的区域。中华人民共和国位于[[东亚]],是世界人口最多,面积第三或第四大(官方声称是第三大)的主权国家。有14个陆上邻国,分别为[[东亚]]的[[朝鲜]]和[[蒙古]],[[南亚]]的[[阿富汗]]、[[巴基斯坦]]、[[印度]]、[[尼泊尔]]、[[不丹]],[[东南亚]]的[[缅甸]]、[[老挝]]、[[越南]],[[中亚]]的[[塔吉克斯坦]]、[[哈萨克斯坦]]和[[吉尔吉斯斯坦]],以及[[北亚]]横跨欧亚大陆的联邦制国家[[俄罗斯]]。
==了解==
中华文明五千余年的悠久历史中,既经历过长期的太平盛世,也经历过无数次巨大的动荡和革命。很多诸如马可波罗和戈特弗里德·莱布尼茨这样的西方人士通过丝绸之路和过去几个世纪更多的文化交流方式对中国产生了巨大的兴趣,中华文明的深邃和伟大让他们深深地着迷。同时,现今的中国也是世界上最具有影响力的国家之一,中华文明将继续让全世界的旅行者兴奋着迷。
===历史===
{{seealso|中國歷代首都之行}}
若想知道中国的历史,请点选[[w:中国历史|中国历史]]及[[w:中华人民共和国历史|中华人民共和国历史]],那两大维基的条目有做详尽的历史写照。中国历经过的时期有:史前时期、传说时期、夏商周时期(含春秋、战国时代)、秦汉时期、魏晋南北朝、隋唐五代时期、宋辽夏金元时期、明清时期、中华民国大陆时期及现今的中华人民共和国,至今约有五千来年的历史。
===政治===
中华人民共和国是一个目前由中国共产党执政的国家,而共产党作为执政党可以领导政府,共产党的最高负责人为总书记,一般也是国家的实际最高领导人。国家主席是礼仪性的国家元首,一般都由总书记兼任。中国共产党中央军事委员会主席是最高军事统帅,但一般和国家主席、中国共产党中央委员会总书记是同一个人,所以中国共产党中央委员会总书记是实际上的最高统帅。政府由行政部门——国务院、一院制的立法机构和最高权力机构——全国人民代表大会(但是实质上,几乎每项法案的提案都要经由中国共产党中央政治局讨论,是实质上的议会,相当于英国的下议院、美国的众议院;经中央政治局通过后,再提交到全国人民代表大会或其常设机构——全国人民代表大会常务委员会通过,才能形成正式法案),还有国家军委、最高人民法院和最高人民检察院组成。中央委员会总书记既是国家最高领导人,拥有治理国家的全部权利,身兼国家军事主权和政治主权。现任中共中央总书记兼国家主席是习近平,国务院总理是李克强。
中华人民共和国的行政规划,中华人民共和国共有34个省级行政区域,包括23个省,5个自治区,4个直辖市,2个特别行政区。
包括:北京市,天津市,上海市,重庆市,河北省,山西省,辽宁省,吉林省,黑龙江省,江苏省,浙江省,安徽省,福建省,江西省,山东省,河南省,湖北省,湖南省,广东省,海南省,四川省,贵州省,云南省,陕西省,甘肃省,青海省,台湾省,内蒙古自治区,广西壮族自治区,西藏自治区,宁夏回族自治区,新疆维吾尔自治区,香港特别行政区,澳门特别行政区。一般每个一级行政区下都设有若干地级市等二级行政区,但四个直辖市和两个特别行政区下不设地级市。省政府拥有各自省内事宜的权力,而自治区政府比一般省政府都更大的自治权,但现实中一般不认为自治区和省有太大差别,所有自治区的政府除了可以使用自己独立的民族语言外,并无其他独立的司法和行政权。
与上述地区相比,香港特别行政区、澳门特别行政区和台湾省都有相对独立的政府部门,但是大陆政府主张它们是中华人民共和国的一部分。实际上,这是一个长久的争议话题,包括港独、台独、藏独等均是政治敏感话题,请不要与本地人谈论这些问题,以避免争吵。
===民族和习惯===
中国是一个有着不同文化、语言、习惯和经济水平的充满差异性的国家。经济发展状况的差异在全国各地尤为明显。但自从1980年代以来,邓小平政府宣布改革开放,开始实行社会主义市场经济并推行经济体制改革。中国大陆近年至2010年,GDP超过72000亿美元,已经成为美国之后的世界第二经济大国,普遍认为中国目前仍然是世界上发展速度最快的经济体,但是人均国民生产总值仍位于世界中等水平(第89位),并逐渐受到资源限制和贫富差距加大的制约。中华人民共和国省份中,广东为GDP最高的第一强省,浙江为人均收入最高的第一富省。中国的贫富差距正在日益趋于平均,截止2016年中国国内以几乎消灭贫困。所有乡村(包括大山深处的村庄)全部铺设了现代化道路,设有路灯。
这样一个幅员辽阔的国家,文化的多样性自然就不足为奇了。中华人民共和国官方承认的民族有56个,最大的民族是汉族,大约占人口总数92%。即便是汉族,也有很多相互之间不能理解的地方方言(例如粤语、吴语、客家语等);大部分语言学家把这些方言归类为基本都使用同一套中文文字的不同语言。很多少数民族也都有他们各自的语言。和大部分人所认为的不同的是,并没有单独统一的汉文化,虽然他们都有共同之处,比如儒家和道教思想,汉族本身的区域性差异也是非常巨大的。很多习俗和神灵都是有着明显的地域(有时候甚至村与村都不一样)特征的。春节和其他全国性的节日在各地也有着很大的不同之处。很多和婚礼、葬礼、迎接新生儿有关的习俗也都大有不同。总体说来,现代的中国社会没有明显的宗教倾向,并且在日常生活的背后还是隐藏着中国的传统文化。在少数民族中,壮族、满族、回族和苗族人口是最多的。其他主要的少数民族包括:朝鲜族、藏族、蒙古族、维吾尔族、吉尔吉斯人甚至还有俄裔。事实上,中国是除了韩国和朝鲜之外朝鲜族人口最多的,而且中国的蒙古族人数比蒙古共和国的蒙古人都多。很多少数民族都有不同程度的语言和风俗的流逝。
在海外部分中国人的行为或许不能被接受:
* 吸烟:几乎所有地方,包括有“请勿吸烟”标示的地方,包括健身俱乐部、足球场甚至医院,都有人在角落吸烟。北京现在不允许在大部分餐厅吸烟,也很少有餐厅会有吸烟区域。对于公共场合禁烟,各地执行程度不一。在一些并不高档的场所,一般都没有摆设烟灰缸。在中国,民航客机和高速铁路列车是对禁烟执行的最为彻底的公共场所。如果您所在的国家在绝大数公共场合已经进行了禁烟,那么您可能会对中国社会的禁烟力度感到遗憾。
* 盯着看:这在很多国家都很常见,但是几乎都是出于好奇而不是敌意。如果有人向你走过来然后端详你(就像看电视那样),请不要过度反应,这是没有什么害处的!少部分时间中国人看待日本人是有一定敌意的,这个国家给中国造成了不可磨灭的民族伤痕。但这部分中国人中也有人开始逐渐接纳日本人的优点。
* 喝酒:在吃饭的时候晚辈给年长的人敬酒是很常见的。别人敬酒你不接(即使是出于善意)也会被认为是很大的不尊重。
* 大声说话、吵闹或者吵架:这都很常见。这估计是您刚到中国发现的第一个现象。大声说话虽然有可能是因为说话者生气了或者在吵架,但是并不一定是这样,中国的有一部分民族因为生活中需要大声交流,所以保留下来了说话声音比较大的习惯,但如果你能提醒他小声一点,只要能听得懂你的语言,所有中国人都会去注意自己的言行。在中国诸如打架这样的暴力事件并不常见,但是也会发生。如果发现这样的事情,请离开,不要参与。在中国几乎从来没有人将外国人做为攻击的目标,只要作为外国人的您不是十分过分,那么一般中国人都是非常尊重您的。如果您在乘长途汽车或者火车时无法接受这种现象可以寻找工作人员协助处理。
有些长期居住在中国的外国人说这些现象日益恶化,而有些人说的却正好相反。通常来说,有可能是因为有时大量对于城市生活不熟悉的农民工涌入了城市。
总体来说,中国人还是比较爱说爱笑的,因为中国本来就有很多民族,而且还有很多从其他地方来的外来人,所以他们也习惯了以不同的方式处理事情。确实,中国人走到一起的一个常见话题之一就是讨论各自方言之间的异同。他们都很习惯打手势,而且对于非语言的笑话或者双关语反应得很快。中国人非常喜欢小孩,对他们很宠爱,并且关心得无微不至,这是中国人民对生命的尊重,孩子是人类的未来。如果您有小孩的话,也一起带上吧!
====数字习俗====
对于大部分中国人来说3、6、8、和9是吉祥数字。
* “三”意味着三阳开泰,三阳预示着福、寿、禄三路神仙。
* “六”代表着六六大顺。很多人都选带六的日子来结婚,比如说6号,16号或者26号。
* “八”(bā)听起来像发(fā),所以很多人都相信八是和财运联系在一起的。所以,2008年的北京奥运会选在2008年8月8日开也没有什么好奇怪的了。
* “九”被认为有长长久久的意思,并且在中国人的思想中为最大。
* “四”(sì)对大多数中国人来说是一个忌讳,因为发音听起来像“死”(sǐ)。所以在中国的一些大型商场、住宅里面,索性直接跳过4号楼,3号楼的下一号楼是5号楼。
* “73”、“84”在中国老人中也是比较忌讳的两个数字。因为在中国古代的圣人中,孔子是在73岁时去世的,孟子是在84岁时去世的。
* “250”在中国大众中也是一个特别不受欢迎的数字。人们常把说话不正经、办事不认真、处事随便、好出洋相、脑袋很笨的人叫做“二百五”,是用来骂人的脏话。
* “38”多指比较八卦、啰嗦、嫌人的女人,也可以指有这些特征的像女人一样的男人,也是用来骂人的脏话。
* “2”是指对方极为愚蠢,笨蛋的脏话,主要用于北方地区。
* “18”,中国有“十八层地狱”一说,部分住宅的18层用17A代替或做其他用途。
总体而言,中国人喜欢谐音。有时“四”也可以是吉祥数字。很多人在2013年1月4日注册结婚证,因为那一天听起来像是“爱你一生一世(201314)”。
==== 送礼习俗 ====
{{cquote|礼尚往来,往而不来非礼也,来而不往亦非礼也。}}
说的便是中国人们的礼物交换。中国自古以来就有“礼仪之邦”之称,礼被认为是中国传统文化的核心,是中华民族宝贵的精神财富。“礼之用,和为贵”实际上揭示了中国传统礼的本质精神。邓云乡著《红楼风俗谭》把其中的送礼分为八类,概括了送礼的大体类型:
# 纯属友谊情感的馈赠。如第三十一回写史湘云送姐妹们绛纹石戒指,东西虽小,但有送有收,也属送礼。
# 初次见面的馈赠,即常说的见面礼。其中有为友情的,有因礼貌的,还有另存目的的,情况较为复杂。
# 红、白喜事的送礼。娶亲、聘女、过寿是红喜事;死人是丧事,但白寿也当喜事办,叫“白喜事”。此外尚有盖房上梁、乔迁新居、做佛事等,都当喜事送礼。各种红白喜事送礼,除关系特殊者外,一般是“礼”的成分多而“情”的成分少了。
# 生日送礼,一般生日与整寿祝寿的礼不同,所送礼物也因过生日者的身分地位而有区别。
# 节礼,过年、元宵、清明、端午、中秋、冬至、腊八等大小节日都要送礼。节礼亲友之间要送,上下级之间要送;宫廷也要向王公贵戚家送,不过不说“送”,而叫“赏”。还有借送节礼来“打秋风”的,即倚仗权势,借着给富豪之家送一点不值钱的礼物(如年节送对联等),换取银钱财物等价值更重的回礼,其送礼为名,图利是实。
# 送土特产,过去叫“馈送土仪”。古代旅行不易,长途跋涉到外地,总要带些地方特产送礼。如《红楼梦》第十六回写黛玉由江南回来,“将些纸笔等物分送与宝钗、迎春、宝玉等”,也属于这一类。
# 穷富亲友之间的礼物。如刘姥姥和荣国府之间的礼物往来,虽然刘姥姥只送了点瓜果干菜而却得到了更多的回礼和资助,但其性质不同于“打秋风”、敲竹杠。
# 钻营的送礼。即以送礼为手段去结交权贵,拉拢关系,进而达到投机钻营的目的,得到更大好处。这在政府的治理之下,逐渐减少了。
除此之外:
* 中国人忌讳送伞,因为“伞”(sǎn)谐音“散”(sàn)。
*在中国也尽量避免送鞋,特别是情侣之间。因为送鞋代表着分离,通常会用作分手礼品所用。
* 在中国,给人送礼千万不能送钟(尤其是给老人和病人),因为“送钟”在汉语中与“送终”(sòngzhōng)读音相同。
* 送水果时,不能送梨,因为中国人不喜欢分离。而“梨”与“离”(lí)同音。
* 中国人喜欢带有蝙蝠图案的物品,“蝠”与“福”(fú)同音。
* 中国人不会当着客人的面打开礼物,必须由收礼者打开,或者等到送礼人离开时才能打开。否则会被认为是不礼貌的行为。这与西方不同。
==== 做客习俗 ====
* 一般不用提前通知主人,但要接受别人的邀请,否则将被视作无礼。
* 在每个地区,都会有相应的礼节与忌讳,请入乡随俗。
===气候和地形===
由于中国地域广袤,所以气候会复杂多样,从南方的热带地区到北方的亚北极。[[海南]]岛的纬度和牙买加大致相同,而[[哈尔滨]],中国北方最大的城市之一,则和蒙特利尔的纬度和气候相当。中国北方四季分明,夏天炎热,冬天寒冷。而南方气候就会更加温润。越靠近西北气候越干燥。一旦您离开中国东部,踏上壮丽的西藏高原或者甘肃和新疆的草原,那么您会领略到那里的土地很辽阔。
在计划经济时代,规定在秦岭淮河以北地区可以供暖,而长江以南地区不能供暖——这意味着像上海、南京这样的城市,虽然温度经常低于零度,但是依然没有暖气。这一规定虽然早就失去了原来的作用了,但是影响还是显而易见的。总体说来,中国人暖气使用较少,建筑的隔热也较少,在相同的天气下,中国人比西方人穿得厚。在学校、商场或者办公楼,就算房间里面有供暖,过道也是没有的。很少有双层玻璃窗。学校的老师和学生在教室都穿冬装。空调虽然日渐普遍,但是过道同样没有,并且经常都是门窗大开。
中国的地形范围很广,内陆有山脉、高原,中部和西部有戈壁。东部则以平原、三角洲和丘陵为主。广州和香港周围的珠三角地区和上海周围长三角地区是全球经济的动力中心,还有北京周围的华北平原和黄河流域。[[珠穆朗玛峰]]处于西藏自治区和尼泊尔的边境上,高度为8848米,是世界上最高的山峰。西北部新疆维吾尔自治区的[[吐鲁番]]盆地是中国的最低点,海拔为-154米,它也是世界陆地中仅次于[[死海]]海拔第二低的地方。
===节假日===
{{seealso|中国黄金周}}
中国每年有六个重大节日:
* '''农历新年'''或者春节——是农历的新的一年的开始,但不止是农历正月初一,民间从农历十二月(被称为腊月)廿三(或廿四)到正月十五,公历一月底到二月中旬。春节是中国全民最大的节日,所有民族都会一同庆祝。相当于欧美国家的圣诞节。
* '''清明节'''——一般在4月的4-6日间,或者叫扫墓日,这一天所有人都去给自己的先人扫墓并送上祭拜品。通往公墓的交通在这一天会非常拥堵。
* '''劳动节'''——5月1日
* '''端午节'''——农历的五月初五,一般在公历的5月到6月之间。这一天人们要赛龙舟、吃粽子。
* '''中秋节'''——农历八月十五,一般在公历10月份。中秋节是中国仅次于春节的隆重节日。中秋节起源于上古时代,普及于汉代,定型于唐朝初年,盛行于宋朝以后。中秋节是秋季时令习俗的综合,其所包含的节俗因素,大都有着古老的渊源。中秋节以月之圆兆人之团圆,为寄托思念故乡,思念亲人之情,祈盼丰收、幸福,成为丰富多彩、弥足珍贵的文化遗产。在这天大家会一同食用月饼,又叫月团、丰收饼、宫饼、团圆饼等,是古代中秋祭拜月神的供品。月饼最初是用来祭奉月神的祭品,后来人们逐渐把中秋赏月与品尝月饼,作为家人团圆的一大象征。
* '''国庆节'''——10月1日,是为了庆祝1949年新中国成立。
春节和国庆节一般假期都不止一天;几乎所有工人春节假都有至少一星期,有的甚至有两星期或者三星期,学生会放四到六周寒假。国庆放假一般一星期。
'''春节'''期间一般都很忙。这不仅仅是最长的假期,而且也是传统走亲访友的时间。这一段时间,整个国家基本上都处于休息状态。基本上所有外出打工的人都会回家。这几乎是他们回家的唯一机会。人人都想回家,中国人口众多!在春节期间,很多商店都会关门好几天、一周,甚至更久,因此,如果您在中国大陆没有亲戚或者好友,那不建议您在这一段时间去中国旅游。
在七月初的中国大陆,会有大批大学生放假回家(约两千多万!),然后在八月底他们又要返校,这段时间从东部沿海地区到四川、甘肃、西藏和新疆的交通格外拥堵。
如果要列出一个中国节日的完整清单的话,那么这个清单就会很长,因为很多地区和民族都有他们独特的地方性节日。以下是上面没有提到的但是同样是非常重要的节日:
* '''元宵节'''(或者上元节)——农历正月十五,紧随春节,一般在公历的二月到三月。在很多城市,例如泉州,全市上下都会被装点上各式各样的灯笼。
* '''七夕'''——农历七月初七,是中国的情人节。
* '''中元節'''——农历七月十五,又称“鬼节”。
* '''重阳节'''——农历九月初九,一般在公历的10月份。
* '''冬至'''——12月22日或者23日。
除了以上的节日,中国很多地方,特别是大城市,也过西方的节日。在圣诞节期间,大街小巷都能听到圣诞颂歌,大部分都是英文的,也有中文版本的。很多商店都会进行装饰,有的店员会穿上圣诞的衣服。情人节期间,很多餐馆都会推出特殊的晚餐。中国大陆的基督徒也会在政府批准的新教和天主教教堂举行礼拜或者弥撒。
===书籍===
'''旅游篇:'''
* '''马可.波罗游记''',作者马可.波罗 - 威尼斯旅行家在中国的旅途故事(''参阅:'' [[On the trail of Marco Polo]])
* '''Dialogues Tibetan Dialogues Han''',作者:Hannü (''ISBN 9789889799939'')
* '''Behind the Wall- A journey through china''',作者:Colin Thubron. Thubron重述了他1987年在中国从北京到嘉峪关的旅行。
'''文学篇:'''
* '''《大地》''',作者赛珍珠 - 关于20世纪世纪之交时中国农民生活的经典之作,赛珍珠点燃了20世纪30年底美国公众对于中国的兴趣。赛珍珠女士关于中国的作品使她获得了1938年诺贝尔文学奖。
* '''《三国演义》''' - 中国经典名著,讲述了汉朝末年三国时期群雄并起的年代中的英雄豪杰。以对于兵法和政治策略的描述见长。四大名著之一。整个东亚地区,不断有关于这一题材的电视、电影、动画和游戏。
* '''《水浒传》''' - 一个关于在宋代时期居住在淮河流域的人和腐朽的政府相抗衡的故事。以主角们对于现实统治的反抗而著称。四大名著之一。
* '''《西游记》''' - 可能是最出名的中文小说,关于唐僧在孙悟空、猪悟能(八戒)和沙悟净的协助下西天取经的玄幻小说。以出色的想象力见长。四大名著之一。
* '''《红楼梦》''' - 贵族家庭三家人的恩恩怨怨。以对中国贵族家庭生活的入微描写而见长,被认为是中国文学的顶尖之作。四大名著之一。
* '''《红高粱家族》''' - 背景是民国时期的山东高密,男女主人公历经曲折后一起经营一家高粱酒坊。但是在日军侵略战争中,除男主人公(姜文扮演)及幼子外,女主人公和酒坊伙计均因参与抵抗运动被日本军虐杀的故事。作者莫言获得2012年诺贝尔文学奖。
'''历史篇:'''
* '''《紫禁城的黄昏》'''作者:R.F. Johnston (''ISBN 0968045952'')。Kindle上也有。Johnston(庄士敦)是历史上唯一一位被允许进入小朝廷的外国人,他生于英国,是皇上的老师。庄士敦身居高位,在紫禁城和颐和园都住过。《紫禁城的黄昏》是对于他亲眼所见的重大事情的陈述。
* '''《追寻现代中国》'''作者:Jonathan Spence - 是一部由耶鲁大学教授撰写的1644年以后的中国历史。
* '''《万历十五年》'''作者:黄仁宇 - 描述了中国明朝的一个多事之年。它是一部关于这个时期的最著名的史学著作。
* '''《中国新史》'''作者:John K. Fairbank - 一名美国著名学者的最后一部著作,它对现代汉学有着深远的影响。
* '''《剑桥中国史》''' - 剑桥大学出版社出版的一个系列,包括了早期和现代中国历史。这是最大最全面的关于中国历史的英文著作。
* '''《开放的帝国:1600年前的中国历史》'''作者:Valerie Hansen - 详细地描述了从商代到明朝中国历史、文化、社会经济的发展。
* '''《1421中国发现世界》'''作者:Gavin Menzies (''ISBN 0553815229'') - 关于中国对于探索世界并绘制世界地图所作出的努力,这本书颇有争议。有意思的是,本书暗含中国是发现新大陆的第一个国家,而各界对这一观点都表示批评的态度,并指出这是中国学术界的臆想。
* '''《北京的六分仪》'''作者:衞周安 - 总结了关于中国比想象中开放而且并不如想象中排外的近代思想。
* '''《南京大屠杀》''' 作者:Iris Chang (''ISBN 0140277447'') - 被世人遗忘的二战大屠杀。
* '''《拉贝日记》''' 作者:John Rabe - 对于二战中日本军人所犯罪行和Rabe最终成功拯救大约250000无辜生命的第一首描述。
* '''《红色中国布鲁斯——从毛到现在,我的长征》'''作者:黄明珍,加拿大环球邮报记者。概述描述了他作为第一个外国交换生在文革后的中国生活以及他一直到20世纪90年代中期作为一名记者在中国的生活经历。
===电影===
*贝纳多·贝托鲁奇 - '''《末代皇帝》''' (1987)
*张艺谋 - '''《大红灯笼高高挂》''' (1991)
*陈凯歌 - '''《霸王别姬》''' (1993)
*张艺谋 - '''《活着》''' (1994)
*吴子牛 - '''《南京1937》''' (1995)
*吴天明 - '''《变脸》''' (1996)
*张艺谋 - '''《有话好好说》''' (1997)
*谢晋 - '''《鸦片战争》''' (1997)
*张扬 - '''《洗澡》''' (1999)
*冯小刚 - '''《没完没了》''' (1999)
*张艺谋 - '''《一个都不能少》''' (1999)
*王小帅 – '''《十七岁的单车》''' (2001)
*张艺谋 - '''《千里走单骑》''' (2005)
*吉安尼·阿米里奥 - '''La stella che non c’è''' (《消失的星星》) (2006)
*张元 - '''《看上去很美》''' (2006)
*李仁港 - '''《三国之见龙卸甲》''' (2008)
*罗杰·斯波蒂伍德 - '''《黄石的孩子》''' (2008)
==地区==
一般情况下,中国被分作了七大地理区域,分别为华北、东北、西北、华东、中南和西南,这里并没有采用这样的划分方法,而是做了一些调整,使之更适应于旅行者。由于现实原因,这里只包含了中国大陆。
{{Regionlist
| regionmap=Map of China (zh-hans).png
| regionmaptext=中国大陆地理分区(此图不含[[南海诸岛]])
| regionmapsize=500px
| region1name=[[中国东北|东北]]
| region1color=#d5dc76
| region1items=[[辽宁]]、[[吉林]]、[[黑龙江]]
| region1description=历史上被称作满洲,而现在被称作东北,包含了“老工业区”城市、广阔的森林、漫长多雪的冬天。
| region2name=[[华北]]
| region2color=#b383b3
| region2items=[[山东]]、[[山西]]、[[内蒙古]]、[[河南]]、[[河北]]、[[北京]]、[[天津]]
| region2description=黄河流域,中华文明的摇篮和历史中心。
| region3name=[[中国西北|西北]]
| region3color=#71b37b
| region3items=[[陕西]]、[[甘肃]]、[[宁夏]]、[[青海]]、[[新疆]]
| region3description=长安,中国1000年来的故都,丝绸之路向西延伸横跨沙漠、山脉、草原游牧民族地区和伊斯兰地区。
| region4name=[[中国西南|西南]]
| region4color=#4da9c4
| region4items=[[西藏]]、[[云南]]、[[广西]]、[[贵州]]
| region4description=异国情调、少数民族、壮丽的景色和背包客的天堂。
| region5name=[[华南]]
| region5color=#a78379
| region5items=[[安徽]]、[[四川]]、[[重庆]]、[[湖北]]、[[湖南]]、[[江西]]
| region5description=长江流域、农场、山区、河流峡谷、温带和亚热带森林。
| region6name=[[中国东南|东南]]
| region6color=#ffd0d0
| region6items=[[广东]]、[[海南]]、[[福建]]
| region6description=传统贸易中心、强大的制造业与海外华人的祖籍。
| region7name=[[华东]]
| region7color=#d56d76
| region7items=[[江苏]]、[[上海]]、[[浙江]]
| region7description=“鱼米之乡”(相当于中国的“牛奶和蜂蜜的土地”),传统的水乡,和当代中国的主要经济中心。
}}
== 城市 ==
中国有许多著名的大城市。
* [[北京]],中国首都和文化中心,2008年奥运会和2022年冬奥会的举办城市。金、元、明、清、中华民国(北洋政府时期)等五个朝代在此定都,因此分布着大量的历史古迹。
* [[天津]],紧邻北京市的城市,有很多西方国家曾在此设立租界,因而拥有大量的西洋历史建筑,海河的夜景以及各式各样的桥梁是天津景观的特色。北京到天津的高速铁路车程约30分钟。
* [[上海]],中国人口最多的城市和经济中心,富有很多购物场所。
* [[南京]],“六朝古都”“十朝都会”,一个有很多历史古迹的地方,江苏省省会。
* [[苏州]],一座具有千年历史的古城,有着很多中式的园林。
* [[杭州]],“上有天堂下有苏杭”,著名的丝绸产地之一。
* [[郑州]],“绿城”,华夏文明发祥地,是轩辕皇帝的故里,河南省省会,具有少林寺等众多景点。
* [[西安]],“十三朝古都”,兵马俑、华山等旅游景点世界闻名,陕西省省会。
* [[厦门]],福建省沿海的滨海城市。
* [[大连]],辽宁省的滨海城市,世界花园城市,经济发达。
* [[青岛]],山东省的滨海城市,经济发达。
* [[广州]],中国南方最发达的城市之一,岭南地区的文化中心。
* [[深圳]],中国南方经济最发达的城市之一,以金融业和高科技产业而闻名,但旅游资源匮乏,与[[香港]]接壤。
* [[武汉]],中国中部经济最发达的城市之一,别称“江城、东方芝加哥”,湖北省省会,有“九省通衢”的美誉。
* [[成都]],中国西部经济中心之一,中国国宝大熊猫繁育基地所在地,三国时期“蜀国”的首府。
* [[重庆]],中国西部经济中心之一,在第二次世界大战期间为中华民国的临时首都,现为中国面积最大的直辖市。
* [[桂林]],“桂林山水甲天下”,是一个非常受欢迎的旅游目的地。
* [[昆明]],“春城”,云南省省会。
* [[沈阳]],“一朝发祥地,两代帝王都”,辽宁省省会。
* [[合肥]],综合性国家科学中心,“一带一路”和长江经济带战略双节点城市,国家重要的科研教育基地,现代制造业基地和综合交通枢纽,安徽省省会,700万人口。
* [[宁波]],简称甬,世界第四大港口城市,中国大陆综合发展水平前15强中心城市,长三角五大都市圈中心城市之一,长三角南翼经济中心,国家历史文化名城,连续五次蝉联全国文明城市。
你可以乘坐四通八达的[[高铁]]前往上述这些地方旅游。
==其他目的地==
* [[万里长城]] - 长度超过8000公里,这个古长城是中国的象征。
* [[兵马俑]] - 中国十大名胜之一,号称“世界第八大奇迹”,被联合国教科文组织列为世界文化遗产。
* [[海南]] - 热带天堂岛屿,目前正在进行大规模的旅游开发。
* [[九寨沟]] - 以熊猫栖息地、美丽的瀑布和多彩的湖泊闻名。
* [[乐山]] - 以一整座山雕刻而成的乐山大佛而闻名(靠近[[峨眉山]])。
* [[喜马拉雅山]] - 在西藏和尼泊尔交界处,世界上最高的山脉。
* [[泰山]] - “五岳”之首,中国道教五大圣山之一,由于其历史渊源也是登山人数最多的山。
* [[西藏]] - 西藏大部分都是藏佛教教徒,有浓郁的传统西藏文化,感觉好像身处于另一个世界。
* [[吐鲁番]] - 在新疆的穆斯林地区,这一地区以葡萄、严峻的天气条件和维吾尔族文化闻名。
* [[云冈石窟]] - 这些依山的洞穴和石窟总数超过50个,石窟中有超过51000个佛像。
* [[黄山]] - 中国十大风景名胜之一,世界文化与自然遗产,同时也为世界地质公园。
==抵达==
===签证===
{{seealso|w:中华人民共和国签证政策|香港出入境手冊|w:澳門簽證政策}}
大部分访问大陆的游客都需要签证(visa)。大部分情况下,您需要在离开前从中国大使馆或者领事馆获取签证。前往香港和澳门的签证也可以在中国大使馆或者领事馆申请,但是不能和前往大陆的签证有所区分。但是,[[香港]]和[[澳门]]对大部分西方国家游客免签。
但是,这一规定最重要的一个例外是在某些机场的转机大部分机场允许乘客没有签证而在机场待24小时(前提是旅客不离开机场),但是上海浦东机场和虹桥国际机场允许没有签证停留48小时。
对于大多数外国公民,以任何理由进入中国大陆基本上都是需要签证的。然而,[[日本]]、[[新加坡]]和[[文莱]]公民可以免签证在中国大陆停留15天。此外,根据双边协议,[[白俄罗斯]]、[[格林纳达]]、[[汤加]]、[[塞舌尔]]、[[巴哈马]]、[[巴巴多斯]]、[[斐济]]、[[卡塔尔]]、[[塞尔维亚]]、[[厄瓜多尔]]和[[阿联酋]]公民可以免签证在中国大陆停留30天。[[毛里求斯]]公民可以免签证在中国大陆停留60天。上述国家的公民以免签证待遇入境后只能进行旅游、探亲访友、商务等活动。[[圣马力诺]]、[[波黑]]和[[亚美尼亚]]公民则可以以任何理由免签证进入中国大陆并停留90天。
[[香港]]和[[澳门]]的中華人民共和國籍公民访问中国大陆时需要向中国旅行社申请回乡证,中旅是唯一的授权机构。回乡证大小和信用卡相同,有效期1年,在有效期内都可以停留,也没有雇佣方面的任何限制。[[臺灣|台湾]]居民可以在[[大连]]、[[福州]]、[[海口]]、[[青岛]]、[[三亚]]、[[上海]]、[[武汉]]、[[厦门]]的机场以及在[[香港]]和[[澳门]]的中旅申请有效期为3个月的入境文件。台湾旅客必须持中华民国护照、台湾人身份证和台胞证。可以在[[大连]]、[[福州]]、[[海口]]、[[青岛]]、[[三亚]]、[[上海]]、[[武汉]]、[[厦门]]机场申请台胞证。入境费用为100元加上50元一次性台胞证。旅客出行前须查看最新的政策信息。
{{infobox|签证类型|
* '''G签''' - 中转
* '''L签证''' - 旅游、访亲
* '''F签证''' - 商务、实习、短期调研
* '''Z签证''' - 工作签、多次出入
* '''X签证''' - 6个月以上学习
}}
旅游签证申请比较容易,也不需要邀请函(商务签和工作签都需要)。一般的单次旅游签停留期是30天,有效期是三个月。双次出入境签证有效期为六个月。有的国家的游客可以拿到90天的旅游签。
可以在各地出入境管理局申请旅游签延期,需要的资料是:有效护照、签证延期申请表(含两张2寸证件照),一份您在当地派出所拿到的临时居住表。[[上海]]的进出境管理局位于浦东明生路1500号。延期需要5个工作日。
有的旅客需要双次签证。例如,如果您持有单次签证,然后您去了香港或者澳门,从那里再次返回中国大陆则需要新的签证。按照规定,在香港,多次出入境签证只能给持香港身份的人,但是相关部门愿意稍加变通,也可以给短期的相关居民(包括交换生)三个月的多次出入境签证。在这种情况下,建议直接向中国政府申请,因为有的代理人不愿意代表您提交这样的申请。
落地签只能在[[深圳]]或者[[珠海]]的经济特区申请,也只能在这些地区使用。在经由罗湖火车站(一定记住不是[[落马洲]])前往[[深圳]]时,可以获取只限于深圳使用的有效期5天的签证,申请时间不限于工作时间,很多国籍游客([[爱尔兰]]、[[新西兰]]或者[[加拿大]])的现场申请费用为160元(2007年10月的价格),但是[[美国]]游客''不能申请'',而[[英国]]游客则须支付450元。现在该签证办公室只接受人民币,请一定记得带上足够的现金。
到2013年,大部分过境旅客可以获取仅适用于[[上海]]和[[北京]]的72小时的落地签。
由于政治原因,签证政策可能会不断变化。例如:
* 作为对[[美国]]提高中華人民共和國內地游客签证费用的报复,美国国籍游客签证费被增加到140美元(旅游团为110美元)
* 香港颁发的签证一般限制在30天内,多次出入境的签证变的很难拿到甚至会拿不到。
几年之前,Z(工作签)证是长期签证。现在Z证只能在中国国内待30天;一旦您在中国,雇主须为您办理居住证。实际上,这才是多次出入境签证,您可以用它往返中国。如果您持旅游签来中国,有的签证部门会拒绝为您办理居住证明。这种情况下,您需要使用工作签。工作签只能在国外申请,因此您可能需要去香港或者韩国(请注意,因为首尔的中国领事馆不给非韩国居民办理签证,所以没有外国人等级证的游客必须到釜山)。工作签需要雇主的邀请函。有时候也可以将L签(旅游签)转为Z签(工作签),这都取决于办理签证的具体公安局和您雇主是否有足够的关系。
和中国公民结婚的外国人(见[[中国婚姻]])可以选择办理6-12个月的''探亲''签证。''探亲''签实质上是L签,但是它允许您在签证有效期内一直停留在中国。想要申请''探亲''签的人要先以其他签证进入中国,之后在您婚姻登记所在地的公安局(一般是您配偶的户籍地)办理。办理时需要带上您的结婚照和您配偶的身份证。
大部分外国人可以在[[蒙古]]的[[乌兰巴托]]办理签证。[http://mn.china-embassy.org/eng/lsfw/ 领事馆网站]。在旺季,领馆可能在中午11点之后就拒绝办理。可能会有很长的队,所以您需要来的早一点。并且,中国重大节日期间,使领馆都会休息几天。
====住所登记====
如果您住在酒店或者宾馆中,在您入住时酒店人员可能会要求看甚至要扫描您的护照、签证和入境章。
如果您住在私人住所中,理论上需要您在到达的24小时(市区)或者72小时(农村)内在当地公安局登记,但是,这条法律在现实中很少(如果一定要说有的话)有人执行,只要您不惹麻烦就行。警察会问你要:
# 您护照的复印件
# 签证复印件
# 入境章复印件
# 照片
# 您居住场所的凭证。凭证上的名字可以不是您的名字。
* 您每次来中国都需要登记(有居住证的例外-居住证持有者只需在新签证办理完后登记即可)
* 如果您不登记,有可能会受到500元以下的罚款。
* 手续比较长(3个多小时),最好带上翻译(在上海,只要您有任何形式的居住许可就不用办理登记)。
===乘飞机===
进入中国大陸的主要门户有[[北京]]、[[上海]]和[[广州]];近來許多大型城市也陸續開通洲際航線,[[武漢]]、[[成都]]、[[西安]]、[[重慶]]、[[昆明]]等;[[烏魯木齊]]因為比鄰中亞的地緣優勢,也開通了前往獨立國協國家的航班。几乎每个有一定规模的城市都会有一个国际机场,但是運營範圍以區域航線如[[香港]]、[[韩国]]、[[日本]]、[[东南亚]]為主。
{{infobox|到香港和澳门|
如果您到了香港或者澳门,有渡船可以将您直接送到其他地方,比如蛇口、[[深圳宝安机场]]、[[澳门国际机场]]、[[珠海]]和其他地方,而不用“进入”香港或者澳门。有摆渡车将旅客直接送到轮船码头,这样他们的入境地点将会在轮航码头而非机场。请注意,轮航都有不同的运行时间。如果您的航班到港比较晚的话,您可能就需要进入港澳或者直接到您的最终目的地。例如,如果从香港国际机场通过澳门轮航码头到澳门的话,则需要办理移民手续。香港码头最新消息,请参阅[http://www.hongkongairport.com/eng/index.html 香港国际机场网站]。}}
虽然很多大的航空公司都有到[[北京]]、[[上海]]、[[广州]]和[[香港]]的航班,但是票价都比较高。要想买到较实惠的票,最好还是尽早订票。在夏初和夏末时候机票特别贵,因为这个时候中国学生都要回家或者飞往全世界各地的大学。和其他车票一样,飞机票在春节期间也会很难买。
如果您居住在海外华人社区较多的城市(例如:[[多伦多]]、[[旧金山|三藩]]、[[悉尼]]或者[[伦敦]]),那您可以看看华人社区或者中国人开的旅行社有没有低价的机票。有时候,航班只在中文报纸上广告,或者中国人的旅行社的航班价格就很低。
{{seealso|亚洲的廉价航线|中国主要民用机场列表}}
'''航空公司和航班'''
中国航空公司增长迅速。空客估计中国客机数量会从2009年的1400架增长到2029年的4200架。
中国航空公司也在努力提高价格和服务上的竞争力。航空公司包括[http://www.cs-air.com/en/ 南航],[http://www.chinaeastern.co.uk/ 东方航空],[http://www.air.com.cn/en/index.shtml 国航],和[http://global.hnair.com/ 海航]。
乘客可能会更喜欢亚洲的航空公司的航班,因为这些航班的乘务人员一般都较多,而且服务也比较好。可以选择香港的[http://www.cathaypacific.com 国泰航空]。其他的航空公司比如[http://www.singaporeair.com/saa/ 新加坡航空]、[http://www.jal.co.jp/en/ 日本航空]、[http://www.garuda-indonesia.com 印尼航空]。[http://www.koreanair.com 韩国航空]在亚洲范围内的航线价格都比较好,比如从[[曼谷]]经停[[首尔]]到北美。一般转接航班都比直航,这一点要记住。韩国航空也飞在中国十几个城市,包括上海。
*[[北美洲|北美]]:[http://www.delta.com 达美航空]经由[[成田]]飞香港、北京、上海和广州,也有从底特律、波士顿、和西雅图的直飞航班。[http://www.united.com/ 联合航空]直飞航班最多,从[[旧金山]]、[[Newark (New Jersey)|纽瓦克]]、和[[Washington, D.C.|华盛顿]]直飞香港、北京和上海,与此同时,联航还拥有从旧金山直飞成都的航班。[http://www.aa.com/homePage.do 美航]从芝加哥和达拉斯直飞北京 、上海和香港。[http://www.aircanada.com/ 加拿大航空]从[[多伦多]]和[[温哥华]]直飞上海、北京和香港。
* [[澳大利亚]]:[http://www.qantas.com 澳航]有从[[悉尼]]、[[墨尔本]]、[[布里斯班]]和[[佩斯]]到香港的直航。澳航从悉尼到上海和北京,但是从墨尔本到上海只有代码共享服务。经由东南亚的可能会有便宜的航班,那里有一些打折航班飞往澳大利亚。中国南方航空有从[[布里斯班]]、[[悉尼]]、和[[墨尔本]]直飞[[广州]]的直航,从那里您可以飞往其他主要城市。东
* [[新西兰]]:只有[http://www.airnz.co.nz 新西兰航空]有飞往中国大陆的直飞航班。直飞航线到北京、上海和香港。
* [[东南亚]]:据说由于新加坡有大量华人,所有[[新加坡]]的航线网络最好,往所有的大城市和一些区域性的中心城市(比如厦门、昆明和深圳)都有航班。除了新加坡,[[吉隆坡]]、[[曼谷]]和[[马尼拉]]的航线也不错。[http://www.tigerairways.com 老虎航空]、[http://www.jetstar.com Jetstar]、[http://www.airasia.com 亚洲航空]、和宿雾[http://www.cebupacificair.com 太平洋航空]也都有从[[东南亚]](曼谷、[[清迈]]、新加坡、吉隆坡和[[马尼拉]])到中国南方城市(包括厦门、[[景洪]]、广州、[[海口]]和澳门)的低价航班。
* [[欧洲]]: 欧洲大部分大的航空公司都有到香港、北京和上海的直航(有的也飞往广州),包括[http://www.airfrance.com/indexCOM.html 法国航空]、[http://www.britishairways.com/travel/globalgateway.jsp/global/public/en_ 英国航空]和[http://www.finnair.com/finnaircom/wps/portal/finnair/jump?locale=en_INT 芬兰航空]。但是很少有到其他中国城市的航线。例如[http://www.klm.com/travel/klm_splash/index.html 荷兰航空]有从[[阿姆斯特丹]]直飞[[成都]]、[[杭州]]和[[厦门]]的航班,[http://www.lufthansa.com/online/portal/lh/de/homepage?l=en 汉莎航空]有从[[法兰克福]]到[[南京]]、[[青岛]]和[[沈阳]]的航线。
* [[台湾]]:自2008年开始,两岸恢复直航,目前台湾和中国大陆的主要城市之间每天都有直航。
'''中国和欧洲之间的航班'''
{| class="wikitable sortable" border="1" cellspacing="0" cellpadding="3"
! 航空公司!! 起飞 !! 降落 !! 航班时间 !! 出发日期 !! 经济舱 P/W !! 说明
|-
| 芬兰航空 || 赫尔辛基 (HEL) || 北京 (PEK) || 7:50 || 周一到周日 || 32" / 18" ||
|-
| 芬兰航空 || 北京 (PEK) || 赫尔辛基 (HEL) || 8:30 || 周一到周六 || 32" / 18" ||
|-
| 芬兰航空 || 赫尔辛基 (HEL) || 重庆 (CKG) || 8:40 || 一三五六 || 32" / 18" || 2012.5.9开始
|-
| 芬兰航空 || 重庆 (CKG) || 赫尔辛基 (HEL) || 9:25 || 二四六日 || 32" / 18" || 2012.5.9开始
|-
| 芬兰航空 || 赫尔辛基 (HEL) || 上海 (PVG) || 9:05 || 周一到周日 || 32" / 18" ||
|-
| 芬兰航空 || 上海 (PVG) || 赫尔辛基 (HEL) || 10:15 || 周一到周日 || 32" / 18" ||
|-
| 海南航空 || 柏林 (TXL) || 北京 (PEK) || 9:25 || 三五日 || 32" / 19" ||
|-
| 海南航空 || 北京 (PEK) || 柏林 (TXL) || 10:20 || 三日 || 32" / 19" ||
|-
| 海南航空|| 布达佩斯 (BUD) || 北京 (PEK) || 9:20 || 一五 || 32" / 19" ||
|-
| 海南航空 || 北京 (PEK) || 布达佩斯 (BUD) || 10:10 || 一五 || 32" / 19" ||
|-
| 海南航空 || 布鲁塞尔 (BRU) || 北京 (PEK) || 9:40 || 二四六日 || 32" / 19" || 从2012年4月,周五也有,2012年7月开始周一也有
|-
| 海南航空 || 北京 (PEK) || 布鲁塞尔 (BRU) || 10:35 || 二四六日 || 32" / 19" || 从2012年4月,周五也有,2012年7月开始周一也有
|-
| 海南航空 || 布鲁塞尔 (BRU) || 上海 (PVG) || || || 32" / 19" ||
|-
| 海南航空 || 上海 (PVG) || 布鲁塞尔 (BRU) || || || 32" / 19" ||
|-
| 海南航空 || 苏黎世 (ZRH) || 北京 (PEK) || 10:00 || 二四六 || 32" / 19" ||
|-
| 海南航空 || 北京 (PEK) || 苏黎世 (ZRH) || 10:45 || 二四六 || 32" / 19" ||
|-
| 荷兰航空 || 阿姆斯特丹 (AMS) || 成都 (CTU) || 9:25 || || 31" / 17.5" ||
|-
| 荷兰航空 || 成都 (CTU) || 阿姆斯特丹 (AMS) || 10:35 || || 31" / 17.5" ||
|-
| 汉莎航空 || 法兰克福 (FRA) || 青岛 (TAO) || 13:10 || 一三五 || 32" / 17.5" || 经停沈阳
|-
| 汉莎航空 || 青岛 (TAO) || 法兰克福 (FRA) || 14:25 || 二四六 || 32" / 17.5" || 经停沈阳
|-
| 汉莎航空 || 法兰克福 (FRA) || 沈阳 (SHE) || 10:15 || 一三五 || 32" / 17.5" ||
|-
| 汉莎航空 || 沈阳 (SHE) || 法兰克福 (FRA) || 11:15 || 三五日 || 32" / 17.5" ||
|}
===火车===
可以从中国周边的邻国乘火车前往中国,甚至可以从欧洲一路乘火车到中国。
* '''俄罗斯&欧洲''' - [[西伯利亚铁路]]两条线(横穿蒙古和东北),从[[莫斯科]]和北京出发,经停俄罗斯多个城市,在蒙古境内经停[[乌兰巴托]]。这条铁路的沿途风景无比绚丽,但时间过长,需要140小时左右。
* '''哈萨克斯坦&中亚''' - 从哈萨克斯坦[[阿拉木图]]可以乘火车到新疆的[[乌鲁木齐]]。在过海关时候和换另一国的轨道轮距会等很长时间。
* '''香港''' - [[香港]]和中国大陆之间有固定列车。从香港的红磡和廣州东站之间有直达列车。海关手续在各自火车站办理。此外,香港亦有直通火車前往[[上海]]、[[北京]]、[[肇慶]]、[[佛山]]。香港的港鐵从香港市区到深圳边界的两个点有直达,分別是落馬州以及羅湖,但主要的过境点在罗湖,也是深圳的主站。
* '''越南''' - 从广西南宁经过友谊关到越南。自2002年起,从[[昆明]]发出的列车就被暂停了。
* '''朝鲜''' - 从平壤到北京之间每周有四列列车。
* '''老挝''' - 从昆明到万象直接于2021年末开行的列车
===公路===
中国和14个国家之间有陆地边境;这一邻国的数量只有[[俄罗斯]]可以与之匹敌。另外,中国大陆和[[香港]]和[[澳门]]特区之间都有路上边境,由于实际原因,这些边境和国际边境一样。中国西部边境都在遥远的山区,这些地方虽然难以到达和游览,但是游客们会在那里看到让人叹为观止的美景。
====[[印度]]====
这两个国家之间的关系总是处于欠佳状态,但是最近开放了从印度[[锡金]]到藏南的亚东口岸。但是,这个入境口不对游客开放,从这两个国家访问这个口岸都需要特殊的许可证。
====[[缅甸]]====
可以通过中国[[瑞丽]]到缅甸[[腊戍]]从缅甸进入中国,但是需要在缅甸政府办理许可。一般来说,您需要加入旅游团。
====[[越南]]====
对于大部分旅行者来说,走陆路到中国旅游的起点都在河内。有三个国际口岸:
* '''同登镇(越南)- 凭祥(中国)'''
:您可以从河内汽车东站(Ben Xe街,嘉林区,电话:04/827-1529)到谅山,从那里您需要转乘小型公共汽车或者摩的到同登镇的口岸。还有另一个选择就是选择旅行社(有急事的游客),他们可以提供酒店和过境服务。
:您可以从黄牛手中换外汇,但是之前要好好确认汇率。
:过境手续大约需要30分钟。在中国境内,穿过“友谊关”之后打个的(大约20元,使劲儿砍价!)去[[凭祥]]。小型公共汽车车费大约5元。汽车总站车站正对面就有一家中国银行;ATM机上可以用Maestro卡。您可以乘汽车或者火车到南宁。
* '''老街(越南)-河口(中国)'''
:您可以乘火车河内到老街,软卧大约420,000越南盾(截止2011年11月)。这一段大约8小时。从那里您可以走到老街/河口口岸(乘车5分钟)。
:过境很简单,填好出境卡然后排队等。他们会检查您的行李(特别是您的书/书面材料)。河口口岸外面是各种商店,汽车站离口岸有10分钟车程。从河口到昆明的车票大约¥140;时间大约7小时。
* '''芒街市(越南)-东兴(中国)'''
:您可以从东兴乘汽车去南宁,有到广州的卧铺大巴(票价大约180元)和到深圳的卧铺大巴(票价大约230元,12小时)。
====[[老挝]]====
您可以从[[琅南塔]]乘大约早上8点的车到[[磨憨]](中国口岸)和[[勐腊]]的汽车。但是您要有中国签证,因为口岸不能办理签证。海关手续需要整整一小时或许还要多。一趟大概需要45000基普(老挝货币)。
另外,从[[琅勃拉邦]]到昆明有直达的卧铺大巴(要大约32个小时)。您可以在从[[琅南塔]]的小巴碰到卧铺大巴的地方上车。车费不会超过200元的。
====[[巴基斯坦]]====
从[[巴基斯坦]]北部到中国西部的[[中巴公路]]是世界上最为壮观的公路之一。冬天会对旅客封路。因为走这条线的旅客不多以及两国的良好关系,所以过境很快。从中国喀什噶尔到巴基斯坦有长途汽车。
====[[尼泊尔]]====
[[尼泊尔#抵达|从尼泊尔]]到西藏的公路经过喜马拉雅山附近,穿越蔚为壮观的高山。从尼泊尔到西藏只能跟团,但是个人可以从西藏到尼泊尔旅游。
====[[蒙古]]====
蒙古1945年正式从中国独立,当时的中央政权是“国民政府”。现在的中国和蒙古有两个边境口岸。它们是[[二连浩特]]([[内蒙古]])/[[扎门乌德]]边境口岸和[[塔克什肯]]([[新疆]])/[[布尔干]] 边境口岸。
中国有从二连浩特开始的火车或者长途客车,经过扎门乌德到达乌兰巴托。火车和长途汽车站大多数大部分时间都是第一天晚上出发,第二天早上到达。边界在上午八点半左右开放。从二连浩特有去往中国其他地方的长途汽车和火车。
====[[哈萨克斯坦]]====
到中国的口岸分别在[[霍尔果斯]]、[[阿拉山口]]和[[吉木乃]]。几乎每一天都有汽车从[[阿拉木图]]到[[乌鲁木齐]]和[[伊宁]]。不能办理落地签,所以出发之前先保证您已经准备好了哈萨克签证和中国签证。
====[[吉尔吉斯斯坦]]====
可以通过[[图噜噶尔特山口]]进出吉尔吉斯斯坦,但是道路非常崎岖,并且这个口岸只在每年的夏季开放几个月(6月-9月)。也可以安排走喀什,但是先要准备好签证。
另外,另一条路(虽然风景略差,但是路况较好)是经过直达图噜噶尔特南部的[[伊尔克什坦口岸]]。这条路每周大约有2-3次大巴(卧铺),大巴行程大约24小时。
====[[塔吉克斯坦]]====
塔吉克斯坦和中国唯一的口岸在[[阔勒买]],这一口岸在五月到十一月之间的周日开放。从新疆[[喀什噶尔]]到塔吉克斯坦[[科洛格]]之间有大巴。但是这班车不对除塔吉克斯坦人和中国人以外的人开放。
====[[俄罗斯]]====
最主要的口岸是[[内蒙古]]的[[满洲里]]。从满洲里到俄罗斯的[[后贝加尔斯克]]有大巴。从[[黑河]]到布拉戈维申斯克、从抚远到哈巴罗夫斯克有渡轮。再往东,在[[绥芬河]]、东宁、和珲春都有路上口岸。在出发之前要保证您已经申请了俄罗斯签证。
====[[朝鲜|朝鮮民主主義人民共和國]]====
在中國前往朝鮮民主主義人民共和國(下称:朝鲜)要經由[[丹東]]/[[新义州]](신의주),而且必須預早在北京安排導遊。相反,從北韓旅遊後進入中國,則較容易。另外, 除了上述口岸外,在鴨綠江和圖們江亦有其他出入境口岸,但這些口岸可能不允許旅客通行。最後,在通關前,請確保阁下持有有效中國及北韓簽證。
====[[香港]]====
香港主要有四個陸路口岸進入中國大陆,分別是落馬洲、沙頭角、文錦渡以及深圳灣。某些國藉的旅客可於落馬洲申請落地簽證,但若使用其他口岸必須預先安排。
====[[澳門]]====
澳門分別有兩個陸路口岸連接[[珠海]],分別是關閘邊檢大樓(大陆稱:拱北口岸)以及路氹邊檢大樓(中國大陆稱:橫琴口岸)。持有某國藉的旅客可在路氹邊檢大樓申請簽證。
====其他====
暫時為止,旅客尚未可利用陸路前往[[不丹]]及[[阿富汗]]。
===水路===
====香港以及澳門====
香港和澳門與[[珠江三角洲]]的城市間,設有定期高速客輪服務,來往[[廣州]],[[深圳]]以及[[珠海]]等地。同時,[[香港赤臘角國際機場]]亦設有跨境快船轉駁服務,旅客無須入境香港而前往[[廣州]]、[[珠海]]等地。
====日本====
每星期有一至兩班(根據季節而定)定期客輪由[[上海]]和[[天津]]來往[[大阪]],船程約為兩天。此外,[[青島]]每星期有兩班客船來往[[下關]]以及每星期一班由[[上海]]來往[[長崎]]。
====南韓====
以下數個港口均有定期航班前往南韓仁川:[[上海]]、[[天津]]、[[青島]]、[[威海]]以及[[大連]]。
====台灣====
每日有18班渡輪由[[廈門]]來往[[金門]],行程約一小時三十分鐘。另外,每天亦有4班來往[[金門]]及[[泉州]],兩班來往[[馬祖]]及[[福州]]。此外,每星期亦有跨台灣海峽航班,由[[廈門]]至[[臺中|台中]]或[[基隆]]。
====泰國====
每星期有3班高速客輪來往[[雲南]][[景洪]]及[[泰國]][[清盛]]。盡管航班會經過[[緬甸]],[[老撾]]但旅客亦無需持有其簽證。
====遊輪====
在秋天,有數條遊輪航線會由[[美國]]前往[[亞洲]],例如:[[安克雷奇]]、[[溫哥華]]或[[西雅圖]]。另外,麗星郵輪亦有運作[[基隆]]、[[廈門]]以及一些[[日本]]外島的航線。
==交通==
===飞机===
中国幅员辽阔,所以,如果您不想浪费太多时间在路上的话,最好还是选择飞机出行。中国的大城市和主要旅游目的地之间有很多国内航班。三大国际航空公司分别是:国航、南航、和东航,除此之外也有一些地方航空公司,包括:海航、深圳航空、四川航空和上海航空。最近几年大城市和各省纷纷建立了自己的航空公司,包括:重庆航空、成都航空、河北航空等。海南航空的母公司发展了包括大新华航空,扬子江快运,香港航空公司、金鹿航空等11家航空公司。
中國香港特區或者中國澳门特區到內地城市的航线都算是国际航线,因此价格較為昂貴。因此,如果要在內地和香港或者澳门之间往返,那么走深圳或者珠海(跟香港或者澳门一江之隔)会便宜'''很多''',或者走广州(广州距离香港或者澳门较远,但是有往来航班的城市却更多)。例如,从福州到香港、深圳或者广州的距离相似,但是在2005年时,飞往香港的航班价格为1400元,但是飞往其他城市的价格仅为880元,飞往深圳的打折机票仅为550元。到这些城市称汽车的话价格约为250元。
国内航班都是有标准价的,但是都会打折,特别是比较繁忙的航线。大部分酒店和招待所都有订票服务,酒店订票可能会有7.5折到3折优惠。中国的所有城市都遍布着旅行社和票务公司,他们的折扣基本相当。 就算不打折,在中国乘飞机出行也并不贵。中国两大在线订票网站[http://www.elong.net/ 艺龙]和[http://english.ctrip.com/ 携程]都有英文网站,但是航空公司网页一般都只有中文,或者需要中国手机号码来订票。
在中国旅游,一般最好在旅行社买票最划算,或者只在中文网站上买。在国外买的话(例如,通过Expedia或者甚至通过国航网点买)都会贵很多,因为国外只卖全价票。而打折机票只在中国境内出售。国内航班的时刻表一般要到航班时间前2-3个月才能定下来。和大部分国家的空运市场不同的是,买的早的人要多付钱,因为到后面会有折扣。飞机越空的航班,越容易在航班起飞的前几天买到折扣比较高的票。只要您敲定了您的行程,建议您关注飞机票价,看看什么时候涨,什么时候跌(一般都会有波动的)。但是,如果在外出旺季出行(例如春节期间),建议尽早订票,以保证您能买到票。一些价格比较高的票可以允许先退票(退票费5%-20%),然后再买低价票。最近,国内航班的头等舱也可以打折了。有的线路头等舱和经济舱价格差异并不大,还是比较划算的。但是,请注意,在空港的很多福利(例如:候机大厅、额外的行李和积分等)就不适用于打折机票了。
请注意,虽然政府和顾客都给航空公司施压,但是毫无理由的飞机延误还是很正常的。有时候飞机出行还不如其他的选择。取消航班也并不罕见。如果您从中国的票务处买的票,他们一般会联系您(如果您留下了联系方式)并通知您航班的变化。如果您在国外买的票的话, 一定要在您乘机的前一两天查看航班状态。一旦出现航班延误,中国的航空公司很快就会送出餐盒或者点心(尽管这些盒饭/点心并不一定合西方人的口味)。建议在中国旅游时随时准备好B计划。水是过不了安检的,但是所有的中国机场都有开水处,所以您可以带上杯子和茶叶。
和全世界所有地方一样,中国机场的餐饮费用也贵的离奇。在市区25元的咖啡,在机场的相同连锁店里面可以卖到78元。KFC的价格好像没有变化;他们很多机场的门店的价格和其他地方门店的价格都一样的。花20元以上吃一顿KFC还不如在街对面吃一碗5块钱的面呢,但是在机场的话,KFC还是最划算的。
===火车===
{{infobox|中国的春运时的火车票|以春节为中心,共40天左右,每年农历腊月十五到次年正月廿五,那时候民工开始放假,纷纷乘交通工具回乡,在这个阶段,有30多亿人次的人口流动,占世界人口(约70亿人)的3/7,相当于全国人民进行两次大迁移,同时也是当今世界上规模最大的人口迁移。每年春运,铁路运输是重中之重,为了解决春运问题,中国政府每年都要提前部署,但仍无法满足春运要求。所以,在此期间尽量避免乘火车出行,因为买到火车票会非常困难。}}
[[File:A maglev train coming out, Pudong International Airport, Shanghai.jpg|right|thumb|200px|[[上海]]的磁悬浮列车]]
火车是大部分中国人长途旅行的首选。铁路线路网络不断在扩展,覆盖了全国各地。中国大约占据了全世界铁路交通的1/4。
中国目前正在建立一个高铁网,类似于法国的TGV和日本的新干线。中国现在已经有很多高铁线路在运行了。中国高铁叫做“和谐号”及“复兴号”,高铁列车车次通常以“G(高)”“C(城际)”“D(动)”开头。如果您的预算允许的话,乘高铁是“最好的出行方式”。更多详情,请参阅[[中国高速列车]]。
==== 火车类型 ====
中国的火车被分成了不同的类型,在各自的车票上都有显示。中国火车从最快的到最慢的分别如下:
* 高速動車組列車(高速「G」):營運最高時速380公里,現限速300公里 使用CRH系列「和諧號」高速電力動車組,列車車次為G1-G9998.注:2017.9.21 复兴号已经提速至350km/h,部分线路车次已经开始换装复兴号。
* 城際動車組列車(城際「C」):營運最高時速350公里,現限速200~300公里 使用CRH系列「和諧號」高速電力動車組,列車車次為C1-C9998(其中,京津城際鐵路使用C2000 - C2999作為其車次,鄭州鄭開城際鐵路使用C28xx作為其車次,上海金山鐵路使用C3000 - C3999作為其車次,武漢武咸城際鐵路,武黃城際鐵路使用C50xx,C55xx作為其車次,成都成灌鐵路,成綿樂客運專線使用C61xx - C63xx作為其車次,廣州廣深鐵路使用C70xx - C72xx作為其車次,珠海廣珠城際鐵路使用C76xx作為其車次)。
* 動車組列車(動車組「D」):最高時速200-300公里,現限速160-300km/h,使用CRH系列「和諧號」電力動車組,列車車次為D1- D9998。
* 直達特別旅客快車(直特「Z」):最高時速160公里、中途不停車或者僅停靠少數車站的夕發朝至跨局或管內列車(跨局列車是指可以在本鐵路局/公司管轄範圍以內和以外的綫路上行駛的列車),列車車次為Z1-Z9998。
* 特別旅客快車(特快「T」):最高時速140公里/160公里(少數按直達特快等級運行的列車)的跨局或管內列車(管內列車是指僅可以在本鐵路局/公司管轄範圍內運營的列車),列車車次為T1-T9998。
* 快速旅客列車(快速「K」):最高時速120公里/140公里的跨局或管內列車,列車車次為K1-K9998,亦有诸如K53,K54(北京-沈阳北)的夕发朝至直达卧铺列车。
* 普通旅客快車(普快):最高時速120公里的跨局或管內列車(直快僅限跨局列車),列車車次範圍是1001-5998,無字母。
* 普通旅客列車(普客):最高時速100公里的跨局或管內列車,列車車次範圍是6001-7598,無字母。
* 通勤或路用列車(通勤):用於沿線鐵路職工上下班通勤的列車,列車車次為7601-8998。
* 市郊動車組列車(市郊「S」):最高時速80公里的城市內動車組列車,使用和諧長城號內燃動車組,現僅運營於北京市郊鐵路S2線,列車車次為S201-S299。
* 臨時旅遊列車(旅遊「Y」):為旅遊高峰客流而開行的旅客列車,列車車次為Y1-Y998。
* 臨時旅客列車(臨客「L」):在春運、暑運等客流高峰開行的列車,列車車次為L1-L9998。
另外從2015年春運起,L字頭臨客列車已大為減少,普速臨客列車車次多為3xxx、K4xxx、K5xxx、K6xxx、T3xx、T4xx、Z4xxx、Z9xxx;動車組臨客列車車次為D4xxx、D9xx;城際動車組臨客列車車次為C9xxx;高速動車組臨客列車車次為G4xxx,G9xxx。
==== 座位级别 ====
普通的非和谐号列车主要有五个座位级别:
[[File:Soft sleeper compartment for train T138 from Shanghai to Xi'an.jpg|thumb|特快火车软卧车厢]]
* '''软卧'''是最舒服的出行方式,以西方的标准很便宜。软卧的一个包厢有四个铺位,两个一列(现在更新的列车也有两个铺位的包厢),门可以上锁,空间也比较大。
* '''硬卧'''的话,一排有3张铺位,没有门。上铺很高,而且床的上面空间很小。上铺最适合身高较高的游客(1.9米以上),因为您的脚可以伸出去,而且不必担心被碰到。如果您有需要藏起来的东西(例如:照相机)的话,上铺也是最好的选择。东西放在上铺的枕头下面,一般小偷是够不到的。硬卧并不是硬板床,也是有个床垫的,而且也还比较舒服。所有的卧铺都有枕头和床单。
* '''软座'''是一种很少见的可以放下来的座位。软在只在4-8小时的短途日间列车和高速列车(D以上)会有。
* '''硬座'''就是一般的座位票,一排有5个座位,过道两边一边2个座位,一边3个。大部分的背包游客都选择硬座出行。虽然有“请勿吸烟”的提示牌,但是仅在车厢内禁止吸烟。一般在两节车厢的连接处都会有很多人在吸烟,烟就会源源不断的飘进车厢。大部分火车车厢的连接处都是吸烟区,那里有中文提示“吸烟区”。乘硬座车过夜是非常不舒服的,漫漫长夜而又无法入睡的感觉确实很不好。
* '''无座'''票是在硬座车厢的,但是没有座位。站票的话,您可以随身带一个小马扎。 价格和硬座相同。
此外,还有单人独包,高级软卧等相对等级、价格更高的铺位,不过一般只在部分高等级列车才会出现。
目前,中国的列车大部分都是全封闭的空调车厢。
和谐号一般有5个等级 - '''二等座'''(3+2的座位),'''一等座'''(2+2的座位)和三个'''VIP舱'''(2+1的座位,连着驾驶室)。VIP舱位也分三个等级,分别是“商务座”、“观光座”、和“特等座”。和飞机不同的是,和谐号的商务座实际上比“一等座”好。 商务座和观光座价格一样,但是特等座一般比“一等座”要贵,但比商务座和观光座便宜。
==== 火车票 ====
[[File:China G Train Ticket.jpg|220px|thumb|带有文字说明的中国纸质火车票]]
一般车票在列车开车前30天就可以买了(12306订票提前30天,电话提前28天)。开车之后,可能会有少量的车票给途经的较大的站预留的。如果您想找个座位,或者想补个卧铺,您可以找到列车员然后他会告诉您还有没有,需求量最大的为硬座票和硬卧票,所以这种方式能够得到您心仪的几率很少。从2012年一月份开始,所有的购票人都必须持'''有效证件'''来买票(一般就是身份证或者护照)。中国铁路客运部门在2020年6月份起,不再发行纸质火车票,实行电子票(可以在App12306中查看)。对于仍然需要纸质信息的乘客,中国铁路客运部门会提供一张载明乘车日期、车次、发到站、发车时间、席位号等信息的纸质凭条帮助旅客乘车。
在市区很多地方都有火车票代售点的,那里很清楚地以中英文标注着“火车票代售点”,还有火车头的图标,但是因为这些代售点都很小,可能也不是很好找。代售点的电脑和车站的订票系统是联网的。在代售点一般可以买到10天以前的票,而且都是按照票面价格卖的。工作人员一般不会说英语。
就算在大城市也不要指望车站的售票员会讲英语。就算售票员找到会讲英语的同事,不要指望他会操作订票系统。因此,如果您不会讲中文,那么就将始发站和到达站、开车时间、车次和要买的票的类型用中文写在纸上。车站名称您可以写拼音,因为售票员输入的也是拼音。请注意,很多城市的普通车站和高铁车站都不在一起。高铁车站一般都带方向的(例如:北京南、杭州东等)。
在出行高峰时段(例如,春节期间),车站的票一下就卖完了。最好还是找中介提前订票。在大城市里,也有稍微加一点手续费的票务机构。这些手续费可以省去在车站排长队,还是很值的。旅行社会收你的钱,然后提前订票,但是,在车站放票之前没人可以保证您一定就可以买到票,车站放票之后旅行社才会去买他们之前向您“保证了”的车票。
==== 旅途须知 ====
普通火车上的厕所一般比汽车上或者大部分公共场所的厕所要“好”一些,因为火车上的厕所非常简单,小部分直接把排泄物抛洒在铁轨上,火车上的厕所味道没有那么刺鼻,但是现在大部分的火车都已经安装或者部分安装了真空集便装置。软卧车一般在车的一头有欧式的坐便器,另一头是中式的蹲坑式的厕所。请注意,直接将排泄物抛洒在铁轨上的列车在车站停车时列车员会将厕所临时关闭,以防止排泄物抛洒在车站范围内的铁轨上。
长途车会有餐车,餐车会有热饭,但是一般都会很贵,都在15-45元,而且确实不好吃。菜单都是中文,但是如果您愿意冒个险的话,您可以记住几个中文字,或者问问看常见的菜有没有。如果您的预算有限,那只能等到站的时候。站台上的小贩一般会卖面条、小吃和水果,价格一般会稍微好一点。车上一般都有开水处,所以您可以带上茶叶和泡面等。
在火车上要留心自己的财物,这几年公共交通设施上财物失窃的事情越来越常见了。
大部分比较高级一点的车上(T、K、Z和和谐号列车),都会播放实现录制好的中文、英文、粤语(如果火车路过广东或者香港)、蒙古语(内蒙)、藏语(西藏)或者维吾尔族语(新疆)的报站广播。但是,在短途列车上没有英文报站,因此,知道从哪里下车很重要。
如果晕车的话,建议备好晕车药。如果睡觉怕被吵到,建议戴耳塞。长途卧铺车厢上铺的空调在夏天会很凉。如果担心因为自己的不注意而错过到达站,您还可以跟列车员讲在即将到站时来通知你一声,列车员很乐意帮找你。
如果您有可以和大家一起分享的东西的话,那时间会好过一点。旅途中的中国人也都一样觉得很无聊,他们很乐意和您聊一聊,或者一起在电脑上看一部电影。总的来说,乘火车看看中国乡村风景还是挺不错的。
在出入站时都要验票,一般在进候车大厅、上车和出站出都有人检票。进了候车大厅后,在电子显示屏上找对应的站台上车(虽然是中文,但是会显示您票上印的车次)。在上车前大约10分钟的样子,就可以进站检票了,进站后您只需要跟着人流走就好了,一定要确保您不要坐在错误的候车区域了,因为一般火车在一般的站只停几分钟。一些比较新的站是高站台,这样站台会和车门齐平,但是小站的站台都很低,然后上车都要走几步很陡的台阶,所以如果您有大件行李的话,要有心理准备。一般的乘客也都很友好的,都会主动伸手帮您一把的。
在车厢内部是不允许抽烟的,但是在两节车厢的连接过道处是可以的。所有的高铁车组及动车车组都属于全列车禁烟列车。车站也不许吸烟,但是设有单独的吸烟室,但这些吸烟室里面都很糟糕,而且通风也很差。
==== 有用的网站 ====
*[http://kyfw.12306.cn 12306]是中国铁路总公司的官方购票网站,有用性不言而喻。购票高峰期会出现各种不可预测的故障(因为中国在运输高峰期时会有十几亿客流量通过铁路发送,购票者过多导致跟DDoS类似。)注意,这是中国铁路(含高速铁路)购票唯一的官方网站。
*[http://www.seat61.com/China.htm Seat 61]网站上关于中国列车的介绍较为全面。
*[http://www.absolutechinatours.com/china-trains Absolute China Tours]或者[http://www.chinahighlights.com/china-trains/ China Highlights]有票价信息(注意,这里的信息虽然非常有用,但是也并不是100%的全的)。
*[http://www.oklx.com/cn/train/search_station.aspx OK Travel]有更多车次。这个网站大部分都是中文但是,地名都用的是罗马字母,这样您不懂中文也没有关系了。在搜索页面,只要从列表中选择就可以了:左手边是始发地,右手边是目的地。注意,您需要在下拉栏中选择省份或者区域之后才会出现相应的城市。选择您需要的城市,然后点击左下方的按钮(“确认”)进行搜索。如果您可以输入汉字,这个网站还可以帮你计划转车。
*[http://www.cnvol.com CNVOL]有中国国内运行的所有列车车次,而且更新很快。只要输入您旅途的起点和终点,您就会找到所有往来的车次(包括过路车),每列车注明了始发站、终点站和时间。点击您喜欢的车次,然后您可以看到各个座位的票价。
*[http://huoche.wiki 火车Wiki]讓您可以了解某个车次的车辆情况。
*[http://piao.today 票.今天]让您可以了解某个区间的余票趋势。因中国客运分淡旺季,所以淡季内的趋势一般来说是相同的;旺季同理。有时12306因为客流量过大导致前端无法访问时(前提后端正常),也可以在该网站上查询余票。因该网站查询实时余票时会同时将所有的票价同时抓取,导致速度较慢,除非12306出现前端技术故障,否则不建议使用该网站的实时余票功能。由于12306接口关闭,本站只能浏览以前的数据,而不能使用查询实时余票/添加新趋势等功能。
*[http://yupiao.info 余票网]著名的火车票查询网站,可以显示出预售期内所有指定区间有票的车次,方便购票。但是因为原作者停止维护,所以本网站可能随时下线/出现暂时性的故障。
*[https://www.ctrip.com/ 携程]现今中国最大的旅游、住宿、车票、机票等预定网站,美国纳达斯科上市企业。有多国语言支持。提供可以发送到电子邮箱的电子行程单。
=== 汽车 ===
城际'''公共汽车'''或者长途汽车并不贵,非常适用于市内和短途的交通运输。
每个城市的公交车各有不同---但一般情况下都是塑料座椅、人多、没有英文标识、司机态度一般。当然,如果您对于公交车线路比较熟悉的话,这不失是一种非常经济而且四通八达的出行方式。一般情况下,公交车上都会播放报站录音,例如“下一站:中山路(Next stop is Zhongshan Road)”,或者“上海南站到了(We are now at Shanghai South Railway Station)”。一些大城市,例如北京或者杭州,的一些主要线路上有英文报站。票价一般为1到2元(一般1元为老式公交车,2元为新式带空调公交车),如果公交车路线到了市郊,票价会相应高一些。大部分公交车已经没有售票员了(收钱、找零、撕车票),取而代之的是上客门旁边都有个自动投币的铁箱,您可以把您要支付的票价投入投币箱内(不找零,所以要自备零钱)。注意,一般公交车司机都会开的比较快,不怎么会在乎乘客的感受,所以要扶好站稳。
{{Infobox|卧铺大巴(已弃用)|卧铺大巴在中国20世纪初很常见;车上没有座位,取而代之的是卧铺床位。中国交通部门在2020年发布关于卧铺大巴禁行公告。这是长途旅行不错的选择— 大巴在高速公路上的夜间行驶速度一般为100KM或者更快— 因为铺位空间有限,可能有的身高比较高或者块头比较大的旅客会觉得不舒服。
一般来说,在发达的沿海省份,这还是比较舒适和便捷的交通方式,但是在欠发达地区就不一样了。尽量不要买车位的铺位,因为车在过减速带的时候,车位的乘客晃动比较厉害,可能会有晕车症状。
在有的地方,在您上车时必须要先脱掉鞋子;车上会提供一个塑料袋放鞋子。如果到了服务区或者上厕所的时候,您需要再穿上鞋子。如果您平时穿靴子的话,建议您随身再带上一双拖鞋。}}
各地的大巴,或者'''长途大巴'''的情况各不一样,有的很舒适,而有的地方的大巴就会很不舒适。一般从东南沿海较大城市发出的大巴都带有空调、软座。东南沿海地区的路况非常好,车开的很平稳,您可以欣赏沿途风景或者小睡一会儿。一般汽车会比火车会贵一点,但是要舒服一点。大巴的乘务员都很愿意帮忙,但是和空乘人员相比,他们对于外国人就没那么熟悉,能说英语的非常少。有的大巴有厕所,但是一般都很脏,而且汽车转弯比较多,造成使用厕所比较不便。
中国农村地区的大巴就完全不同了。 车站里面的表示要么只要中文要么只要本地语言,路线都是贴在车窗上的,在您走过的时候司机或者招揽客会向您大声喊叫他这趟车的目的地,一般大巴的车牌号应该印在票上的,但是通常票上印的车牌号都是错的。由于风俗习惯等的差异,外国人可能会觉得大巴司乘人员不够礼貌,乘客素质也欠佳,他们会随地吐痰和抽烟。如果司机一路都想多上人的话,巴士可能会非常拥挤。中国农村地区的道路通常都是坑坑洼洼的,这样乘坐巴士就会非常颠簸;如果您坐在巴士靠后的座位上,那么颠簸会更加厉害。发车和到达时间都只是预计时间,因为很多车票不卖完不走(这可能使发车延误数小时),加上车有点小问题和其他事情,您的行程可能会被大幅延长。如果您要在这样的车况和路况下乘车10个甚至20个小时的话,那您一定会感觉痛苦难忍的。虽然这样的车程让人非常不舒服,但是在中国很多地方,这样的大巴是唯一的交通方式。当然,好的一点是,如果您想去比较偏远而且又没有直达车的地方旅行的话,您可以在路上随时下车。而且,您也可以在路上随时拦车,一般车票都是视路程长短而不同的。
在中国,司机不遵守交规是一种普遍现象,而且中国的交通事故也比较多发。突然急转弯或者刹车都会造成人员受伤,所以上车后要坐稳扶好。中国的司机经常按喇叭,所以,如果您想在路上睡一会儿,还是带上衣服耳塞的好。
买票有时候会比较难。大的车站有售票柜台,票面上印的有出发时间、上车闸口、和您所乘车的车牌号(有时候不准),票价是固定的。小一点的车站到处都是招揽乘客的人在大声喊叫自己车辆的目的地,他们会把您领过去,然后您上车后再买票。就算在大的车站也有招揽客,他们会给司机打电话让司机等,然后用摩托车把您拉过去,您到了之后可以和司机讲价。这种情况有时候可能完全就是一个骗局,有时候您可以省下35%的车费(取决于您的砍价水平和中文水平)。
===地铁===
大城市 — 至上北京、天津、上海、广州、深圳、武汉、沈阳、郑州、西安、重庆、成都和南京等 — 都有了地铁系统。重庆还有单轨轨交系统。这些设施总体都比较现代、干净而且高效。标识和售票机都是中英双语的。
这些轨交系统现在都在逐步地建设和扩建中,几乎每个有地铁系统的大城市都在修建新的线路。中国在这方面的长期目标非常大胆,每个大城市都在计划修建多条线路。到2020年,中国可能会有世界上最大规模的城市交通基础设施。很多城市都在规划诸如广州和深圳之间的区域间轨交系统。
===出租车===
出租车(或者的士)比较常见,而且价格也比较合理。起步费一般从5元到15元,一般超过起步费范围每公里2元左右(3千米起步)。一般在市内打车费用在10到50元以内。行李不另行收费,但是很多城市夜间打车费要高一些。不用给小费。有些地区还会收取附加燃油费一般1元到2元,视地区而定。
出租车司机故意选一条较长的线路来欺骗乘客的事情虽然不是没有,但是也并不常见,所以不必过于担心这一点。就算司机选了较长的路线,车费也不会差很大。但是,如果您觉得在去酒店的路上被出租车司机骗了,并且您住在中高端的酒店(一般都有门童),您可以向门童和/或者前台人员寻求帮助:一般一句能揭穿他的骗局的话就足以解决问题了。
小心一些黑出租,他们会在机场或者车站里面或者门口跟上您,然后会跟您谈一个带您去某地的固定价格,他们的收费往往是打表费用的1-3倍。如果您对所在城市不熟悉,那么一定要去机场外面指定的出租车区域,并且坚持让司机打表。出租车费率一般都标注在车外的醒目位置。
在高峰时段打车比较困难。如果再遇到下雨天,那就更是难上加难了。尽量避免高峰时段(特别是晚高峰),打车之后一定要记得拿小票。在中国,打车和其他所有事情一样,小费可以给也可以不给,中国人没有给小费的习惯,所以不给也没有人在意。
可以坐在副驾位置;有时候只有副驾位置能看清楚计价器。出租车司机有可能摇下自己那边的窗户就直接开始抽烟,而不会征求乘客意见。在有的城市,出租车还会在沿途搭客(在大致方向一致的情况下)。每个乘客都要付全价,但是这样会省去乘客们等车的时间。
虽然北京在迎奥运和上海迎世博期间做过一些工作,但是即便在这两个城市也很难找到会讲英语的出租车司机。在其他的城市基本上是不可能的。如果您试着用您带口音的普通话说出您要去的目的地,司机也有可能会理解不了。所以,建议您随身携带一张写着您打车要去的目的地的纸条。纸条上最好写汉字(而不是拼音),因为一个拼音可能对应好几个不同的汉字。带着您所在酒店和您喜欢的餐厅的名片,必要时出示给出租车司机。您可以先学一点儿基本的中文简单对话,这类的教材网上都是有的。
如果您在中国待的时间较长,那么考虑买一张中国的SIM卡,这样您可以给您在中国的朋友打电话,然后让他们跟司机说说您要去哪里。SIM卡在中国很容易可以买到。
有的城市的出租车公司有对司机的评级系统,从0到5星,这个打分器在仪表板上方的司机信息牌上,一般在副驾座前面。一般0或者较低分数虽然不一定代表司机不好,但是5星则表示司机对城市很熟悉,并且会以最短的路程将您带到目的地。另一种识别司机能力的方式同样是看司机信息牌---上面的司机代号。一般代号越小,则说明这个师傅从业时间比较长,可能对市区路线会更熟悉一些。如果您觉得被出租车司机骗了,很简单的一个办法就可以引起出租车司机的重视,那就是下车后马上把出租车车牌号抄下来,如果您会说简单的中文的话,您可以告诉他您要向市政机构或者出租车公司举报他。大部分司机都是诚实的,车费也不会太高,但是也有小部分不好的司机会利用您不会讲中文来侵害您的利益。
中国人在打车的时候一般不会让别人的。拦到车的人不一定就可以乘这个车。别人跑到搭车人前面先上车或者把拦出租车的人挤开自己上车的事情也并不是没有。如果一起有几个人都在打车,那么在拦到车后尽快上车。不过随着uber、滴滴等出行工具的普及,通过移动网络预约出租车成为绝大多数乘坐出租车的人的首选,在街上随手拦下一辆出租车的情况已经很少见了。
出租车司机可能会说您不用系安全带,但是无论怎样上车后一定要系上安全带(如果能找到的话)。
===电车===
有的城市有电车。电车一般经停站比轻轨要多,如果您要去的城市有的话,电车不失为一种出行的一种很实用的选择。但是,电车的话有可能会有堵车情况。
===自行车===
自行车、电瓶车和摩托车是中国最常见的交通方式;在高峰时期,中国的各个城市都有成千上万的两轮车。大部分自行车都是不可调速的老式车型,但是普通的山地车也比较常见。对于乘客来说,骑自行车要比挤进高峰时段的公交车要经济而且便利的多。
在中国对于骑自行车的人来说,有两大'''危险''':
* 一个是其他的'''交通车辆''';汽车和摩托车会经常让人毫无准备地拐出来,有的地方的红绿灯纯属摆设。更多相关评论,见[[中国驾驶习惯]].
* 在中国各个城市中'''偷车贼都很猖獗'''。需要观察其他人是如何停放自行车的。有的地方的当地居民会随手停放自行车,但是在其他很多城市中,人们都会将自行车锁在饭店或者网吧中。这就是一种警示。不要认为您的高档锁能确保您的自行车万无一失(偷车贼只需要摆弄一下就能打开)。建议尽可能将您的自行车停在有管理员的指定的停车区域;一般您只需要交1-2元钱。有的当地居民会故意买二手的老旧自行车,这样小偷就不会惦记着了。
在绝大多数景区 — 无论是像[[北京]]这样的大城市还是像[[阳朔]]这样游客云集的小镇 — 租车和修车都是非常方便的。而且都有骑行旅游的指南。
在中国,购买自行车是一件非常容易的事情。大行、美利达和捷安特是业余和半职业市场上最流行的三个品牌,所有的城市都有这些品牌的分销商。很多超市也会出售款式繁多的自行车。价格一般从150元到10000元不等。如果要在像西藏这样的地区骑行的话,一般3000到4500元价位的山地车就可以了。诸如上海和北京这样的大城市一般会有更多的职业高端自行车,但是如果您的要求非常特殊,那么香港就是您最后的希望了。
无论是在城市还是在乡村,修车铺随处可见;语言不通的外国游客可能不是很容易能找到,但是您只要找外面摆着自行车和自行车胎的店铺就可以了。要是车胎漏气这样的小问题的话,路边上有很多地方放着一盆水和一些自行车胎的地方都能修。但是如果是刹车碟这样的特殊部件的话,建议您在城区以外的地方骑行时还是随身携带好备件吧。
中国幅员辽阔,她的高山和沙漠都给专业的骑行者提供了无尽的挑战。但是,截止2010年5月,如果外国游客要在西藏高原上骑行,则必须''依照法律获取许可并须雇用一名导游''。
一段风光超越想象但是却艰难异常的自行车骑行线路,请参阅[[中巴公路|喀喇昆仑公路]]。中国自行车网和Intrepid Travel都在这条线路上组织小规模的骑行观光。
=== 共享单车 ===
在中国的许多城市,除了城市公共自行车以外,您还会在大街上看到一些装饰相同并装有二维码智能锁的自行车,这些就是共享单车了。
它们与城市公共自行车相比,最大的特点是无桩,您可以自由地在街边租还共享单车,它在城市交通中已经占了很重要的地位。您在旅游一些城市时,可以用共享单车到达目的地,也可以领略城市各个角落的风景
共享单车品牌繁多,不同品牌的押金和收费也不尽相同,但绝大多数品牌的共享单车价格都比较低廉,目前摩拜单车和青桔单车占据了大部分市场。您除了可以下载应用程序打开共享单车,还可以用微信和支付宝打开一些品牌的共享单车。
=== 自驾 ===
{{参见|在中国驾驶}}
截止到2022年,中国已经实现与阿联酋、比利时、法国和塞尔维亚4国驾驶证互认换领。注意,中国大陆将香港和澳门的驾照都视为外国驾照,因此,就算您有这两个地方的驾照,也不应该在中国大陆开车。这一情况在07年有所改变---没有中国驾照的短途驾驶成为合法。但是,和很多中国的法律一样,官方的变更和现实中的改变并不一定完全是一致的;直到2008年12月,没有中国驾照在中国开车仍然是违法的。除非您有外交身份,否则,要把外国的车运进中国基本是不可能的。
租的车大部分都是带司机的,和北美的一种租车服务remises类似;租带司机的车是游览中国最好的方式。就算您有初级的中文读写能力,而且取得了中国驾照,建议最好还是''不要''您自己驾车出游---当然,如果您已经习惯非常混乱的交通状况的话除外。如果您没有足够的勇气,请不要在中国的市内开车,并且停车位也非常难找。但是,尽管如此,在中国开车比在亚洲其他发展中国家,例如越南,要好很多。中国是属于靠右道行驶的国家。中国很多邻国,例如印度、巴基斯坦、尼泊尔、不丹以及香港和澳门特别行政区都是靠左行驶的。
在西方游客比较多的大城市,比如北京、上海还有其他的大城市中英文指示标识随处可见。但是,在其他较小的城市,英文标识就非常少,而在农村英文的标识基本上就不存在。因此,最好每次都带上写有您目的地名称(中文汉字)的纸条,这样,即便您迷路了,当地人也可以给您指路。
建议外国人不要在大城市之外的地方开车,“单行道”标识一般都是“并不一定是单行”。在高速上,仍然有的一小部分司机开过了出口匝道后会减速,然后转个270°的弯转上匝道。司机本会有各式各样的穿插技术。
在过马路时,一定把路两边都看清楚。不仅仅是自行车可能逆行,而且越来越常见的电动车也会---并且它们都没有什么声音的。
=== 摩托车 ===
{{参见|在中国驾驶#机车}}
摩的在中国很常见,特别是在小城市和农村地区。摩的一般都很便宜,而且很灵活高效(但是偶尔有点儿吓人)。车费可以讲价。
各个地方对于摩托车的管理规定有所不同。在有的地方,50cc的輕便摩托可以不用驾照,但是由于事故频发,目前很多地方都已经禁止了这种摩托,或者对这种摩托有了新的规定。要在中国骑“真正的”摩托可就难多了-这一部分是因为骑摩托车需要中国的驾照,一部分是因为很多城市都禁止摩托车驾驶,还有一部分是因为由于汽车和电瓶车的发展摩托车的生产和进口大幅下降了。中国的摩托车一般都是125cc的,一般可以到100km/h,大部分都是老式的。这种车速度一般都比较慢,也不是特别好骑。由于政府对于发动机尺寸的限制,所以赛车比较少,但是也不是找不到。还有一种比较流行的是仿制本田CN250的“Maxi”摩托车,它速度更快而且也比较舒适,可以自动换挡,这样在市区里骑会容易一点。
大部分城市都有各种摩托车市场,卖给您的车一般都是假的牌照或者非法牌照-在中国骑摩托车的外国人并不多,很容易被警察注意到。骑“真正的”自行车必须戴头盔,但是电瓶车就不用。理论上说来,您要去办理个牌照:摩托车牌照是黄色或者蓝色,电瓶车是绿色或者红色牌照。自己申请牌照的费用可能要好几千(电瓶车几十元),但是您也可以花很少的钱弄到假牌照——后果自负。
===三轮车(人力车)===
{{infobox|名称中有什么差异?|在中国的外国人通常会混用三轮车和人力车这两个词,但是它们指的却是两种不同的运输方式-其中一种已经不再存在。著名(臭名昭著)的人力车是一种前面有两个把手的两轮车,车夫拉着把手把乘客送到(走路或者跑步)目的地。人力车在19世纪晚期尤为盛行,但是在20世纪50年代逐渐被淘汰了。西方的精英分子坐着中国工人拉着的人力车上打马球的视频显示了人力车剥夺和压榨的本质。在很多小的欠发达城市还能看到人力车的衍生品,工人们每天早上拉着类似人力车的车子等待运输建筑材料和其他东西。三轮车已经取代了人力车---三轮车是一种类似自行车的有三个轮子的车辆。}}
在有的中型城市里,短距离出行的话三轮车会方便很多。三轮车有人力脚踏的和动力的两种,在中国农村地区和大城市的较不发达(也就是游人较少)的区域非常常见。上车前一定记得要先谈好价钱。
对于“司机经常欺骗游客”的报道一般多指像在北京秀水街、王府井、和老舍茶馆这些旅游景点发生的事情。一般的规则是“要提防在旅游区兜售任何东西的任何人”。
如果您看到一般的中国人使用“三轮”,例如,从北京动物园到最近的地铁站-那这就是安全的。不要乘任何穿着老式服装以吸引游客的师傅的车。他会收您市价上10倍的车费。
可能的话,尽量选乘脚踏三轮车。在选乘脚踏三轮车的同时,您也在帮助确实比较贫困的人,让他们有生意可做,而且您也在帮助中国留下一些传统的东西。在上海,由脚踏三轮车发展和改进而来的电动的三轮车占大多数。
==语言==
[[File:Map of sinitic languages-en.svg|thumb|240px|中国方言地图]]
中国官方语言是'''[[漢語會話手冊|标准普通话]]''',它主要是基于北京方言发展演化而来的。从20世纪50年代以来,普通话是中国教育系统使用的唯一的语言,所以大部分人都会说。普通话是有声调的,声调正确对于学习和使用普通话很重要。
中国很多地区,特别是东南和南部地区都有他们自己的“方言”。这些方言其实就像完全不同的语言,就好像法语和意大利语一样。这些“方言”和普通话一样也都是有声调的。即便同样是普通话(地图中大片的棕色区域),各地方的口音也不一样,而且各地都夹杂着自己本地的俚语和一些很鲜活的地方语言。除了普通话,使用最多的方言是'''[[吳語會話手冊|吴语]]''',主要集中在上海、浙江和[[江苏]]省南部地区;其次是'''[[廣東話會話手冊|广东话]]''',集中在广东省大部、香港和澳门;再次是'''闽语'''(福建)语支,它包括 '''在[[厦门]]周边区域和台湾使用较多的[[閩南語會話手冊|闽南语]]'''(闽南语有一种次方言叫做潮州话,主要在潮汕地区使用),和在[[福州]]周边地区使用较多的'''闽东语''' 。大部分中国人都可以讲自己的家乡话(方言)和普通话两种语言。有的上年纪的和受教育较少的人可能只会讲他们的家乡话,但是这对游客没多大影响。最好能有一个可以讲本地方言的导游,讲本地语言就说明这个人是对本地比较熟悉。虽然您凭着一口标准的普通话就能在中国大部分地区畅游无阻,但是如果您可以试着和当地人讲几句他们的当地方言,那他们是会非常高兴的,所以学习几句简单的方言问候语或者俚语会让您很快就和本地人熟悉了。一般来说,如果能听懂或者比较喜欢当地的方言的话会对去比较偏远地区旅行是很有帮助的。当然,在这些偏远区域,带上一本中文常用语手册还是很有必要的,因为全国的中文写出来都基本是一样的。
无论各地方言差异有多大,所有正式的书面中文都是一样的。甚至很多日文和韩文都用很多相同的汉字,而且和中文中的意思一样或者相似。但是,要注意的是中国大陆使用的是“简体中文”,这种简体中文是在20世纪50年代中期为了消除文盲而发展出来的。香港、台湾、澳门和很多海外华人都在使用繁体中文,但是在大陆的的一些广告和商业标识上也能看到繁体字。汉字简化总体还是比较系统化的,一般以简体中文为母语的人基本也能阅读繁体字,反之亦然,所以只要学会书写一种中文一般就足够了。
注意,在书法中不同由于书法家有不同的风格,所以每个字的笔画差异非常大。中文有五种字体:篆书(篆書)、隶书(隸書)、楷书(楷書)、行书(行書)、和草书(草書),其中楷书是中国的官方字体。去中国旅游只要知道一种字体就可以了。对于对中国传统文化有深厚兴趣的人来说,学习中文字体肯定会大有裨益。
在中国遥远的西部,有的少数民族会使用土耳其语系中的[[維吾爾語會話手冊|维吾尔语]]、吉尔吉斯语、哈萨克语以及其他语言(例如:[[藏語會話手冊|藏语]])。在中国的北部和东北部少数民族聚集的地方,这些少数民族会使用自己各自的语言,例如满语、[[蒙古語會話手冊|蒙古语]]、[[朝鮮語會話手冊|朝鲜语]] 等。在中国云南、贵州、海南和广西居住着许多少数民族,例如:苗族、侗族、壮族、白族等,他们都使用自己各自民族的语言。除了这些地区的老年人,一般的年轻人都能说普通话,而且大部分年轻人都既可以说普通话又可以说自己的民族语言。很可惜的是,很多少数民族语言(如:满语)都在慢慢的消亡。
===英语和其他外语===
在过去20年中,从小学高年级或者初中开始英语便成了他们的必修课。大学里面无论你是什么专业,一定的英语等级都和学位挂钩。但是,所有的教学的终点都在正式语法,轻听说而重读写。
上海、北京、广州和深圳能讲英语的本地居民比例较高。在有的城市,除了在有涉外服务的旅游景点和场所外很难找到能讲英语的本地人。航空公司和大酒店-特别是国际连锁店的员工基本都会讲一些基本的英语,但是能用英语深入交流的非常少。
国际机场、警察局、医院等公共服务提供场所的接待人士基本都会说初级英语——尤其是年轻的,因为中国是在近几年开始重视英语的。
在中国讲英文的时候,请尽量简化您的英语语言:讲慢一些,标准一些(就像您在电视上看到的新闻主持人一样),避免俚语、成语或者较长的单词,尽量使用简单的现在时态和一些陈述语句结构。不要说“Would you mind if I come back tomorrow?”直接说简单的(尽管可能有些唐突无礼),例如“Tomorrow I will return.”这样说和中文语义更加相近,而更容易被理解。
同时,部分中国人的英语可能有口音(像中文一样抑扬顿挫或者单词等时),此时请叫
在中国结交朋友的一个方法就是询问“英语角”- 英语角是指本地居民约定好一个时间和地点一起见面并练习英语的地方。一般都由一个外国人主持,一般时间都在周五晚上、周六晚上或者周日,在公共公园、英语培训学校、书店和大学校园。可能还会有其他的比如“法语角”、“俄语角”、“德语角”等。
如果您要去比较偏远的地区,建议在您旅途开始之前找一个导游帮您安排行程。这至少会帮您克服语言障碍,因为这些地方的本地居民基本不可能会讲任何外语的。
===学习中文===
''參見:'' [[#学习|学习]]
在西方,不知何故,中文以她的难懂而闻名。虽然中文和西方语言有所不同,但是旅客们会很吃惊地发现中文的基本语法还是比较简单的。动词不分人称和时态。名词没有词性(注:很多语言,如法语,名字有阴性和阳性之分)。最主要的难点在于中文使用了欧洲语系中不存在的几个辅音以及声调。
普通话和越南语以及泰语一样都是声调语言,它们使用不同的语调来表示不同的意思。“Ma”这个发音可以代表妈、马、麻、骂四个字中任意一个,完全取决于音调。中文的同音字非常常见;即就是音调一样的一个读音都会有十几个不同的汉字。“Zhōng”可以是中、忠、钟、终等。中国人在报出自己的名字的时候一般都会逐个字来解释。“我叫王菲,王是三横王,菲是是非的非加草头。”
对于很多人来说,书面的中文看起来跟一个个神秘代码相去并不远,但是如果您都可以辨识那么多的商标图案(这些图案一般并没有逻辑联系),那么就说明您也有认识大量汉字的潜在能力。并且,大部分汉字之间都是有逻辑联系或者有规律可循的。
理论上来说,中文有5万多个汉字。好的一点是,这其中85%的都是不常见字。跟很多种语言是一样的,大部分中国人也不知道要看一本中文书需要认识多少个汉字,永远都不要去数哪个中国人认识多少汉字。有的人声称小学生应该至少学习2000个汉字,大学毕业生则至少认识5000个。
拼音的发展是为了弥补识字和发音之间的鸿沟,拼音使用了罗马字母,是中国人学习中文的辅助工具。不能按直觉对拼音进行发音,因为有的字母和辅音辅音连缀代表了很多欧洲语系并不存在的发音,因此很多拼音的发音和西方人士想象的并不一样。中国人不认识以拼音写出来的地名和地址;建议使用中文汉字来记录书面信息。
==观光==
中国有着无尽的美景,您在中国永远不会无处可去。特别是在沿海地区,如果您已经游遍了繁华闹市中的景点的话,那么随便乘一趟短途火车您就会发现下一个美景。
无论您是痴迷于历史、寄情于山水,还是只想找个怡人的沙滩放松放松,从[[北京]]雄伟的紫禁城到令人叹为观止的[[九寨沟]],您想要的中国都能给您。就算您已经在中国生活了很多年了,但是在这个幅员辽阔的国家的其他地方总有一些新的景物和事情有待您去发现。或许是由于中国疆土的辽阔和历史的源远流长,中国在联合国教科文组织中的世界遗产数目位列第三(第一第二分别是意大利和西班牙)。
[[Image:Diecaishan.jpg|thumb|240px|喀斯特地貌、桂林]]
=== 主要景点 ===
* [[万里长城]]
* [[天坛]]
* [[天安门]]
* [[秦始皇陵和兵马俑]]
* [[鼓浪屿]]
*[[黄山]]
* [[壶口瀑布]]
*[[西安|西安城墙]]
* [[布达拉宫]]
* [[婺源|婺源古镇]]
* [[泰山]]
* [[黄果树瀑布|黄果树大瀑布]]
* [[颐和园]]
*[[北京/故宫|故宫]]
* [[苏州园林]]
* [[东方明珠塔]]
* [[外滩]]
* [[华山]]
* [[大三巴牌坊]]
* [[少林寺]]
* [[九寨沟]]
[[File:1 jiuzhaigou valley national park wu hua hai.jpg|thumbnail|九寨沟的五花海]]
* [[张家界]]
* [[漓江山水]]
[[File:Lijiang River scenery.jpg|thumbnail|桂林漓江山水]]
* [[天涯海角]]
[[File:Sanya Sun Photo by Dale Preston.jpg|thumbnail|right|海南省风光]]
===喀斯特地貌===
'''山丘绵延、奇石陡峰'''是的中国艺术家梦寐以求的一种传统风景。中国的南部和西南部多这中形态各异的岩溶地貌,又称“喀斯特地貌”。喀斯特是一种石灰岩地貌,是以[[南斯拉夫]]石灰岩高原的地名命名。随着石灰岩被化学腐蚀,密度较大的抗腐蚀性石头或者地块形成了各异的山峰。山下形成的山洞会坍塌而形成落水洞和暗流,它们和地下河道连通。在喀斯特地貌中,溶蚀形成了星罗棋布的山峰、拱形洞穴和通道。其中最著名的例子就是云南省昆明附近的石林。中国很多最著名的景区都以喀斯特地貌风光著称— [[广西]]的[[桂林]]和[[阳朔]]和贵州省中部和西部等地。
===圣地===
中国的如下景点有非常著名的佛教艺术:
* [[山西]]的[[Datong#See|云冈石窟]] - 石窟依山开凿,有五万一千多个佛像雕刻,可以追溯到1500多年以前
* [[甘肃]]的[[Dunhuang#See|莫高窟]] - 可以追溯到公元4世纪的艺术和壁画
* 重庆附近的[[重庆/大足|大足石刻]] - 可以追溯到7-13世纪之间
* 洛阳附近的[[Longmen National Park|龙门石窟]] - 可以追溯到5-10世纪。
===圣山===
中国有很多圣山。
和道教有关的“五岳”:
* [[泰山]] ,山东(海拔1545米)
* [[华山]],陕西(海拔2054米)
* [[衡山]],湖南(海拔1290米)
* [[恒山]],山西(海拔2017米)
* [[嵩山]] (嵩山),河南省(著名的少林寺也在河南)(海拔1494米)
和佛教有关的“四大佛教名山”:
* [[峨嵋山]],四川(海拔3099米)
*[[青阳|九华山]],安徽(海拔1342米)
* [[普陀山]],浙江(海拔297米,是一个岛)
* [[五台山]],山西(海拔3058米)
西藏佛教三大主要圣山:
* [[冈仁波齐峰]],[[西藏]](海拔5656米),它也是印度教徒朝圣的印度教最神圣的山峰之一
* [[梅里雪山]]
* [[阿尼玛卿雪山]]
中国还有很多其他非常有名的大山。在中国很多大山即便并没有身处圣地,当时还是有很多庙宇:
* [[黄山]],安徽,风景秀丽,景色引人入胜。
* [[青城山]],四川
* [[龙虎山]],江西
*[[青岛|崂山]],山东
* [[武夷山]],福建,主要的旅游胜地,有大片的茶山
* [[喜马拉雅山]],横亘尼泊尔和西藏边界,世界上最高的山脉
* [[武当山]],在湖北[[丹江口]]附近,道教圣地,是太极和武当拳的发源地
*[[长白山自然保护区|长白山]](朝鲜语:백두산),对于满族人和朝鲜族人来说是世界上最神圣的山脉,位于中国和朝鲜的边界处。
===革命圣地===
* [[韶山]] - 中国共产党第一人主席和中国领导人毛泽东故乡
* [[井冈山]] - 共产党在1927年国民党围剿后的第一个农村根据地
* [[瑞金]] - 1929到1934年间中华苏维埃共和国所在地
* [[遵义]] - 遵义会议所在地,之后毛泽东进入政治局常委
* [[泸定]] - 传说中飞夺泸定桥所在地
* [[延安]] - 从1939年到1945年中共产党的主要根据地所在地
* [[武汉]] - 推翻清廷的武昌起义发源地
* [[广州]] - 黄埔军校所在地,国民党和共产党的很多领导人(蒋介石、周恩来、毛泽东)都曾有黄埔军校经历,在1926-27年被北伐前开展了很多军事和政治学习。
===旅游线路===
以下是全程都在中国境内的一些旅游线路:
* [[中国两周到一月游]]
* [[香港附近一周游]]
* [[长江沿线|长江沿线游]]
* [[黄河沿线|黄河沿线游]]
* [[京杭大运河流域|大运河沿线游]]
* [[云南游]]
* [[西藏游]]
* [[长征]]
其他涉及中国的旅游线路:
* [[欧洲到南亚陆路旅游]]
* [[丝绸之路]] - 古代从中国到欧洲的商队之路
* [[中巴公路|喀喇昆仑公路]] - 从中国经由喜马拉雅山到巴基斯坦
* [[马可·波罗的足迹|探寻马可·波罗的脚步]]
* [[昆明到香港陆上行]]
==活动==
===按摩===
中国按摩场所遍布全国,而且一般都物美价廉。在亚洲,盲人有从事按摩的传统。一般比较专业的按摩价格在20元到40元一小时之间。
* 基本上所有的理发师都可以帮您洗头,并且给您做一个头部按摩,只收20块钱。这一般还包括帮您清理耳屎和一些颈部和手臂按摩。加上理发和/或刮面,一般收15元到25元。在大城市里,理发费用一般在50元以上。
* 足疗的地方也很多,一般足疗场所的招牌上都有光脚图片作为标示。价格一般在20元到100元。
* 全身按摩场所也非常多,价格一般在每小时15元以上。一般有两种:按摩一般就是普通的按摩;而推拿可能会用到针灸中使用的中草药。最专业的按摩一般都在专门的按摩医院或者一般的中医院,价格一般都在50元每小时以上。性价比最高的一些在不明显场所的盲人按摩。
很多地方这三种按摩都有。
有的按摩场所其实就是妓院。卖淫在中国虽然非法,但是却很普遍并且经常会以按摩作为掩护。很多温泉和桑拿场所都提供“全套”放松服务。在一些小地方,只要您看到粉红色的灯光和穿短裙的女孩子,那么很有可能他们提供的就不仅仅是按摩,而且她们也不怎么会按摩。很多发廊也是这样,既是按摩场所也是妓院。
没有粉红色灯光的地方一般都提供很不错的按摩服务,而不提供性服务。如果某个按摩场所的广告中注明了是盲人按摩,那么这基本上是合法场所。
在很多按摩场所您可以小睡几个小时,甚至在那里过夜都可以。理发店一般没有可供睡觉的地方,但是您也可以在做全身按摩的时候在按摩桌上睡一会,或者在做足部按摩的时候在沙发上睡一会儿。一般费用都不会很高,这估计是在中国最便宜的过夜的方式。但是,请注意,除了带有独立包间的高端桑拿场所,在其他的按摩/桑拿场所中,您都要和那里的员工公用厕所,而且不能将您的行李锁起来。寄存行李最好的办法是把行李寄存在火车站(所有火车站都有行李寄存处),一般价格在10-20元左右。
===传统艺术===
如果您计划在中国停留的时间比较长,那么建议您学一点中国传统艺术。毕竟,人在中国本身就是学习中国传统艺术的绝佳机会,如果您对某项中国传统艺术已经略懂一二,那么通过直接向这一艺术所在国度的大师学习可以提升您的技能。很多城市都有很多知识分子接收初学者,而且不懂中文也不碍事,因为您可以通过实例或者模仿进行学习。书法现在仍然是中国人热爱的一种艺术。很多城市的书法家都用毛笔蘸水在城市公园的人行道上练习。其他的您可以参加培训班的传统艺术包括演奏中国传统乐器(您可以询问买中国传统乐器的商店,很多商店就有培训班)、中国厨艺、甚至京剧演唱。费用一般都非常合理,而且也不需要特别大量的辅助材料。唯一的要求就是要在一个地方足够久;最好不要在旅游景点参加这样的培训课程。
===武术和太极===
和中国传统文化艺术一样,有兴趣、有时间的人可以学学中国久负盛名的武术。有的武术,譬如说太极,学习的方法很简单,清晨直接去市区的随便哪个公园跟着那里的人练就可以了。您会发现那里有很多人很乐意做你的老师的。其他的武术就需要更加深入的学习了。著名的武术培训地有[[嵩山]]的少林寺和[[大理]]附近的无为寺。
===传统的消遣活动===
中国有很多可以在茶室、公共公园甚至在大街上玩的传统消遣。只要有摊子,一般都会吸引很多路人。起源于中国的策略游戏有围棋和中国象棋。麻将是一种以麻将牌作为道具的游戏,麻将在中国非常流行而且经常(也不是没有例外)都是玩钱的。各地的麻将规则不一样,所以每到一处,你都要学习新的麻将规则。麻将最有名的打法是广东麻将、台湾麻将和日本麻将。跳棋虽然不是起源于中国,但是在中国也有很多人在玩。很多中国打扑克的技艺都很精湛;邓小平先生对于桥牌的钟爱是远近闻名的。
==购物==
中国的官方货币是人民币,经常缩写为RMB。人民币基本单位是元(在纸币上写作“圆”),它的国际货币代码是CNY。所有的标记都是以元为单位的,不是¥就是“元”。在[[香港]]和[[澳门]]特别行政区人民币'''不是'''法定货币,这两地都自行发行货币。当然,香港有的地方也接受人民币,但是都是按照人民币和港币1:1的汇率来算的(截止2017年9月17日,1人民币=1.2400港元)。1人民币元=0.1581美元,1美元=6.3246人民币元(截止2018年3月20日)
{{infobox|小贴士|* 10 ''分''等于1 ''角''
* 10 ''角''等于1 ''元'',基本单位
* ''元'' 也称''块''
* ''角''也称''毛''
* 10大写为''十'',或者''拾''
* 100大写为''百'',或者''佰''
* 1000大写为''千'',或者''仟''
* 10000大写为''万''}}
元的下面是角,10角为一元,之后是分,10分为1角。分币现在基本上已经非常难看到了(可能在非常贫困的地区偶尔能看到)。一般价值10分的硬币叫做1角而不是10分。但是在口语[[漢語|普通话]]中,人们一般都说''块''而不是''元'',说''毛''而不说''角''。例如3.7元一般会被念成3块7(最后一位单位会被省略)。
在数字方面,请注意一般都会省略最后一位的单位,例如:530,会被念成五百三。而且注意在中文中有一个单位叫做''万''(十千),所以50000一般叫做五万而不是五十千。
中国的很多钱币都既有纸币又有硬币,包括很多零钱。有的地区纸币用的多一些,有的地方硬币用的多一些,但是无论纸币还是硬币在哪里都能用,根据中国法律,拒收人民币属于违法行为。角(1元的十分之一)也有纸币和两种版本的硬币。相反,一元却有硬币和两个版本的纸币(1999版人民币一元纸币底色为绿色,正面为花纹和毛泽东像,背面为杭州西湖“三潭印月”景色)。您最要会辨认不同版本的钱币。
===假币===
假币是一个很严重的问题。所有在中国待过几个月的人都会或多或少的有这方面的经历。从1元的硬币到10元、20元、50元和100元,都有假币。在中国生活的第一步是收到钱(即使是硬币)之后要仔细看看。看的时候主要要注意不同部分的质地、金线、和在不同光线下颜色的变化。如果您不懂您可以问别人,每个人都有自己的办法。
收银员在收到您的纸币后经常会仔细辨认。请不要生气,这并不表示他们怀疑您用假币。只是他们要负责任的。在您拿到零钱后也要仔细看看,特别是50元以上的。售货员有可能会想办法把他们从别人那里拿到的假币给您。
最近几年,ATM机吐假币(虽然不常见)成为一个很热门的话题。如果您担心从ATM机里拿到假币,那么请去银行柜台上,并告诉银行操作人员“我怕拿到假钱了”。一般银行人员都会理解的。
也听说有黄牛在中国边境处将假币兑换给游客,强烈建议去银行兑换货币(部分银行网点不能兑换)。
一般当您在商店或者出租车里支付50元或者100元时,您可以记住这张钱编号的最后几位。可能他会说您的钱是假的,这时候您可以保证他退回来的和您给出去的是同一张。
===货币兑换===
虽然中国现在仍然实行外汇管制政策,但是在很多国家都可以很容易换到人民币,特别是在亚洲。在中国兑换美元、加元、欧元、英镑、澳元、日元和韩元都是比较容易的。除了新加坡币之外,东南亚其他国家的货币一般比较难兑换。建议尽量到比较大的银行(比如BOC中国银行)或者授权的货币兑换点(一般高端酒店或者机场都有,但是汇率一般会有差异)兑换货币。
确实存在货币兑换的黑市,但是强烈建议您不要在黑市兑换因为在中国兑换货币时'''假币'''情况非常严重。对于在市场找到的或者银行周围溜达的黄牛一定要小心。虽然他们的汇率非常诱人,但是如果没有当地的朋友帮忙的话,'''不要'''跟他们兑换。经常会有兑换了一大笔钱之后发现拿到的大部分是假币。尽量在'''中国银行'''或者其他银行的柜台进行兑换,虽然他们的汇率相对要差一点,但是拿到假币的可能性几乎为零。
中国外汇管制很严格。在全世界的旅游景点和购物中心都很常见的私人的货币兑换点在中国却并不常见。在银行兑换货币一般需要5分钟到60分钟左右,有时候在酒店兑换会更快一点。一般就算大城市的支行都会对兑换流程很熟悉,操作的很快,而三四线城市的分行却不熟悉,操作相对要慢一些。
无论在哪里兑换,您都需要填一张表并出示您的护照。一般都要扫描您的护照并需要一份护照复印件。如果您计划带着较大金额离开中国的话,兑换收据要留好。注意,并不是每个有“Exchange”标识的银行都会给不是他们客户的人提供现金兑换服务。例如,渣打银行就只给他们的客户提供美元和港币货币兑换(但是,就算您拿到是旅游签证,开户也是可以的,而且他们的汇率要比大部分本地银行要优惠)。
用美元兑换人民币程序很简单,但是一般在兑换之前银行对您的钱看的很仔细。如果有机会在国外买入人民币的话(比如通过香港或者越南入境的话),应该在国外换,因为国外的汇率要好一些。要卖出人民币也是一样的,出中国边境之后卖出人民币的汇率也会更好一点。另外,大部分国际银行的储蓄卡或者信用卡都可以在中国的ATM机中直接支取人民币现金。但是,这样做的汇率非常不利而且手续费会非常高。建议随身带一点儿国际货币,例如英镑、美元或者日元以防您在附近找不到柜员机。
===銀行卡===
在中国接受銀行卡消費的小商鋪較為少见,多為大型消费场所接受。絕大多數接受銀行卡的商鋪均只接受中國銀聯卡。有部分较多中国以外游客受众的场所可接受 Visa/MasterCard 等国际组织通道的银行卡 ,但一般也是大型消费场所,如国际酒店,且有可能要求收取額外手續費。發現(Discover)卡與中國銀聯簽署了協議,允許於大陸地區的收銀機上作為銀聯卡使用,然而發現卡近期發行的芯片卡則可能需要多嘗試幾次或根本無法使用,且發現卡於線上並不能作為銀聯卡消費使用。雖然大來卡(Diner's club)目前屬於發現卡公司所有,但是於中國大陸並不可以作為發現卡或銀聯卡使用,覆蓋情況與美國運通(American Express)類似。
中国到处都有 ATM 机,所有的 ATM 机均接受中国银联卡,其中大部分的 ATM 也可接受 Visa/ MasterCard 卡组织的卡,部分机器也会支持 JCB/ 美国运通卡 ,中国以外发行的卡片在使用时必须在发卡方开通跨境取款功能,此外发卡方、卡组织、取款的 ATM 所属银行都有可能收取一定的手续费或兑汇费。
注意:虽然中國農業銀行、民生银行、深圳发展银行和上海银行等等許多銀行的 ATM 机上有时候会有 PLUS/ Cirrus/ Maestro 等标志,但是实际上只有个别的 ATM 机可以真正接受这些卡。而且能不能用只有您试了以后才能知道。絕對不可以依賴銀行卡作為唯一的支付與提現手段。
===移動支付===
中國的移動支付正在蓬勃發展中,類似微信支付、支付寶等基於二維碼(QR)的移動支付目前已經普及。幾乎所有接受小額支付的商鋪,甚至一些接受大額支付的商鋪,均接受至少一種使用二維碼的移動支付方式。如果您於商舖中看到一個印有上述軟體的 Logo 的二維碼,便意味著您很可能可以使用微信支付、支付寶等方式付款。随着该支付方式的发展,很多中国人已很少使用现金,甚至出门不需要带钱包了。
然而基於 NFC 技術的移動支付方式卻尚未於中國普及。虽然大部分终端已支持非接触式支付,但一般也仅限于使用银联芯片卡非接触,而不是通过手机 NFC ,即使可以使用,小型商铺的店员也会已不会使用等理由拒绝,接受 Apple Pay 的商鋪亦只能使用中国区或香港区 Apple Pay 中綁定的銀聯卡。 不过目前通过银联云闪付乘坐公共交通(城市内的公交,地铁等)已经被普及了,故在一定场合内NFC是可以使用的.
Google Pay 由于 Google 遭到封锁,故不可在银联终端上使用,即使您遇到接受 Visa/ MasterCard 的终端也不大有机会通过 Google Pay 消费,因为这些终端通常位于机场、国际酒店等大额消费场所,使用 NFC 非接是不被接受的,其他区域的 Apple Pay 同理。
截止2022年中国官方目前仍在部分地区试点数字人民币,数字人民币是与纸币一样,是中国官方承认的法定货币,具有可溯源的属性。可以实现无网络离线支付。
==饮食==
{{seealso|中華美食}}
中国有很多饭店和路边摊。如果您第一次来中国建议先尝试一下街头小吃。这一般比较便宜。
===地方菜系===
[[File:Guangzhou-Nur-Bostani-Restaurant-pseudo-bagels-0473.jpg|thumb|各种烘焙食品是中国西北穆斯林民族的饮食特点]]
*京菜:家庭面条和包子、北京烤鸭、甘蓝菜、棒极了的泡菜,不喜欢也可以极大的满足。
*宫廷菜:晚清宫廷食品,由慈禧而出名,可在北京的高端专业餐厅品尝。美食结合满族食品如独特的新奇事物如驼掌、鹿肉、鱼翅和燕窝。
*徽菜:中国八大菜系之一,特色菜品如毛豆腐,臭鳜鱼等。
*粤菜:大多数西方游客的风格在某种程度上已经很熟悉了。不是太辣,重点是新鲜煮熟的食材和海鲜。点心通常在早餐或午餐吃,是一个亮点。也就是说,正宗的粤菜在中国的各种菜系中广东的是有名的,即使在中国,他们非常广泛的定义什么是食物。
*沪菜:由于其地理位置,上海菜被认为是一个很好的混合北部和南部中国烹饪风格。最著名的菜肴是小笼包和韭菜饺子。另一个特色是“拉面”,从日本拉面和韩国碗拉面被认为是来自于此。糖通常被添加到炒的菜给上海菜味道甜甜的。
*川菜
*豫菜:即河南菜系,是对在带有中原传统文化内涵的烹饪理论指导下,运用具备中原地域特点的技术和材料所制作的菜肴、面点和筵席的总称。豫菜是中国各大菜系的渊源,被中国烹饪界称为中国八大菜系的“母菜”,有“烹饪鼻祖”和“中华厨祖”之称的伊尹便出生于河南[[洛阳]],当代豫菜是在原宫廷菜、官府菜、市肆菜和民间菜的基础上,根据中原物质条件,逐步积累演变而发展起来的。
因河南地处中原地区,其饮食文化口味因地域影响,河南北部多为面食,南部多为米饭。豫菜中一些菜名比较华丽优美,主要因为一些菜式源自于汉宋唐宫廷,有些饮食文化历史可以追溯到商周时期。
*湘菜
*潮州菜
*闽菜
*黔菜
*浙菜
*琼菜
*鲁菜:中国四大菜系之一(与川、粤、苏菜并称),选料考究,技艺精湛,主要流行与北方地区,对京津、东北等地的饮食产生影响。分为济南、孔府、胶东三支,代表菜有奶汤蒲菜、九转大肠、葱烧海参、油爆双脆、一品豆腐等。选料多为海鲜和肉类,孔府菜擅长素菜烹饪。口味偏重偏咸,擅长奶汤料理。除代表菜外,鲁菜家常菜也非常流行。
===快餐===
[[File:Xiao Long Bao by Junhao!.jpg|thumb|包子是一种很常见的食物]]
[[File:Chuan'r LED sign hanging in front of Beijing shop.jpg|right|thumb|烤串店可能会在店铺门口挂出来一个呈“串”字形状的灯]]
各种类型的中国食品都特别的快速、便宜、美味、方便。从各个城市都可以去买到吃的。[[北京]]王府井地区的小吃街是一个非常值得注意的旅游区,适合街头食品。在一些讲[[粤语]]的地区(主要是[[广东]],但不包括[[深圳]]),街头食品摊贩叫做盖宾洞,这样的企业可以发展成为一个实质性的业务,而在传统的街头食品意义上,这些摊位几乎不能“流动”。全国各地的快餐包括:
* 特别多的面包店。在中国发现的各种糖果和甜食通常作为零食销售,而不是西餐馆的餐后甜点套餐。
* 各种烤肉,包括羊肉串是非常常见的。
* 饺子,可以用来煮,蒸或油炸馄饨样物品与各种馅料。而且几乎遍布了亚洲。
* 包子,馒头里面塞满咸,里面是甜的或蔬菜馅或者肉馅。
* 馒头,可以看成是带皮的白色面包,也可以在中间加一点吃的。
* 兰州拉面,这个行业主要由回族族裔所主宰——寻找一家拥有穆斯林服饰工作人员的小餐厅,男士们戴着白色的帽子,女士们则戴着头巾。
* 在广东和其他地方则有点心,在中国的任何主要旅游目的地,您都可以找到为香港客户提供点心的人。
* 煎饼,一个鸡蛋煎饼,裹在一个带有酱汁的饼干和可选的辣椒酱。又被称为“煎饼果子”。
西方的快餐概念可以说与国内品种一样受欢迎。肯德基、麦当劳、赛百味和必胜客在中等城市及以上地区都是无处不在。汉堡王和棒约翰等中国连锁店也很普遍。这些包括德克士:鸡肉汉堡,薯条等,比肯德基便宜,有些人说得更好 - 还有(真功夫)——有更多的中国菜单。
===礼节===
尊老爱幼,文明用餐。
===买单===
在中国没有给小费的习惯,所以不需要,如果你想给服务员小费,他们可能会觉得这很奇怪;在中国使用移动支付非常方便,可以不带现金,非常方便的使用微信支付或者支付宝支付,但出门身上最好携带一些现金,以防出现意外,例如无法使用移动支付,或某些商人因过于年迈而未配备移动支付。
===在餐厅用餐===
===独自用餐===
==夜生活==
中国有很多酒吧、KTV等娱乐场所。有人说这很不安全。但是请放心,中国有全世界反应能力最快的警察制度。如果遇到危险请拨打报警电话110,警察会赶到并为你解决危险。
==住宿==
在中国只要不是偏远山区,就会有酒店。但是请注意在旅游景点,尤其是节假日时酒店价格会非常贵,高星级酒店为800<nowiki>~</nowiki>5000+元。
以上海迪士尼乐园酒店为例,(2017/09/18-2017/09/19 ,1 间房间 ,1 宾客)
9月份平常工作日价格(豪华花园景观房)为¥1,950元每晚(不含服务费)
10月份国庆假期价格(2017/10/03-2017/10/04 ,1 间房间 ,1 宾客)(豪华花园景观房)为¥2,750元每晚(不含服务费)
您可以在一些提供酒店预定服务的网站或者APP上提前查找并预定酒店,也许可以找到一些价格低廉的房间,有时候甚至可以用一百多人民币在北京住上两晚。
至于您选择的时间及其房型价格到底划不划算,就是仁者见仁智者见智了。
==学习==
{{seealso|前往中国留学}}
中國大陆主要大學有清华大学、北京大學、武汉大學、华中科技大学、南京大学、中山大学、浙江大学、上海交通大學、深圳大学、同济大学和复旦大學等。
==工作==
{{seealso|前往中國工作}}
近年来,中国增长非常之快,这有望成为世界上最大的经济体。尽管劳动力市场对于外国人的访问是困难的,然而,对于那些希望体验中国的人来说,有重要的机会。
就业机会包括英语教学,工程及跨国公司工作。
==安全==
在中国,游客的人身安全总体上可以得到保障,夜间主要街道也都基本安全,但是在人多的场合请务必保管好个人财物以免遭遇盗窃,小额的财物损失较难获得警方重视,追回的概率也不大,中国民间几乎没有枪械。中国的报警电话是110,火警是119,急救电话是120。
==医疗==
===流行病学===
除了所有旅行者均应接种的常规疫苗外,美国的疾病预防和控制中心(CDC)建议对下述传染性病原体缺乏免疫力的人士额外接种疫苗:
*大部分旅行者应接种
**甲肝疫苗(HAV)
**伤寒疫苗(Thyroid)
*部分旅行者应该接种
**乙肝疫苗(HBV),如果您可能与当地人发生性行为,或者在当地接受手术和纹身。
**日本脑炎疫苗(JE),如果您的旅程超过一个月或者您打算访问乡村地区。
**小儿麻痹症疫苗(Polio),如果您打算访问新疆。
**狂犬疫苗(Rabies),如果您可能接触犬类。
**黄热病疫苗(Yellow Fever)(中国境内并没有感染黄热病的风险,这么建议是因为中国政府强制性要求部分来自黄热病疫区的旅客接种,否则不让过关。如果您并非来自疫区,可以不接种)
**疟疾疫苗(Malaria),如果您前往亚热带地区。
有些疫苗从首次接种到免疫获得可能长达6个月,因此请提前接种。由于访问东亚国家时,大量推荐疫苗都是重复的,所以尽早接种,就算去不了也不亏,这免疫力以后还能用得上。
在新冠疫情影响下,注射满全流程新冠疫苗在入境前也是必须的.
==举止==
通常的'''[[用电|电力系统]]'''使用是220伏/50赫兹。一般都能支持两针欧洲和北美,以及三针澳式插头。但是,请仔细阅读设备上的电压信息,以确保它们在插入之前接受220V(两倍于许多国家使用的110V)的电压,否则可能会导致倦怠和对诸如吹风机和剃须刀等设备的永久性损坏。可以处理各种插头形状(包括英国)的通用延长线被广泛使用。
中国是右行制国家,这意味这车辆、行人、电车、火车等均应当靠右行驶——这和一些地方不一样。
对于比较长的街道的名称通常以中间词语表示街道的一部分。例如,白马街或白马路可以拆分为白马路、白马北路、白马中路和白马南路。除此之外,也可以使用“东”或者是“西”。
然而,在一些城市,这些名称并不表示某条街道的一部分。例如在[[厦门]],湖滨北路和湖滨南路平行,在湖的南北两侧东西走向。在[[南京]],中山路,中山北路和中山东路是三条独立的主要道路。
'''洗衣'''服务可能价格昂贵或难以找到。在一些高端酒店,每件衣物洗涤费用为10-30元人民币。一些地区的廉价酒店甚至没有洗衣服务,但在其他地区,如沿着[[云南]]的旅游线路,这项服务是常见的,而且往往是免费的。在大部分地区,除大城市中心地区外,您可以找到可以洗衣服的小商店。在大门上寻找的标志是洗衣,或者是从天花板上垂下来的衣服。成本约为每件2-5元人民币。在即使是最小的城市,干洗店网点的分布也广泛,可以洗衣服,但在某些地区,您将被卡在手洗衣服这个环节,这是耗时且令人厌烦的,所以可能选择快速干燥的面料,如聚酯或丝绸,如果你确实找到一家洗衣店的酒店,通常他们会把所有的衣服放在一起洗,甚至与酒店的其他物品一起洗,所以最好用携带浅色的衣服。
[[File:Jianshui - old city - P1370481.JPG|thumb|用来销售的传统烟管]]
禁止在公共建筑和公共交通工具上'''吸烟''',除了一些餐厅和酒吧(包括KTV)——其中许多是很明显的吸烟场所,虽然许多跨国连锁餐厅禁止吸烟。这些禁令在全国范围内得到执行。一般来说,[[上海]]和[[北京]]的吸烟法律是最严格的,而在其他地方则更为严格。许多地方(特别是火车站,医院,办公楼和机场)都会设有吸烟室,一些长途列车可能在每辆汽车的尽头都有吸烟区,'''中国高速铁路列车全列禁烟'''。非吸烟者的设施往往很差;在大多数餐馆,酒吧和酒店除了高端设施外不会有非吸烟区,尽管许多现代化的建筑物都有排烟系统,通过天花板通风口将香烟烟雾吸出房间——这意味着烟雾不会在室内飘着。
{{Cquote|我可以吸烟吗?}}
{{Cquote|禁止吸烟!}}
中国的公众假期值得关注。尽管在最受欢迎的旅游景点中,你永远不会独处,其中包括特殊山区,周末和公众假期的热门徒步旅行,但由于当地旅游业的关系,这些地区可能会接近无法通行。你可能计划作为一个沉思的徒步旅行,可能会变成一个多小时的队列!了解国庆节日期并据此计划([[w:中华人民共和国节日与公众假期|参见]])。
关于香港、台湾的政治和所属话题,请不要发表您的意见,也不要与人谈论——这涉及到较大的政治争议。
==通讯==
=== 电话 ===
{{seealso|中国大陆电话区号}}
中国大陆有四大国营电信运营商:中国联通、中国电信、中国移动和中国广电。中国联通和中国电信涵盖移动电话和固定电话业务,中国移动只有移动电话业务(和铁通合并后也有固定电话业务),为大陆规模最大的移动运营商。不过近年来也有虚拟运营商开始提供移动通信服务,这类运营商使用的170、171、173、176号段都是虚拟运营商的专用号段。中国广电成立于2014年5月28日,是唯一国家级智慧广电网络运营商、综合文化信息服务提供商、新型基础网络设施运营商和基础电信业务运营商。
中国比较大型的酒店一般都有直拨国际电话IDD,可以拨打国际和港澳台电话。很多酒店都有网线接口、无线Wi-Fi上网、语音留言系统、视频系统等,实现了方便快捷的通讯服务。
移动通信方面,中国联通主要使用FDD-LTE、中国电信使用FDD-LTE、中国移动仅使用TD-LTE作为4G制式。各家移动运营商的信号覆盖都很广。
电信诈骗案件在中国时有发生,如果你接到了陌生的电话或短信,千万不要向对方转账或付款。
=== 网络 ===
中国电信和中国联通是中国境内两大拥有全国性骨干网的典型运营商,因此相对于其他小型运营商而言,这两家的网络性能较好,同时价格也更高。大部分宾馆客房里都有互联网连接,不少机场、商场、饭店等公共场所也有无线网络覆盖,不过它们大多需要经过手机短信验证等步骤才能使用。
中国的网络审查很严格,连接部分外国网站时可能会遇到长城防火墙(GFW)封锁,Facebook、 Twitter、 Google(包括维基百科,YouTube)等服务也在其中(见[[w:中华人民共和国被封锁网站列表|已被大陆封锁的网站]]),不过有些技术(VPN)可以绕过此类封锁,建议有需求的游客提前下载好相应软件并做好配置(Google Play 商店 在中国也被封锁,因此 Android 设备用户须提前准备)。值得注意的是,私自使用VPN浏览被封锁的网站在中国大陆系违法行为,但警察通常不会对使用者进行处罚。
{{usablecountry}}
{{位于|东亚}}
{{geo|39|103|zoom=4}}
{{related|在中國駕駛}}
o45049qfcbu2xcw0t748fbsvusg9csx
183851
183850
2022-08-04T12:43:23Z
Taxi passenger
15345
/* 网络 */
wikitext
text/x-wiki
{{pagebanner|China_Banner_2.jpg|disambig=中國}}
{{quickbar
| image=Gran Muralla China5184.JPG
| caption=The Great Wall of China.
| location=LocationPRChina.png
| flag=Flag of the People's Republic of China.svg
| capital=[[北京]]
| government=Single Party Socialist Republic
| currency=人民币/港幣/澳门元
| area=(中華人民共和國)9,596,960 km<sup>2</sup>
| population=(中華人民共和國)1,411,778,724(2020年官方统计值)
| language=官方語言:[[普通话会话手册|現代標準漢語(普通話/國語)]]<br>汉语地區語言:[[吴语会话手册|吳語]]、[[廣東話會話手冊|粵語]]、[[福州话会话手册|閩東語]]、[[閩南語會話手冊|閩南語]]、[[湘语会话手册|湘語]]、[[赣语会话手册|贛語]]、[[客家语会话手册|客家語]]等<br>其他少數語言:[[维吾尔语会话手册|维吾尔语]]、[[哈萨克语会话手册|哈萨克语]]、[[蒙古语会话手册|蒙古语]]、[[藏语会话手册|藏语]]、[[朝鲜语会话手册|朝鲜语]]、[[柯尔克孜语会话手册|柯尔克孜语]]、[[壮语会话手册|壮语]]
| religion= 道教 30%、佛教 11-18%、基督教(新教、天主教)3-5%、伊斯蘭教 1.5-2%、三教、無神論 53-59%.
| electricity=220V/50Hz (澳大利亞2/3腳插頭)
| callingcode=+86
| tld=.cn
| timezone=UTC +8
}}
{{COVID-19 box|[[2019冠状病毒病|新型冠状病毒感染的肺炎]]在中国大陆境内的流行高峰期已经过去,但中国政府仍然实施“动态清零”政策,部分城市有封锁措施,部分公共场所可能关闭,防疫政策未完全取消。为了阻断境外输入病例,境外来华人士需接受为期10天(7天集中隔离医学观察+3天居家健康监测)的隔离观察,[[2019冠状病毒病 (中国)|在中国大陆境内旅游]]也需要遵循当地的防疫政策。前往已开放的室内公共场所,请佩戴口罩并配合出示[[w:健康码|健康码]]、登记个人信息等要求。
具体请见[[2019冠状病毒病 (中国)]]}}
{{Disclaimerbox|'''注意:'''<br/>
#本文帶有歐美國家的地域中心傾向,請協助修正。<br/>
#由于现实原因,本文大多數內容'''僅僅涉及中国大陆地区''';關於其他地區,請見:[[香港]]、[[澳门]]及[[台湾]]。<br/><br/>
注:某些習慣上,'''中國'''有時候只指'''不包括香港、澳門地區的中華人民共和國實際領土'''。[[香港]]和[[澳门]]都是中華人民共和國的特别行政区,实行“一个国家,两种制度(一国两制)”,与現今中国大陆的社會主義不同;台湾本岛、[[金门]]、[[马祖]]和[[澎湖]]被中華民國政權管轄至今。这样编写,维基导游并不代表'''任何一方的政治立场'''。<br/>
}}
'''中国大陆'''是由'''中华人民共和国'''实际統治的区域。中华人民共和国位于[[东亚]],是世界人口最多,面积第三或第四大(官方声称是第三大)的主权国家。有14个陆上邻国,分别为[[东亚]]的[[朝鲜]]和[[蒙古]],[[南亚]]的[[阿富汗]]、[[巴基斯坦]]、[[印度]]、[[尼泊尔]]、[[不丹]],[[东南亚]]的[[缅甸]]、[[老挝]]、[[越南]],[[中亚]]的[[塔吉克斯坦]]、[[哈萨克斯坦]]和[[吉尔吉斯斯坦]],以及[[北亚]]横跨欧亚大陆的联邦制国家[[俄罗斯]]。
==了解==
中华文明五千余年的悠久历史中,既经历过长期的太平盛世,也经历过无数次巨大的动荡和革命。很多诸如马可波罗和戈特弗里德·莱布尼茨这样的西方人士通过丝绸之路和过去几个世纪更多的文化交流方式对中国产生了巨大的兴趣,中华文明的深邃和伟大让他们深深地着迷。同时,现今的中国也是世界上最具有影响力的国家之一,中华文明将继续让全世界的旅行者兴奋着迷。
===历史===
{{seealso|中國歷代首都之行}}
若想知道中国的历史,请点选[[w:中国历史|中国历史]]及[[w:中华人民共和国历史|中华人民共和国历史]],那两大维基的条目有做详尽的历史写照。中国历经过的时期有:史前时期、传说时期、夏商周时期(含春秋、战国时代)、秦汉时期、魏晋南北朝、隋唐五代时期、宋辽夏金元时期、明清时期、中华民国大陆时期及现今的中华人民共和国,至今约有五千来年的历史。
===政治===
中华人民共和国是一个目前由中国共产党执政的国家,而共产党作为执政党可以领导政府,共产党的最高负责人为总书记,一般也是国家的实际最高领导人。国家主席是礼仪性的国家元首,一般都由总书记兼任。中国共产党中央军事委员会主席是最高军事统帅,但一般和国家主席、中国共产党中央委员会总书记是同一个人,所以中国共产党中央委员会总书记是实际上的最高统帅。政府由行政部门——国务院、一院制的立法机构和最高权力机构——全国人民代表大会(但是实质上,几乎每项法案的提案都要经由中国共产党中央政治局讨论,是实质上的议会,相当于英国的下议院、美国的众议院;经中央政治局通过后,再提交到全国人民代表大会或其常设机构——全国人民代表大会常务委员会通过,才能形成正式法案),还有国家军委、最高人民法院和最高人民检察院组成。中央委员会总书记既是国家最高领导人,拥有治理国家的全部权利,身兼国家军事主权和政治主权。现任中共中央总书记兼国家主席是习近平,国务院总理是李克强。
中华人民共和国的行政规划,中华人民共和国共有34个省级行政区域,包括23个省,5个自治区,4个直辖市,2个特别行政区。
包括:北京市,天津市,上海市,重庆市,河北省,山西省,辽宁省,吉林省,黑龙江省,江苏省,浙江省,安徽省,福建省,江西省,山东省,河南省,湖北省,湖南省,广东省,海南省,四川省,贵州省,云南省,陕西省,甘肃省,青海省,台湾省,内蒙古自治区,广西壮族自治区,西藏自治区,宁夏回族自治区,新疆维吾尔自治区,香港特别行政区,澳门特别行政区。一般每个一级行政区下都设有若干地级市等二级行政区,但四个直辖市和两个特别行政区下不设地级市。省政府拥有各自省内事宜的权力,而自治区政府比一般省政府都更大的自治权,但现实中一般不认为自治区和省有太大差别,所有自治区的政府除了可以使用自己独立的民族语言外,并无其他独立的司法和行政权。
与上述地区相比,香港特别行政区、澳门特别行政区和台湾省都有相对独立的政府部门,但是大陆政府主张它们是中华人民共和国的一部分。实际上,这是一个长久的争议话题,包括港独、台独、藏独等均是政治敏感话题,请不要与本地人谈论这些问题,以避免争吵。
===民族和习惯===
中国是一个有着不同文化、语言、习惯和经济水平的充满差异性的国家。经济发展状况的差异在全国各地尤为明显。但自从1980年代以来,邓小平政府宣布改革开放,开始实行社会主义市场经济并推行经济体制改革。中国大陆近年至2010年,GDP超过72000亿美元,已经成为美国之后的世界第二经济大国,普遍认为中国目前仍然是世界上发展速度最快的经济体,但是人均国民生产总值仍位于世界中等水平(第89位),并逐渐受到资源限制和贫富差距加大的制约。中华人民共和国省份中,广东为GDP最高的第一强省,浙江为人均收入最高的第一富省。中国的贫富差距正在日益趋于平均,截止2016年中国国内以几乎消灭贫困。所有乡村(包括大山深处的村庄)全部铺设了现代化道路,设有路灯。
这样一个幅员辽阔的国家,文化的多样性自然就不足为奇了。中华人民共和国官方承认的民族有56个,最大的民族是汉族,大约占人口总数92%。即便是汉族,也有很多相互之间不能理解的地方方言(例如粤语、吴语、客家语等);大部分语言学家把这些方言归类为基本都使用同一套中文文字的不同语言。很多少数民族也都有他们各自的语言。和大部分人所认为的不同的是,并没有单独统一的汉文化,虽然他们都有共同之处,比如儒家和道教思想,汉族本身的区域性差异也是非常巨大的。很多习俗和神灵都是有着明显的地域(有时候甚至村与村都不一样)特征的。春节和其他全国性的节日在各地也有着很大的不同之处。很多和婚礼、葬礼、迎接新生儿有关的习俗也都大有不同。总体说来,现代的中国社会没有明显的宗教倾向,并且在日常生活的背后还是隐藏着中国的传统文化。在少数民族中,壮族、满族、回族和苗族人口是最多的。其他主要的少数民族包括:朝鲜族、藏族、蒙古族、维吾尔族、吉尔吉斯人甚至还有俄裔。事实上,中国是除了韩国和朝鲜之外朝鲜族人口最多的,而且中国的蒙古族人数比蒙古共和国的蒙古人都多。很多少数民族都有不同程度的语言和风俗的流逝。
在海外部分中国人的行为或许不能被接受:
* 吸烟:几乎所有地方,包括有“请勿吸烟”标示的地方,包括健身俱乐部、足球场甚至医院,都有人在角落吸烟。北京现在不允许在大部分餐厅吸烟,也很少有餐厅会有吸烟区域。对于公共场合禁烟,各地执行程度不一。在一些并不高档的场所,一般都没有摆设烟灰缸。在中国,民航客机和高速铁路列车是对禁烟执行的最为彻底的公共场所。如果您所在的国家在绝大数公共场合已经进行了禁烟,那么您可能会对中国社会的禁烟力度感到遗憾。
* 盯着看:这在很多国家都很常见,但是几乎都是出于好奇而不是敌意。如果有人向你走过来然后端详你(就像看电视那样),请不要过度反应,这是没有什么害处的!少部分时间中国人看待日本人是有一定敌意的,这个国家给中国造成了不可磨灭的民族伤痕。但这部分中国人中也有人开始逐渐接纳日本人的优点。
* 喝酒:在吃饭的时候晚辈给年长的人敬酒是很常见的。别人敬酒你不接(即使是出于善意)也会被认为是很大的不尊重。
* 大声说话、吵闹或者吵架:这都很常见。这估计是您刚到中国发现的第一个现象。大声说话虽然有可能是因为说话者生气了或者在吵架,但是并不一定是这样,中国的有一部分民族因为生活中需要大声交流,所以保留下来了说话声音比较大的习惯,但如果你能提醒他小声一点,只要能听得懂你的语言,所有中国人都会去注意自己的言行。在中国诸如打架这样的暴力事件并不常见,但是也会发生。如果发现这样的事情,请离开,不要参与。在中国几乎从来没有人将外国人做为攻击的目标,只要作为外国人的您不是十分过分,那么一般中国人都是非常尊重您的。如果您在乘长途汽车或者火车时无法接受这种现象可以寻找工作人员协助处理。
有些长期居住在中国的外国人说这些现象日益恶化,而有些人说的却正好相反。通常来说,有可能是因为有时大量对于城市生活不熟悉的农民工涌入了城市。
总体来说,中国人还是比较爱说爱笑的,因为中国本来就有很多民族,而且还有很多从其他地方来的外来人,所以他们也习惯了以不同的方式处理事情。确实,中国人走到一起的一个常见话题之一就是讨论各自方言之间的异同。他们都很习惯打手势,而且对于非语言的笑话或者双关语反应得很快。中国人非常喜欢小孩,对他们很宠爱,并且关心得无微不至,这是中国人民对生命的尊重,孩子是人类的未来。如果您有小孩的话,也一起带上吧!
====数字习俗====
对于大部分中国人来说3、6、8、和9是吉祥数字。
* “三”意味着三阳开泰,三阳预示着福、寿、禄三路神仙。
* “六”代表着六六大顺。很多人都选带六的日子来结婚,比如说6号,16号或者26号。
* “八”(bā)听起来像发(fā),所以很多人都相信八是和财运联系在一起的。所以,2008年的北京奥运会选在2008年8月8日开也没有什么好奇怪的了。
* “九”被认为有长长久久的意思,并且在中国人的思想中为最大。
* “四”(sì)对大多数中国人来说是一个忌讳,因为发音听起来像“死”(sǐ)。所以在中国的一些大型商场、住宅里面,索性直接跳过4号楼,3号楼的下一号楼是5号楼。
* “73”、“84”在中国老人中也是比较忌讳的两个数字。因为在中国古代的圣人中,孔子是在73岁时去世的,孟子是在84岁时去世的。
* “250”在中国大众中也是一个特别不受欢迎的数字。人们常把说话不正经、办事不认真、处事随便、好出洋相、脑袋很笨的人叫做“二百五”,是用来骂人的脏话。
* “38”多指比较八卦、啰嗦、嫌人的女人,也可以指有这些特征的像女人一样的男人,也是用来骂人的脏话。
* “2”是指对方极为愚蠢,笨蛋的脏话,主要用于北方地区。
* “18”,中国有“十八层地狱”一说,部分住宅的18层用17A代替或做其他用途。
总体而言,中国人喜欢谐音。有时“四”也可以是吉祥数字。很多人在2013年1月4日注册结婚证,因为那一天听起来像是“爱你一生一世(201314)”。
==== 送礼习俗 ====
{{cquote|礼尚往来,往而不来非礼也,来而不往亦非礼也。}}
说的便是中国人们的礼物交换。中国自古以来就有“礼仪之邦”之称,礼被认为是中国传统文化的核心,是中华民族宝贵的精神财富。“礼之用,和为贵”实际上揭示了中国传统礼的本质精神。邓云乡著《红楼风俗谭》把其中的送礼分为八类,概括了送礼的大体类型:
# 纯属友谊情感的馈赠。如第三十一回写史湘云送姐妹们绛纹石戒指,东西虽小,但有送有收,也属送礼。
# 初次见面的馈赠,即常说的见面礼。其中有为友情的,有因礼貌的,还有另存目的的,情况较为复杂。
# 红、白喜事的送礼。娶亲、聘女、过寿是红喜事;死人是丧事,但白寿也当喜事办,叫“白喜事”。此外尚有盖房上梁、乔迁新居、做佛事等,都当喜事送礼。各种红白喜事送礼,除关系特殊者外,一般是“礼”的成分多而“情”的成分少了。
# 生日送礼,一般生日与整寿祝寿的礼不同,所送礼物也因过生日者的身分地位而有区别。
# 节礼,过年、元宵、清明、端午、中秋、冬至、腊八等大小节日都要送礼。节礼亲友之间要送,上下级之间要送;宫廷也要向王公贵戚家送,不过不说“送”,而叫“赏”。还有借送节礼来“打秋风”的,即倚仗权势,借着给富豪之家送一点不值钱的礼物(如年节送对联等),换取银钱财物等价值更重的回礼,其送礼为名,图利是实。
# 送土特产,过去叫“馈送土仪”。古代旅行不易,长途跋涉到外地,总要带些地方特产送礼。如《红楼梦》第十六回写黛玉由江南回来,“将些纸笔等物分送与宝钗、迎春、宝玉等”,也属于这一类。
# 穷富亲友之间的礼物。如刘姥姥和荣国府之间的礼物往来,虽然刘姥姥只送了点瓜果干菜而却得到了更多的回礼和资助,但其性质不同于“打秋风”、敲竹杠。
# 钻营的送礼。即以送礼为手段去结交权贵,拉拢关系,进而达到投机钻营的目的,得到更大好处。这在政府的治理之下,逐渐减少了。
除此之外:
* 中国人忌讳送伞,因为“伞”(sǎn)谐音“散”(sàn)。
*在中国也尽量避免送鞋,特别是情侣之间。因为送鞋代表着分离,通常会用作分手礼品所用。
* 在中国,给人送礼千万不能送钟(尤其是给老人和病人),因为“送钟”在汉语中与“送终”(sòngzhōng)读音相同。
* 送水果时,不能送梨,因为中国人不喜欢分离。而“梨”与“离”(lí)同音。
* 中国人喜欢带有蝙蝠图案的物品,“蝠”与“福”(fú)同音。
* 中国人不会当着客人的面打开礼物,必须由收礼者打开,或者等到送礼人离开时才能打开。否则会被认为是不礼貌的行为。这与西方不同。
==== 做客习俗 ====
* 一般不用提前通知主人,但要接受别人的邀请,否则将被视作无礼。
* 在每个地区,都会有相应的礼节与忌讳,请入乡随俗。
===气候和地形===
由于中国地域广袤,所以气候会复杂多样,从南方的热带地区到北方的亚北极。[[海南]]岛的纬度和牙买加大致相同,而[[哈尔滨]],中国北方最大的城市之一,则和蒙特利尔的纬度和气候相当。中国北方四季分明,夏天炎热,冬天寒冷。而南方气候就会更加温润。越靠近西北气候越干燥。一旦您离开中国东部,踏上壮丽的西藏高原或者甘肃和新疆的草原,那么您会领略到那里的土地很辽阔。
在计划经济时代,规定在秦岭淮河以北地区可以供暖,而长江以南地区不能供暖——这意味着像上海、南京这样的城市,虽然温度经常低于零度,但是依然没有暖气。这一规定虽然早就失去了原来的作用了,但是影响还是显而易见的。总体说来,中国人暖气使用较少,建筑的隔热也较少,在相同的天气下,中国人比西方人穿得厚。在学校、商场或者办公楼,就算房间里面有供暖,过道也是没有的。很少有双层玻璃窗。学校的老师和学生在教室都穿冬装。空调虽然日渐普遍,但是过道同样没有,并且经常都是门窗大开。
中国的地形范围很广,内陆有山脉、高原,中部和西部有戈壁。东部则以平原、三角洲和丘陵为主。广州和香港周围的珠三角地区和上海周围长三角地区是全球经济的动力中心,还有北京周围的华北平原和黄河流域。[[珠穆朗玛峰]]处于西藏自治区和尼泊尔的边境上,高度为8848米,是世界上最高的山峰。西北部新疆维吾尔自治区的[[吐鲁番]]盆地是中国的最低点,海拔为-154米,它也是世界陆地中仅次于[[死海]]海拔第二低的地方。
===节假日===
{{seealso|中国黄金周}}
中国每年有六个重大节日:
* '''农历新年'''或者春节——是农历的新的一年的开始,但不止是农历正月初一,民间从农历十二月(被称为腊月)廿三(或廿四)到正月十五,公历一月底到二月中旬。春节是中国全民最大的节日,所有民族都会一同庆祝。相当于欧美国家的圣诞节。
* '''清明节'''——一般在4月的4-6日间,或者叫扫墓日,这一天所有人都去给自己的先人扫墓并送上祭拜品。通往公墓的交通在这一天会非常拥堵。
* '''劳动节'''——5月1日
* '''端午节'''——农历的五月初五,一般在公历的5月到6月之间。这一天人们要赛龙舟、吃粽子。
* '''中秋节'''——农历八月十五,一般在公历10月份。中秋节是中国仅次于春节的隆重节日。中秋节起源于上古时代,普及于汉代,定型于唐朝初年,盛行于宋朝以后。中秋节是秋季时令习俗的综合,其所包含的节俗因素,大都有着古老的渊源。中秋节以月之圆兆人之团圆,为寄托思念故乡,思念亲人之情,祈盼丰收、幸福,成为丰富多彩、弥足珍贵的文化遗产。在这天大家会一同食用月饼,又叫月团、丰收饼、宫饼、团圆饼等,是古代中秋祭拜月神的供品。月饼最初是用来祭奉月神的祭品,后来人们逐渐把中秋赏月与品尝月饼,作为家人团圆的一大象征。
* '''国庆节'''——10月1日,是为了庆祝1949年新中国成立。
春节和国庆节一般假期都不止一天;几乎所有工人春节假都有至少一星期,有的甚至有两星期或者三星期,学生会放四到六周寒假。国庆放假一般一星期。
'''春节'''期间一般都很忙。这不仅仅是最长的假期,而且也是传统走亲访友的时间。这一段时间,整个国家基本上都处于休息状态。基本上所有外出打工的人都会回家。这几乎是他们回家的唯一机会。人人都想回家,中国人口众多!在春节期间,很多商店都会关门好几天、一周,甚至更久,因此,如果您在中国大陆没有亲戚或者好友,那不建议您在这一段时间去中国旅游。
在七月初的中国大陆,会有大批大学生放假回家(约两千多万!),然后在八月底他们又要返校,这段时间从东部沿海地区到四川、甘肃、西藏和新疆的交通格外拥堵。
如果要列出一个中国节日的完整清单的话,那么这个清单就会很长,因为很多地区和民族都有他们独特的地方性节日。以下是上面没有提到的但是同样是非常重要的节日:
* '''元宵节'''(或者上元节)——农历正月十五,紧随春节,一般在公历的二月到三月。在很多城市,例如泉州,全市上下都会被装点上各式各样的灯笼。
* '''七夕'''——农历七月初七,是中国的情人节。
* '''中元節'''——农历七月十五,又称“鬼节”。
* '''重阳节'''——农历九月初九,一般在公历的10月份。
* '''冬至'''——12月22日或者23日。
除了以上的节日,中国很多地方,特别是大城市,也过西方的节日。在圣诞节期间,大街小巷都能听到圣诞颂歌,大部分都是英文的,也有中文版本的。很多商店都会进行装饰,有的店员会穿上圣诞的衣服。情人节期间,很多餐馆都会推出特殊的晚餐。中国大陆的基督徒也会在政府批准的新教和天主教教堂举行礼拜或者弥撒。
===书籍===
'''旅游篇:'''
* '''马可.波罗游记''',作者马可.波罗 - 威尼斯旅行家在中国的旅途故事(''参阅:'' [[On the trail of Marco Polo]])
* '''Dialogues Tibetan Dialogues Han''',作者:Hannü (''ISBN 9789889799939'')
* '''Behind the Wall- A journey through china''',作者:Colin Thubron. Thubron重述了他1987年在中国从北京到嘉峪关的旅行。
'''文学篇:'''
* '''《大地》''',作者赛珍珠 - 关于20世纪世纪之交时中国农民生活的经典之作,赛珍珠点燃了20世纪30年底美国公众对于中国的兴趣。赛珍珠女士关于中国的作品使她获得了1938年诺贝尔文学奖。
* '''《三国演义》''' - 中国经典名著,讲述了汉朝末年三国时期群雄并起的年代中的英雄豪杰。以对于兵法和政治策略的描述见长。四大名著之一。整个东亚地区,不断有关于这一题材的电视、电影、动画和游戏。
* '''《水浒传》''' - 一个关于在宋代时期居住在淮河流域的人和腐朽的政府相抗衡的故事。以主角们对于现实统治的反抗而著称。四大名著之一。
* '''《西游记》''' - 可能是最出名的中文小说,关于唐僧在孙悟空、猪悟能(八戒)和沙悟净的协助下西天取经的玄幻小说。以出色的想象力见长。四大名著之一。
* '''《红楼梦》''' - 贵族家庭三家人的恩恩怨怨。以对中国贵族家庭生活的入微描写而见长,被认为是中国文学的顶尖之作。四大名著之一。
* '''《红高粱家族》''' - 背景是民国时期的山东高密,男女主人公历经曲折后一起经营一家高粱酒坊。但是在日军侵略战争中,除男主人公(姜文扮演)及幼子外,女主人公和酒坊伙计均因参与抵抗运动被日本军虐杀的故事。作者莫言获得2012年诺贝尔文学奖。
'''历史篇:'''
* '''《紫禁城的黄昏》'''作者:R.F. Johnston (''ISBN 0968045952'')。Kindle上也有。Johnston(庄士敦)是历史上唯一一位被允许进入小朝廷的外国人,他生于英国,是皇上的老师。庄士敦身居高位,在紫禁城和颐和园都住过。《紫禁城的黄昏》是对于他亲眼所见的重大事情的陈述。
* '''《追寻现代中国》'''作者:Jonathan Spence - 是一部由耶鲁大学教授撰写的1644年以后的中国历史。
* '''《万历十五年》'''作者:黄仁宇 - 描述了中国明朝的一个多事之年。它是一部关于这个时期的最著名的史学著作。
* '''《中国新史》'''作者:John K. Fairbank - 一名美国著名学者的最后一部著作,它对现代汉学有着深远的影响。
* '''《剑桥中国史》''' - 剑桥大学出版社出版的一个系列,包括了早期和现代中国历史。这是最大最全面的关于中国历史的英文著作。
* '''《开放的帝国:1600年前的中国历史》'''作者:Valerie Hansen - 详细地描述了从商代到明朝中国历史、文化、社会经济的发展。
* '''《1421中国发现世界》'''作者:Gavin Menzies (''ISBN 0553815229'') - 关于中国对于探索世界并绘制世界地图所作出的努力,这本书颇有争议。有意思的是,本书暗含中国是发现新大陆的第一个国家,而各界对这一观点都表示批评的态度,并指出这是中国学术界的臆想。
* '''《北京的六分仪》'''作者:衞周安 - 总结了关于中国比想象中开放而且并不如想象中排外的近代思想。
* '''《南京大屠杀》''' 作者:Iris Chang (''ISBN 0140277447'') - 被世人遗忘的二战大屠杀。
* '''《拉贝日记》''' 作者:John Rabe - 对于二战中日本军人所犯罪行和Rabe最终成功拯救大约250000无辜生命的第一首描述。
* '''《红色中国布鲁斯——从毛到现在,我的长征》'''作者:黄明珍,加拿大环球邮报记者。概述描述了他作为第一个外国交换生在文革后的中国生活以及他一直到20世纪90年代中期作为一名记者在中国的生活经历。
===电影===
*贝纳多·贝托鲁奇 - '''《末代皇帝》''' (1987)
*张艺谋 - '''《大红灯笼高高挂》''' (1991)
*陈凯歌 - '''《霸王别姬》''' (1993)
*张艺谋 - '''《活着》''' (1994)
*吴子牛 - '''《南京1937》''' (1995)
*吴天明 - '''《变脸》''' (1996)
*张艺谋 - '''《有话好好说》''' (1997)
*谢晋 - '''《鸦片战争》''' (1997)
*张扬 - '''《洗澡》''' (1999)
*冯小刚 - '''《没完没了》''' (1999)
*张艺谋 - '''《一个都不能少》''' (1999)
*王小帅 – '''《十七岁的单车》''' (2001)
*张艺谋 - '''《千里走单骑》''' (2005)
*吉安尼·阿米里奥 - '''La stella che non c’è''' (《消失的星星》) (2006)
*张元 - '''《看上去很美》''' (2006)
*李仁港 - '''《三国之见龙卸甲》''' (2008)
*罗杰·斯波蒂伍德 - '''《黄石的孩子》''' (2008)
==地区==
一般情况下,中国被分作了七大地理区域,分别为华北、东北、西北、华东、中南和西南,这里并没有采用这样的划分方法,而是做了一些调整,使之更适应于旅行者。由于现实原因,这里只包含了中国大陆。
{{Regionlist
| regionmap=Map of China (zh-hans).png
| regionmaptext=中国大陆地理分区(此图不含[[南海诸岛]])
| regionmapsize=500px
| region1name=[[中国东北|东北]]
| region1color=#d5dc76
| region1items=[[辽宁]]、[[吉林]]、[[黑龙江]]
| region1description=历史上被称作满洲,而现在被称作东北,包含了“老工业区”城市、广阔的森林、漫长多雪的冬天。
| region2name=[[华北]]
| region2color=#b383b3
| region2items=[[山东]]、[[山西]]、[[内蒙古]]、[[河南]]、[[河北]]、[[北京]]、[[天津]]
| region2description=黄河流域,中华文明的摇篮和历史中心。
| region3name=[[中国西北|西北]]
| region3color=#71b37b
| region3items=[[陕西]]、[[甘肃]]、[[宁夏]]、[[青海]]、[[新疆]]
| region3description=长安,中国1000年来的故都,丝绸之路向西延伸横跨沙漠、山脉、草原游牧民族地区和伊斯兰地区。
| region4name=[[中国西南|西南]]
| region4color=#4da9c4
| region4items=[[西藏]]、[[云南]]、[[广西]]、[[贵州]]
| region4description=异国情调、少数民族、壮丽的景色和背包客的天堂。
| region5name=[[华南]]
| region5color=#a78379
| region5items=[[安徽]]、[[四川]]、[[重庆]]、[[湖北]]、[[湖南]]、[[江西]]
| region5description=长江流域、农场、山区、河流峡谷、温带和亚热带森林。
| region6name=[[中国东南|东南]]
| region6color=#ffd0d0
| region6items=[[广东]]、[[海南]]、[[福建]]
| region6description=传统贸易中心、强大的制造业与海外华人的祖籍。
| region7name=[[华东]]
| region7color=#d56d76
| region7items=[[江苏]]、[[上海]]、[[浙江]]
| region7description=“鱼米之乡”(相当于中国的“牛奶和蜂蜜的土地”),传统的水乡,和当代中国的主要经济中心。
}}
== 城市 ==
中国有许多著名的大城市。
* [[北京]],中国首都和文化中心,2008年奥运会和2022年冬奥会的举办城市。金、元、明、清、中华民国(北洋政府时期)等五个朝代在此定都,因此分布着大量的历史古迹。
* [[天津]],紧邻北京市的城市,有很多西方国家曾在此设立租界,因而拥有大量的西洋历史建筑,海河的夜景以及各式各样的桥梁是天津景观的特色。北京到天津的高速铁路车程约30分钟。
* [[上海]],中国人口最多的城市和经济中心,富有很多购物场所。
* [[南京]],“六朝古都”“十朝都会”,一个有很多历史古迹的地方,江苏省省会。
* [[苏州]],一座具有千年历史的古城,有着很多中式的园林。
* [[杭州]],“上有天堂下有苏杭”,著名的丝绸产地之一。
* [[郑州]],“绿城”,华夏文明发祥地,是轩辕皇帝的故里,河南省省会,具有少林寺等众多景点。
* [[西安]],“十三朝古都”,兵马俑、华山等旅游景点世界闻名,陕西省省会。
* [[厦门]],福建省沿海的滨海城市。
* [[大连]],辽宁省的滨海城市,世界花园城市,经济发达。
* [[青岛]],山东省的滨海城市,经济发达。
* [[广州]],中国南方最发达的城市之一,岭南地区的文化中心。
* [[深圳]],中国南方经济最发达的城市之一,以金融业和高科技产业而闻名,但旅游资源匮乏,与[[香港]]接壤。
* [[武汉]],中国中部经济最发达的城市之一,别称“江城、东方芝加哥”,湖北省省会,有“九省通衢”的美誉。
* [[成都]],中国西部经济中心之一,中国国宝大熊猫繁育基地所在地,三国时期“蜀国”的首府。
* [[重庆]],中国西部经济中心之一,在第二次世界大战期间为中华民国的临时首都,现为中国面积最大的直辖市。
* [[桂林]],“桂林山水甲天下”,是一个非常受欢迎的旅游目的地。
* [[昆明]],“春城”,云南省省会。
* [[沈阳]],“一朝发祥地,两代帝王都”,辽宁省省会。
* [[合肥]],综合性国家科学中心,“一带一路”和长江经济带战略双节点城市,国家重要的科研教育基地,现代制造业基地和综合交通枢纽,安徽省省会,700万人口。
* [[宁波]],简称甬,世界第四大港口城市,中国大陆综合发展水平前15强中心城市,长三角五大都市圈中心城市之一,长三角南翼经济中心,国家历史文化名城,连续五次蝉联全国文明城市。
你可以乘坐四通八达的[[高铁]]前往上述这些地方旅游。
==其他目的地==
* [[万里长城]] - 长度超过8000公里,这个古长城是中国的象征。
* [[兵马俑]] - 中国十大名胜之一,号称“世界第八大奇迹”,被联合国教科文组织列为世界文化遗产。
* [[海南]] - 热带天堂岛屿,目前正在进行大规模的旅游开发。
* [[九寨沟]] - 以熊猫栖息地、美丽的瀑布和多彩的湖泊闻名。
* [[乐山]] - 以一整座山雕刻而成的乐山大佛而闻名(靠近[[峨眉山]])。
* [[喜马拉雅山]] - 在西藏和尼泊尔交界处,世界上最高的山脉。
* [[泰山]] - “五岳”之首,中国道教五大圣山之一,由于其历史渊源也是登山人数最多的山。
* [[西藏]] - 西藏大部分都是藏佛教教徒,有浓郁的传统西藏文化,感觉好像身处于另一个世界。
* [[吐鲁番]] - 在新疆的穆斯林地区,这一地区以葡萄、严峻的天气条件和维吾尔族文化闻名。
* [[云冈石窟]] - 这些依山的洞穴和石窟总数超过50个,石窟中有超过51000个佛像。
* [[黄山]] - 中国十大风景名胜之一,世界文化与自然遗产,同时也为世界地质公园。
==抵达==
===签证===
{{seealso|w:中华人民共和国签证政策|香港出入境手冊|w:澳門簽證政策}}
大部分访问大陆的游客都需要签证(visa)。大部分情况下,您需要在离开前从中国大使馆或者领事馆获取签证。前往香港和澳门的签证也可以在中国大使馆或者领事馆申请,但是不能和前往大陆的签证有所区分。但是,[[香港]]和[[澳门]]对大部分西方国家游客免签。
但是,这一规定最重要的一个例外是在某些机场的转机大部分机场允许乘客没有签证而在机场待24小时(前提是旅客不离开机场),但是上海浦东机场和虹桥国际机场允许没有签证停留48小时。
对于大多数外国公民,以任何理由进入中国大陆基本上都是需要签证的。然而,[[日本]]、[[新加坡]]和[[文莱]]公民可以免签证在中国大陆停留15天。此外,根据双边协议,[[白俄罗斯]]、[[格林纳达]]、[[汤加]]、[[塞舌尔]]、[[巴哈马]]、[[巴巴多斯]]、[[斐济]]、[[卡塔尔]]、[[塞尔维亚]]、[[厄瓜多尔]]和[[阿联酋]]公民可以免签证在中国大陆停留30天。[[毛里求斯]]公民可以免签证在中国大陆停留60天。上述国家的公民以免签证待遇入境后只能进行旅游、探亲访友、商务等活动。[[圣马力诺]]、[[波黑]]和[[亚美尼亚]]公民则可以以任何理由免签证进入中国大陆并停留90天。
[[香港]]和[[澳门]]的中華人民共和國籍公民访问中国大陆时需要向中国旅行社申请回乡证,中旅是唯一的授权机构。回乡证大小和信用卡相同,有效期1年,在有效期内都可以停留,也没有雇佣方面的任何限制。[[臺灣|台湾]]居民可以在[[大连]]、[[福州]]、[[海口]]、[[青岛]]、[[三亚]]、[[上海]]、[[武汉]]、[[厦门]]的机场以及在[[香港]]和[[澳门]]的中旅申请有效期为3个月的入境文件。台湾旅客必须持中华民国护照、台湾人身份证和台胞证。可以在[[大连]]、[[福州]]、[[海口]]、[[青岛]]、[[三亚]]、[[上海]]、[[武汉]]、[[厦门]]机场申请台胞证。入境费用为100元加上50元一次性台胞证。旅客出行前须查看最新的政策信息。
{{infobox|签证类型|
* '''G签''' - 中转
* '''L签证''' - 旅游、访亲
* '''F签证''' - 商务、实习、短期调研
* '''Z签证''' - 工作签、多次出入
* '''X签证''' - 6个月以上学习
}}
旅游签证申请比较容易,也不需要邀请函(商务签和工作签都需要)。一般的单次旅游签停留期是30天,有效期是三个月。双次出入境签证有效期为六个月。有的国家的游客可以拿到90天的旅游签。
可以在各地出入境管理局申请旅游签延期,需要的资料是:有效护照、签证延期申请表(含两张2寸证件照),一份您在当地派出所拿到的临时居住表。[[上海]]的进出境管理局位于浦东明生路1500号。延期需要5个工作日。
有的旅客需要双次签证。例如,如果您持有单次签证,然后您去了香港或者澳门,从那里再次返回中国大陆则需要新的签证。按照规定,在香港,多次出入境签证只能给持香港身份的人,但是相关部门愿意稍加变通,也可以给短期的相关居民(包括交换生)三个月的多次出入境签证。在这种情况下,建议直接向中国政府申请,因为有的代理人不愿意代表您提交这样的申请。
落地签只能在[[深圳]]或者[[珠海]]的经济特区申请,也只能在这些地区使用。在经由罗湖火车站(一定记住不是[[落马洲]])前往[[深圳]]时,可以获取只限于深圳使用的有效期5天的签证,申请时间不限于工作时间,很多国籍游客([[爱尔兰]]、[[新西兰]]或者[[加拿大]])的现场申请费用为160元(2007年10月的价格),但是[[美国]]游客''不能申请'',而[[英国]]游客则须支付450元。现在该签证办公室只接受人民币,请一定记得带上足够的现金。
到2013年,大部分过境旅客可以获取仅适用于[[上海]]和[[北京]]的72小时的落地签。
由于政治原因,签证政策可能会不断变化。例如:
* 作为对[[美国]]提高中華人民共和國內地游客签证费用的报复,美国国籍游客签证费被增加到140美元(旅游团为110美元)
* 香港颁发的签证一般限制在30天内,多次出入境的签证变的很难拿到甚至会拿不到。
几年之前,Z(工作签)证是长期签证。现在Z证只能在中国国内待30天;一旦您在中国,雇主须为您办理居住证。实际上,这才是多次出入境签证,您可以用它往返中国。如果您持旅游签来中国,有的签证部门会拒绝为您办理居住证明。这种情况下,您需要使用工作签。工作签只能在国外申请,因此您可能需要去香港或者韩国(请注意,因为首尔的中国领事馆不给非韩国居民办理签证,所以没有外国人等级证的游客必须到釜山)。工作签需要雇主的邀请函。有时候也可以将L签(旅游签)转为Z签(工作签),这都取决于办理签证的具体公安局和您雇主是否有足够的关系。
和中国公民结婚的外国人(见[[中国婚姻]])可以选择办理6-12个月的''探亲''签证。''探亲''签实质上是L签,但是它允许您在签证有效期内一直停留在中国。想要申请''探亲''签的人要先以其他签证进入中国,之后在您婚姻登记所在地的公安局(一般是您配偶的户籍地)办理。办理时需要带上您的结婚照和您配偶的身份证。
大部分外国人可以在[[蒙古]]的[[乌兰巴托]]办理签证。[http://mn.china-embassy.org/eng/lsfw/ 领事馆网站]。在旺季,领馆可能在中午11点之后就拒绝办理。可能会有很长的队,所以您需要来的早一点。并且,中国重大节日期间,使领馆都会休息几天。
====住所登记====
如果您住在酒店或者宾馆中,在您入住时酒店人员可能会要求看甚至要扫描您的护照、签证和入境章。
如果您住在私人住所中,理论上需要您在到达的24小时(市区)或者72小时(农村)内在当地公安局登记,但是,这条法律在现实中很少(如果一定要说有的话)有人执行,只要您不惹麻烦就行。警察会问你要:
# 您护照的复印件
# 签证复印件
# 入境章复印件
# 照片
# 您居住场所的凭证。凭证上的名字可以不是您的名字。
* 您每次来中国都需要登记(有居住证的例外-居住证持有者只需在新签证办理完后登记即可)
* 如果您不登记,有可能会受到500元以下的罚款。
* 手续比较长(3个多小时),最好带上翻译(在上海,只要您有任何形式的居住许可就不用办理登记)。
===乘飞机===
进入中国大陸的主要门户有[[北京]]、[[上海]]和[[广州]];近來許多大型城市也陸續開通洲際航線,[[武漢]]、[[成都]]、[[西安]]、[[重慶]]、[[昆明]]等;[[烏魯木齊]]因為比鄰中亞的地緣優勢,也開通了前往獨立國協國家的航班。几乎每个有一定规模的城市都会有一个国际机场,但是運營範圍以區域航線如[[香港]]、[[韩国]]、[[日本]]、[[东南亚]]為主。
{{infobox|到香港和澳门|
如果您到了香港或者澳门,有渡船可以将您直接送到其他地方,比如蛇口、[[深圳宝安机场]]、[[澳门国际机场]]、[[珠海]]和其他地方,而不用“进入”香港或者澳门。有摆渡车将旅客直接送到轮船码头,这样他们的入境地点将会在轮航码头而非机场。请注意,轮航都有不同的运行时间。如果您的航班到港比较晚的话,您可能就需要进入港澳或者直接到您的最终目的地。例如,如果从香港国际机场通过澳门轮航码头到澳门的话,则需要办理移民手续。香港码头最新消息,请参阅[http://www.hongkongairport.com/eng/index.html 香港国际机场网站]。}}
虽然很多大的航空公司都有到[[北京]]、[[上海]]、[[广州]]和[[香港]]的航班,但是票价都比较高。要想买到较实惠的票,最好还是尽早订票。在夏初和夏末时候机票特别贵,因为这个时候中国学生都要回家或者飞往全世界各地的大学。和其他车票一样,飞机票在春节期间也会很难买。
如果您居住在海外华人社区较多的城市(例如:[[多伦多]]、[[旧金山|三藩]]、[[悉尼]]或者[[伦敦]]),那您可以看看华人社区或者中国人开的旅行社有没有低价的机票。有时候,航班只在中文报纸上广告,或者中国人的旅行社的航班价格就很低。
{{seealso|亚洲的廉价航线|中国主要民用机场列表}}
'''航空公司和航班'''
中国航空公司增长迅速。空客估计中国客机数量会从2009年的1400架增长到2029年的4200架。
中国航空公司也在努力提高价格和服务上的竞争力。航空公司包括[http://www.cs-air.com/en/ 南航],[http://www.chinaeastern.co.uk/ 东方航空],[http://www.air.com.cn/en/index.shtml 国航],和[http://global.hnair.com/ 海航]。
乘客可能会更喜欢亚洲的航空公司的航班,因为这些航班的乘务人员一般都较多,而且服务也比较好。可以选择香港的[http://www.cathaypacific.com 国泰航空]。其他的航空公司比如[http://www.singaporeair.com/saa/ 新加坡航空]、[http://www.jal.co.jp/en/ 日本航空]、[http://www.garuda-indonesia.com 印尼航空]。[http://www.koreanair.com 韩国航空]在亚洲范围内的航线价格都比较好,比如从[[曼谷]]经停[[首尔]]到北美。一般转接航班都比直航,这一点要记住。韩国航空也飞在中国十几个城市,包括上海。
*[[北美洲|北美]]:[http://www.delta.com 达美航空]经由[[成田]]飞香港、北京、上海和广州,也有从底特律、波士顿、和西雅图的直飞航班。[http://www.united.com/ 联合航空]直飞航班最多,从[[旧金山]]、[[Newark (New Jersey)|纽瓦克]]、和[[Washington, D.C.|华盛顿]]直飞香港、北京和上海,与此同时,联航还拥有从旧金山直飞成都的航班。[http://www.aa.com/homePage.do 美航]从芝加哥和达拉斯直飞北京 、上海和香港。[http://www.aircanada.com/ 加拿大航空]从[[多伦多]]和[[温哥华]]直飞上海、北京和香港。
* [[澳大利亚]]:[http://www.qantas.com 澳航]有从[[悉尼]]、[[墨尔本]]、[[布里斯班]]和[[佩斯]]到香港的直航。澳航从悉尼到上海和北京,但是从墨尔本到上海只有代码共享服务。经由东南亚的可能会有便宜的航班,那里有一些打折航班飞往澳大利亚。中国南方航空有从[[布里斯班]]、[[悉尼]]、和[[墨尔本]]直飞[[广州]]的直航,从那里您可以飞往其他主要城市。东
* [[新西兰]]:只有[http://www.airnz.co.nz 新西兰航空]有飞往中国大陆的直飞航班。直飞航线到北京、上海和香港。
* [[东南亚]]:据说由于新加坡有大量华人,所有[[新加坡]]的航线网络最好,往所有的大城市和一些区域性的中心城市(比如厦门、昆明和深圳)都有航班。除了新加坡,[[吉隆坡]]、[[曼谷]]和[[马尼拉]]的航线也不错。[http://www.tigerairways.com 老虎航空]、[http://www.jetstar.com Jetstar]、[http://www.airasia.com 亚洲航空]、和宿雾[http://www.cebupacificair.com 太平洋航空]也都有从[[东南亚]](曼谷、[[清迈]]、新加坡、吉隆坡和[[马尼拉]])到中国南方城市(包括厦门、[[景洪]]、广州、[[海口]]和澳门)的低价航班。
* [[欧洲]]: 欧洲大部分大的航空公司都有到香港、北京和上海的直航(有的也飞往广州),包括[http://www.airfrance.com/indexCOM.html 法国航空]、[http://www.britishairways.com/travel/globalgateway.jsp/global/public/en_ 英国航空]和[http://www.finnair.com/finnaircom/wps/portal/finnair/jump?locale=en_INT 芬兰航空]。但是很少有到其他中国城市的航线。例如[http://www.klm.com/travel/klm_splash/index.html 荷兰航空]有从[[阿姆斯特丹]]直飞[[成都]]、[[杭州]]和[[厦门]]的航班,[http://www.lufthansa.com/online/portal/lh/de/homepage?l=en 汉莎航空]有从[[法兰克福]]到[[南京]]、[[青岛]]和[[沈阳]]的航线。
* [[台湾]]:自2008年开始,两岸恢复直航,目前台湾和中国大陆的主要城市之间每天都有直航。
'''中国和欧洲之间的航班'''
{| class="wikitable sortable" border="1" cellspacing="0" cellpadding="3"
! 航空公司!! 起飞 !! 降落 !! 航班时间 !! 出发日期 !! 经济舱 P/W !! 说明
|-
| 芬兰航空 || 赫尔辛基 (HEL) || 北京 (PEK) || 7:50 || 周一到周日 || 32" / 18" ||
|-
| 芬兰航空 || 北京 (PEK) || 赫尔辛基 (HEL) || 8:30 || 周一到周六 || 32" / 18" ||
|-
| 芬兰航空 || 赫尔辛基 (HEL) || 重庆 (CKG) || 8:40 || 一三五六 || 32" / 18" || 2012.5.9开始
|-
| 芬兰航空 || 重庆 (CKG) || 赫尔辛基 (HEL) || 9:25 || 二四六日 || 32" / 18" || 2012.5.9开始
|-
| 芬兰航空 || 赫尔辛基 (HEL) || 上海 (PVG) || 9:05 || 周一到周日 || 32" / 18" ||
|-
| 芬兰航空 || 上海 (PVG) || 赫尔辛基 (HEL) || 10:15 || 周一到周日 || 32" / 18" ||
|-
| 海南航空 || 柏林 (TXL) || 北京 (PEK) || 9:25 || 三五日 || 32" / 19" ||
|-
| 海南航空 || 北京 (PEK) || 柏林 (TXL) || 10:20 || 三日 || 32" / 19" ||
|-
| 海南航空|| 布达佩斯 (BUD) || 北京 (PEK) || 9:20 || 一五 || 32" / 19" ||
|-
| 海南航空 || 北京 (PEK) || 布达佩斯 (BUD) || 10:10 || 一五 || 32" / 19" ||
|-
| 海南航空 || 布鲁塞尔 (BRU) || 北京 (PEK) || 9:40 || 二四六日 || 32" / 19" || 从2012年4月,周五也有,2012年7月开始周一也有
|-
| 海南航空 || 北京 (PEK) || 布鲁塞尔 (BRU) || 10:35 || 二四六日 || 32" / 19" || 从2012年4月,周五也有,2012年7月开始周一也有
|-
| 海南航空 || 布鲁塞尔 (BRU) || 上海 (PVG) || || || 32" / 19" ||
|-
| 海南航空 || 上海 (PVG) || 布鲁塞尔 (BRU) || || || 32" / 19" ||
|-
| 海南航空 || 苏黎世 (ZRH) || 北京 (PEK) || 10:00 || 二四六 || 32" / 19" ||
|-
| 海南航空 || 北京 (PEK) || 苏黎世 (ZRH) || 10:45 || 二四六 || 32" / 19" ||
|-
| 荷兰航空 || 阿姆斯特丹 (AMS) || 成都 (CTU) || 9:25 || || 31" / 17.5" ||
|-
| 荷兰航空 || 成都 (CTU) || 阿姆斯特丹 (AMS) || 10:35 || || 31" / 17.5" ||
|-
| 汉莎航空 || 法兰克福 (FRA) || 青岛 (TAO) || 13:10 || 一三五 || 32" / 17.5" || 经停沈阳
|-
| 汉莎航空 || 青岛 (TAO) || 法兰克福 (FRA) || 14:25 || 二四六 || 32" / 17.5" || 经停沈阳
|-
| 汉莎航空 || 法兰克福 (FRA) || 沈阳 (SHE) || 10:15 || 一三五 || 32" / 17.5" ||
|-
| 汉莎航空 || 沈阳 (SHE) || 法兰克福 (FRA) || 11:15 || 三五日 || 32" / 17.5" ||
|}
===火车===
可以从中国周边的邻国乘火车前往中国,甚至可以从欧洲一路乘火车到中国。
* '''俄罗斯&欧洲''' - [[西伯利亚铁路]]两条线(横穿蒙古和东北),从[[莫斯科]]和北京出发,经停俄罗斯多个城市,在蒙古境内经停[[乌兰巴托]]。这条铁路的沿途风景无比绚丽,但时间过长,需要140小时左右。
* '''哈萨克斯坦&中亚''' - 从哈萨克斯坦[[阿拉木图]]可以乘火车到新疆的[[乌鲁木齐]]。在过海关时候和换另一国的轨道轮距会等很长时间。
* '''香港''' - [[香港]]和中国大陆之间有固定列车。从香港的红磡和廣州东站之间有直达列车。海关手续在各自火车站办理。此外,香港亦有直通火車前往[[上海]]、[[北京]]、[[肇慶]]、[[佛山]]。香港的港鐵从香港市区到深圳边界的两个点有直达,分別是落馬州以及羅湖,但主要的过境点在罗湖,也是深圳的主站。
* '''越南''' - 从广西南宁经过友谊关到越南。自2002年起,从[[昆明]]发出的列车就被暂停了。
* '''朝鲜''' - 从平壤到北京之间每周有四列列车。
* '''老挝''' - 从昆明到万象直接于2021年末开行的列车
===公路===
中国和14个国家之间有陆地边境;这一邻国的数量只有[[俄罗斯]]可以与之匹敌。另外,中国大陆和[[香港]]和[[澳门]]特区之间都有路上边境,由于实际原因,这些边境和国际边境一样。中国西部边境都在遥远的山区,这些地方虽然难以到达和游览,但是游客们会在那里看到让人叹为观止的美景。
====[[印度]]====
这两个国家之间的关系总是处于欠佳状态,但是最近开放了从印度[[锡金]]到藏南的亚东口岸。但是,这个入境口不对游客开放,从这两个国家访问这个口岸都需要特殊的许可证。
====[[缅甸]]====
可以通过中国[[瑞丽]]到缅甸[[腊戍]]从缅甸进入中国,但是需要在缅甸政府办理许可。一般来说,您需要加入旅游团。
====[[越南]]====
对于大部分旅行者来说,走陆路到中国旅游的起点都在河内。有三个国际口岸:
* '''同登镇(越南)- 凭祥(中国)'''
:您可以从河内汽车东站(Ben Xe街,嘉林区,电话:04/827-1529)到谅山,从那里您需要转乘小型公共汽车或者摩的到同登镇的口岸。还有另一个选择就是选择旅行社(有急事的游客),他们可以提供酒店和过境服务。
:您可以从黄牛手中换外汇,但是之前要好好确认汇率。
:过境手续大约需要30分钟。在中国境内,穿过“友谊关”之后打个的(大约20元,使劲儿砍价!)去[[凭祥]]。小型公共汽车车费大约5元。汽车总站车站正对面就有一家中国银行;ATM机上可以用Maestro卡。您可以乘汽车或者火车到南宁。
* '''老街(越南)-河口(中国)'''
:您可以乘火车河内到老街,软卧大约420,000越南盾(截止2011年11月)。这一段大约8小时。从那里您可以走到老街/河口口岸(乘车5分钟)。
:过境很简单,填好出境卡然后排队等。他们会检查您的行李(特别是您的书/书面材料)。河口口岸外面是各种商店,汽车站离口岸有10分钟车程。从河口到昆明的车票大约¥140;时间大约7小时。
* '''芒街市(越南)-东兴(中国)'''
:您可以从东兴乘汽车去南宁,有到广州的卧铺大巴(票价大约180元)和到深圳的卧铺大巴(票价大约230元,12小时)。
====[[老挝]]====
您可以从[[琅南塔]]乘大约早上8点的车到[[磨憨]](中国口岸)和[[勐腊]]的汽车。但是您要有中国签证,因为口岸不能办理签证。海关手续需要整整一小时或许还要多。一趟大概需要45000基普(老挝货币)。
另外,从[[琅勃拉邦]]到昆明有直达的卧铺大巴(要大约32个小时)。您可以在从[[琅南塔]]的小巴碰到卧铺大巴的地方上车。车费不会超过200元的。
====[[巴基斯坦]]====
从[[巴基斯坦]]北部到中国西部的[[中巴公路]]是世界上最为壮观的公路之一。冬天会对旅客封路。因为走这条线的旅客不多以及两国的良好关系,所以过境很快。从中国喀什噶尔到巴基斯坦有长途汽车。
====[[尼泊尔]]====
[[尼泊尔#抵达|从尼泊尔]]到西藏的公路经过喜马拉雅山附近,穿越蔚为壮观的高山。从尼泊尔到西藏只能跟团,但是个人可以从西藏到尼泊尔旅游。
====[[蒙古]]====
蒙古1945年正式从中国独立,当时的中央政权是“国民政府”。现在的中国和蒙古有两个边境口岸。它们是[[二连浩特]]([[内蒙古]])/[[扎门乌德]]边境口岸和[[塔克什肯]]([[新疆]])/[[布尔干]] 边境口岸。
中国有从二连浩特开始的火车或者长途客车,经过扎门乌德到达乌兰巴托。火车和长途汽车站大多数大部分时间都是第一天晚上出发,第二天早上到达。边界在上午八点半左右开放。从二连浩特有去往中国其他地方的长途汽车和火车。
====[[哈萨克斯坦]]====
到中国的口岸分别在[[霍尔果斯]]、[[阿拉山口]]和[[吉木乃]]。几乎每一天都有汽车从[[阿拉木图]]到[[乌鲁木齐]]和[[伊宁]]。不能办理落地签,所以出发之前先保证您已经准备好了哈萨克签证和中国签证。
====[[吉尔吉斯斯坦]]====
可以通过[[图噜噶尔特山口]]进出吉尔吉斯斯坦,但是道路非常崎岖,并且这个口岸只在每年的夏季开放几个月(6月-9月)。也可以安排走喀什,但是先要准备好签证。
另外,另一条路(虽然风景略差,但是路况较好)是经过直达图噜噶尔特南部的[[伊尔克什坦口岸]]。这条路每周大约有2-3次大巴(卧铺),大巴行程大约24小时。
====[[塔吉克斯坦]]====
塔吉克斯坦和中国唯一的口岸在[[阔勒买]],这一口岸在五月到十一月之间的周日开放。从新疆[[喀什噶尔]]到塔吉克斯坦[[科洛格]]之间有大巴。但是这班车不对除塔吉克斯坦人和中国人以外的人开放。
====[[俄罗斯]]====
最主要的口岸是[[内蒙古]]的[[满洲里]]。从满洲里到俄罗斯的[[后贝加尔斯克]]有大巴。从[[黑河]]到布拉戈维申斯克、从抚远到哈巴罗夫斯克有渡轮。再往东,在[[绥芬河]]、东宁、和珲春都有路上口岸。在出发之前要保证您已经申请了俄罗斯签证。
====[[朝鲜|朝鮮民主主義人民共和國]]====
在中國前往朝鮮民主主義人民共和國(下称:朝鲜)要經由[[丹東]]/[[新义州]](신의주),而且必須預早在北京安排導遊。相反,從北韓旅遊後進入中國,則較容易。另外, 除了上述口岸外,在鴨綠江和圖們江亦有其他出入境口岸,但這些口岸可能不允許旅客通行。最後,在通關前,請確保阁下持有有效中國及北韓簽證。
====[[香港]]====
香港主要有四個陸路口岸進入中國大陆,分別是落馬洲、沙頭角、文錦渡以及深圳灣。某些國藉的旅客可於落馬洲申請落地簽證,但若使用其他口岸必須預先安排。
====[[澳門]]====
澳門分別有兩個陸路口岸連接[[珠海]],分別是關閘邊檢大樓(大陆稱:拱北口岸)以及路氹邊檢大樓(中國大陆稱:橫琴口岸)。持有某國藉的旅客可在路氹邊檢大樓申請簽證。
====其他====
暫時為止,旅客尚未可利用陸路前往[[不丹]]及[[阿富汗]]。
===水路===
====香港以及澳門====
香港和澳門與[[珠江三角洲]]的城市間,設有定期高速客輪服務,來往[[廣州]],[[深圳]]以及[[珠海]]等地。同時,[[香港赤臘角國際機場]]亦設有跨境快船轉駁服務,旅客無須入境香港而前往[[廣州]]、[[珠海]]等地。
====日本====
每星期有一至兩班(根據季節而定)定期客輪由[[上海]]和[[天津]]來往[[大阪]],船程約為兩天。此外,[[青島]]每星期有兩班客船來往[[下關]]以及每星期一班由[[上海]]來往[[長崎]]。
====南韓====
以下數個港口均有定期航班前往南韓仁川:[[上海]]、[[天津]]、[[青島]]、[[威海]]以及[[大連]]。
====台灣====
每日有18班渡輪由[[廈門]]來往[[金門]],行程約一小時三十分鐘。另外,每天亦有4班來往[[金門]]及[[泉州]],兩班來往[[馬祖]]及[[福州]]。此外,每星期亦有跨台灣海峽航班,由[[廈門]]至[[臺中|台中]]或[[基隆]]。
====泰國====
每星期有3班高速客輪來往[[雲南]][[景洪]]及[[泰國]][[清盛]]。盡管航班會經過[[緬甸]],[[老撾]]但旅客亦無需持有其簽證。
====遊輪====
在秋天,有數條遊輪航線會由[[美國]]前往[[亞洲]],例如:[[安克雷奇]]、[[溫哥華]]或[[西雅圖]]。另外,麗星郵輪亦有運作[[基隆]]、[[廈門]]以及一些[[日本]]外島的航線。
==交通==
===飞机===
中国幅员辽阔,所以,如果您不想浪费太多时间在路上的话,最好还是选择飞机出行。中国的大城市和主要旅游目的地之间有很多国内航班。三大国际航空公司分别是:国航、南航、和东航,除此之外也有一些地方航空公司,包括:海航、深圳航空、四川航空和上海航空。最近几年大城市和各省纷纷建立了自己的航空公司,包括:重庆航空、成都航空、河北航空等。海南航空的母公司发展了包括大新华航空,扬子江快运,香港航空公司、金鹿航空等11家航空公司。
中國香港特區或者中國澳门特區到內地城市的航线都算是国际航线,因此价格較為昂貴。因此,如果要在內地和香港或者澳门之间往返,那么走深圳或者珠海(跟香港或者澳门一江之隔)会便宜'''很多''',或者走广州(广州距离香港或者澳门较远,但是有往来航班的城市却更多)。例如,从福州到香港、深圳或者广州的距离相似,但是在2005年时,飞往香港的航班价格为1400元,但是飞往其他城市的价格仅为880元,飞往深圳的打折机票仅为550元。到这些城市称汽车的话价格约为250元。
国内航班都是有标准价的,但是都会打折,特别是比较繁忙的航线。大部分酒店和招待所都有订票服务,酒店订票可能会有7.5折到3折优惠。中国的所有城市都遍布着旅行社和票务公司,他们的折扣基本相当。 就算不打折,在中国乘飞机出行也并不贵。中国两大在线订票网站[http://www.elong.net/ 艺龙]和[http://english.ctrip.com/ 携程]都有英文网站,但是航空公司网页一般都只有中文,或者需要中国手机号码来订票。
在中国旅游,一般最好在旅行社买票最划算,或者只在中文网站上买。在国外买的话(例如,通过Expedia或者甚至通过国航网点买)都会贵很多,因为国外只卖全价票。而打折机票只在中国境内出售。国内航班的时刻表一般要到航班时间前2-3个月才能定下来。和大部分国家的空运市场不同的是,买的早的人要多付钱,因为到后面会有折扣。飞机越空的航班,越容易在航班起飞的前几天买到折扣比较高的票。只要您敲定了您的行程,建议您关注飞机票价,看看什么时候涨,什么时候跌(一般都会有波动的)。但是,如果在外出旺季出行(例如春节期间),建议尽早订票,以保证您能买到票。一些价格比较高的票可以允许先退票(退票费5%-20%),然后再买低价票。最近,国内航班的头等舱也可以打折了。有的线路头等舱和经济舱价格差异并不大,还是比较划算的。但是,请注意,在空港的很多福利(例如:候机大厅、额外的行李和积分等)就不适用于打折机票了。
请注意,虽然政府和顾客都给航空公司施压,但是毫无理由的飞机延误还是很正常的。有时候飞机出行还不如其他的选择。取消航班也并不罕见。如果您从中国的票务处买的票,他们一般会联系您(如果您留下了联系方式)并通知您航班的变化。如果您在国外买的票的话, 一定要在您乘机的前一两天查看航班状态。一旦出现航班延误,中国的航空公司很快就会送出餐盒或者点心(尽管这些盒饭/点心并不一定合西方人的口味)。建议在中国旅游时随时准备好B计划。水是过不了安检的,但是所有的中国机场都有开水处,所以您可以带上杯子和茶叶。
和全世界所有地方一样,中国机场的餐饮费用也贵的离奇。在市区25元的咖啡,在机场的相同连锁店里面可以卖到78元。KFC的价格好像没有变化;他们很多机场的门店的价格和其他地方门店的价格都一样的。花20元以上吃一顿KFC还不如在街对面吃一碗5块钱的面呢,但是在机场的话,KFC还是最划算的。
===火车===
{{infobox|中国的春运时的火车票|以春节为中心,共40天左右,每年农历腊月十五到次年正月廿五,那时候民工开始放假,纷纷乘交通工具回乡,在这个阶段,有30多亿人次的人口流动,占世界人口(约70亿人)的3/7,相当于全国人民进行两次大迁移,同时也是当今世界上规模最大的人口迁移。每年春运,铁路运输是重中之重,为了解决春运问题,中国政府每年都要提前部署,但仍无法满足春运要求。所以,在此期间尽量避免乘火车出行,因为买到火车票会非常困难。}}
[[File:A maglev train coming out, Pudong International Airport, Shanghai.jpg|right|thumb|200px|[[上海]]的磁悬浮列车]]
火车是大部分中国人长途旅行的首选。铁路线路网络不断在扩展,覆盖了全国各地。中国大约占据了全世界铁路交通的1/4。
中国目前正在建立一个高铁网,类似于法国的TGV和日本的新干线。中国现在已经有很多高铁线路在运行了。中国高铁叫做“和谐号”及“复兴号”,高铁列车车次通常以“G(高)”“C(城际)”“D(动)”开头。如果您的预算允许的话,乘高铁是“最好的出行方式”。更多详情,请参阅[[中国高速列车]]。
==== 火车类型 ====
中国的火车被分成了不同的类型,在各自的车票上都有显示。中国火车从最快的到最慢的分别如下:
* 高速動車組列車(高速「G」):營運最高時速380公里,現限速300公里 使用CRH系列「和諧號」高速電力動車組,列車車次為G1-G9998.注:2017.9.21 复兴号已经提速至350km/h,部分线路车次已经开始换装复兴号。
* 城際動車組列車(城際「C」):營運最高時速350公里,現限速200~300公里 使用CRH系列「和諧號」高速電力動車組,列車車次為C1-C9998(其中,京津城際鐵路使用C2000 - C2999作為其車次,鄭州鄭開城際鐵路使用C28xx作為其車次,上海金山鐵路使用C3000 - C3999作為其車次,武漢武咸城際鐵路,武黃城際鐵路使用C50xx,C55xx作為其車次,成都成灌鐵路,成綿樂客運專線使用C61xx - C63xx作為其車次,廣州廣深鐵路使用C70xx - C72xx作為其車次,珠海廣珠城際鐵路使用C76xx作為其車次)。
* 動車組列車(動車組「D」):最高時速200-300公里,現限速160-300km/h,使用CRH系列「和諧號」電力動車組,列車車次為D1- D9998。
* 直達特別旅客快車(直特「Z」):最高時速160公里、中途不停車或者僅停靠少數車站的夕發朝至跨局或管內列車(跨局列車是指可以在本鐵路局/公司管轄範圍以內和以外的綫路上行駛的列車),列車車次為Z1-Z9998。
* 特別旅客快車(特快「T」):最高時速140公里/160公里(少數按直達特快等級運行的列車)的跨局或管內列車(管內列車是指僅可以在本鐵路局/公司管轄範圍內運營的列車),列車車次為T1-T9998。
* 快速旅客列車(快速「K」):最高時速120公里/140公里的跨局或管內列車,列車車次為K1-K9998,亦有诸如K53,K54(北京-沈阳北)的夕发朝至直达卧铺列车。
* 普通旅客快車(普快):最高時速120公里的跨局或管內列車(直快僅限跨局列車),列車車次範圍是1001-5998,無字母。
* 普通旅客列車(普客):最高時速100公里的跨局或管內列車,列車車次範圍是6001-7598,無字母。
* 通勤或路用列車(通勤):用於沿線鐵路職工上下班通勤的列車,列車車次為7601-8998。
* 市郊動車組列車(市郊「S」):最高時速80公里的城市內動車組列車,使用和諧長城號內燃動車組,現僅運營於北京市郊鐵路S2線,列車車次為S201-S299。
* 臨時旅遊列車(旅遊「Y」):為旅遊高峰客流而開行的旅客列車,列車車次為Y1-Y998。
* 臨時旅客列車(臨客「L」):在春運、暑運等客流高峰開行的列車,列車車次為L1-L9998。
另外從2015年春運起,L字頭臨客列車已大為減少,普速臨客列車車次多為3xxx、K4xxx、K5xxx、K6xxx、T3xx、T4xx、Z4xxx、Z9xxx;動車組臨客列車車次為D4xxx、D9xx;城際動車組臨客列車車次為C9xxx;高速動車組臨客列車車次為G4xxx,G9xxx。
==== 座位级别 ====
普通的非和谐号列车主要有五个座位级别:
[[File:Soft sleeper compartment for train T138 from Shanghai to Xi'an.jpg|thumb|特快火车软卧车厢]]
* '''软卧'''是最舒服的出行方式,以西方的标准很便宜。软卧的一个包厢有四个铺位,两个一列(现在更新的列车也有两个铺位的包厢),门可以上锁,空间也比较大。
* '''硬卧'''的话,一排有3张铺位,没有门。上铺很高,而且床的上面空间很小。上铺最适合身高较高的游客(1.9米以上),因为您的脚可以伸出去,而且不必担心被碰到。如果您有需要藏起来的东西(例如:照相机)的话,上铺也是最好的选择。东西放在上铺的枕头下面,一般小偷是够不到的。硬卧并不是硬板床,也是有个床垫的,而且也还比较舒服。所有的卧铺都有枕头和床单。
* '''软座'''是一种很少见的可以放下来的座位。软在只在4-8小时的短途日间列车和高速列车(D以上)会有。
* '''硬座'''就是一般的座位票,一排有5个座位,过道两边一边2个座位,一边3个。大部分的背包游客都选择硬座出行。虽然有“请勿吸烟”的提示牌,但是仅在车厢内禁止吸烟。一般在两节车厢的连接处都会有很多人在吸烟,烟就会源源不断的飘进车厢。大部分火车车厢的连接处都是吸烟区,那里有中文提示“吸烟区”。乘硬座车过夜是非常不舒服的,漫漫长夜而又无法入睡的感觉确实很不好。
* '''无座'''票是在硬座车厢的,但是没有座位。站票的话,您可以随身带一个小马扎。 价格和硬座相同。
此外,还有单人独包,高级软卧等相对等级、价格更高的铺位,不过一般只在部分高等级列车才会出现。
目前,中国的列车大部分都是全封闭的空调车厢。
和谐号一般有5个等级 - '''二等座'''(3+2的座位),'''一等座'''(2+2的座位)和三个'''VIP舱'''(2+1的座位,连着驾驶室)。VIP舱位也分三个等级,分别是“商务座”、“观光座”、和“特等座”。和飞机不同的是,和谐号的商务座实际上比“一等座”好。 商务座和观光座价格一样,但是特等座一般比“一等座”要贵,但比商务座和观光座便宜。
==== 火车票 ====
[[File:China G Train Ticket.jpg|220px|thumb|带有文字说明的中国纸质火车票]]
一般车票在列车开车前30天就可以买了(12306订票提前30天,电话提前28天)。开车之后,可能会有少量的车票给途经的较大的站预留的。如果您想找个座位,或者想补个卧铺,您可以找到列车员然后他会告诉您还有没有,需求量最大的为硬座票和硬卧票,所以这种方式能够得到您心仪的几率很少。从2012年一月份开始,所有的购票人都必须持'''有效证件'''来买票(一般就是身份证或者护照)。中国铁路客运部门在2020年6月份起,不再发行纸质火车票,实行电子票(可以在App12306中查看)。对于仍然需要纸质信息的乘客,中国铁路客运部门会提供一张载明乘车日期、车次、发到站、发车时间、席位号等信息的纸质凭条帮助旅客乘车。
在市区很多地方都有火车票代售点的,那里很清楚地以中英文标注着“火车票代售点”,还有火车头的图标,但是因为这些代售点都很小,可能也不是很好找。代售点的电脑和车站的订票系统是联网的。在代售点一般可以买到10天以前的票,而且都是按照票面价格卖的。工作人员一般不会说英语。
就算在大城市也不要指望车站的售票员会讲英语。就算售票员找到会讲英语的同事,不要指望他会操作订票系统。因此,如果您不会讲中文,那么就将始发站和到达站、开车时间、车次和要买的票的类型用中文写在纸上。车站名称您可以写拼音,因为售票员输入的也是拼音。请注意,很多城市的普通车站和高铁车站都不在一起。高铁车站一般都带方向的(例如:北京南、杭州东等)。
在出行高峰时段(例如,春节期间),车站的票一下就卖完了。最好还是找中介提前订票。在大城市里,也有稍微加一点手续费的票务机构。这些手续费可以省去在车站排长队,还是很值的。旅行社会收你的钱,然后提前订票,但是,在车站放票之前没人可以保证您一定就可以买到票,车站放票之后旅行社才会去买他们之前向您“保证了”的车票。
==== 旅途须知 ====
普通火车上的厕所一般比汽车上或者大部分公共场所的厕所要“好”一些,因为火车上的厕所非常简单,小部分直接把排泄物抛洒在铁轨上,火车上的厕所味道没有那么刺鼻,但是现在大部分的火车都已经安装或者部分安装了真空集便装置。软卧车一般在车的一头有欧式的坐便器,另一头是中式的蹲坑式的厕所。请注意,直接将排泄物抛洒在铁轨上的列车在车站停车时列车员会将厕所临时关闭,以防止排泄物抛洒在车站范围内的铁轨上。
长途车会有餐车,餐车会有热饭,但是一般都会很贵,都在15-45元,而且确实不好吃。菜单都是中文,但是如果您愿意冒个险的话,您可以记住几个中文字,或者问问看常见的菜有没有。如果您的预算有限,那只能等到站的时候。站台上的小贩一般会卖面条、小吃和水果,价格一般会稍微好一点。车上一般都有开水处,所以您可以带上茶叶和泡面等。
在火车上要留心自己的财物,这几年公共交通设施上财物失窃的事情越来越常见了。
大部分比较高级一点的车上(T、K、Z和和谐号列车),都会播放实现录制好的中文、英文、粤语(如果火车路过广东或者香港)、蒙古语(内蒙)、藏语(西藏)或者维吾尔族语(新疆)的报站广播。但是,在短途列车上没有英文报站,因此,知道从哪里下车很重要。
如果晕车的话,建议备好晕车药。如果睡觉怕被吵到,建议戴耳塞。长途卧铺车厢上铺的空调在夏天会很凉。如果担心因为自己的不注意而错过到达站,您还可以跟列车员讲在即将到站时来通知你一声,列车员很乐意帮找你。
如果您有可以和大家一起分享的东西的话,那时间会好过一点。旅途中的中国人也都一样觉得很无聊,他们很乐意和您聊一聊,或者一起在电脑上看一部电影。总的来说,乘火车看看中国乡村风景还是挺不错的。
在出入站时都要验票,一般在进候车大厅、上车和出站出都有人检票。进了候车大厅后,在电子显示屏上找对应的站台上车(虽然是中文,但是会显示您票上印的车次)。在上车前大约10分钟的样子,就可以进站检票了,进站后您只需要跟着人流走就好了,一定要确保您不要坐在错误的候车区域了,因为一般火车在一般的站只停几分钟。一些比较新的站是高站台,这样站台会和车门齐平,但是小站的站台都很低,然后上车都要走几步很陡的台阶,所以如果您有大件行李的话,要有心理准备。一般的乘客也都很友好的,都会主动伸手帮您一把的。
在车厢内部是不允许抽烟的,但是在两节车厢的连接过道处是可以的。所有的高铁车组及动车车组都属于全列车禁烟列车。车站也不许吸烟,但是设有单独的吸烟室,但这些吸烟室里面都很糟糕,而且通风也很差。
==== 有用的网站 ====
*[http://kyfw.12306.cn 12306]是中国铁路总公司的官方购票网站,有用性不言而喻。购票高峰期会出现各种不可预测的故障(因为中国在运输高峰期时会有十几亿客流量通过铁路发送,购票者过多导致跟DDoS类似。)注意,这是中国铁路(含高速铁路)购票唯一的官方网站。
*[http://www.seat61.com/China.htm Seat 61]网站上关于中国列车的介绍较为全面。
*[http://www.absolutechinatours.com/china-trains Absolute China Tours]或者[http://www.chinahighlights.com/china-trains/ China Highlights]有票价信息(注意,这里的信息虽然非常有用,但是也并不是100%的全的)。
*[http://www.oklx.com/cn/train/search_station.aspx OK Travel]有更多车次。这个网站大部分都是中文但是,地名都用的是罗马字母,这样您不懂中文也没有关系了。在搜索页面,只要从列表中选择就可以了:左手边是始发地,右手边是目的地。注意,您需要在下拉栏中选择省份或者区域之后才会出现相应的城市。选择您需要的城市,然后点击左下方的按钮(“确认”)进行搜索。如果您可以输入汉字,这个网站还可以帮你计划转车。
*[http://www.cnvol.com CNVOL]有中国国内运行的所有列车车次,而且更新很快。只要输入您旅途的起点和终点,您就会找到所有往来的车次(包括过路车),每列车注明了始发站、终点站和时间。点击您喜欢的车次,然后您可以看到各个座位的票价。
*[http://huoche.wiki 火车Wiki]讓您可以了解某个车次的车辆情况。
*[http://piao.today 票.今天]让您可以了解某个区间的余票趋势。因中国客运分淡旺季,所以淡季内的趋势一般来说是相同的;旺季同理。有时12306因为客流量过大导致前端无法访问时(前提后端正常),也可以在该网站上查询余票。因该网站查询实时余票时会同时将所有的票价同时抓取,导致速度较慢,除非12306出现前端技术故障,否则不建议使用该网站的实时余票功能。由于12306接口关闭,本站只能浏览以前的数据,而不能使用查询实时余票/添加新趋势等功能。
*[http://yupiao.info 余票网]著名的火车票查询网站,可以显示出预售期内所有指定区间有票的车次,方便购票。但是因为原作者停止维护,所以本网站可能随时下线/出现暂时性的故障。
*[https://www.ctrip.com/ 携程]现今中国最大的旅游、住宿、车票、机票等预定网站,美国纳达斯科上市企业。有多国语言支持。提供可以发送到电子邮箱的电子行程单。
=== 汽车 ===
城际'''公共汽车'''或者长途汽车并不贵,非常适用于市内和短途的交通运输。
每个城市的公交车各有不同---但一般情况下都是塑料座椅、人多、没有英文标识、司机态度一般。当然,如果您对于公交车线路比较熟悉的话,这不失是一种非常经济而且四通八达的出行方式。一般情况下,公交车上都会播放报站录音,例如“下一站:中山路(Next stop is Zhongshan Road)”,或者“上海南站到了(We are now at Shanghai South Railway Station)”。一些大城市,例如北京或者杭州,的一些主要线路上有英文报站。票价一般为1到2元(一般1元为老式公交车,2元为新式带空调公交车),如果公交车路线到了市郊,票价会相应高一些。大部分公交车已经没有售票员了(收钱、找零、撕车票),取而代之的是上客门旁边都有个自动投币的铁箱,您可以把您要支付的票价投入投币箱内(不找零,所以要自备零钱)。注意,一般公交车司机都会开的比较快,不怎么会在乎乘客的感受,所以要扶好站稳。
{{Infobox|卧铺大巴(已弃用)|卧铺大巴在中国20世纪初很常见;车上没有座位,取而代之的是卧铺床位。中国交通部门在2020年发布关于卧铺大巴禁行公告。这是长途旅行不错的选择— 大巴在高速公路上的夜间行驶速度一般为100KM或者更快— 因为铺位空间有限,可能有的身高比较高或者块头比较大的旅客会觉得不舒服。
一般来说,在发达的沿海省份,这还是比较舒适和便捷的交通方式,但是在欠发达地区就不一样了。尽量不要买车位的铺位,因为车在过减速带的时候,车位的乘客晃动比较厉害,可能会有晕车症状。
在有的地方,在您上车时必须要先脱掉鞋子;车上会提供一个塑料袋放鞋子。如果到了服务区或者上厕所的时候,您需要再穿上鞋子。如果您平时穿靴子的话,建议您随身再带上一双拖鞋。}}
各地的大巴,或者'''长途大巴'''的情况各不一样,有的很舒适,而有的地方的大巴就会很不舒适。一般从东南沿海较大城市发出的大巴都带有空调、软座。东南沿海地区的路况非常好,车开的很平稳,您可以欣赏沿途风景或者小睡一会儿。一般汽车会比火车会贵一点,但是要舒服一点。大巴的乘务员都很愿意帮忙,但是和空乘人员相比,他们对于外国人就没那么熟悉,能说英语的非常少。有的大巴有厕所,但是一般都很脏,而且汽车转弯比较多,造成使用厕所比较不便。
中国农村地区的大巴就完全不同了。 车站里面的表示要么只要中文要么只要本地语言,路线都是贴在车窗上的,在您走过的时候司机或者招揽客会向您大声喊叫他这趟车的目的地,一般大巴的车牌号应该印在票上的,但是通常票上印的车牌号都是错的。由于风俗习惯等的差异,外国人可能会觉得大巴司乘人员不够礼貌,乘客素质也欠佳,他们会随地吐痰和抽烟。如果司机一路都想多上人的话,巴士可能会非常拥挤。中国农村地区的道路通常都是坑坑洼洼的,这样乘坐巴士就会非常颠簸;如果您坐在巴士靠后的座位上,那么颠簸会更加厉害。发车和到达时间都只是预计时间,因为很多车票不卖完不走(这可能使发车延误数小时),加上车有点小问题和其他事情,您的行程可能会被大幅延长。如果您要在这样的车况和路况下乘车10个甚至20个小时的话,那您一定会感觉痛苦难忍的。虽然这样的车程让人非常不舒服,但是在中国很多地方,这样的大巴是唯一的交通方式。当然,好的一点是,如果您想去比较偏远而且又没有直达车的地方旅行的话,您可以在路上随时下车。而且,您也可以在路上随时拦车,一般车票都是视路程长短而不同的。
在中国,司机不遵守交规是一种普遍现象,而且中国的交通事故也比较多发。突然急转弯或者刹车都会造成人员受伤,所以上车后要坐稳扶好。中国的司机经常按喇叭,所以,如果您想在路上睡一会儿,还是带上衣服耳塞的好。
买票有时候会比较难。大的车站有售票柜台,票面上印的有出发时间、上车闸口、和您所乘车的车牌号(有时候不准),票价是固定的。小一点的车站到处都是招揽乘客的人在大声喊叫自己车辆的目的地,他们会把您领过去,然后您上车后再买票。就算在大的车站也有招揽客,他们会给司机打电话让司机等,然后用摩托车把您拉过去,您到了之后可以和司机讲价。这种情况有时候可能完全就是一个骗局,有时候您可以省下35%的车费(取决于您的砍价水平和中文水平)。
===地铁===
大城市 — 至上北京、天津、上海、广州、深圳、武汉、沈阳、郑州、西安、重庆、成都和南京等 — 都有了地铁系统。重庆还有单轨轨交系统。这些设施总体都比较现代、干净而且高效。标识和售票机都是中英双语的。
这些轨交系统现在都在逐步地建设和扩建中,几乎每个有地铁系统的大城市都在修建新的线路。中国在这方面的长期目标非常大胆,每个大城市都在计划修建多条线路。到2020年,中国可能会有世界上最大规模的城市交通基础设施。很多城市都在规划诸如广州和深圳之间的区域间轨交系统。
===出租车===
出租车(或者的士)比较常见,而且价格也比较合理。起步费一般从5元到15元,一般超过起步费范围每公里2元左右(3千米起步)。一般在市内打车费用在10到50元以内。行李不另行收费,但是很多城市夜间打车费要高一些。不用给小费。有些地区还会收取附加燃油费一般1元到2元,视地区而定。
出租车司机故意选一条较长的线路来欺骗乘客的事情虽然不是没有,但是也并不常见,所以不必过于担心这一点。就算司机选了较长的路线,车费也不会差很大。但是,如果您觉得在去酒店的路上被出租车司机骗了,并且您住在中高端的酒店(一般都有门童),您可以向门童和/或者前台人员寻求帮助:一般一句能揭穿他的骗局的话就足以解决问题了。
小心一些黑出租,他们会在机场或者车站里面或者门口跟上您,然后会跟您谈一个带您去某地的固定价格,他们的收费往往是打表费用的1-3倍。如果您对所在城市不熟悉,那么一定要去机场外面指定的出租车区域,并且坚持让司机打表。出租车费率一般都标注在车外的醒目位置。
在高峰时段打车比较困难。如果再遇到下雨天,那就更是难上加难了。尽量避免高峰时段(特别是晚高峰),打车之后一定要记得拿小票。在中国,打车和其他所有事情一样,小费可以给也可以不给,中国人没有给小费的习惯,所以不给也没有人在意。
可以坐在副驾位置;有时候只有副驾位置能看清楚计价器。出租车司机有可能摇下自己那边的窗户就直接开始抽烟,而不会征求乘客意见。在有的城市,出租车还会在沿途搭客(在大致方向一致的情况下)。每个乘客都要付全价,但是这样会省去乘客们等车的时间。
虽然北京在迎奥运和上海迎世博期间做过一些工作,但是即便在这两个城市也很难找到会讲英语的出租车司机。在其他的城市基本上是不可能的。如果您试着用您带口音的普通话说出您要去的目的地,司机也有可能会理解不了。所以,建议您随身携带一张写着您打车要去的目的地的纸条。纸条上最好写汉字(而不是拼音),因为一个拼音可能对应好几个不同的汉字。带着您所在酒店和您喜欢的餐厅的名片,必要时出示给出租车司机。您可以先学一点儿基本的中文简单对话,这类的教材网上都是有的。
如果您在中国待的时间较长,那么考虑买一张中国的SIM卡,这样您可以给您在中国的朋友打电话,然后让他们跟司机说说您要去哪里。SIM卡在中国很容易可以买到。
有的城市的出租车公司有对司机的评级系统,从0到5星,这个打分器在仪表板上方的司机信息牌上,一般在副驾座前面。一般0或者较低分数虽然不一定代表司机不好,但是5星则表示司机对城市很熟悉,并且会以最短的路程将您带到目的地。另一种识别司机能力的方式同样是看司机信息牌---上面的司机代号。一般代号越小,则说明这个师傅从业时间比较长,可能对市区路线会更熟悉一些。如果您觉得被出租车司机骗了,很简单的一个办法就可以引起出租车司机的重视,那就是下车后马上把出租车车牌号抄下来,如果您会说简单的中文的话,您可以告诉他您要向市政机构或者出租车公司举报他。大部分司机都是诚实的,车费也不会太高,但是也有小部分不好的司机会利用您不会讲中文来侵害您的利益。
中国人在打车的时候一般不会让别人的。拦到车的人不一定就可以乘这个车。别人跑到搭车人前面先上车或者把拦出租车的人挤开自己上车的事情也并不是没有。如果一起有几个人都在打车,那么在拦到车后尽快上车。不过随着uber、滴滴等出行工具的普及,通过移动网络预约出租车成为绝大多数乘坐出租车的人的首选,在街上随手拦下一辆出租车的情况已经很少见了。
出租车司机可能会说您不用系安全带,但是无论怎样上车后一定要系上安全带(如果能找到的话)。
===电车===
有的城市有电车。电车一般经停站比轻轨要多,如果您要去的城市有的话,电车不失为一种出行的一种很实用的选择。但是,电车的话有可能会有堵车情况。
===自行车===
自行车、电瓶车和摩托车是中国最常见的交通方式;在高峰时期,中国的各个城市都有成千上万的两轮车。大部分自行车都是不可调速的老式车型,但是普通的山地车也比较常见。对于乘客来说,骑自行车要比挤进高峰时段的公交车要经济而且便利的多。
在中国对于骑自行车的人来说,有两大'''危险''':
* 一个是其他的'''交通车辆''';汽车和摩托车会经常让人毫无准备地拐出来,有的地方的红绿灯纯属摆设。更多相关评论,见[[中国驾驶习惯]].
* 在中国各个城市中'''偷车贼都很猖獗'''。需要观察其他人是如何停放自行车的。有的地方的当地居民会随手停放自行车,但是在其他很多城市中,人们都会将自行车锁在饭店或者网吧中。这就是一种警示。不要认为您的高档锁能确保您的自行车万无一失(偷车贼只需要摆弄一下就能打开)。建议尽可能将您的自行车停在有管理员的指定的停车区域;一般您只需要交1-2元钱。有的当地居民会故意买二手的老旧自行车,这样小偷就不会惦记着了。
在绝大多数景区 — 无论是像[[北京]]这样的大城市还是像[[阳朔]]这样游客云集的小镇 — 租车和修车都是非常方便的。而且都有骑行旅游的指南。
在中国,购买自行车是一件非常容易的事情。大行、美利达和捷安特是业余和半职业市场上最流行的三个品牌,所有的城市都有这些品牌的分销商。很多超市也会出售款式繁多的自行车。价格一般从150元到10000元不等。如果要在像西藏这样的地区骑行的话,一般3000到4500元价位的山地车就可以了。诸如上海和北京这样的大城市一般会有更多的职业高端自行车,但是如果您的要求非常特殊,那么香港就是您最后的希望了。
无论是在城市还是在乡村,修车铺随处可见;语言不通的外国游客可能不是很容易能找到,但是您只要找外面摆着自行车和自行车胎的店铺就可以了。要是车胎漏气这样的小问题的话,路边上有很多地方放着一盆水和一些自行车胎的地方都能修。但是如果是刹车碟这样的特殊部件的话,建议您在城区以外的地方骑行时还是随身携带好备件吧。
中国幅员辽阔,她的高山和沙漠都给专业的骑行者提供了无尽的挑战。但是,截止2010年5月,如果外国游客要在西藏高原上骑行,则必须''依照法律获取许可并须雇用一名导游''。
一段风光超越想象但是却艰难异常的自行车骑行线路,请参阅[[中巴公路|喀喇昆仑公路]]。中国自行车网和Intrepid Travel都在这条线路上组织小规模的骑行观光。
=== 共享单车 ===
在中国的许多城市,除了城市公共自行车以外,您还会在大街上看到一些装饰相同并装有二维码智能锁的自行车,这些就是共享单车了。
它们与城市公共自行车相比,最大的特点是无桩,您可以自由地在街边租还共享单车,它在城市交通中已经占了很重要的地位。您在旅游一些城市时,可以用共享单车到达目的地,也可以领略城市各个角落的风景
共享单车品牌繁多,不同品牌的押金和收费也不尽相同,但绝大多数品牌的共享单车价格都比较低廉,目前摩拜单车和青桔单车占据了大部分市场。您除了可以下载应用程序打开共享单车,还可以用微信和支付宝打开一些品牌的共享单车。
=== 自驾 ===
{{参见|在中国驾驶}}
截止到2022年,中国已经实现与阿联酋、比利时、法国和塞尔维亚4国驾驶证互认换领。注意,中国大陆将香港和澳门的驾照都视为外国驾照,因此,就算您有这两个地方的驾照,也不应该在中国大陆开车。这一情况在07年有所改变---没有中国驾照的短途驾驶成为合法。但是,和很多中国的法律一样,官方的变更和现实中的改变并不一定完全是一致的;直到2008年12月,没有中国驾照在中国开车仍然是违法的。除非您有外交身份,否则,要把外国的车运进中国基本是不可能的。
租的车大部分都是带司机的,和北美的一种租车服务remises类似;租带司机的车是游览中国最好的方式。就算您有初级的中文读写能力,而且取得了中国驾照,建议最好还是''不要''您自己驾车出游---当然,如果您已经习惯非常混乱的交通状况的话除外。如果您没有足够的勇气,请不要在中国的市内开车,并且停车位也非常难找。但是,尽管如此,在中国开车比在亚洲其他发展中国家,例如越南,要好很多。中国是属于靠右道行驶的国家。中国很多邻国,例如印度、巴基斯坦、尼泊尔、不丹以及香港和澳门特别行政区都是靠左行驶的。
在西方游客比较多的大城市,比如北京、上海还有其他的大城市中英文指示标识随处可见。但是,在其他较小的城市,英文标识就非常少,而在农村英文的标识基本上就不存在。因此,最好每次都带上写有您目的地名称(中文汉字)的纸条,这样,即便您迷路了,当地人也可以给您指路。
建议外国人不要在大城市之外的地方开车,“单行道”标识一般都是“并不一定是单行”。在高速上,仍然有的一小部分司机开过了出口匝道后会减速,然后转个270°的弯转上匝道。司机本会有各式各样的穿插技术。
在过马路时,一定把路两边都看清楚。不仅仅是自行车可能逆行,而且越来越常见的电动车也会---并且它们都没有什么声音的。
=== 摩托车 ===
{{参见|在中国驾驶#机车}}
摩的在中国很常见,特别是在小城市和农村地区。摩的一般都很便宜,而且很灵活高效(但是偶尔有点儿吓人)。车费可以讲价。
各个地方对于摩托车的管理规定有所不同。在有的地方,50cc的輕便摩托可以不用驾照,但是由于事故频发,目前很多地方都已经禁止了这种摩托,或者对这种摩托有了新的规定。要在中国骑“真正的”摩托可就难多了-这一部分是因为骑摩托车需要中国的驾照,一部分是因为很多城市都禁止摩托车驾驶,还有一部分是因为由于汽车和电瓶车的发展摩托车的生产和进口大幅下降了。中国的摩托车一般都是125cc的,一般可以到100km/h,大部分都是老式的。这种车速度一般都比较慢,也不是特别好骑。由于政府对于发动机尺寸的限制,所以赛车比较少,但是也不是找不到。还有一种比较流行的是仿制本田CN250的“Maxi”摩托车,它速度更快而且也比较舒适,可以自动换挡,这样在市区里骑会容易一点。
大部分城市都有各种摩托车市场,卖给您的车一般都是假的牌照或者非法牌照-在中国骑摩托车的外国人并不多,很容易被警察注意到。骑“真正的”自行车必须戴头盔,但是电瓶车就不用。理论上说来,您要去办理个牌照:摩托车牌照是黄色或者蓝色,电瓶车是绿色或者红色牌照。自己申请牌照的费用可能要好几千(电瓶车几十元),但是您也可以花很少的钱弄到假牌照——后果自负。
===三轮车(人力车)===
{{infobox|名称中有什么差异?|在中国的外国人通常会混用三轮车和人力车这两个词,但是它们指的却是两种不同的运输方式-其中一种已经不再存在。著名(臭名昭著)的人力车是一种前面有两个把手的两轮车,车夫拉着把手把乘客送到(走路或者跑步)目的地。人力车在19世纪晚期尤为盛行,但是在20世纪50年代逐渐被淘汰了。西方的精英分子坐着中国工人拉着的人力车上打马球的视频显示了人力车剥夺和压榨的本质。在很多小的欠发达城市还能看到人力车的衍生品,工人们每天早上拉着类似人力车的车子等待运输建筑材料和其他东西。三轮车已经取代了人力车---三轮车是一种类似自行车的有三个轮子的车辆。}}
在有的中型城市里,短距离出行的话三轮车会方便很多。三轮车有人力脚踏的和动力的两种,在中国农村地区和大城市的较不发达(也就是游人较少)的区域非常常见。上车前一定记得要先谈好价钱。
对于“司机经常欺骗游客”的报道一般多指像在北京秀水街、王府井、和老舍茶馆这些旅游景点发生的事情。一般的规则是“要提防在旅游区兜售任何东西的任何人”。
如果您看到一般的中国人使用“三轮”,例如,从北京动物园到最近的地铁站-那这就是安全的。不要乘任何穿着老式服装以吸引游客的师傅的车。他会收您市价上10倍的车费。
可能的话,尽量选乘脚踏三轮车。在选乘脚踏三轮车的同时,您也在帮助确实比较贫困的人,让他们有生意可做,而且您也在帮助中国留下一些传统的东西。在上海,由脚踏三轮车发展和改进而来的电动的三轮车占大多数。
==语言==
[[File:Map of sinitic languages-en.svg|thumb|240px|中国方言地图]]
中国官方语言是'''[[漢語會話手冊|标准普通话]]''',它主要是基于北京方言发展演化而来的。从20世纪50年代以来,普通话是中国教育系统使用的唯一的语言,所以大部分人都会说。普通话是有声调的,声调正确对于学习和使用普通话很重要。
中国很多地区,特别是东南和南部地区都有他们自己的“方言”。这些方言其实就像完全不同的语言,就好像法语和意大利语一样。这些“方言”和普通话一样也都是有声调的。即便同样是普通话(地图中大片的棕色区域),各地方的口音也不一样,而且各地都夹杂着自己本地的俚语和一些很鲜活的地方语言。除了普通话,使用最多的方言是'''[[吳語會話手冊|吴语]]''',主要集中在上海、浙江和[[江苏]]省南部地区;其次是'''[[廣東話會話手冊|广东话]]''',集中在广东省大部、香港和澳门;再次是'''闽语'''(福建)语支,它包括 '''在[[厦门]]周边区域和台湾使用较多的[[閩南語會話手冊|闽南语]]'''(闽南语有一种次方言叫做潮州话,主要在潮汕地区使用),和在[[福州]]周边地区使用较多的'''闽东语''' 。大部分中国人都可以讲自己的家乡话(方言)和普通话两种语言。有的上年纪的和受教育较少的人可能只会讲他们的家乡话,但是这对游客没多大影响。最好能有一个可以讲本地方言的导游,讲本地语言就说明这个人是对本地比较熟悉。虽然您凭着一口标准的普通话就能在中国大部分地区畅游无阻,但是如果您可以试着和当地人讲几句他们的当地方言,那他们是会非常高兴的,所以学习几句简单的方言问候语或者俚语会让您很快就和本地人熟悉了。一般来说,如果能听懂或者比较喜欢当地的方言的话会对去比较偏远地区旅行是很有帮助的。当然,在这些偏远区域,带上一本中文常用语手册还是很有必要的,因为全国的中文写出来都基本是一样的。
无论各地方言差异有多大,所有正式的书面中文都是一样的。甚至很多日文和韩文都用很多相同的汉字,而且和中文中的意思一样或者相似。但是,要注意的是中国大陆使用的是“简体中文”,这种简体中文是在20世纪50年代中期为了消除文盲而发展出来的。香港、台湾、澳门和很多海外华人都在使用繁体中文,但是在大陆的的一些广告和商业标识上也能看到繁体字。汉字简化总体还是比较系统化的,一般以简体中文为母语的人基本也能阅读繁体字,反之亦然,所以只要学会书写一种中文一般就足够了。
注意,在书法中不同由于书法家有不同的风格,所以每个字的笔画差异非常大。中文有五种字体:篆书(篆書)、隶书(隸書)、楷书(楷書)、行书(行書)、和草书(草書),其中楷书是中国的官方字体。去中国旅游只要知道一种字体就可以了。对于对中国传统文化有深厚兴趣的人来说,学习中文字体肯定会大有裨益。
在中国遥远的西部,有的少数民族会使用土耳其语系中的[[維吾爾語會話手冊|维吾尔语]]、吉尔吉斯语、哈萨克语以及其他语言(例如:[[藏語會話手冊|藏语]])。在中国的北部和东北部少数民族聚集的地方,这些少数民族会使用自己各自的语言,例如满语、[[蒙古語會話手冊|蒙古语]]、[[朝鮮語會話手冊|朝鲜语]] 等。在中国云南、贵州、海南和广西居住着许多少数民族,例如:苗族、侗族、壮族、白族等,他们都使用自己各自民族的语言。除了这些地区的老年人,一般的年轻人都能说普通话,而且大部分年轻人都既可以说普通话又可以说自己的民族语言。很可惜的是,很多少数民族语言(如:满语)都在慢慢的消亡。
===英语和其他外语===
在过去20年中,从小学高年级或者初中开始英语便成了他们的必修课。大学里面无论你是什么专业,一定的英语等级都和学位挂钩。但是,所有的教学的终点都在正式语法,轻听说而重读写。
上海、北京、广州和深圳能讲英语的本地居民比例较高。在有的城市,除了在有涉外服务的旅游景点和场所外很难找到能讲英语的本地人。航空公司和大酒店-特别是国际连锁店的员工基本都会讲一些基本的英语,但是能用英语深入交流的非常少。
国际机场、警察局、医院等公共服务提供场所的接待人士基本都会说初级英语——尤其是年轻的,因为中国是在近几年开始重视英语的。
在中国讲英文的时候,请尽量简化您的英语语言:讲慢一些,标准一些(就像您在电视上看到的新闻主持人一样),避免俚语、成语或者较长的单词,尽量使用简单的现在时态和一些陈述语句结构。不要说“Would you mind if I come back tomorrow?”直接说简单的(尽管可能有些唐突无礼),例如“Tomorrow I will return.”这样说和中文语义更加相近,而更容易被理解。
同时,部分中国人的英语可能有口音(像中文一样抑扬顿挫或者单词等时),此时请叫
在中国结交朋友的一个方法就是询问“英语角”- 英语角是指本地居民约定好一个时间和地点一起见面并练习英语的地方。一般都由一个外国人主持,一般时间都在周五晚上、周六晚上或者周日,在公共公园、英语培训学校、书店和大学校园。可能还会有其他的比如“法语角”、“俄语角”、“德语角”等。
如果您要去比较偏远的地区,建议在您旅途开始之前找一个导游帮您安排行程。这至少会帮您克服语言障碍,因为这些地方的本地居民基本不可能会讲任何外语的。
===学习中文===
''參見:'' [[#学习|学习]]
在西方,不知何故,中文以她的难懂而闻名。虽然中文和西方语言有所不同,但是旅客们会很吃惊地发现中文的基本语法还是比较简单的。动词不分人称和时态。名词没有词性(注:很多语言,如法语,名字有阴性和阳性之分)。最主要的难点在于中文使用了欧洲语系中不存在的几个辅音以及声调。
普通话和越南语以及泰语一样都是声调语言,它们使用不同的语调来表示不同的意思。“Ma”这个发音可以代表妈、马、麻、骂四个字中任意一个,完全取决于音调。中文的同音字非常常见;即就是音调一样的一个读音都会有十几个不同的汉字。“Zhōng”可以是中、忠、钟、终等。中国人在报出自己的名字的时候一般都会逐个字来解释。“我叫王菲,王是三横王,菲是是非的非加草头。”
对于很多人来说,书面的中文看起来跟一个个神秘代码相去并不远,但是如果您都可以辨识那么多的商标图案(这些图案一般并没有逻辑联系),那么就说明您也有认识大量汉字的潜在能力。并且,大部分汉字之间都是有逻辑联系或者有规律可循的。
理论上来说,中文有5万多个汉字。好的一点是,这其中85%的都是不常见字。跟很多种语言是一样的,大部分中国人也不知道要看一本中文书需要认识多少个汉字,永远都不要去数哪个中国人认识多少汉字。有的人声称小学生应该至少学习2000个汉字,大学毕业生则至少认识5000个。
拼音的发展是为了弥补识字和发音之间的鸿沟,拼音使用了罗马字母,是中国人学习中文的辅助工具。不能按直觉对拼音进行发音,因为有的字母和辅音辅音连缀代表了很多欧洲语系并不存在的发音,因此很多拼音的发音和西方人士想象的并不一样。中国人不认识以拼音写出来的地名和地址;建议使用中文汉字来记录书面信息。
==观光==
中国有着无尽的美景,您在中国永远不会无处可去。特别是在沿海地区,如果您已经游遍了繁华闹市中的景点的话,那么随便乘一趟短途火车您就会发现下一个美景。
无论您是痴迷于历史、寄情于山水,还是只想找个怡人的沙滩放松放松,从[[北京]]雄伟的紫禁城到令人叹为观止的[[九寨沟]],您想要的中国都能给您。就算您已经在中国生活了很多年了,但是在这个幅员辽阔的国家的其他地方总有一些新的景物和事情有待您去发现。或许是由于中国疆土的辽阔和历史的源远流长,中国在联合国教科文组织中的世界遗产数目位列第三(第一第二分别是意大利和西班牙)。
[[Image:Diecaishan.jpg|thumb|240px|喀斯特地貌、桂林]]
=== 主要景点 ===
* [[万里长城]]
* [[天坛]]
* [[天安门]]
* [[秦始皇陵和兵马俑]]
* [[鼓浪屿]]
*[[黄山]]
* [[壶口瀑布]]
*[[西安|西安城墙]]
* [[布达拉宫]]
* [[婺源|婺源古镇]]
* [[泰山]]
* [[黄果树瀑布|黄果树大瀑布]]
* [[颐和园]]
*[[北京/故宫|故宫]]
* [[苏州园林]]
* [[东方明珠塔]]
* [[外滩]]
* [[华山]]
* [[大三巴牌坊]]
* [[少林寺]]
* [[九寨沟]]
[[File:1 jiuzhaigou valley national park wu hua hai.jpg|thumbnail|九寨沟的五花海]]
* [[张家界]]
* [[漓江山水]]
[[File:Lijiang River scenery.jpg|thumbnail|桂林漓江山水]]
* [[天涯海角]]
[[File:Sanya Sun Photo by Dale Preston.jpg|thumbnail|right|海南省风光]]
===喀斯特地貌===
'''山丘绵延、奇石陡峰'''是的中国艺术家梦寐以求的一种传统风景。中国的南部和西南部多这中形态各异的岩溶地貌,又称“喀斯特地貌”。喀斯特是一种石灰岩地貌,是以[[南斯拉夫]]石灰岩高原的地名命名。随着石灰岩被化学腐蚀,密度较大的抗腐蚀性石头或者地块形成了各异的山峰。山下形成的山洞会坍塌而形成落水洞和暗流,它们和地下河道连通。在喀斯特地貌中,溶蚀形成了星罗棋布的山峰、拱形洞穴和通道。其中最著名的例子就是云南省昆明附近的石林。中国很多最著名的景区都以喀斯特地貌风光著称— [[广西]]的[[桂林]]和[[阳朔]]和贵州省中部和西部等地。
===圣地===
中国的如下景点有非常著名的佛教艺术:
* [[山西]]的[[Datong#See|云冈石窟]] - 石窟依山开凿,有五万一千多个佛像雕刻,可以追溯到1500多年以前
* [[甘肃]]的[[Dunhuang#See|莫高窟]] - 可以追溯到公元4世纪的艺术和壁画
* 重庆附近的[[重庆/大足|大足石刻]] - 可以追溯到7-13世纪之间
* 洛阳附近的[[Longmen National Park|龙门石窟]] - 可以追溯到5-10世纪。
===圣山===
中国有很多圣山。
和道教有关的“五岳”:
* [[泰山]] ,山东(海拔1545米)
* [[华山]],陕西(海拔2054米)
* [[衡山]],湖南(海拔1290米)
* [[恒山]],山西(海拔2017米)
* [[嵩山]] (嵩山),河南省(著名的少林寺也在河南)(海拔1494米)
和佛教有关的“四大佛教名山”:
* [[峨嵋山]],四川(海拔3099米)
*[[青阳|九华山]],安徽(海拔1342米)
* [[普陀山]],浙江(海拔297米,是一个岛)
* [[五台山]],山西(海拔3058米)
西藏佛教三大主要圣山:
* [[冈仁波齐峰]],[[西藏]](海拔5656米),它也是印度教徒朝圣的印度教最神圣的山峰之一
* [[梅里雪山]]
* [[阿尼玛卿雪山]]
中国还有很多其他非常有名的大山。在中国很多大山即便并没有身处圣地,当时还是有很多庙宇:
* [[黄山]],安徽,风景秀丽,景色引人入胜。
* [[青城山]],四川
* [[龙虎山]],江西
*[[青岛|崂山]],山东
* [[武夷山]],福建,主要的旅游胜地,有大片的茶山
* [[喜马拉雅山]],横亘尼泊尔和西藏边界,世界上最高的山脉
* [[武当山]],在湖北[[丹江口]]附近,道教圣地,是太极和武当拳的发源地
*[[长白山自然保护区|长白山]](朝鲜语:백두산),对于满族人和朝鲜族人来说是世界上最神圣的山脉,位于中国和朝鲜的边界处。
===革命圣地===
* [[韶山]] - 中国共产党第一人主席和中国领导人毛泽东故乡
* [[井冈山]] - 共产党在1927年国民党围剿后的第一个农村根据地
* [[瑞金]] - 1929到1934年间中华苏维埃共和国所在地
* [[遵义]] - 遵义会议所在地,之后毛泽东进入政治局常委
* [[泸定]] - 传说中飞夺泸定桥所在地
* [[延安]] - 从1939年到1945年中共产党的主要根据地所在地
* [[武汉]] - 推翻清廷的武昌起义发源地
* [[广州]] - 黄埔军校所在地,国民党和共产党的很多领导人(蒋介石、周恩来、毛泽东)都曾有黄埔军校经历,在1926-27年被北伐前开展了很多军事和政治学习。
===旅游线路===
以下是全程都在中国境内的一些旅游线路:
* [[中国两周到一月游]]
* [[香港附近一周游]]
* [[长江沿线|长江沿线游]]
* [[黄河沿线|黄河沿线游]]
* [[京杭大运河流域|大运河沿线游]]
* [[云南游]]
* [[西藏游]]
* [[长征]]
其他涉及中国的旅游线路:
* [[欧洲到南亚陆路旅游]]
* [[丝绸之路]] - 古代从中国到欧洲的商队之路
* [[中巴公路|喀喇昆仑公路]] - 从中国经由喜马拉雅山到巴基斯坦
* [[马可·波罗的足迹|探寻马可·波罗的脚步]]
* [[昆明到香港陆上行]]
==活动==
===按摩===
中国按摩场所遍布全国,而且一般都物美价廉。在亚洲,盲人有从事按摩的传统。一般比较专业的按摩价格在20元到40元一小时之间。
* 基本上所有的理发师都可以帮您洗头,并且给您做一个头部按摩,只收20块钱。这一般还包括帮您清理耳屎和一些颈部和手臂按摩。加上理发和/或刮面,一般收15元到25元。在大城市里,理发费用一般在50元以上。
* 足疗的地方也很多,一般足疗场所的招牌上都有光脚图片作为标示。价格一般在20元到100元。
* 全身按摩场所也非常多,价格一般在每小时15元以上。一般有两种:按摩一般就是普通的按摩;而推拿可能会用到针灸中使用的中草药。最专业的按摩一般都在专门的按摩医院或者一般的中医院,价格一般都在50元每小时以上。性价比最高的一些在不明显场所的盲人按摩。
很多地方这三种按摩都有。
有的按摩场所其实就是妓院。卖淫在中国虽然非法,但是却很普遍并且经常会以按摩作为掩护。很多温泉和桑拿场所都提供“全套”放松服务。在一些小地方,只要您看到粉红色的灯光和穿短裙的女孩子,那么很有可能他们提供的就不仅仅是按摩,而且她们也不怎么会按摩。很多发廊也是这样,既是按摩场所也是妓院。
没有粉红色灯光的地方一般都提供很不错的按摩服务,而不提供性服务。如果某个按摩场所的广告中注明了是盲人按摩,那么这基本上是合法场所。
在很多按摩场所您可以小睡几个小时,甚至在那里过夜都可以。理发店一般没有可供睡觉的地方,但是您也可以在做全身按摩的时候在按摩桌上睡一会,或者在做足部按摩的时候在沙发上睡一会儿。一般费用都不会很高,这估计是在中国最便宜的过夜的方式。但是,请注意,除了带有独立包间的高端桑拿场所,在其他的按摩/桑拿场所中,您都要和那里的员工公用厕所,而且不能将您的行李锁起来。寄存行李最好的办法是把行李寄存在火车站(所有火车站都有行李寄存处),一般价格在10-20元左右。
===传统艺术===
如果您计划在中国停留的时间比较长,那么建议您学一点中国传统艺术。毕竟,人在中国本身就是学习中国传统艺术的绝佳机会,如果您对某项中国传统艺术已经略懂一二,那么通过直接向这一艺术所在国度的大师学习可以提升您的技能。很多城市都有很多知识分子接收初学者,而且不懂中文也不碍事,因为您可以通过实例或者模仿进行学习。书法现在仍然是中国人热爱的一种艺术。很多城市的书法家都用毛笔蘸水在城市公园的人行道上练习。其他的您可以参加培训班的传统艺术包括演奏中国传统乐器(您可以询问买中国传统乐器的商店,很多商店就有培训班)、中国厨艺、甚至京剧演唱。费用一般都非常合理,而且也不需要特别大量的辅助材料。唯一的要求就是要在一个地方足够久;最好不要在旅游景点参加这样的培训课程。
===武术和太极===
和中国传统文化艺术一样,有兴趣、有时间的人可以学学中国久负盛名的武术。有的武术,譬如说太极,学习的方法很简单,清晨直接去市区的随便哪个公园跟着那里的人练就可以了。您会发现那里有很多人很乐意做你的老师的。其他的武术就需要更加深入的学习了。著名的武术培训地有[[嵩山]]的少林寺和[[大理]]附近的无为寺。
===传统的消遣活动===
中国有很多可以在茶室、公共公园甚至在大街上玩的传统消遣。只要有摊子,一般都会吸引很多路人。起源于中国的策略游戏有围棋和中国象棋。麻将是一种以麻将牌作为道具的游戏,麻将在中国非常流行而且经常(也不是没有例外)都是玩钱的。各地的麻将规则不一样,所以每到一处,你都要学习新的麻将规则。麻将最有名的打法是广东麻将、台湾麻将和日本麻将。跳棋虽然不是起源于中国,但是在中国也有很多人在玩。很多中国打扑克的技艺都很精湛;邓小平先生对于桥牌的钟爱是远近闻名的。
==购物==
中国的官方货币是人民币,经常缩写为RMB。人民币基本单位是元(在纸币上写作“圆”),它的国际货币代码是CNY。所有的标记都是以元为单位的,不是¥就是“元”。在[[香港]]和[[澳门]]特别行政区人民币'''不是'''法定货币,这两地都自行发行货币。当然,香港有的地方也接受人民币,但是都是按照人民币和港币1:1的汇率来算的(截止2017年9月17日,1人民币=1.2400港元)。1人民币元=0.1581美元,1美元=6.3246人民币元(截止2018年3月20日)
{{infobox|小贴士|* 10 ''分''等于1 ''角''
* 10 ''角''等于1 ''元'',基本单位
* ''元'' 也称''块''
* ''角''也称''毛''
* 10大写为''十'',或者''拾''
* 100大写为''百'',或者''佰''
* 1000大写为''千'',或者''仟''
* 10000大写为''万''}}
元的下面是角,10角为一元,之后是分,10分为1角。分币现在基本上已经非常难看到了(可能在非常贫困的地区偶尔能看到)。一般价值10分的硬币叫做1角而不是10分。但是在口语[[漢語|普通话]]中,人们一般都说''块''而不是''元'',说''毛''而不说''角''。例如3.7元一般会被念成3块7(最后一位单位会被省略)。
在数字方面,请注意一般都会省略最后一位的单位,例如:530,会被念成五百三。而且注意在中文中有一个单位叫做''万''(十千),所以50000一般叫做五万而不是五十千。
中国的很多钱币都既有纸币又有硬币,包括很多零钱。有的地区纸币用的多一些,有的地方硬币用的多一些,但是无论纸币还是硬币在哪里都能用,根据中国法律,拒收人民币属于违法行为。角(1元的十分之一)也有纸币和两种版本的硬币。相反,一元却有硬币和两个版本的纸币(1999版人民币一元纸币底色为绿色,正面为花纹和毛泽东像,背面为杭州西湖“三潭印月”景色)。您最要会辨认不同版本的钱币。
===假币===
假币是一个很严重的问题。所有在中国待过几个月的人都会或多或少的有这方面的经历。从1元的硬币到10元、20元、50元和100元,都有假币。在中国生活的第一步是收到钱(即使是硬币)之后要仔细看看。看的时候主要要注意不同部分的质地、金线、和在不同光线下颜色的变化。如果您不懂您可以问别人,每个人都有自己的办法。
收银员在收到您的纸币后经常会仔细辨认。请不要生气,这并不表示他们怀疑您用假币。只是他们要负责任的。在您拿到零钱后也要仔细看看,特别是50元以上的。售货员有可能会想办法把他们从别人那里拿到的假币给您。
最近几年,ATM机吐假币(虽然不常见)成为一个很热门的话题。如果您担心从ATM机里拿到假币,那么请去银行柜台上,并告诉银行操作人员“我怕拿到假钱了”。一般银行人员都会理解的。
也听说有黄牛在中国边境处将假币兑换给游客,强烈建议去银行兑换货币(部分银行网点不能兑换)。
一般当您在商店或者出租车里支付50元或者100元时,您可以记住这张钱编号的最后几位。可能他会说您的钱是假的,这时候您可以保证他退回来的和您给出去的是同一张。
===货币兑换===
虽然中国现在仍然实行外汇管制政策,但是在很多国家都可以很容易换到人民币,特别是在亚洲。在中国兑换美元、加元、欧元、英镑、澳元、日元和韩元都是比较容易的。除了新加坡币之外,东南亚其他国家的货币一般比较难兑换。建议尽量到比较大的银行(比如BOC中国银行)或者授权的货币兑换点(一般高端酒店或者机场都有,但是汇率一般会有差异)兑换货币。
确实存在货币兑换的黑市,但是强烈建议您不要在黑市兑换因为在中国兑换货币时'''假币'''情况非常严重。对于在市场找到的或者银行周围溜达的黄牛一定要小心。虽然他们的汇率非常诱人,但是如果没有当地的朋友帮忙的话,'''不要'''跟他们兑换。经常会有兑换了一大笔钱之后发现拿到的大部分是假币。尽量在'''中国银行'''或者其他银行的柜台进行兑换,虽然他们的汇率相对要差一点,但是拿到假币的可能性几乎为零。
中国外汇管制很严格。在全世界的旅游景点和购物中心都很常见的私人的货币兑换点在中国却并不常见。在银行兑换货币一般需要5分钟到60分钟左右,有时候在酒店兑换会更快一点。一般就算大城市的支行都会对兑换流程很熟悉,操作的很快,而三四线城市的分行却不熟悉,操作相对要慢一些。
无论在哪里兑换,您都需要填一张表并出示您的护照。一般都要扫描您的护照并需要一份护照复印件。如果您计划带着较大金额离开中国的话,兑换收据要留好。注意,并不是每个有“Exchange”标识的银行都会给不是他们客户的人提供现金兑换服务。例如,渣打银行就只给他们的客户提供美元和港币货币兑换(但是,就算您拿到是旅游签证,开户也是可以的,而且他们的汇率要比大部分本地银行要优惠)。
用美元兑换人民币程序很简单,但是一般在兑换之前银行对您的钱看的很仔细。如果有机会在国外买入人民币的话(比如通过香港或者越南入境的话),应该在国外换,因为国外的汇率要好一些。要卖出人民币也是一样的,出中国边境之后卖出人民币的汇率也会更好一点。另外,大部分国际银行的储蓄卡或者信用卡都可以在中国的ATM机中直接支取人民币现金。但是,这样做的汇率非常不利而且手续费会非常高。建议随身带一点儿国际货币,例如英镑、美元或者日元以防您在附近找不到柜员机。
===銀行卡===
在中国接受銀行卡消費的小商鋪較為少见,多為大型消费场所接受。絕大多數接受銀行卡的商鋪均只接受中國銀聯卡。有部分较多中国以外游客受众的场所可接受 Visa/MasterCard 等国际组织通道的银行卡 ,但一般也是大型消费场所,如国际酒店,且有可能要求收取額外手續費。發現(Discover)卡與中國銀聯簽署了協議,允許於大陸地區的收銀機上作為銀聯卡使用,然而發現卡近期發行的芯片卡則可能需要多嘗試幾次或根本無法使用,且發現卡於線上並不能作為銀聯卡消費使用。雖然大來卡(Diner's club)目前屬於發現卡公司所有,但是於中國大陸並不可以作為發現卡或銀聯卡使用,覆蓋情況與美國運通(American Express)類似。
中国到处都有 ATM 机,所有的 ATM 机均接受中国银联卡,其中大部分的 ATM 也可接受 Visa/ MasterCard 卡组织的卡,部分机器也会支持 JCB/ 美国运通卡 ,中国以外发行的卡片在使用时必须在发卡方开通跨境取款功能,此外发卡方、卡组织、取款的 ATM 所属银行都有可能收取一定的手续费或兑汇费。
注意:虽然中國農業銀行、民生银行、深圳发展银行和上海银行等等許多銀行的 ATM 机上有时候会有 PLUS/ Cirrus/ Maestro 等标志,但是实际上只有个别的 ATM 机可以真正接受这些卡。而且能不能用只有您试了以后才能知道。絕對不可以依賴銀行卡作為唯一的支付與提現手段。
===移動支付===
中國的移動支付正在蓬勃發展中,類似微信支付、支付寶等基於二維碼(QR)的移動支付目前已經普及。幾乎所有接受小額支付的商鋪,甚至一些接受大額支付的商鋪,均接受至少一種使用二維碼的移動支付方式。如果您於商舖中看到一個印有上述軟體的 Logo 的二維碼,便意味著您很可能可以使用微信支付、支付寶等方式付款。随着该支付方式的发展,很多中国人已很少使用现金,甚至出门不需要带钱包了。
然而基於 NFC 技術的移動支付方式卻尚未於中國普及。虽然大部分终端已支持非接触式支付,但一般也仅限于使用银联芯片卡非接触,而不是通过手机 NFC ,即使可以使用,小型商铺的店员也会已不会使用等理由拒绝,接受 Apple Pay 的商鋪亦只能使用中国区或香港区 Apple Pay 中綁定的銀聯卡。 不过目前通过银联云闪付乘坐公共交通(城市内的公交,地铁等)已经被普及了,故在一定场合内NFC是可以使用的.
Google Pay 由于 Google 遭到封锁,故不可在银联终端上使用,即使您遇到接受 Visa/ MasterCard 的终端也不大有机会通过 Google Pay 消费,因为这些终端通常位于机场、国际酒店等大额消费场所,使用 NFC 非接是不被接受的,其他区域的 Apple Pay 同理。
截止2022年中国官方目前仍在部分地区试点数字人民币,数字人民币是与纸币一样,是中国官方承认的法定货币,具有可溯源的属性。可以实现无网络离线支付。
==饮食==
{{seealso|中華美食}}
中国有很多饭店和路边摊。如果您第一次来中国建议先尝试一下街头小吃。这一般比较便宜。
===地方菜系===
[[File:Guangzhou-Nur-Bostani-Restaurant-pseudo-bagels-0473.jpg|thumb|各种烘焙食品是中国西北穆斯林民族的饮食特点]]
*京菜:家庭面条和包子、北京烤鸭、甘蓝菜、棒极了的泡菜,不喜欢也可以极大的满足。
*宫廷菜:晚清宫廷食品,由慈禧而出名,可在北京的高端专业餐厅品尝。美食结合满族食品如独特的新奇事物如驼掌、鹿肉、鱼翅和燕窝。
*徽菜:中国八大菜系之一,特色菜品如毛豆腐,臭鳜鱼等。
*粤菜:大多数西方游客的风格在某种程度上已经很熟悉了。不是太辣,重点是新鲜煮熟的食材和海鲜。点心通常在早餐或午餐吃,是一个亮点。也就是说,正宗的粤菜在中国的各种菜系中广东的是有名的,即使在中国,他们非常广泛的定义什么是食物。
*沪菜:由于其地理位置,上海菜被认为是一个很好的混合北部和南部中国烹饪风格。最著名的菜肴是小笼包和韭菜饺子。另一个特色是“拉面”,从日本拉面和韩国碗拉面被认为是来自于此。糖通常被添加到炒的菜给上海菜味道甜甜的。
*川菜
*豫菜:即河南菜系,是对在带有中原传统文化内涵的烹饪理论指导下,运用具备中原地域特点的技术和材料所制作的菜肴、面点和筵席的总称。豫菜是中国各大菜系的渊源,被中国烹饪界称为中国八大菜系的“母菜”,有“烹饪鼻祖”和“中华厨祖”之称的伊尹便出生于河南[[洛阳]],当代豫菜是在原宫廷菜、官府菜、市肆菜和民间菜的基础上,根据中原物质条件,逐步积累演变而发展起来的。
因河南地处中原地区,其饮食文化口味因地域影响,河南北部多为面食,南部多为米饭。豫菜中一些菜名比较华丽优美,主要因为一些菜式源自于汉宋唐宫廷,有些饮食文化历史可以追溯到商周时期。
*湘菜
*潮州菜
*闽菜
*黔菜
*浙菜
*琼菜
*鲁菜:中国四大菜系之一(与川、粤、苏菜并称),选料考究,技艺精湛,主要流行与北方地区,对京津、东北等地的饮食产生影响。分为济南、孔府、胶东三支,代表菜有奶汤蒲菜、九转大肠、葱烧海参、油爆双脆、一品豆腐等。选料多为海鲜和肉类,孔府菜擅长素菜烹饪。口味偏重偏咸,擅长奶汤料理。除代表菜外,鲁菜家常菜也非常流行。
===快餐===
[[File:Xiao Long Bao by Junhao!.jpg|thumb|包子是一种很常见的食物]]
[[File:Chuan'r LED sign hanging in front of Beijing shop.jpg|right|thumb|烤串店可能会在店铺门口挂出来一个呈“串”字形状的灯]]
各种类型的中国食品都特别的快速、便宜、美味、方便。从各个城市都可以去买到吃的。[[北京]]王府井地区的小吃街是一个非常值得注意的旅游区,适合街头食品。在一些讲[[粤语]]的地区(主要是[[广东]],但不包括[[深圳]]),街头食品摊贩叫做盖宾洞,这样的企业可以发展成为一个实质性的业务,而在传统的街头食品意义上,这些摊位几乎不能“流动”。全国各地的快餐包括:
* 特别多的面包店。在中国发现的各种糖果和甜食通常作为零食销售,而不是西餐馆的餐后甜点套餐。
* 各种烤肉,包括羊肉串是非常常见的。
* 饺子,可以用来煮,蒸或油炸馄饨样物品与各种馅料。而且几乎遍布了亚洲。
* 包子,馒头里面塞满咸,里面是甜的或蔬菜馅或者肉馅。
* 馒头,可以看成是带皮的白色面包,也可以在中间加一点吃的。
* 兰州拉面,这个行业主要由回族族裔所主宰——寻找一家拥有穆斯林服饰工作人员的小餐厅,男士们戴着白色的帽子,女士们则戴着头巾。
* 在广东和其他地方则有点心,在中国的任何主要旅游目的地,您都可以找到为香港客户提供点心的人。
* 煎饼,一个鸡蛋煎饼,裹在一个带有酱汁的饼干和可选的辣椒酱。又被称为“煎饼果子”。
西方的快餐概念可以说与国内品种一样受欢迎。肯德基、麦当劳、赛百味和必胜客在中等城市及以上地区都是无处不在。汉堡王和棒约翰等中国连锁店也很普遍。这些包括德克士:鸡肉汉堡,薯条等,比肯德基便宜,有些人说得更好 - 还有(真功夫)——有更多的中国菜单。
===礼节===
尊老爱幼,文明用餐。
===买单===
在中国没有给小费的习惯,所以不需要,如果你想给服务员小费,他们可能会觉得这很奇怪;在中国使用移动支付非常方便,可以不带现金,非常方便的使用微信支付或者支付宝支付,但出门身上最好携带一些现金,以防出现意外,例如无法使用移动支付,或某些商人因过于年迈而未配备移动支付。
===在餐厅用餐===
===独自用餐===
==夜生活==
中国有很多酒吧、KTV等娱乐场所。有人说这很不安全。但是请放心,中国有全世界反应能力最快的警察制度。如果遇到危险请拨打报警电话110,警察会赶到并为你解决危险。
==住宿==
在中国只要不是偏远山区,就会有酒店。但是请注意在旅游景点,尤其是节假日时酒店价格会非常贵,高星级酒店为800<nowiki>~</nowiki>5000+元。
以上海迪士尼乐园酒店为例,(2017/09/18-2017/09/19 ,1 间房间 ,1 宾客)
9月份平常工作日价格(豪华花园景观房)为¥1,950元每晚(不含服务费)
10月份国庆假期价格(2017/10/03-2017/10/04 ,1 间房间 ,1 宾客)(豪华花园景观房)为¥2,750元每晚(不含服务费)
您可以在一些提供酒店预定服务的网站或者APP上提前查找并预定酒店,也许可以找到一些价格低廉的房间,有时候甚至可以用一百多人民币在北京住上两晚。
至于您选择的时间及其房型价格到底划不划算,就是仁者见仁智者见智了。
==学习==
{{seealso|前往中国留学}}
中國大陆主要大學有清华大学、北京大學、武汉大學、华中科技大学、南京大学、中山大学、浙江大学、上海交通大學、深圳大学、同济大学和复旦大學等。
==工作==
{{seealso|前往中國工作}}
近年来,中国增长非常之快,这有望成为世界上最大的经济体。尽管劳动力市场对于外国人的访问是困难的,然而,对于那些希望体验中国的人来说,有重要的机会。
就业机会包括英语教学,工程及跨国公司工作。
==安全==
在中国,游客的人身安全总体上可以得到保障,夜间主要街道也都基本安全,但是在人多的场合请务必保管好个人财物以免遭遇盗窃,小额的财物损失较难获得警方重视,追回的概率也不大,中国民间几乎没有枪械。中国的报警电话是110,火警是119,急救电话是120。
==医疗==
===流行病学===
除了所有旅行者均应接种的常规疫苗外,美国的疾病预防和控制中心(CDC)建议对下述传染性病原体缺乏免疫力的人士额外接种疫苗:
*大部分旅行者应接种
**甲肝疫苗(HAV)
**伤寒疫苗(Thyroid)
*部分旅行者应该接种
**乙肝疫苗(HBV),如果您可能与当地人发生性行为,或者在当地接受手术和纹身。
**日本脑炎疫苗(JE),如果您的旅程超过一个月或者您打算访问乡村地区。
**小儿麻痹症疫苗(Polio),如果您打算访问新疆。
**狂犬疫苗(Rabies),如果您可能接触犬类。
**黄热病疫苗(Yellow Fever)(中国境内并没有感染黄热病的风险,这么建议是因为中国政府强制性要求部分来自黄热病疫区的旅客接种,否则不让过关。如果您并非来自疫区,可以不接种)
**疟疾疫苗(Malaria),如果您前往亚热带地区。
有些疫苗从首次接种到免疫获得可能长达6个月,因此请提前接种。由于访问东亚国家时,大量推荐疫苗都是重复的,所以尽早接种,就算去不了也不亏,这免疫力以后还能用得上。
在新冠疫情影响下,注射满全流程新冠疫苗在入境前也是必须的.
==举止==
通常的'''[[用电|电力系统]]'''使用是220伏/50赫兹。一般都能支持两针欧洲和北美,以及三针澳式插头。但是,请仔细阅读设备上的电压信息,以确保它们在插入之前接受220V(两倍于许多国家使用的110V)的电压,否则可能会导致倦怠和对诸如吹风机和剃须刀等设备的永久性损坏。可以处理各种插头形状(包括英国)的通用延长线被广泛使用。
中国是右行制国家,这意味这车辆、行人、电车、火车等均应当靠右行驶——这和一些地方不一样。
对于比较长的街道的名称通常以中间词语表示街道的一部分。例如,白马街或白马路可以拆分为白马路、白马北路、白马中路和白马南路。除此之外,也可以使用“东”或者是“西”。
然而,在一些城市,这些名称并不表示某条街道的一部分。例如在[[厦门]],湖滨北路和湖滨南路平行,在湖的南北两侧东西走向。在[[南京]],中山路,中山北路和中山东路是三条独立的主要道路。
'''洗衣'''服务可能价格昂贵或难以找到。在一些高端酒店,每件衣物洗涤费用为10-30元人民币。一些地区的廉价酒店甚至没有洗衣服务,但在其他地区,如沿着[[云南]]的旅游线路,这项服务是常见的,而且往往是免费的。在大部分地区,除大城市中心地区外,您可以找到可以洗衣服的小商店。在大门上寻找的标志是洗衣,或者是从天花板上垂下来的衣服。成本约为每件2-5元人民币。在即使是最小的城市,干洗店网点的分布也广泛,可以洗衣服,但在某些地区,您将被卡在手洗衣服这个环节,这是耗时且令人厌烦的,所以可能选择快速干燥的面料,如聚酯或丝绸,如果你确实找到一家洗衣店的酒店,通常他们会把所有的衣服放在一起洗,甚至与酒店的其他物品一起洗,所以最好用携带浅色的衣服。
[[File:Jianshui - old city - P1370481.JPG|thumb|用来销售的传统烟管]]
禁止在公共建筑和公共交通工具上'''吸烟''',除了一些餐厅和酒吧(包括KTV)——其中许多是很明显的吸烟场所,虽然许多跨国连锁餐厅禁止吸烟。这些禁令在全国范围内得到执行。一般来说,[[上海]]和[[北京]]的吸烟法律是最严格的,而在其他地方则更为严格。许多地方(特别是火车站,医院,办公楼和机场)都会设有吸烟室,一些长途列车可能在每辆汽车的尽头都有吸烟区,'''中国高速铁路列车全列禁烟'''。非吸烟者的设施往往很差;在大多数餐馆,酒吧和酒店除了高端设施外不会有非吸烟区,尽管许多现代化的建筑物都有排烟系统,通过天花板通风口将香烟烟雾吸出房间——这意味着烟雾不会在室内飘着。
{{Cquote|我可以吸烟吗?}}
{{Cquote|禁止吸烟!}}
中国的公众假期值得关注。尽管在最受欢迎的旅游景点中,你永远不会独处,其中包括特殊山区,周末和公众假期的热门徒步旅行,但由于当地旅游业的关系,这些地区可能会接近无法通行。你可能计划作为一个沉思的徒步旅行,可能会变成一个多小时的队列!了解国庆节日期并据此计划([[w:中华人民共和国节日与公众假期|参见]])。
关于香港、台湾的政治和所属话题,请不要发表您的意见,也不要与人谈论——这涉及到较大的政治争议。
==通讯==
=== 电话 ===
{{seealso|中国大陆电话区号}}
中国大陆有四大国营电信运营商:中国联通、中国电信、中国移动和中国广电。中国联通和中国电信涵盖移动电话和固定电话业务,中国移动只有移动电话业务(和铁通合并后也有固定电话业务),为大陆规模最大的移动运营商。不过近年来也有虚拟运营商开始提供移动通信服务,这类运营商使用的170、171、173、176号段都是虚拟运营商的专用号段。中国广电成立于2014年5月28日,是唯一国家级智慧广电网络运营商、综合文化信息服务提供商、新型基础网络设施运营商和基础电信业务运营商。
中国比较大型的酒店一般都有直拨国际电话IDD,可以拨打国际和港澳台电话。很多酒店都有网线接口、无线Wi-Fi上网、语音留言系统、视频系统等,实现了方便快捷的通讯服务。
移动通信方面,中国联通主要使用FDD-LTE、中国电信使用FDD-LTE、中国移动仅使用TD-LTE作为4G制式。各家移动运营商的信号覆盖都很广。
电信诈骗案件在中国时有发生,如果你接到了陌生的电话或短信,千万不要向对方转账或付款。
=== 网络 ===
中国电信和中国联通是中国境内两大拥有全国性骨干网的典型运营商,因此相对于其他小型运营商而言,这两家的网络性能较好,同时价格也更高。大部分宾馆客房里都有互联网连接,不少机场、商场、饭店等公共场所也有无线网络覆盖,不过它们大多需要经过手机短信验证等步骤才能使用。
中国的网络审查很严格,连接部分外国网站时可能会遇到长城防火墙(GFW)封锁,Facebook、 Twitter、 Google(包括维基百科,YouTube)等服务也在其中(见[[w:中华人民共和国被封锁网站列表|已被大陆封锁的网站]]),不过有些技术(VPN)可以绕过此类封锁,建议有需求的游客提前下载好相应软件并做好配置(Google Play 商店 在中国也被封锁,因此 Android 设备用户须提前准备)。值得注意的是,私自使用VPN浏览被封锁的网站在中国大陆系违法行为,但警察通常不会对使用者进行处罚。
在中国,许多中国应用开发商会开发两套应用,一套在Google Play商店受到严格审查,另一套受中国工业和信息化简单审查的应用可以在开发者的网站上获取。
{{usablecountry}}
{{位于|东亚}}
{{geo|39|103|zoom=4}}
{{related|在中國駕駛}}
1ecew3cs6xq37e5cn0xmn8humxwkogy
183852
183851
2022-08-04T12:46:29Z
Taxi passenger
15345
/* 安全 */
wikitext
text/x-wiki
{{pagebanner|China_Banner_2.jpg|disambig=中國}}
{{quickbar
| image=Gran Muralla China5184.JPG
| caption=The Great Wall of China.
| location=LocationPRChina.png
| flag=Flag of the People's Republic of China.svg
| capital=[[北京]]
| government=Single Party Socialist Republic
| currency=人民币/港幣/澳门元
| area=(中華人民共和國)9,596,960 km<sup>2</sup>
| population=(中華人民共和國)1,411,778,724(2020年官方统计值)
| language=官方語言:[[普通话会话手册|現代標準漢語(普通話/國語)]]<br>汉语地區語言:[[吴语会话手册|吳語]]、[[廣東話會話手冊|粵語]]、[[福州话会话手册|閩東語]]、[[閩南語會話手冊|閩南語]]、[[湘语会话手册|湘語]]、[[赣语会话手册|贛語]]、[[客家语会话手册|客家語]]等<br>其他少數語言:[[维吾尔语会话手册|维吾尔语]]、[[哈萨克语会话手册|哈萨克语]]、[[蒙古语会话手册|蒙古语]]、[[藏语会话手册|藏语]]、[[朝鲜语会话手册|朝鲜语]]、[[柯尔克孜语会话手册|柯尔克孜语]]、[[壮语会话手册|壮语]]
| religion= 道教 30%、佛教 11-18%、基督教(新教、天主教)3-5%、伊斯蘭教 1.5-2%、三教、無神論 53-59%.
| electricity=220V/50Hz (澳大利亞2/3腳插頭)
| callingcode=+86
| tld=.cn
| timezone=UTC +8
}}
{{COVID-19 box|[[2019冠状病毒病|新型冠状病毒感染的肺炎]]在中国大陆境内的流行高峰期已经过去,但中国政府仍然实施“动态清零”政策,部分城市有封锁措施,部分公共场所可能关闭,防疫政策未完全取消。为了阻断境外输入病例,境外来华人士需接受为期10天(7天集中隔离医学观察+3天居家健康监测)的隔离观察,[[2019冠状病毒病 (中国)|在中国大陆境内旅游]]也需要遵循当地的防疫政策。前往已开放的室内公共场所,请佩戴口罩并配合出示[[w:健康码|健康码]]、登记个人信息等要求。
具体请见[[2019冠状病毒病 (中国)]]}}
{{Disclaimerbox|'''注意:'''<br/>
#本文帶有歐美國家的地域中心傾向,請協助修正。<br/>
#由于现实原因,本文大多數內容'''僅僅涉及中国大陆地区''';關於其他地區,請見:[[香港]]、[[澳门]]及[[台湾]]。<br/><br/>
注:某些習慣上,'''中國'''有時候只指'''不包括香港、澳門地區的中華人民共和國實際領土'''。[[香港]]和[[澳门]]都是中華人民共和國的特别行政区,实行“一个国家,两种制度(一国两制)”,与現今中国大陆的社會主義不同;台湾本岛、[[金门]]、[[马祖]]和[[澎湖]]被中華民國政權管轄至今。这样编写,维基导游并不代表'''任何一方的政治立场'''。<br/>
}}
'''中国大陆'''是由'''中华人民共和国'''实际統治的区域。中华人民共和国位于[[东亚]],是世界人口最多,面积第三或第四大(官方声称是第三大)的主权国家。有14个陆上邻国,分别为[[东亚]]的[[朝鲜]]和[[蒙古]],[[南亚]]的[[阿富汗]]、[[巴基斯坦]]、[[印度]]、[[尼泊尔]]、[[不丹]],[[东南亚]]的[[缅甸]]、[[老挝]]、[[越南]],[[中亚]]的[[塔吉克斯坦]]、[[哈萨克斯坦]]和[[吉尔吉斯斯坦]],以及[[北亚]]横跨欧亚大陆的联邦制国家[[俄罗斯]]。
==了解==
中华文明五千余年的悠久历史中,既经历过长期的太平盛世,也经历过无数次巨大的动荡和革命。很多诸如马可波罗和戈特弗里德·莱布尼茨这样的西方人士通过丝绸之路和过去几个世纪更多的文化交流方式对中国产生了巨大的兴趣,中华文明的深邃和伟大让他们深深地着迷。同时,现今的中国也是世界上最具有影响力的国家之一,中华文明将继续让全世界的旅行者兴奋着迷。
===历史===
{{seealso|中國歷代首都之行}}
若想知道中国的历史,请点选[[w:中国历史|中国历史]]及[[w:中华人民共和国历史|中华人民共和国历史]],那两大维基的条目有做详尽的历史写照。中国历经过的时期有:史前时期、传说时期、夏商周时期(含春秋、战国时代)、秦汉时期、魏晋南北朝、隋唐五代时期、宋辽夏金元时期、明清时期、中华民国大陆时期及现今的中华人民共和国,至今约有五千来年的历史。
===政治===
中华人民共和国是一个目前由中国共产党执政的国家,而共产党作为执政党可以领导政府,共产党的最高负责人为总书记,一般也是国家的实际最高领导人。国家主席是礼仪性的国家元首,一般都由总书记兼任。中国共产党中央军事委员会主席是最高军事统帅,但一般和国家主席、中国共产党中央委员会总书记是同一个人,所以中国共产党中央委员会总书记是实际上的最高统帅。政府由行政部门——国务院、一院制的立法机构和最高权力机构——全国人民代表大会(但是实质上,几乎每项法案的提案都要经由中国共产党中央政治局讨论,是实质上的议会,相当于英国的下议院、美国的众议院;经中央政治局通过后,再提交到全国人民代表大会或其常设机构——全国人民代表大会常务委员会通过,才能形成正式法案),还有国家军委、最高人民法院和最高人民检察院组成。中央委员会总书记既是国家最高领导人,拥有治理国家的全部权利,身兼国家军事主权和政治主权。现任中共中央总书记兼国家主席是习近平,国务院总理是李克强。
中华人民共和国的行政规划,中华人民共和国共有34个省级行政区域,包括23个省,5个自治区,4个直辖市,2个特别行政区。
包括:北京市,天津市,上海市,重庆市,河北省,山西省,辽宁省,吉林省,黑龙江省,江苏省,浙江省,安徽省,福建省,江西省,山东省,河南省,湖北省,湖南省,广东省,海南省,四川省,贵州省,云南省,陕西省,甘肃省,青海省,台湾省,内蒙古自治区,广西壮族自治区,西藏自治区,宁夏回族自治区,新疆维吾尔自治区,香港特别行政区,澳门特别行政区。一般每个一级行政区下都设有若干地级市等二级行政区,但四个直辖市和两个特别行政区下不设地级市。省政府拥有各自省内事宜的权力,而自治区政府比一般省政府都更大的自治权,但现实中一般不认为自治区和省有太大差别,所有自治区的政府除了可以使用自己独立的民族语言外,并无其他独立的司法和行政权。
与上述地区相比,香港特别行政区、澳门特别行政区和台湾省都有相对独立的政府部门,但是大陆政府主张它们是中华人民共和国的一部分。实际上,这是一个长久的争议话题,包括港独、台独、藏独等均是政治敏感话题,请不要与本地人谈论这些问题,以避免争吵。
===民族和习惯===
中国是一个有着不同文化、语言、习惯和经济水平的充满差异性的国家。经济发展状况的差异在全国各地尤为明显。但自从1980年代以来,邓小平政府宣布改革开放,开始实行社会主义市场经济并推行经济体制改革。中国大陆近年至2010年,GDP超过72000亿美元,已经成为美国之后的世界第二经济大国,普遍认为中国目前仍然是世界上发展速度最快的经济体,但是人均国民生产总值仍位于世界中等水平(第89位),并逐渐受到资源限制和贫富差距加大的制约。中华人民共和国省份中,广东为GDP最高的第一强省,浙江为人均收入最高的第一富省。中国的贫富差距正在日益趋于平均,截止2016年中国国内以几乎消灭贫困。所有乡村(包括大山深处的村庄)全部铺设了现代化道路,设有路灯。
这样一个幅员辽阔的国家,文化的多样性自然就不足为奇了。中华人民共和国官方承认的民族有56个,最大的民族是汉族,大约占人口总数92%。即便是汉族,也有很多相互之间不能理解的地方方言(例如粤语、吴语、客家语等);大部分语言学家把这些方言归类为基本都使用同一套中文文字的不同语言。很多少数民族也都有他们各自的语言。和大部分人所认为的不同的是,并没有单独统一的汉文化,虽然他们都有共同之处,比如儒家和道教思想,汉族本身的区域性差异也是非常巨大的。很多习俗和神灵都是有着明显的地域(有时候甚至村与村都不一样)特征的。春节和其他全国性的节日在各地也有着很大的不同之处。很多和婚礼、葬礼、迎接新生儿有关的习俗也都大有不同。总体说来,现代的中国社会没有明显的宗教倾向,并且在日常生活的背后还是隐藏着中国的传统文化。在少数民族中,壮族、满族、回族和苗族人口是最多的。其他主要的少数民族包括:朝鲜族、藏族、蒙古族、维吾尔族、吉尔吉斯人甚至还有俄裔。事实上,中国是除了韩国和朝鲜之外朝鲜族人口最多的,而且中国的蒙古族人数比蒙古共和国的蒙古人都多。很多少数民族都有不同程度的语言和风俗的流逝。
在海外部分中国人的行为或许不能被接受:
* 吸烟:几乎所有地方,包括有“请勿吸烟”标示的地方,包括健身俱乐部、足球场甚至医院,都有人在角落吸烟。北京现在不允许在大部分餐厅吸烟,也很少有餐厅会有吸烟区域。对于公共场合禁烟,各地执行程度不一。在一些并不高档的场所,一般都没有摆设烟灰缸。在中国,民航客机和高速铁路列车是对禁烟执行的最为彻底的公共场所。如果您所在的国家在绝大数公共场合已经进行了禁烟,那么您可能会对中国社会的禁烟力度感到遗憾。
* 盯着看:这在很多国家都很常见,但是几乎都是出于好奇而不是敌意。如果有人向你走过来然后端详你(就像看电视那样),请不要过度反应,这是没有什么害处的!少部分时间中国人看待日本人是有一定敌意的,这个国家给中国造成了不可磨灭的民族伤痕。但这部分中国人中也有人开始逐渐接纳日本人的优点。
* 喝酒:在吃饭的时候晚辈给年长的人敬酒是很常见的。别人敬酒你不接(即使是出于善意)也会被认为是很大的不尊重。
* 大声说话、吵闹或者吵架:这都很常见。这估计是您刚到中国发现的第一个现象。大声说话虽然有可能是因为说话者生气了或者在吵架,但是并不一定是这样,中国的有一部分民族因为生活中需要大声交流,所以保留下来了说话声音比较大的习惯,但如果你能提醒他小声一点,只要能听得懂你的语言,所有中国人都会去注意自己的言行。在中国诸如打架这样的暴力事件并不常见,但是也会发生。如果发现这样的事情,请离开,不要参与。在中国几乎从来没有人将外国人做为攻击的目标,只要作为外国人的您不是十分过分,那么一般中国人都是非常尊重您的。如果您在乘长途汽车或者火车时无法接受这种现象可以寻找工作人员协助处理。
有些长期居住在中国的外国人说这些现象日益恶化,而有些人说的却正好相反。通常来说,有可能是因为有时大量对于城市生活不熟悉的农民工涌入了城市。
总体来说,中国人还是比较爱说爱笑的,因为中国本来就有很多民族,而且还有很多从其他地方来的外来人,所以他们也习惯了以不同的方式处理事情。确实,中国人走到一起的一个常见话题之一就是讨论各自方言之间的异同。他们都很习惯打手势,而且对于非语言的笑话或者双关语反应得很快。中国人非常喜欢小孩,对他们很宠爱,并且关心得无微不至,这是中国人民对生命的尊重,孩子是人类的未来。如果您有小孩的话,也一起带上吧!
====数字习俗====
对于大部分中国人来说3、6、8、和9是吉祥数字。
* “三”意味着三阳开泰,三阳预示着福、寿、禄三路神仙。
* “六”代表着六六大顺。很多人都选带六的日子来结婚,比如说6号,16号或者26号。
* “八”(bā)听起来像发(fā),所以很多人都相信八是和财运联系在一起的。所以,2008年的北京奥运会选在2008年8月8日开也没有什么好奇怪的了。
* “九”被认为有长长久久的意思,并且在中国人的思想中为最大。
* “四”(sì)对大多数中国人来说是一个忌讳,因为发音听起来像“死”(sǐ)。所以在中国的一些大型商场、住宅里面,索性直接跳过4号楼,3号楼的下一号楼是5号楼。
* “73”、“84”在中国老人中也是比较忌讳的两个数字。因为在中国古代的圣人中,孔子是在73岁时去世的,孟子是在84岁时去世的。
* “250”在中国大众中也是一个特别不受欢迎的数字。人们常把说话不正经、办事不认真、处事随便、好出洋相、脑袋很笨的人叫做“二百五”,是用来骂人的脏话。
* “38”多指比较八卦、啰嗦、嫌人的女人,也可以指有这些特征的像女人一样的男人,也是用来骂人的脏话。
* “2”是指对方极为愚蠢,笨蛋的脏话,主要用于北方地区。
* “18”,中国有“十八层地狱”一说,部分住宅的18层用17A代替或做其他用途。
总体而言,中国人喜欢谐音。有时“四”也可以是吉祥数字。很多人在2013年1月4日注册结婚证,因为那一天听起来像是“爱你一生一世(201314)”。
==== 送礼习俗 ====
{{cquote|礼尚往来,往而不来非礼也,来而不往亦非礼也。}}
说的便是中国人们的礼物交换。中国自古以来就有“礼仪之邦”之称,礼被认为是中国传统文化的核心,是中华民族宝贵的精神财富。“礼之用,和为贵”实际上揭示了中国传统礼的本质精神。邓云乡著《红楼风俗谭》把其中的送礼分为八类,概括了送礼的大体类型:
# 纯属友谊情感的馈赠。如第三十一回写史湘云送姐妹们绛纹石戒指,东西虽小,但有送有收,也属送礼。
# 初次见面的馈赠,即常说的见面礼。其中有为友情的,有因礼貌的,还有另存目的的,情况较为复杂。
# 红、白喜事的送礼。娶亲、聘女、过寿是红喜事;死人是丧事,但白寿也当喜事办,叫“白喜事”。此外尚有盖房上梁、乔迁新居、做佛事等,都当喜事送礼。各种红白喜事送礼,除关系特殊者外,一般是“礼”的成分多而“情”的成分少了。
# 生日送礼,一般生日与整寿祝寿的礼不同,所送礼物也因过生日者的身分地位而有区别。
# 节礼,过年、元宵、清明、端午、中秋、冬至、腊八等大小节日都要送礼。节礼亲友之间要送,上下级之间要送;宫廷也要向王公贵戚家送,不过不说“送”,而叫“赏”。还有借送节礼来“打秋风”的,即倚仗权势,借着给富豪之家送一点不值钱的礼物(如年节送对联等),换取银钱财物等价值更重的回礼,其送礼为名,图利是实。
# 送土特产,过去叫“馈送土仪”。古代旅行不易,长途跋涉到外地,总要带些地方特产送礼。如《红楼梦》第十六回写黛玉由江南回来,“将些纸笔等物分送与宝钗、迎春、宝玉等”,也属于这一类。
# 穷富亲友之间的礼物。如刘姥姥和荣国府之间的礼物往来,虽然刘姥姥只送了点瓜果干菜而却得到了更多的回礼和资助,但其性质不同于“打秋风”、敲竹杠。
# 钻营的送礼。即以送礼为手段去结交权贵,拉拢关系,进而达到投机钻营的目的,得到更大好处。这在政府的治理之下,逐渐减少了。
除此之外:
* 中国人忌讳送伞,因为“伞”(sǎn)谐音“散”(sàn)。
*在中国也尽量避免送鞋,特别是情侣之间。因为送鞋代表着分离,通常会用作分手礼品所用。
* 在中国,给人送礼千万不能送钟(尤其是给老人和病人),因为“送钟”在汉语中与“送终”(sòngzhōng)读音相同。
* 送水果时,不能送梨,因为中国人不喜欢分离。而“梨”与“离”(lí)同音。
* 中国人喜欢带有蝙蝠图案的物品,“蝠”与“福”(fú)同音。
* 中国人不会当着客人的面打开礼物,必须由收礼者打开,或者等到送礼人离开时才能打开。否则会被认为是不礼貌的行为。这与西方不同。
==== 做客习俗 ====
* 一般不用提前通知主人,但要接受别人的邀请,否则将被视作无礼。
* 在每个地区,都会有相应的礼节与忌讳,请入乡随俗。
===气候和地形===
由于中国地域广袤,所以气候会复杂多样,从南方的热带地区到北方的亚北极。[[海南]]岛的纬度和牙买加大致相同,而[[哈尔滨]],中国北方最大的城市之一,则和蒙特利尔的纬度和气候相当。中国北方四季分明,夏天炎热,冬天寒冷。而南方气候就会更加温润。越靠近西北气候越干燥。一旦您离开中国东部,踏上壮丽的西藏高原或者甘肃和新疆的草原,那么您会领略到那里的土地很辽阔。
在计划经济时代,规定在秦岭淮河以北地区可以供暖,而长江以南地区不能供暖——这意味着像上海、南京这样的城市,虽然温度经常低于零度,但是依然没有暖气。这一规定虽然早就失去了原来的作用了,但是影响还是显而易见的。总体说来,中国人暖气使用较少,建筑的隔热也较少,在相同的天气下,中国人比西方人穿得厚。在学校、商场或者办公楼,就算房间里面有供暖,过道也是没有的。很少有双层玻璃窗。学校的老师和学生在教室都穿冬装。空调虽然日渐普遍,但是过道同样没有,并且经常都是门窗大开。
中国的地形范围很广,内陆有山脉、高原,中部和西部有戈壁。东部则以平原、三角洲和丘陵为主。广州和香港周围的珠三角地区和上海周围长三角地区是全球经济的动力中心,还有北京周围的华北平原和黄河流域。[[珠穆朗玛峰]]处于西藏自治区和尼泊尔的边境上,高度为8848米,是世界上最高的山峰。西北部新疆维吾尔自治区的[[吐鲁番]]盆地是中国的最低点,海拔为-154米,它也是世界陆地中仅次于[[死海]]海拔第二低的地方。
===节假日===
{{seealso|中国黄金周}}
中国每年有六个重大节日:
* '''农历新年'''或者春节——是农历的新的一年的开始,但不止是农历正月初一,民间从农历十二月(被称为腊月)廿三(或廿四)到正月十五,公历一月底到二月中旬。春节是中国全民最大的节日,所有民族都会一同庆祝。相当于欧美国家的圣诞节。
* '''清明节'''——一般在4月的4-6日间,或者叫扫墓日,这一天所有人都去给自己的先人扫墓并送上祭拜品。通往公墓的交通在这一天会非常拥堵。
* '''劳动节'''——5月1日
* '''端午节'''——农历的五月初五,一般在公历的5月到6月之间。这一天人们要赛龙舟、吃粽子。
* '''中秋节'''——农历八月十五,一般在公历10月份。中秋节是中国仅次于春节的隆重节日。中秋节起源于上古时代,普及于汉代,定型于唐朝初年,盛行于宋朝以后。中秋节是秋季时令习俗的综合,其所包含的节俗因素,大都有着古老的渊源。中秋节以月之圆兆人之团圆,为寄托思念故乡,思念亲人之情,祈盼丰收、幸福,成为丰富多彩、弥足珍贵的文化遗产。在这天大家会一同食用月饼,又叫月团、丰收饼、宫饼、团圆饼等,是古代中秋祭拜月神的供品。月饼最初是用来祭奉月神的祭品,后来人们逐渐把中秋赏月与品尝月饼,作为家人团圆的一大象征。
* '''国庆节'''——10月1日,是为了庆祝1949年新中国成立。
春节和国庆节一般假期都不止一天;几乎所有工人春节假都有至少一星期,有的甚至有两星期或者三星期,学生会放四到六周寒假。国庆放假一般一星期。
'''春节'''期间一般都很忙。这不仅仅是最长的假期,而且也是传统走亲访友的时间。这一段时间,整个国家基本上都处于休息状态。基本上所有外出打工的人都会回家。这几乎是他们回家的唯一机会。人人都想回家,中国人口众多!在春节期间,很多商店都会关门好几天、一周,甚至更久,因此,如果您在中国大陆没有亲戚或者好友,那不建议您在这一段时间去中国旅游。
在七月初的中国大陆,会有大批大学生放假回家(约两千多万!),然后在八月底他们又要返校,这段时间从东部沿海地区到四川、甘肃、西藏和新疆的交通格外拥堵。
如果要列出一个中国节日的完整清单的话,那么这个清单就会很长,因为很多地区和民族都有他们独特的地方性节日。以下是上面没有提到的但是同样是非常重要的节日:
* '''元宵节'''(或者上元节)——农历正月十五,紧随春节,一般在公历的二月到三月。在很多城市,例如泉州,全市上下都会被装点上各式各样的灯笼。
* '''七夕'''——农历七月初七,是中国的情人节。
* '''中元節'''——农历七月十五,又称“鬼节”。
* '''重阳节'''——农历九月初九,一般在公历的10月份。
* '''冬至'''——12月22日或者23日。
除了以上的节日,中国很多地方,特别是大城市,也过西方的节日。在圣诞节期间,大街小巷都能听到圣诞颂歌,大部分都是英文的,也有中文版本的。很多商店都会进行装饰,有的店员会穿上圣诞的衣服。情人节期间,很多餐馆都会推出特殊的晚餐。中国大陆的基督徒也会在政府批准的新教和天主教教堂举行礼拜或者弥撒。
===书籍===
'''旅游篇:'''
* '''马可.波罗游记''',作者马可.波罗 - 威尼斯旅行家在中国的旅途故事(''参阅:'' [[On the trail of Marco Polo]])
* '''Dialogues Tibetan Dialogues Han''',作者:Hannü (''ISBN 9789889799939'')
* '''Behind the Wall- A journey through china''',作者:Colin Thubron. Thubron重述了他1987年在中国从北京到嘉峪关的旅行。
'''文学篇:'''
* '''《大地》''',作者赛珍珠 - 关于20世纪世纪之交时中国农民生活的经典之作,赛珍珠点燃了20世纪30年底美国公众对于中国的兴趣。赛珍珠女士关于中国的作品使她获得了1938年诺贝尔文学奖。
* '''《三国演义》''' - 中国经典名著,讲述了汉朝末年三国时期群雄并起的年代中的英雄豪杰。以对于兵法和政治策略的描述见长。四大名著之一。整个东亚地区,不断有关于这一题材的电视、电影、动画和游戏。
* '''《水浒传》''' - 一个关于在宋代时期居住在淮河流域的人和腐朽的政府相抗衡的故事。以主角们对于现实统治的反抗而著称。四大名著之一。
* '''《西游记》''' - 可能是最出名的中文小说,关于唐僧在孙悟空、猪悟能(八戒)和沙悟净的协助下西天取经的玄幻小说。以出色的想象力见长。四大名著之一。
* '''《红楼梦》''' - 贵族家庭三家人的恩恩怨怨。以对中国贵族家庭生活的入微描写而见长,被认为是中国文学的顶尖之作。四大名著之一。
* '''《红高粱家族》''' - 背景是民国时期的山东高密,男女主人公历经曲折后一起经营一家高粱酒坊。但是在日军侵略战争中,除男主人公(姜文扮演)及幼子外,女主人公和酒坊伙计均因参与抵抗运动被日本军虐杀的故事。作者莫言获得2012年诺贝尔文学奖。
'''历史篇:'''
* '''《紫禁城的黄昏》'''作者:R.F. Johnston (''ISBN 0968045952'')。Kindle上也有。Johnston(庄士敦)是历史上唯一一位被允许进入小朝廷的外国人,他生于英国,是皇上的老师。庄士敦身居高位,在紫禁城和颐和园都住过。《紫禁城的黄昏》是对于他亲眼所见的重大事情的陈述。
* '''《追寻现代中国》'''作者:Jonathan Spence - 是一部由耶鲁大学教授撰写的1644年以后的中国历史。
* '''《万历十五年》'''作者:黄仁宇 - 描述了中国明朝的一个多事之年。它是一部关于这个时期的最著名的史学著作。
* '''《中国新史》'''作者:John K. Fairbank - 一名美国著名学者的最后一部著作,它对现代汉学有着深远的影响。
* '''《剑桥中国史》''' - 剑桥大学出版社出版的一个系列,包括了早期和现代中国历史。这是最大最全面的关于中国历史的英文著作。
* '''《开放的帝国:1600年前的中国历史》'''作者:Valerie Hansen - 详细地描述了从商代到明朝中国历史、文化、社会经济的发展。
* '''《1421中国发现世界》'''作者:Gavin Menzies (''ISBN 0553815229'') - 关于中国对于探索世界并绘制世界地图所作出的努力,这本书颇有争议。有意思的是,本书暗含中国是发现新大陆的第一个国家,而各界对这一观点都表示批评的态度,并指出这是中国学术界的臆想。
* '''《北京的六分仪》'''作者:衞周安 - 总结了关于中国比想象中开放而且并不如想象中排外的近代思想。
* '''《南京大屠杀》''' 作者:Iris Chang (''ISBN 0140277447'') - 被世人遗忘的二战大屠杀。
* '''《拉贝日记》''' 作者:John Rabe - 对于二战中日本军人所犯罪行和Rabe最终成功拯救大约250000无辜生命的第一首描述。
* '''《红色中国布鲁斯——从毛到现在,我的长征》'''作者:黄明珍,加拿大环球邮报记者。概述描述了他作为第一个外国交换生在文革后的中国生活以及他一直到20世纪90年代中期作为一名记者在中国的生活经历。
===电影===
*贝纳多·贝托鲁奇 - '''《末代皇帝》''' (1987)
*张艺谋 - '''《大红灯笼高高挂》''' (1991)
*陈凯歌 - '''《霸王别姬》''' (1993)
*张艺谋 - '''《活着》''' (1994)
*吴子牛 - '''《南京1937》''' (1995)
*吴天明 - '''《变脸》''' (1996)
*张艺谋 - '''《有话好好说》''' (1997)
*谢晋 - '''《鸦片战争》''' (1997)
*张扬 - '''《洗澡》''' (1999)
*冯小刚 - '''《没完没了》''' (1999)
*张艺谋 - '''《一个都不能少》''' (1999)
*王小帅 – '''《十七岁的单车》''' (2001)
*张艺谋 - '''《千里走单骑》''' (2005)
*吉安尼·阿米里奥 - '''La stella che non c’è''' (《消失的星星》) (2006)
*张元 - '''《看上去很美》''' (2006)
*李仁港 - '''《三国之见龙卸甲》''' (2008)
*罗杰·斯波蒂伍德 - '''《黄石的孩子》''' (2008)
==地区==
一般情况下,中国被分作了七大地理区域,分别为华北、东北、西北、华东、中南和西南,这里并没有采用这样的划分方法,而是做了一些调整,使之更适应于旅行者。由于现实原因,这里只包含了中国大陆。
{{Regionlist
| regionmap=Map of China (zh-hans).png
| regionmaptext=中国大陆地理分区(此图不含[[南海诸岛]])
| regionmapsize=500px
| region1name=[[中国东北|东北]]
| region1color=#d5dc76
| region1items=[[辽宁]]、[[吉林]]、[[黑龙江]]
| region1description=历史上被称作满洲,而现在被称作东北,包含了“老工业区”城市、广阔的森林、漫长多雪的冬天。
| region2name=[[华北]]
| region2color=#b383b3
| region2items=[[山东]]、[[山西]]、[[内蒙古]]、[[河南]]、[[河北]]、[[北京]]、[[天津]]
| region2description=黄河流域,中华文明的摇篮和历史中心。
| region3name=[[中国西北|西北]]
| region3color=#71b37b
| region3items=[[陕西]]、[[甘肃]]、[[宁夏]]、[[青海]]、[[新疆]]
| region3description=长安,中国1000年来的故都,丝绸之路向西延伸横跨沙漠、山脉、草原游牧民族地区和伊斯兰地区。
| region4name=[[中国西南|西南]]
| region4color=#4da9c4
| region4items=[[西藏]]、[[云南]]、[[广西]]、[[贵州]]
| region4description=异国情调、少数民族、壮丽的景色和背包客的天堂。
| region5name=[[华南]]
| region5color=#a78379
| region5items=[[安徽]]、[[四川]]、[[重庆]]、[[湖北]]、[[湖南]]、[[江西]]
| region5description=长江流域、农场、山区、河流峡谷、温带和亚热带森林。
| region6name=[[中国东南|东南]]
| region6color=#ffd0d0
| region6items=[[广东]]、[[海南]]、[[福建]]
| region6description=传统贸易中心、强大的制造业与海外华人的祖籍。
| region7name=[[华东]]
| region7color=#d56d76
| region7items=[[江苏]]、[[上海]]、[[浙江]]
| region7description=“鱼米之乡”(相当于中国的“牛奶和蜂蜜的土地”),传统的水乡,和当代中国的主要经济中心。
}}
== 城市 ==
中国有许多著名的大城市。
* [[北京]],中国首都和文化中心,2008年奥运会和2022年冬奥会的举办城市。金、元、明、清、中华民国(北洋政府时期)等五个朝代在此定都,因此分布着大量的历史古迹。
* [[天津]],紧邻北京市的城市,有很多西方国家曾在此设立租界,因而拥有大量的西洋历史建筑,海河的夜景以及各式各样的桥梁是天津景观的特色。北京到天津的高速铁路车程约30分钟。
* [[上海]],中国人口最多的城市和经济中心,富有很多购物场所。
* [[南京]],“六朝古都”“十朝都会”,一个有很多历史古迹的地方,江苏省省会。
* [[苏州]],一座具有千年历史的古城,有着很多中式的园林。
* [[杭州]],“上有天堂下有苏杭”,著名的丝绸产地之一。
* [[郑州]],“绿城”,华夏文明发祥地,是轩辕皇帝的故里,河南省省会,具有少林寺等众多景点。
* [[西安]],“十三朝古都”,兵马俑、华山等旅游景点世界闻名,陕西省省会。
* [[厦门]],福建省沿海的滨海城市。
* [[大连]],辽宁省的滨海城市,世界花园城市,经济发达。
* [[青岛]],山东省的滨海城市,经济发达。
* [[广州]],中国南方最发达的城市之一,岭南地区的文化中心。
* [[深圳]],中国南方经济最发达的城市之一,以金融业和高科技产业而闻名,但旅游资源匮乏,与[[香港]]接壤。
* [[武汉]],中国中部经济最发达的城市之一,别称“江城、东方芝加哥”,湖北省省会,有“九省通衢”的美誉。
* [[成都]],中国西部经济中心之一,中国国宝大熊猫繁育基地所在地,三国时期“蜀国”的首府。
* [[重庆]],中国西部经济中心之一,在第二次世界大战期间为中华民国的临时首都,现为中国面积最大的直辖市。
* [[桂林]],“桂林山水甲天下”,是一个非常受欢迎的旅游目的地。
* [[昆明]],“春城”,云南省省会。
* [[沈阳]],“一朝发祥地,两代帝王都”,辽宁省省会。
* [[合肥]],综合性国家科学中心,“一带一路”和长江经济带战略双节点城市,国家重要的科研教育基地,现代制造业基地和综合交通枢纽,安徽省省会,700万人口。
* [[宁波]],简称甬,世界第四大港口城市,中国大陆综合发展水平前15强中心城市,长三角五大都市圈中心城市之一,长三角南翼经济中心,国家历史文化名城,连续五次蝉联全国文明城市。
你可以乘坐四通八达的[[高铁]]前往上述这些地方旅游。
==其他目的地==
* [[万里长城]] - 长度超过8000公里,这个古长城是中国的象征。
* [[兵马俑]] - 中国十大名胜之一,号称“世界第八大奇迹”,被联合国教科文组织列为世界文化遗产。
* [[海南]] - 热带天堂岛屿,目前正在进行大规模的旅游开发。
* [[九寨沟]] - 以熊猫栖息地、美丽的瀑布和多彩的湖泊闻名。
* [[乐山]] - 以一整座山雕刻而成的乐山大佛而闻名(靠近[[峨眉山]])。
* [[喜马拉雅山]] - 在西藏和尼泊尔交界处,世界上最高的山脉。
* [[泰山]] - “五岳”之首,中国道教五大圣山之一,由于其历史渊源也是登山人数最多的山。
* [[西藏]] - 西藏大部分都是藏佛教教徒,有浓郁的传统西藏文化,感觉好像身处于另一个世界。
* [[吐鲁番]] - 在新疆的穆斯林地区,这一地区以葡萄、严峻的天气条件和维吾尔族文化闻名。
* [[云冈石窟]] - 这些依山的洞穴和石窟总数超过50个,石窟中有超过51000个佛像。
* [[黄山]] - 中国十大风景名胜之一,世界文化与自然遗产,同时也为世界地质公园。
==抵达==
===签证===
{{seealso|w:中华人民共和国签证政策|香港出入境手冊|w:澳門簽證政策}}
大部分访问大陆的游客都需要签证(visa)。大部分情况下,您需要在离开前从中国大使馆或者领事馆获取签证。前往香港和澳门的签证也可以在中国大使馆或者领事馆申请,但是不能和前往大陆的签证有所区分。但是,[[香港]]和[[澳门]]对大部分西方国家游客免签。
但是,这一规定最重要的一个例外是在某些机场的转机大部分机场允许乘客没有签证而在机场待24小时(前提是旅客不离开机场),但是上海浦东机场和虹桥国际机场允许没有签证停留48小时。
对于大多数外国公民,以任何理由进入中国大陆基本上都是需要签证的。然而,[[日本]]、[[新加坡]]和[[文莱]]公民可以免签证在中国大陆停留15天。此外,根据双边协议,[[白俄罗斯]]、[[格林纳达]]、[[汤加]]、[[塞舌尔]]、[[巴哈马]]、[[巴巴多斯]]、[[斐济]]、[[卡塔尔]]、[[塞尔维亚]]、[[厄瓜多尔]]和[[阿联酋]]公民可以免签证在中国大陆停留30天。[[毛里求斯]]公民可以免签证在中国大陆停留60天。上述国家的公民以免签证待遇入境后只能进行旅游、探亲访友、商务等活动。[[圣马力诺]]、[[波黑]]和[[亚美尼亚]]公民则可以以任何理由免签证进入中国大陆并停留90天。
[[香港]]和[[澳门]]的中華人民共和國籍公民访问中国大陆时需要向中国旅行社申请回乡证,中旅是唯一的授权机构。回乡证大小和信用卡相同,有效期1年,在有效期内都可以停留,也没有雇佣方面的任何限制。[[臺灣|台湾]]居民可以在[[大连]]、[[福州]]、[[海口]]、[[青岛]]、[[三亚]]、[[上海]]、[[武汉]]、[[厦门]]的机场以及在[[香港]]和[[澳门]]的中旅申请有效期为3个月的入境文件。台湾旅客必须持中华民国护照、台湾人身份证和台胞证。可以在[[大连]]、[[福州]]、[[海口]]、[[青岛]]、[[三亚]]、[[上海]]、[[武汉]]、[[厦门]]机场申请台胞证。入境费用为100元加上50元一次性台胞证。旅客出行前须查看最新的政策信息。
{{infobox|签证类型|
* '''G签''' - 中转
* '''L签证''' - 旅游、访亲
* '''F签证''' - 商务、实习、短期调研
* '''Z签证''' - 工作签、多次出入
* '''X签证''' - 6个月以上学习
}}
旅游签证申请比较容易,也不需要邀请函(商务签和工作签都需要)。一般的单次旅游签停留期是30天,有效期是三个月。双次出入境签证有效期为六个月。有的国家的游客可以拿到90天的旅游签。
可以在各地出入境管理局申请旅游签延期,需要的资料是:有效护照、签证延期申请表(含两张2寸证件照),一份您在当地派出所拿到的临时居住表。[[上海]]的进出境管理局位于浦东明生路1500号。延期需要5个工作日。
有的旅客需要双次签证。例如,如果您持有单次签证,然后您去了香港或者澳门,从那里再次返回中国大陆则需要新的签证。按照规定,在香港,多次出入境签证只能给持香港身份的人,但是相关部门愿意稍加变通,也可以给短期的相关居民(包括交换生)三个月的多次出入境签证。在这种情况下,建议直接向中国政府申请,因为有的代理人不愿意代表您提交这样的申请。
落地签只能在[[深圳]]或者[[珠海]]的经济特区申请,也只能在这些地区使用。在经由罗湖火车站(一定记住不是[[落马洲]])前往[[深圳]]时,可以获取只限于深圳使用的有效期5天的签证,申请时间不限于工作时间,很多国籍游客([[爱尔兰]]、[[新西兰]]或者[[加拿大]])的现场申请费用为160元(2007年10月的价格),但是[[美国]]游客''不能申请'',而[[英国]]游客则须支付450元。现在该签证办公室只接受人民币,请一定记得带上足够的现金。
到2013年,大部分过境旅客可以获取仅适用于[[上海]]和[[北京]]的72小时的落地签。
由于政治原因,签证政策可能会不断变化。例如:
* 作为对[[美国]]提高中華人民共和國內地游客签证费用的报复,美国国籍游客签证费被增加到140美元(旅游团为110美元)
* 香港颁发的签证一般限制在30天内,多次出入境的签证变的很难拿到甚至会拿不到。
几年之前,Z(工作签)证是长期签证。现在Z证只能在中国国内待30天;一旦您在中国,雇主须为您办理居住证。实际上,这才是多次出入境签证,您可以用它往返中国。如果您持旅游签来中国,有的签证部门会拒绝为您办理居住证明。这种情况下,您需要使用工作签。工作签只能在国外申请,因此您可能需要去香港或者韩国(请注意,因为首尔的中国领事馆不给非韩国居民办理签证,所以没有外国人等级证的游客必须到釜山)。工作签需要雇主的邀请函。有时候也可以将L签(旅游签)转为Z签(工作签),这都取决于办理签证的具体公安局和您雇主是否有足够的关系。
和中国公民结婚的外国人(见[[中国婚姻]])可以选择办理6-12个月的''探亲''签证。''探亲''签实质上是L签,但是它允许您在签证有效期内一直停留在中国。想要申请''探亲''签的人要先以其他签证进入中国,之后在您婚姻登记所在地的公安局(一般是您配偶的户籍地)办理。办理时需要带上您的结婚照和您配偶的身份证。
大部分外国人可以在[[蒙古]]的[[乌兰巴托]]办理签证。[http://mn.china-embassy.org/eng/lsfw/ 领事馆网站]。在旺季,领馆可能在中午11点之后就拒绝办理。可能会有很长的队,所以您需要来的早一点。并且,中国重大节日期间,使领馆都会休息几天。
====住所登记====
如果您住在酒店或者宾馆中,在您入住时酒店人员可能会要求看甚至要扫描您的护照、签证和入境章。
如果您住在私人住所中,理论上需要您在到达的24小时(市区)或者72小时(农村)内在当地公安局登记,但是,这条法律在现实中很少(如果一定要说有的话)有人执行,只要您不惹麻烦就行。警察会问你要:
# 您护照的复印件
# 签证复印件
# 入境章复印件
# 照片
# 您居住场所的凭证。凭证上的名字可以不是您的名字。
* 您每次来中国都需要登记(有居住证的例外-居住证持有者只需在新签证办理完后登记即可)
* 如果您不登记,有可能会受到500元以下的罚款。
* 手续比较长(3个多小时),最好带上翻译(在上海,只要您有任何形式的居住许可就不用办理登记)。
===乘飞机===
进入中国大陸的主要门户有[[北京]]、[[上海]]和[[广州]];近來許多大型城市也陸續開通洲際航線,[[武漢]]、[[成都]]、[[西安]]、[[重慶]]、[[昆明]]等;[[烏魯木齊]]因為比鄰中亞的地緣優勢,也開通了前往獨立國協國家的航班。几乎每个有一定规模的城市都会有一个国际机场,但是運營範圍以區域航線如[[香港]]、[[韩国]]、[[日本]]、[[东南亚]]為主。
{{infobox|到香港和澳门|
如果您到了香港或者澳门,有渡船可以将您直接送到其他地方,比如蛇口、[[深圳宝安机场]]、[[澳门国际机场]]、[[珠海]]和其他地方,而不用“进入”香港或者澳门。有摆渡车将旅客直接送到轮船码头,这样他们的入境地点将会在轮航码头而非机场。请注意,轮航都有不同的运行时间。如果您的航班到港比较晚的话,您可能就需要进入港澳或者直接到您的最终目的地。例如,如果从香港国际机场通过澳门轮航码头到澳门的话,则需要办理移民手续。香港码头最新消息,请参阅[http://www.hongkongairport.com/eng/index.html 香港国际机场网站]。}}
虽然很多大的航空公司都有到[[北京]]、[[上海]]、[[广州]]和[[香港]]的航班,但是票价都比较高。要想买到较实惠的票,最好还是尽早订票。在夏初和夏末时候机票特别贵,因为这个时候中国学生都要回家或者飞往全世界各地的大学。和其他车票一样,飞机票在春节期间也会很难买。
如果您居住在海外华人社区较多的城市(例如:[[多伦多]]、[[旧金山|三藩]]、[[悉尼]]或者[[伦敦]]),那您可以看看华人社区或者中国人开的旅行社有没有低价的机票。有时候,航班只在中文报纸上广告,或者中国人的旅行社的航班价格就很低。
{{seealso|亚洲的廉价航线|中国主要民用机场列表}}
'''航空公司和航班'''
中国航空公司增长迅速。空客估计中国客机数量会从2009年的1400架增长到2029年的4200架。
中国航空公司也在努力提高价格和服务上的竞争力。航空公司包括[http://www.cs-air.com/en/ 南航],[http://www.chinaeastern.co.uk/ 东方航空],[http://www.air.com.cn/en/index.shtml 国航],和[http://global.hnair.com/ 海航]。
乘客可能会更喜欢亚洲的航空公司的航班,因为这些航班的乘务人员一般都较多,而且服务也比较好。可以选择香港的[http://www.cathaypacific.com 国泰航空]。其他的航空公司比如[http://www.singaporeair.com/saa/ 新加坡航空]、[http://www.jal.co.jp/en/ 日本航空]、[http://www.garuda-indonesia.com 印尼航空]。[http://www.koreanair.com 韩国航空]在亚洲范围内的航线价格都比较好,比如从[[曼谷]]经停[[首尔]]到北美。一般转接航班都比直航,这一点要记住。韩国航空也飞在中国十几个城市,包括上海。
*[[北美洲|北美]]:[http://www.delta.com 达美航空]经由[[成田]]飞香港、北京、上海和广州,也有从底特律、波士顿、和西雅图的直飞航班。[http://www.united.com/ 联合航空]直飞航班最多,从[[旧金山]]、[[Newark (New Jersey)|纽瓦克]]、和[[Washington, D.C.|华盛顿]]直飞香港、北京和上海,与此同时,联航还拥有从旧金山直飞成都的航班。[http://www.aa.com/homePage.do 美航]从芝加哥和达拉斯直飞北京 、上海和香港。[http://www.aircanada.com/ 加拿大航空]从[[多伦多]]和[[温哥华]]直飞上海、北京和香港。
* [[澳大利亚]]:[http://www.qantas.com 澳航]有从[[悉尼]]、[[墨尔本]]、[[布里斯班]]和[[佩斯]]到香港的直航。澳航从悉尼到上海和北京,但是从墨尔本到上海只有代码共享服务。经由东南亚的可能会有便宜的航班,那里有一些打折航班飞往澳大利亚。中国南方航空有从[[布里斯班]]、[[悉尼]]、和[[墨尔本]]直飞[[广州]]的直航,从那里您可以飞往其他主要城市。东
* [[新西兰]]:只有[http://www.airnz.co.nz 新西兰航空]有飞往中国大陆的直飞航班。直飞航线到北京、上海和香港。
* [[东南亚]]:据说由于新加坡有大量华人,所有[[新加坡]]的航线网络最好,往所有的大城市和一些区域性的中心城市(比如厦门、昆明和深圳)都有航班。除了新加坡,[[吉隆坡]]、[[曼谷]]和[[马尼拉]]的航线也不错。[http://www.tigerairways.com 老虎航空]、[http://www.jetstar.com Jetstar]、[http://www.airasia.com 亚洲航空]、和宿雾[http://www.cebupacificair.com 太平洋航空]也都有从[[东南亚]](曼谷、[[清迈]]、新加坡、吉隆坡和[[马尼拉]])到中国南方城市(包括厦门、[[景洪]]、广州、[[海口]]和澳门)的低价航班。
* [[欧洲]]: 欧洲大部分大的航空公司都有到香港、北京和上海的直航(有的也飞往广州),包括[http://www.airfrance.com/indexCOM.html 法国航空]、[http://www.britishairways.com/travel/globalgateway.jsp/global/public/en_ 英国航空]和[http://www.finnair.com/finnaircom/wps/portal/finnair/jump?locale=en_INT 芬兰航空]。但是很少有到其他中国城市的航线。例如[http://www.klm.com/travel/klm_splash/index.html 荷兰航空]有从[[阿姆斯特丹]]直飞[[成都]]、[[杭州]]和[[厦门]]的航班,[http://www.lufthansa.com/online/portal/lh/de/homepage?l=en 汉莎航空]有从[[法兰克福]]到[[南京]]、[[青岛]]和[[沈阳]]的航线。
* [[台湾]]:自2008年开始,两岸恢复直航,目前台湾和中国大陆的主要城市之间每天都有直航。
'''中国和欧洲之间的航班'''
{| class="wikitable sortable" border="1" cellspacing="0" cellpadding="3"
! 航空公司!! 起飞 !! 降落 !! 航班时间 !! 出发日期 !! 经济舱 P/W !! 说明
|-
| 芬兰航空 || 赫尔辛基 (HEL) || 北京 (PEK) || 7:50 || 周一到周日 || 32" / 18" ||
|-
| 芬兰航空 || 北京 (PEK) || 赫尔辛基 (HEL) || 8:30 || 周一到周六 || 32" / 18" ||
|-
| 芬兰航空 || 赫尔辛基 (HEL) || 重庆 (CKG) || 8:40 || 一三五六 || 32" / 18" || 2012.5.9开始
|-
| 芬兰航空 || 重庆 (CKG) || 赫尔辛基 (HEL) || 9:25 || 二四六日 || 32" / 18" || 2012.5.9开始
|-
| 芬兰航空 || 赫尔辛基 (HEL) || 上海 (PVG) || 9:05 || 周一到周日 || 32" / 18" ||
|-
| 芬兰航空 || 上海 (PVG) || 赫尔辛基 (HEL) || 10:15 || 周一到周日 || 32" / 18" ||
|-
| 海南航空 || 柏林 (TXL) || 北京 (PEK) || 9:25 || 三五日 || 32" / 19" ||
|-
| 海南航空 || 北京 (PEK) || 柏林 (TXL) || 10:20 || 三日 || 32" / 19" ||
|-
| 海南航空|| 布达佩斯 (BUD) || 北京 (PEK) || 9:20 || 一五 || 32" / 19" ||
|-
| 海南航空 || 北京 (PEK) || 布达佩斯 (BUD) || 10:10 || 一五 || 32" / 19" ||
|-
| 海南航空 || 布鲁塞尔 (BRU) || 北京 (PEK) || 9:40 || 二四六日 || 32" / 19" || 从2012年4月,周五也有,2012年7月开始周一也有
|-
| 海南航空 || 北京 (PEK) || 布鲁塞尔 (BRU) || 10:35 || 二四六日 || 32" / 19" || 从2012年4月,周五也有,2012年7月开始周一也有
|-
| 海南航空 || 布鲁塞尔 (BRU) || 上海 (PVG) || || || 32" / 19" ||
|-
| 海南航空 || 上海 (PVG) || 布鲁塞尔 (BRU) || || || 32" / 19" ||
|-
| 海南航空 || 苏黎世 (ZRH) || 北京 (PEK) || 10:00 || 二四六 || 32" / 19" ||
|-
| 海南航空 || 北京 (PEK) || 苏黎世 (ZRH) || 10:45 || 二四六 || 32" / 19" ||
|-
| 荷兰航空 || 阿姆斯特丹 (AMS) || 成都 (CTU) || 9:25 || || 31" / 17.5" ||
|-
| 荷兰航空 || 成都 (CTU) || 阿姆斯特丹 (AMS) || 10:35 || || 31" / 17.5" ||
|-
| 汉莎航空 || 法兰克福 (FRA) || 青岛 (TAO) || 13:10 || 一三五 || 32" / 17.5" || 经停沈阳
|-
| 汉莎航空 || 青岛 (TAO) || 法兰克福 (FRA) || 14:25 || 二四六 || 32" / 17.5" || 经停沈阳
|-
| 汉莎航空 || 法兰克福 (FRA) || 沈阳 (SHE) || 10:15 || 一三五 || 32" / 17.5" ||
|-
| 汉莎航空 || 沈阳 (SHE) || 法兰克福 (FRA) || 11:15 || 三五日 || 32" / 17.5" ||
|}
===火车===
可以从中国周边的邻国乘火车前往中国,甚至可以从欧洲一路乘火车到中国。
* '''俄罗斯&欧洲''' - [[西伯利亚铁路]]两条线(横穿蒙古和东北),从[[莫斯科]]和北京出发,经停俄罗斯多个城市,在蒙古境内经停[[乌兰巴托]]。这条铁路的沿途风景无比绚丽,但时间过长,需要140小时左右。
* '''哈萨克斯坦&中亚''' - 从哈萨克斯坦[[阿拉木图]]可以乘火车到新疆的[[乌鲁木齐]]。在过海关时候和换另一国的轨道轮距会等很长时间。
* '''香港''' - [[香港]]和中国大陆之间有固定列车。从香港的红磡和廣州东站之间有直达列车。海关手续在各自火车站办理。此外,香港亦有直通火車前往[[上海]]、[[北京]]、[[肇慶]]、[[佛山]]。香港的港鐵从香港市区到深圳边界的两个点有直达,分別是落馬州以及羅湖,但主要的过境点在罗湖,也是深圳的主站。
* '''越南''' - 从广西南宁经过友谊关到越南。自2002年起,从[[昆明]]发出的列车就被暂停了。
* '''朝鲜''' - 从平壤到北京之间每周有四列列车。
* '''老挝''' - 从昆明到万象直接于2021年末开行的列车
===公路===
中国和14个国家之间有陆地边境;这一邻国的数量只有[[俄罗斯]]可以与之匹敌。另外,中国大陆和[[香港]]和[[澳门]]特区之间都有路上边境,由于实际原因,这些边境和国际边境一样。中国西部边境都在遥远的山区,这些地方虽然难以到达和游览,但是游客们会在那里看到让人叹为观止的美景。
====[[印度]]====
这两个国家之间的关系总是处于欠佳状态,但是最近开放了从印度[[锡金]]到藏南的亚东口岸。但是,这个入境口不对游客开放,从这两个国家访问这个口岸都需要特殊的许可证。
====[[缅甸]]====
可以通过中国[[瑞丽]]到缅甸[[腊戍]]从缅甸进入中国,但是需要在缅甸政府办理许可。一般来说,您需要加入旅游团。
====[[越南]]====
对于大部分旅行者来说,走陆路到中国旅游的起点都在河内。有三个国际口岸:
* '''同登镇(越南)- 凭祥(中国)'''
:您可以从河内汽车东站(Ben Xe街,嘉林区,电话:04/827-1529)到谅山,从那里您需要转乘小型公共汽车或者摩的到同登镇的口岸。还有另一个选择就是选择旅行社(有急事的游客),他们可以提供酒店和过境服务。
:您可以从黄牛手中换外汇,但是之前要好好确认汇率。
:过境手续大约需要30分钟。在中国境内,穿过“友谊关”之后打个的(大约20元,使劲儿砍价!)去[[凭祥]]。小型公共汽车车费大约5元。汽车总站车站正对面就有一家中国银行;ATM机上可以用Maestro卡。您可以乘汽车或者火车到南宁。
* '''老街(越南)-河口(中国)'''
:您可以乘火车河内到老街,软卧大约420,000越南盾(截止2011年11月)。这一段大约8小时。从那里您可以走到老街/河口口岸(乘车5分钟)。
:过境很简单,填好出境卡然后排队等。他们会检查您的行李(特别是您的书/书面材料)。河口口岸外面是各种商店,汽车站离口岸有10分钟车程。从河口到昆明的车票大约¥140;时间大约7小时。
* '''芒街市(越南)-东兴(中国)'''
:您可以从东兴乘汽车去南宁,有到广州的卧铺大巴(票价大约180元)和到深圳的卧铺大巴(票价大约230元,12小时)。
====[[老挝]]====
您可以从[[琅南塔]]乘大约早上8点的车到[[磨憨]](中国口岸)和[[勐腊]]的汽车。但是您要有中国签证,因为口岸不能办理签证。海关手续需要整整一小时或许还要多。一趟大概需要45000基普(老挝货币)。
另外,从[[琅勃拉邦]]到昆明有直达的卧铺大巴(要大约32个小时)。您可以在从[[琅南塔]]的小巴碰到卧铺大巴的地方上车。车费不会超过200元的。
====[[巴基斯坦]]====
从[[巴基斯坦]]北部到中国西部的[[中巴公路]]是世界上最为壮观的公路之一。冬天会对旅客封路。因为走这条线的旅客不多以及两国的良好关系,所以过境很快。从中国喀什噶尔到巴基斯坦有长途汽车。
====[[尼泊尔]]====
[[尼泊尔#抵达|从尼泊尔]]到西藏的公路经过喜马拉雅山附近,穿越蔚为壮观的高山。从尼泊尔到西藏只能跟团,但是个人可以从西藏到尼泊尔旅游。
====[[蒙古]]====
蒙古1945年正式从中国独立,当时的中央政权是“国民政府”。现在的中国和蒙古有两个边境口岸。它们是[[二连浩特]]([[内蒙古]])/[[扎门乌德]]边境口岸和[[塔克什肯]]([[新疆]])/[[布尔干]] 边境口岸。
中国有从二连浩特开始的火车或者长途客车,经过扎门乌德到达乌兰巴托。火车和长途汽车站大多数大部分时间都是第一天晚上出发,第二天早上到达。边界在上午八点半左右开放。从二连浩特有去往中国其他地方的长途汽车和火车。
====[[哈萨克斯坦]]====
到中国的口岸分别在[[霍尔果斯]]、[[阿拉山口]]和[[吉木乃]]。几乎每一天都有汽车从[[阿拉木图]]到[[乌鲁木齐]]和[[伊宁]]。不能办理落地签,所以出发之前先保证您已经准备好了哈萨克签证和中国签证。
====[[吉尔吉斯斯坦]]====
可以通过[[图噜噶尔特山口]]进出吉尔吉斯斯坦,但是道路非常崎岖,并且这个口岸只在每年的夏季开放几个月(6月-9月)。也可以安排走喀什,但是先要准备好签证。
另外,另一条路(虽然风景略差,但是路况较好)是经过直达图噜噶尔特南部的[[伊尔克什坦口岸]]。这条路每周大约有2-3次大巴(卧铺),大巴行程大约24小时。
====[[塔吉克斯坦]]====
塔吉克斯坦和中国唯一的口岸在[[阔勒买]],这一口岸在五月到十一月之间的周日开放。从新疆[[喀什噶尔]]到塔吉克斯坦[[科洛格]]之间有大巴。但是这班车不对除塔吉克斯坦人和中国人以外的人开放。
====[[俄罗斯]]====
最主要的口岸是[[内蒙古]]的[[满洲里]]。从满洲里到俄罗斯的[[后贝加尔斯克]]有大巴。从[[黑河]]到布拉戈维申斯克、从抚远到哈巴罗夫斯克有渡轮。再往东,在[[绥芬河]]、东宁、和珲春都有路上口岸。在出发之前要保证您已经申请了俄罗斯签证。
====[[朝鲜|朝鮮民主主義人民共和國]]====
在中國前往朝鮮民主主義人民共和國(下称:朝鲜)要經由[[丹東]]/[[新义州]](신의주),而且必須預早在北京安排導遊。相反,從北韓旅遊後進入中國,則較容易。另外, 除了上述口岸外,在鴨綠江和圖們江亦有其他出入境口岸,但這些口岸可能不允許旅客通行。最後,在通關前,請確保阁下持有有效中國及北韓簽證。
====[[香港]]====
香港主要有四個陸路口岸進入中國大陆,分別是落馬洲、沙頭角、文錦渡以及深圳灣。某些國藉的旅客可於落馬洲申請落地簽證,但若使用其他口岸必須預先安排。
====[[澳門]]====
澳門分別有兩個陸路口岸連接[[珠海]],分別是關閘邊檢大樓(大陆稱:拱北口岸)以及路氹邊檢大樓(中國大陆稱:橫琴口岸)。持有某國藉的旅客可在路氹邊檢大樓申請簽證。
====其他====
暫時為止,旅客尚未可利用陸路前往[[不丹]]及[[阿富汗]]。
===水路===
====香港以及澳門====
香港和澳門與[[珠江三角洲]]的城市間,設有定期高速客輪服務,來往[[廣州]],[[深圳]]以及[[珠海]]等地。同時,[[香港赤臘角國際機場]]亦設有跨境快船轉駁服務,旅客無須入境香港而前往[[廣州]]、[[珠海]]等地。
====日本====
每星期有一至兩班(根據季節而定)定期客輪由[[上海]]和[[天津]]來往[[大阪]],船程約為兩天。此外,[[青島]]每星期有兩班客船來往[[下關]]以及每星期一班由[[上海]]來往[[長崎]]。
====南韓====
以下數個港口均有定期航班前往南韓仁川:[[上海]]、[[天津]]、[[青島]]、[[威海]]以及[[大連]]。
====台灣====
每日有18班渡輪由[[廈門]]來往[[金門]],行程約一小時三十分鐘。另外,每天亦有4班來往[[金門]]及[[泉州]],兩班來往[[馬祖]]及[[福州]]。此外,每星期亦有跨台灣海峽航班,由[[廈門]]至[[臺中|台中]]或[[基隆]]。
====泰國====
每星期有3班高速客輪來往[[雲南]][[景洪]]及[[泰國]][[清盛]]。盡管航班會經過[[緬甸]],[[老撾]]但旅客亦無需持有其簽證。
====遊輪====
在秋天,有數條遊輪航線會由[[美國]]前往[[亞洲]],例如:[[安克雷奇]]、[[溫哥華]]或[[西雅圖]]。另外,麗星郵輪亦有運作[[基隆]]、[[廈門]]以及一些[[日本]]外島的航線。
==交通==
===飞机===
中国幅员辽阔,所以,如果您不想浪费太多时间在路上的话,最好还是选择飞机出行。中国的大城市和主要旅游目的地之间有很多国内航班。三大国际航空公司分别是:国航、南航、和东航,除此之外也有一些地方航空公司,包括:海航、深圳航空、四川航空和上海航空。最近几年大城市和各省纷纷建立了自己的航空公司,包括:重庆航空、成都航空、河北航空等。海南航空的母公司发展了包括大新华航空,扬子江快运,香港航空公司、金鹿航空等11家航空公司。
中國香港特區或者中國澳门特區到內地城市的航线都算是国际航线,因此价格較為昂貴。因此,如果要在內地和香港或者澳门之间往返,那么走深圳或者珠海(跟香港或者澳门一江之隔)会便宜'''很多''',或者走广州(广州距离香港或者澳门较远,但是有往来航班的城市却更多)。例如,从福州到香港、深圳或者广州的距离相似,但是在2005年时,飞往香港的航班价格为1400元,但是飞往其他城市的价格仅为880元,飞往深圳的打折机票仅为550元。到这些城市称汽车的话价格约为250元。
国内航班都是有标准价的,但是都会打折,特别是比较繁忙的航线。大部分酒店和招待所都有订票服务,酒店订票可能会有7.5折到3折优惠。中国的所有城市都遍布着旅行社和票务公司,他们的折扣基本相当。 就算不打折,在中国乘飞机出行也并不贵。中国两大在线订票网站[http://www.elong.net/ 艺龙]和[http://english.ctrip.com/ 携程]都有英文网站,但是航空公司网页一般都只有中文,或者需要中国手机号码来订票。
在中国旅游,一般最好在旅行社买票最划算,或者只在中文网站上买。在国外买的话(例如,通过Expedia或者甚至通过国航网点买)都会贵很多,因为国外只卖全价票。而打折机票只在中国境内出售。国内航班的时刻表一般要到航班时间前2-3个月才能定下来。和大部分国家的空运市场不同的是,买的早的人要多付钱,因为到后面会有折扣。飞机越空的航班,越容易在航班起飞的前几天买到折扣比较高的票。只要您敲定了您的行程,建议您关注飞机票价,看看什么时候涨,什么时候跌(一般都会有波动的)。但是,如果在外出旺季出行(例如春节期间),建议尽早订票,以保证您能买到票。一些价格比较高的票可以允许先退票(退票费5%-20%),然后再买低价票。最近,国内航班的头等舱也可以打折了。有的线路头等舱和经济舱价格差异并不大,还是比较划算的。但是,请注意,在空港的很多福利(例如:候机大厅、额外的行李和积分等)就不适用于打折机票了。
请注意,虽然政府和顾客都给航空公司施压,但是毫无理由的飞机延误还是很正常的。有时候飞机出行还不如其他的选择。取消航班也并不罕见。如果您从中国的票务处买的票,他们一般会联系您(如果您留下了联系方式)并通知您航班的变化。如果您在国外买的票的话, 一定要在您乘机的前一两天查看航班状态。一旦出现航班延误,中国的航空公司很快就会送出餐盒或者点心(尽管这些盒饭/点心并不一定合西方人的口味)。建议在中国旅游时随时准备好B计划。水是过不了安检的,但是所有的中国机场都有开水处,所以您可以带上杯子和茶叶。
和全世界所有地方一样,中国机场的餐饮费用也贵的离奇。在市区25元的咖啡,在机场的相同连锁店里面可以卖到78元。KFC的价格好像没有变化;他们很多机场的门店的价格和其他地方门店的价格都一样的。花20元以上吃一顿KFC还不如在街对面吃一碗5块钱的面呢,但是在机场的话,KFC还是最划算的。
===火车===
{{infobox|中国的春运时的火车票|以春节为中心,共40天左右,每年农历腊月十五到次年正月廿五,那时候民工开始放假,纷纷乘交通工具回乡,在这个阶段,有30多亿人次的人口流动,占世界人口(约70亿人)的3/7,相当于全国人民进行两次大迁移,同时也是当今世界上规模最大的人口迁移。每年春运,铁路运输是重中之重,为了解决春运问题,中国政府每年都要提前部署,但仍无法满足春运要求。所以,在此期间尽量避免乘火车出行,因为买到火车票会非常困难。}}
[[File:A maglev train coming out, Pudong International Airport, Shanghai.jpg|right|thumb|200px|[[上海]]的磁悬浮列车]]
火车是大部分中国人长途旅行的首选。铁路线路网络不断在扩展,覆盖了全国各地。中国大约占据了全世界铁路交通的1/4。
中国目前正在建立一个高铁网,类似于法国的TGV和日本的新干线。中国现在已经有很多高铁线路在运行了。中国高铁叫做“和谐号”及“复兴号”,高铁列车车次通常以“G(高)”“C(城际)”“D(动)”开头。如果您的预算允许的话,乘高铁是“最好的出行方式”。更多详情,请参阅[[中国高速列车]]。
==== 火车类型 ====
中国的火车被分成了不同的类型,在各自的车票上都有显示。中国火车从最快的到最慢的分别如下:
* 高速動車組列車(高速「G」):營運最高時速380公里,現限速300公里 使用CRH系列「和諧號」高速電力動車組,列車車次為G1-G9998.注:2017.9.21 复兴号已经提速至350km/h,部分线路车次已经开始换装复兴号。
* 城際動車組列車(城際「C」):營運最高時速350公里,現限速200~300公里 使用CRH系列「和諧號」高速電力動車組,列車車次為C1-C9998(其中,京津城際鐵路使用C2000 - C2999作為其車次,鄭州鄭開城際鐵路使用C28xx作為其車次,上海金山鐵路使用C3000 - C3999作為其車次,武漢武咸城際鐵路,武黃城際鐵路使用C50xx,C55xx作為其車次,成都成灌鐵路,成綿樂客運專線使用C61xx - C63xx作為其車次,廣州廣深鐵路使用C70xx - C72xx作為其車次,珠海廣珠城際鐵路使用C76xx作為其車次)。
* 動車組列車(動車組「D」):最高時速200-300公里,現限速160-300km/h,使用CRH系列「和諧號」電力動車組,列車車次為D1- D9998。
* 直達特別旅客快車(直特「Z」):最高時速160公里、中途不停車或者僅停靠少數車站的夕發朝至跨局或管內列車(跨局列車是指可以在本鐵路局/公司管轄範圍以內和以外的綫路上行駛的列車),列車車次為Z1-Z9998。
* 特別旅客快車(特快「T」):最高時速140公里/160公里(少數按直達特快等級運行的列車)的跨局或管內列車(管內列車是指僅可以在本鐵路局/公司管轄範圍內運營的列車),列車車次為T1-T9998。
* 快速旅客列車(快速「K」):最高時速120公里/140公里的跨局或管內列車,列車車次為K1-K9998,亦有诸如K53,K54(北京-沈阳北)的夕发朝至直达卧铺列车。
* 普通旅客快車(普快):最高時速120公里的跨局或管內列車(直快僅限跨局列車),列車車次範圍是1001-5998,無字母。
* 普通旅客列車(普客):最高時速100公里的跨局或管內列車,列車車次範圍是6001-7598,無字母。
* 通勤或路用列車(通勤):用於沿線鐵路職工上下班通勤的列車,列車車次為7601-8998。
* 市郊動車組列車(市郊「S」):最高時速80公里的城市內動車組列車,使用和諧長城號內燃動車組,現僅運營於北京市郊鐵路S2線,列車車次為S201-S299。
* 臨時旅遊列車(旅遊「Y」):為旅遊高峰客流而開行的旅客列車,列車車次為Y1-Y998。
* 臨時旅客列車(臨客「L」):在春運、暑運等客流高峰開行的列車,列車車次為L1-L9998。
另外從2015年春運起,L字頭臨客列車已大為減少,普速臨客列車車次多為3xxx、K4xxx、K5xxx、K6xxx、T3xx、T4xx、Z4xxx、Z9xxx;動車組臨客列車車次為D4xxx、D9xx;城際動車組臨客列車車次為C9xxx;高速動車組臨客列車車次為G4xxx,G9xxx。
==== 座位级别 ====
普通的非和谐号列车主要有五个座位级别:
[[File:Soft sleeper compartment for train T138 from Shanghai to Xi'an.jpg|thumb|特快火车软卧车厢]]
* '''软卧'''是最舒服的出行方式,以西方的标准很便宜。软卧的一个包厢有四个铺位,两个一列(现在更新的列车也有两个铺位的包厢),门可以上锁,空间也比较大。
* '''硬卧'''的话,一排有3张铺位,没有门。上铺很高,而且床的上面空间很小。上铺最适合身高较高的游客(1.9米以上),因为您的脚可以伸出去,而且不必担心被碰到。如果您有需要藏起来的东西(例如:照相机)的话,上铺也是最好的选择。东西放在上铺的枕头下面,一般小偷是够不到的。硬卧并不是硬板床,也是有个床垫的,而且也还比较舒服。所有的卧铺都有枕头和床单。
* '''软座'''是一种很少见的可以放下来的座位。软在只在4-8小时的短途日间列车和高速列车(D以上)会有。
* '''硬座'''就是一般的座位票,一排有5个座位,过道两边一边2个座位,一边3个。大部分的背包游客都选择硬座出行。虽然有“请勿吸烟”的提示牌,但是仅在车厢内禁止吸烟。一般在两节车厢的连接处都会有很多人在吸烟,烟就会源源不断的飘进车厢。大部分火车车厢的连接处都是吸烟区,那里有中文提示“吸烟区”。乘硬座车过夜是非常不舒服的,漫漫长夜而又无法入睡的感觉确实很不好。
* '''无座'''票是在硬座车厢的,但是没有座位。站票的话,您可以随身带一个小马扎。 价格和硬座相同。
此外,还有单人独包,高级软卧等相对等级、价格更高的铺位,不过一般只在部分高等级列车才会出现。
目前,中国的列车大部分都是全封闭的空调车厢。
和谐号一般有5个等级 - '''二等座'''(3+2的座位),'''一等座'''(2+2的座位)和三个'''VIP舱'''(2+1的座位,连着驾驶室)。VIP舱位也分三个等级,分别是“商务座”、“观光座”、和“特等座”。和飞机不同的是,和谐号的商务座实际上比“一等座”好。 商务座和观光座价格一样,但是特等座一般比“一等座”要贵,但比商务座和观光座便宜。
==== 火车票 ====
[[File:China G Train Ticket.jpg|220px|thumb|带有文字说明的中国纸质火车票]]
一般车票在列车开车前30天就可以买了(12306订票提前30天,电话提前28天)。开车之后,可能会有少量的车票给途经的较大的站预留的。如果您想找个座位,或者想补个卧铺,您可以找到列车员然后他会告诉您还有没有,需求量最大的为硬座票和硬卧票,所以这种方式能够得到您心仪的几率很少。从2012年一月份开始,所有的购票人都必须持'''有效证件'''来买票(一般就是身份证或者护照)。中国铁路客运部门在2020年6月份起,不再发行纸质火车票,实行电子票(可以在App12306中查看)。对于仍然需要纸质信息的乘客,中国铁路客运部门会提供一张载明乘车日期、车次、发到站、发车时间、席位号等信息的纸质凭条帮助旅客乘车。
在市区很多地方都有火车票代售点的,那里很清楚地以中英文标注着“火车票代售点”,还有火车头的图标,但是因为这些代售点都很小,可能也不是很好找。代售点的电脑和车站的订票系统是联网的。在代售点一般可以买到10天以前的票,而且都是按照票面价格卖的。工作人员一般不会说英语。
就算在大城市也不要指望车站的售票员会讲英语。就算售票员找到会讲英语的同事,不要指望他会操作订票系统。因此,如果您不会讲中文,那么就将始发站和到达站、开车时间、车次和要买的票的类型用中文写在纸上。车站名称您可以写拼音,因为售票员输入的也是拼音。请注意,很多城市的普通车站和高铁车站都不在一起。高铁车站一般都带方向的(例如:北京南、杭州东等)。
在出行高峰时段(例如,春节期间),车站的票一下就卖完了。最好还是找中介提前订票。在大城市里,也有稍微加一点手续费的票务机构。这些手续费可以省去在车站排长队,还是很值的。旅行社会收你的钱,然后提前订票,但是,在车站放票之前没人可以保证您一定就可以买到票,车站放票之后旅行社才会去买他们之前向您“保证了”的车票。
==== 旅途须知 ====
普通火车上的厕所一般比汽车上或者大部分公共场所的厕所要“好”一些,因为火车上的厕所非常简单,小部分直接把排泄物抛洒在铁轨上,火车上的厕所味道没有那么刺鼻,但是现在大部分的火车都已经安装或者部分安装了真空集便装置。软卧车一般在车的一头有欧式的坐便器,另一头是中式的蹲坑式的厕所。请注意,直接将排泄物抛洒在铁轨上的列车在车站停车时列车员会将厕所临时关闭,以防止排泄物抛洒在车站范围内的铁轨上。
长途车会有餐车,餐车会有热饭,但是一般都会很贵,都在15-45元,而且确实不好吃。菜单都是中文,但是如果您愿意冒个险的话,您可以记住几个中文字,或者问问看常见的菜有没有。如果您的预算有限,那只能等到站的时候。站台上的小贩一般会卖面条、小吃和水果,价格一般会稍微好一点。车上一般都有开水处,所以您可以带上茶叶和泡面等。
在火车上要留心自己的财物,这几年公共交通设施上财物失窃的事情越来越常见了。
大部分比较高级一点的车上(T、K、Z和和谐号列车),都会播放实现录制好的中文、英文、粤语(如果火车路过广东或者香港)、蒙古语(内蒙)、藏语(西藏)或者维吾尔族语(新疆)的报站广播。但是,在短途列车上没有英文报站,因此,知道从哪里下车很重要。
如果晕车的话,建议备好晕车药。如果睡觉怕被吵到,建议戴耳塞。长途卧铺车厢上铺的空调在夏天会很凉。如果担心因为自己的不注意而错过到达站,您还可以跟列车员讲在即将到站时来通知你一声,列车员很乐意帮找你。
如果您有可以和大家一起分享的东西的话,那时间会好过一点。旅途中的中国人也都一样觉得很无聊,他们很乐意和您聊一聊,或者一起在电脑上看一部电影。总的来说,乘火车看看中国乡村风景还是挺不错的。
在出入站时都要验票,一般在进候车大厅、上车和出站出都有人检票。进了候车大厅后,在电子显示屏上找对应的站台上车(虽然是中文,但是会显示您票上印的车次)。在上车前大约10分钟的样子,就可以进站检票了,进站后您只需要跟着人流走就好了,一定要确保您不要坐在错误的候车区域了,因为一般火车在一般的站只停几分钟。一些比较新的站是高站台,这样站台会和车门齐平,但是小站的站台都很低,然后上车都要走几步很陡的台阶,所以如果您有大件行李的话,要有心理准备。一般的乘客也都很友好的,都会主动伸手帮您一把的。
在车厢内部是不允许抽烟的,但是在两节车厢的连接过道处是可以的。所有的高铁车组及动车车组都属于全列车禁烟列车。车站也不许吸烟,但是设有单独的吸烟室,但这些吸烟室里面都很糟糕,而且通风也很差。
==== 有用的网站 ====
*[http://kyfw.12306.cn 12306]是中国铁路总公司的官方购票网站,有用性不言而喻。购票高峰期会出现各种不可预测的故障(因为中国在运输高峰期时会有十几亿客流量通过铁路发送,购票者过多导致跟DDoS类似。)注意,这是中国铁路(含高速铁路)购票唯一的官方网站。
*[http://www.seat61.com/China.htm Seat 61]网站上关于中国列车的介绍较为全面。
*[http://www.absolutechinatours.com/china-trains Absolute China Tours]或者[http://www.chinahighlights.com/china-trains/ China Highlights]有票价信息(注意,这里的信息虽然非常有用,但是也并不是100%的全的)。
*[http://www.oklx.com/cn/train/search_station.aspx OK Travel]有更多车次。这个网站大部分都是中文但是,地名都用的是罗马字母,这样您不懂中文也没有关系了。在搜索页面,只要从列表中选择就可以了:左手边是始发地,右手边是目的地。注意,您需要在下拉栏中选择省份或者区域之后才会出现相应的城市。选择您需要的城市,然后点击左下方的按钮(“确认”)进行搜索。如果您可以输入汉字,这个网站还可以帮你计划转车。
*[http://www.cnvol.com CNVOL]有中国国内运行的所有列车车次,而且更新很快。只要输入您旅途的起点和终点,您就会找到所有往来的车次(包括过路车),每列车注明了始发站、终点站和时间。点击您喜欢的车次,然后您可以看到各个座位的票价。
*[http://huoche.wiki 火车Wiki]讓您可以了解某个车次的车辆情况。
*[http://piao.today 票.今天]让您可以了解某个区间的余票趋势。因中国客运分淡旺季,所以淡季内的趋势一般来说是相同的;旺季同理。有时12306因为客流量过大导致前端无法访问时(前提后端正常),也可以在该网站上查询余票。因该网站查询实时余票时会同时将所有的票价同时抓取,导致速度较慢,除非12306出现前端技术故障,否则不建议使用该网站的实时余票功能。由于12306接口关闭,本站只能浏览以前的数据,而不能使用查询实时余票/添加新趋势等功能。
*[http://yupiao.info 余票网]著名的火车票查询网站,可以显示出预售期内所有指定区间有票的车次,方便购票。但是因为原作者停止维护,所以本网站可能随时下线/出现暂时性的故障。
*[https://www.ctrip.com/ 携程]现今中国最大的旅游、住宿、车票、机票等预定网站,美国纳达斯科上市企业。有多国语言支持。提供可以发送到电子邮箱的电子行程单。
=== 汽车 ===
城际'''公共汽车'''或者长途汽车并不贵,非常适用于市内和短途的交通运输。
每个城市的公交车各有不同---但一般情况下都是塑料座椅、人多、没有英文标识、司机态度一般。当然,如果您对于公交车线路比较熟悉的话,这不失是一种非常经济而且四通八达的出行方式。一般情况下,公交车上都会播放报站录音,例如“下一站:中山路(Next stop is Zhongshan Road)”,或者“上海南站到了(We are now at Shanghai South Railway Station)”。一些大城市,例如北京或者杭州,的一些主要线路上有英文报站。票价一般为1到2元(一般1元为老式公交车,2元为新式带空调公交车),如果公交车路线到了市郊,票价会相应高一些。大部分公交车已经没有售票员了(收钱、找零、撕车票),取而代之的是上客门旁边都有个自动投币的铁箱,您可以把您要支付的票价投入投币箱内(不找零,所以要自备零钱)。注意,一般公交车司机都会开的比较快,不怎么会在乎乘客的感受,所以要扶好站稳。
{{Infobox|卧铺大巴(已弃用)|卧铺大巴在中国20世纪初很常见;车上没有座位,取而代之的是卧铺床位。中国交通部门在2020年发布关于卧铺大巴禁行公告。这是长途旅行不错的选择— 大巴在高速公路上的夜间行驶速度一般为100KM或者更快— 因为铺位空间有限,可能有的身高比较高或者块头比较大的旅客会觉得不舒服。
一般来说,在发达的沿海省份,这还是比较舒适和便捷的交通方式,但是在欠发达地区就不一样了。尽量不要买车位的铺位,因为车在过减速带的时候,车位的乘客晃动比较厉害,可能会有晕车症状。
在有的地方,在您上车时必须要先脱掉鞋子;车上会提供一个塑料袋放鞋子。如果到了服务区或者上厕所的时候,您需要再穿上鞋子。如果您平时穿靴子的话,建议您随身再带上一双拖鞋。}}
各地的大巴,或者'''长途大巴'''的情况各不一样,有的很舒适,而有的地方的大巴就会很不舒适。一般从东南沿海较大城市发出的大巴都带有空调、软座。东南沿海地区的路况非常好,车开的很平稳,您可以欣赏沿途风景或者小睡一会儿。一般汽车会比火车会贵一点,但是要舒服一点。大巴的乘务员都很愿意帮忙,但是和空乘人员相比,他们对于外国人就没那么熟悉,能说英语的非常少。有的大巴有厕所,但是一般都很脏,而且汽车转弯比较多,造成使用厕所比较不便。
中国农村地区的大巴就完全不同了。 车站里面的表示要么只要中文要么只要本地语言,路线都是贴在车窗上的,在您走过的时候司机或者招揽客会向您大声喊叫他这趟车的目的地,一般大巴的车牌号应该印在票上的,但是通常票上印的车牌号都是错的。由于风俗习惯等的差异,外国人可能会觉得大巴司乘人员不够礼貌,乘客素质也欠佳,他们会随地吐痰和抽烟。如果司机一路都想多上人的话,巴士可能会非常拥挤。中国农村地区的道路通常都是坑坑洼洼的,这样乘坐巴士就会非常颠簸;如果您坐在巴士靠后的座位上,那么颠簸会更加厉害。发车和到达时间都只是预计时间,因为很多车票不卖完不走(这可能使发车延误数小时),加上车有点小问题和其他事情,您的行程可能会被大幅延长。如果您要在这样的车况和路况下乘车10个甚至20个小时的话,那您一定会感觉痛苦难忍的。虽然这样的车程让人非常不舒服,但是在中国很多地方,这样的大巴是唯一的交通方式。当然,好的一点是,如果您想去比较偏远而且又没有直达车的地方旅行的话,您可以在路上随时下车。而且,您也可以在路上随时拦车,一般车票都是视路程长短而不同的。
在中国,司机不遵守交规是一种普遍现象,而且中国的交通事故也比较多发。突然急转弯或者刹车都会造成人员受伤,所以上车后要坐稳扶好。中国的司机经常按喇叭,所以,如果您想在路上睡一会儿,还是带上衣服耳塞的好。
买票有时候会比较难。大的车站有售票柜台,票面上印的有出发时间、上车闸口、和您所乘车的车牌号(有时候不准),票价是固定的。小一点的车站到处都是招揽乘客的人在大声喊叫自己车辆的目的地,他们会把您领过去,然后您上车后再买票。就算在大的车站也有招揽客,他们会给司机打电话让司机等,然后用摩托车把您拉过去,您到了之后可以和司机讲价。这种情况有时候可能完全就是一个骗局,有时候您可以省下35%的车费(取决于您的砍价水平和中文水平)。
===地铁===
大城市 — 至上北京、天津、上海、广州、深圳、武汉、沈阳、郑州、西安、重庆、成都和南京等 — 都有了地铁系统。重庆还有单轨轨交系统。这些设施总体都比较现代、干净而且高效。标识和售票机都是中英双语的。
这些轨交系统现在都在逐步地建设和扩建中,几乎每个有地铁系统的大城市都在修建新的线路。中国在这方面的长期目标非常大胆,每个大城市都在计划修建多条线路。到2020年,中国可能会有世界上最大规模的城市交通基础设施。很多城市都在规划诸如广州和深圳之间的区域间轨交系统。
===出租车===
出租车(或者的士)比较常见,而且价格也比较合理。起步费一般从5元到15元,一般超过起步费范围每公里2元左右(3千米起步)。一般在市内打车费用在10到50元以内。行李不另行收费,但是很多城市夜间打车费要高一些。不用给小费。有些地区还会收取附加燃油费一般1元到2元,视地区而定。
出租车司机故意选一条较长的线路来欺骗乘客的事情虽然不是没有,但是也并不常见,所以不必过于担心这一点。就算司机选了较长的路线,车费也不会差很大。但是,如果您觉得在去酒店的路上被出租车司机骗了,并且您住在中高端的酒店(一般都有门童),您可以向门童和/或者前台人员寻求帮助:一般一句能揭穿他的骗局的话就足以解决问题了。
小心一些黑出租,他们会在机场或者车站里面或者门口跟上您,然后会跟您谈一个带您去某地的固定价格,他们的收费往往是打表费用的1-3倍。如果您对所在城市不熟悉,那么一定要去机场外面指定的出租车区域,并且坚持让司机打表。出租车费率一般都标注在车外的醒目位置。
在高峰时段打车比较困难。如果再遇到下雨天,那就更是难上加难了。尽量避免高峰时段(特别是晚高峰),打车之后一定要记得拿小票。在中国,打车和其他所有事情一样,小费可以给也可以不给,中国人没有给小费的习惯,所以不给也没有人在意。
可以坐在副驾位置;有时候只有副驾位置能看清楚计价器。出租车司机有可能摇下自己那边的窗户就直接开始抽烟,而不会征求乘客意见。在有的城市,出租车还会在沿途搭客(在大致方向一致的情况下)。每个乘客都要付全价,但是这样会省去乘客们等车的时间。
虽然北京在迎奥运和上海迎世博期间做过一些工作,但是即便在这两个城市也很难找到会讲英语的出租车司机。在其他的城市基本上是不可能的。如果您试着用您带口音的普通话说出您要去的目的地,司机也有可能会理解不了。所以,建议您随身携带一张写着您打车要去的目的地的纸条。纸条上最好写汉字(而不是拼音),因为一个拼音可能对应好几个不同的汉字。带着您所在酒店和您喜欢的餐厅的名片,必要时出示给出租车司机。您可以先学一点儿基本的中文简单对话,这类的教材网上都是有的。
如果您在中国待的时间较长,那么考虑买一张中国的SIM卡,这样您可以给您在中国的朋友打电话,然后让他们跟司机说说您要去哪里。SIM卡在中国很容易可以买到。
有的城市的出租车公司有对司机的评级系统,从0到5星,这个打分器在仪表板上方的司机信息牌上,一般在副驾座前面。一般0或者较低分数虽然不一定代表司机不好,但是5星则表示司机对城市很熟悉,并且会以最短的路程将您带到目的地。另一种识别司机能力的方式同样是看司机信息牌---上面的司机代号。一般代号越小,则说明这个师傅从业时间比较长,可能对市区路线会更熟悉一些。如果您觉得被出租车司机骗了,很简单的一个办法就可以引起出租车司机的重视,那就是下车后马上把出租车车牌号抄下来,如果您会说简单的中文的话,您可以告诉他您要向市政机构或者出租车公司举报他。大部分司机都是诚实的,车费也不会太高,但是也有小部分不好的司机会利用您不会讲中文来侵害您的利益。
中国人在打车的时候一般不会让别人的。拦到车的人不一定就可以乘这个车。别人跑到搭车人前面先上车或者把拦出租车的人挤开自己上车的事情也并不是没有。如果一起有几个人都在打车,那么在拦到车后尽快上车。不过随着uber、滴滴等出行工具的普及,通过移动网络预约出租车成为绝大多数乘坐出租车的人的首选,在街上随手拦下一辆出租车的情况已经很少见了。
出租车司机可能会说您不用系安全带,但是无论怎样上车后一定要系上安全带(如果能找到的话)。
===电车===
有的城市有电车。电车一般经停站比轻轨要多,如果您要去的城市有的话,电车不失为一种出行的一种很实用的选择。但是,电车的话有可能会有堵车情况。
===自行车===
自行车、电瓶车和摩托车是中国最常见的交通方式;在高峰时期,中国的各个城市都有成千上万的两轮车。大部分自行车都是不可调速的老式车型,但是普通的山地车也比较常见。对于乘客来说,骑自行车要比挤进高峰时段的公交车要经济而且便利的多。
在中国对于骑自行车的人来说,有两大'''危险''':
* 一个是其他的'''交通车辆''';汽车和摩托车会经常让人毫无准备地拐出来,有的地方的红绿灯纯属摆设。更多相关评论,见[[中国驾驶习惯]].
* 在中国各个城市中'''偷车贼都很猖獗'''。需要观察其他人是如何停放自行车的。有的地方的当地居民会随手停放自行车,但是在其他很多城市中,人们都会将自行车锁在饭店或者网吧中。这就是一种警示。不要认为您的高档锁能确保您的自行车万无一失(偷车贼只需要摆弄一下就能打开)。建议尽可能将您的自行车停在有管理员的指定的停车区域;一般您只需要交1-2元钱。有的当地居民会故意买二手的老旧自行车,这样小偷就不会惦记着了。
在绝大多数景区 — 无论是像[[北京]]这样的大城市还是像[[阳朔]]这样游客云集的小镇 — 租车和修车都是非常方便的。而且都有骑行旅游的指南。
在中国,购买自行车是一件非常容易的事情。大行、美利达和捷安特是业余和半职业市场上最流行的三个品牌,所有的城市都有这些品牌的分销商。很多超市也会出售款式繁多的自行车。价格一般从150元到10000元不等。如果要在像西藏这样的地区骑行的话,一般3000到4500元价位的山地车就可以了。诸如上海和北京这样的大城市一般会有更多的职业高端自行车,但是如果您的要求非常特殊,那么香港就是您最后的希望了。
无论是在城市还是在乡村,修车铺随处可见;语言不通的外国游客可能不是很容易能找到,但是您只要找外面摆着自行车和自行车胎的店铺就可以了。要是车胎漏气这样的小问题的话,路边上有很多地方放着一盆水和一些自行车胎的地方都能修。但是如果是刹车碟这样的特殊部件的话,建议您在城区以外的地方骑行时还是随身携带好备件吧。
中国幅员辽阔,她的高山和沙漠都给专业的骑行者提供了无尽的挑战。但是,截止2010年5月,如果外国游客要在西藏高原上骑行,则必须''依照法律获取许可并须雇用一名导游''。
一段风光超越想象但是却艰难异常的自行车骑行线路,请参阅[[中巴公路|喀喇昆仑公路]]。中国自行车网和Intrepid Travel都在这条线路上组织小规模的骑行观光。
=== 共享单车 ===
在中国的许多城市,除了城市公共自行车以外,您还会在大街上看到一些装饰相同并装有二维码智能锁的自行车,这些就是共享单车了。
它们与城市公共自行车相比,最大的特点是无桩,您可以自由地在街边租还共享单车,它在城市交通中已经占了很重要的地位。您在旅游一些城市时,可以用共享单车到达目的地,也可以领略城市各个角落的风景
共享单车品牌繁多,不同品牌的押金和收费也不尽相同,但绝大多数品牌的共享单车价格都比较低廉,目前摩拜单车和青桔单车占据了大部分市场。您除了可以下载应用程序打开共享单车,还可以用微信和支付宝打开一些品牌的共享单车。
=== 自驾 ===
{{参见|在中国驾驶}}
截止到2022年,中国已经实现与阿联酋、比利时、法国和塞尔维亚4国驾驶证互认换领。注意,中国大陆将香港和澳门的驾照都视为外国驾照,因此,就算您有这两个地方的驾照,也不应该在中国大陆开车。这一情况在07年有所改变---没有中国驾照的短途驾驶成为合法。但是,和很多中国的法律一样,官方的变更和现实中的改变并不一定完全是一致的;直到2008年12月,没有中国驾照在中国开车仍然是违法的。除非您有外交身份,否则,要把外国的车运进中国基本是不可能的。
租的车大部分都是带司机的,和北美的一种租车服务remises类似;租带司机的车是游览中国最好的方式。就算您有初级的中文读写能力,而且取得了中国驾照,建议最好还是''不要''您自己驾车出游---当然,如果您已经习惯非常混乱的交通状况的话除外。如果您没有足够的勇气,请不要在中国的市内开车,并且停车位也非常难找。但是,尽管如此,在中国开车比在亚洲其他发展中国家,例如越南,要好很多。中国是属于靠右道行驶的国家。中国很多邻国,例如印度、巴基斯坦、尼泊尔、不丹以及香港和澳门特别行政区都是靠左行驶的。
在西方游客比较多的大城市,比如北京、上海还有其他的大城市中英文指示标识随处可见。但是,在其他较小的城市,英文标识就非常少,而在农村英文的标识基本上就不存在。因此,最好每次都带上写有您目的地名称(中文汉字)的纸条,这样,即便您迷路了,当地人也可以给您指路。
建议外国人不要在大城市之外的地方开车,“单行道”标识一般都是“并不一定是单行”。在高速上,仍然有的一小部分司机开过了出口匝道后会减速,然后转个270°的弯转上匝道。司机本会有各式各样的穿插技术。
在过马路时,一定把路两边都看清楚。不仅仅是自行车可能逆行,而且越来越常见的电动车也会---并且它们都没有什么声音的。
=== 摩托车 ===
{{参见|在中国驾驶#机车}}
摩的在中国很常见,特别是在小城市和农村地区。摩的一般都很便宜,而且很灵活高效(但是偶尔有点儿吓人)。车费可以讲价。
各个地方对于摩托车的管理规定有所不同。在有的地方,50cc的輕便摩托可以不用驾照,但是由于事故频发,目前很多地方都已经禁止了这种摩托,或者对这种摩托有了新的规定。要在中国骑“真正的”摩托可就难多了-这一部分是因为骑摩托车需要中国的驾照,一部分是因为很多城市都禁止摩托车驾驶,还有一部分是因为由于汽车和电瓶车的发展摩托车的生产和进口大幅下降了。中国的摩托车一般都是125cc的,一般可以到100km/h,大部分都是老式的。这种车速度一般都比较慢,也不是特别好骑。由于政府对于发动机尺寸的限制,所以赛车比较少,但是也不是找不到。还有一种比较流行的是仿制本田CN250的“Maxi”摩托车,它速度更快而且也比较舒适,可以自动换挡,这样在市区里骑会容易一点。
大部分城市都有各种摩托车市场,卖给您的车一般都是假的牌照或者非法牌照-在中国骑摩托车的外国人并不多,很容易被警察注意到。骑“真正的”自行车必须戴头盔,但是电瓶车就不用。理论上说来,您要去办理个牌照:摩托车牌照是黄色或者蓝色,电瓶车是绿色或者红色牌照。自己申请牌照的费用可能要好几千(电瓶车几十元),但是您也可以花很少的钱弄到假牌照——后果自负。
===三轮车(人力车)===
{{infobox|名称中有什么差异?|在中国的外国人通常会混用三轮车和人力车这两个词,但是它们指的却是两种不同的运输方式-其中一种已经不再存在。著名(臭名昭著)的人力车是一种前面有两个把手的两轮车,车夫拉着把手把乘客送到(走路或者跑步)目的地。人力车在19世纪晚期尤为盛行,但是在20世纪50年代逐渐被淘汰了。西方的精英分子坐着中国工人拉着的人力车上打马球的视频显示了人力车剥夺和压榨的本质。在很多小的欠发达城市还能看到人力车的衍生品,工人们每天早上拉着类似人力车的车子等待运输建筑材料和其他东西。三轮车已经取代了人力车---三轮车是一种类似自行车的有三个轮子的车辆。}}
在有的中型城市里,短距离出行的话三轮车会方便很多。三轮车有人力脚踏的和动力的两种,在中国农村地区和大城市的较不发达(也就是游人较少)的区域非常常见。上车前一定记得要先谈好价钱。
对于“司机经常欺骗游客”的报道一般多指像在北京秀水街、王府井、和老舍茶馆这些旅游景点发生的事情。一般的规则是“要提防在旅游区兜售任何东西的任何人”。
如果您看到一般的中国人使用“三轮”,例如,从北京动物园到最近的地铁站-那这就是安全的。不要乘任何穿着老式服装以吸引游客的师傅的车。他会收您市价上10倍的车费。
可能的话,尽量选乘脚踏三轮车。在选乘脚踏三轮车的同时,您也在帮助确实比较贫困的人,让他们有生意可做,而且您也在帮助中国留下一些传统的东西。在上海,由脚踏三轮车发展和改进而来的电动的三轮车占大多数。
==语言==
[[File:Map of sinitic languages-en.svg|thumb|240px|中国方言地图]]
中国官方语言是'''[[漢語會話手冊|标准普通话]]''',它主要是基于北京方言发展演化而来的。从20世纪50年代以来,普通话是中国教育系统使用的唯一的语言,所以大部分人都会说。普通话是有声调的,声调正确对于学习和使用普通话很重要。
中国很多地区,特别是东南和南部地区都有他们自己的“方言”。这些方言其实就像完全不同的语言,就好像法语和意大利语一样。这些“方言”和普通话一样也都是有声调的。即便同样是普通话(地图中大片的棕色区域),各地方的口音也不一样,而且各地都夹杂着自己本地的俚语和一些很鲜活的地方语言。除了普通话,使用最多的方言是'''[[吳語會話手冊|吴语]]''',主要集中在上海、浙江和[[江苏]]省南部地区;其次是'''[[廣東話會話手冊|广东话]]''',集中在广东省大部、香港和澳门;再次是'''闽语'''(福建)语支,它包括 '''在[[厦门]]周边区域和台湾使用较多的[[閩南語會話手冊|闽南语]]'''(闽南语有一种次方言叫做潮州话,主要在潮汕地区使用),和在[[福州]]周边地区使用较多的'''闽东语''' 。大部分中国人都可以讲自己的家乡话(方言)和普通话两种语言。有的上年纪的和受教育较少的人可能只会讲他们的家乡话,但是这对游客没多大影响。最好能有一个可以讲本地方言的导游,讲本地语言就说明这个人是对本地比较熟悉。虽然您凭着一口标准的普通话就能在中国大部分地区畅游无阻,但是如果您可以试着和当地人讲几句他们的当地方言,那他们是会非常高兴的,所以学习几句简单的方言问候语或者俚语会让您很快就和本地人熟悉了。一般来说,如果能听懂或者比较喜欢当地的方言的话会对去比较偏远地区旅行是很有帮助的。当然,在这些偏远区域,带上一本中文常用语手册还是很有必要的,因为全国的中文写出来都基本是一样的。
无论各地方言差异有多大,所有正式的书面中文都是一样的。甚至很多日文和韩文都用很多相同的汉字,而且和中文中的意思一样或者相似。但是,要注意的是中国大陆使用的是“简体中文”,这种简体中文是在20世纪50年代中期为了消除文盲而发展出来的。香港、台湾、澳门和很多海外华人都在使用繁体中文,但是在大陆的的一些广告和商业标识上也能看到繁体字。汉字简化总体还是比较系统化的,一般以简体中文为母语的人基本也能阅读繁体字,反之亦然,所以只要学会书写一种中文一般就足够了。
注意,在书法中不同由于书法家有不同的风格,所以每个字的笔画差异非常大。中文有五种字体:篆书(篆書)、隶书(隸書)、楷书(楷書)、行书(行書)、和草书(草書),其中楷书是中国的官方字体。去中国旅游只要知道一种字体就可以了。对于对中国传统文化有深厚兴趣的人来说,学习中文字体肯定会大有裨益。
在中国遥远的西部,有的少数民族会使用土耳其语系中的[[維吾爾語會話手冊|维吾尔语]]、吉尔吉斯语、哈萨克语以及其他语言(例如:[[藏語會話手冊|藏语]])。在中国的北部和东北部少数民族聚集的地方,这些少数民族会使用自己各自的语言,例如满语、[[蒙古語會話手冊|蒙古语]]、[[朝鮮語會話手冊|朝鲜语]] 等。在中国云南、贵州、海南和广西居住着许多少数民族,例如:苗族、侗族、壮族、白族等,他们都使用自己各自民族的语言。除了这些地区的老年人,一般的年轻人都能说普通话,而且大部分年轻人都既可以说普通话又可以说自己的民族语言。很可惜的是,很多少数民族语言(如:满语)都在慢慢的消亡。
===英语和其他外语===
在过去20年中,从小学高年级或者初中开始英语便成了他们的必修课。大学里面无论你是什么专业,一定的英语等级都和学位挂钩。但是,所有的教学的终点都在正式语法,轻听说而重读写。
上海、北京、广州和深圳能讲英语的本地居民比例较高。在有的城市,除了在有涉外服务的旅游景点和场所外很难找到能讲英语的本地人。航空公司和大酒店-特别是国际连锁店的员工基本都会讲一些基本的英语,但是能用英语深入交流的非常少。
国际机场、警察局、医院等公共服务提供场所的接待人士基本都会说初级英语——尤其是年轻的,因为中国是在近几年开始重视英语的。
在中国讲英文的时候,请尽量简化您的英语语言:讲慢一些,标准一些(就像您在电视上看到的新闻主持人一样),避免俚语、成语或者较长的单词,尽量使用简单的现在时态和一些陈述语句结构。不要说“Would you mind if I come back tomorrow?”直接说简单的(尽管可能有些唐突无礼),例如“Tomorrow I will return.”这样说和中文语义更加相近,而更容易被理解。
同时,部分中国人的英语可能有口音(像中文一样抑扬顿挫或者单词等时),此时请叫
在中国结交朋友的一个方法就是询问“英语角”- 英语角是指本地居民约定好一个时间和地点一起见面并练习英语的地方。一般都由一个外国人主持,一般时间都在周五晚上、周六晚上或者周日,在公共公园、英语培训学校、书店和大学校园。可能还会有其他的比如“法语角”、“俄语角”、“德语角”等。
如果您要去比较偏远的地区,建议在您旅途开始之前找一个导游帮您安排行程。这至少会帮您克服语言障碍,因为这些地方的本地居民基本不可能会讲任何外语的。
===学习中文===
''參見:'' [[#学习|学习]]
在西方,不知何故,中文以她的难懂而闻名。虽然中文和西方语言有所不同,但是旅客们会很吃惊地发现中文的基本语法还是比较简单的。动词不分人称和时态。名词没有词性(注:很多语言,如法语,名字有阴性和阳性之分)。最主要的难点在于中文使用了欧洲语系中不存在的几个辅音以及声调。
普通话和越南语以及泰语一样都是声调语言,它们使用不同的语调来表示不同的意思。“Ma”这个发音可以代表妈、马、麻、骂四个字中任意一个,完全取决于音调。中文的同音字非常常见;即就是音调一样的一个读音都会有十几个不同的汉字。“Zhōng”可以是中、忠、钟、终等。中国人在报出自己的名字的时候一般都会逐个字来解释。“我叫王菲,王是三横王,菲是是非的非加草头。”
对于很多人来说,书面的中文看起来跟一个个神秘代码相去并不远,但是如果您都可以辨识那么多的商标图案(这些图案一般并没有逻辑联系),那么就说明您也有认识大量汉字的潜在能力。并且,大部分汉字之间都是有逻辑联系或者有规律可循的。
理论上来说,中文有5万多个汉字。好的一点是,这其中85%的都是不常见字。跟很多种语言是一样的,大部分中国人也不知道要看一本中文书需要认识多少个汉字,永远都不要去数哪个中国人认识多少汉字。有的人声称小学生应该至少学习2000个汉字,大学毕业生则至少认识5000个。
拼音的发展是为了弥补识字和发音之间的鸿沟,拼音使用了罗马字母,是中国人学习中文的辅助工具。不能按直觉对拼音进行发音,因为有的字母和辅音辅音连缀代表了很多欧洲语系并不存在的发音,因此很多拼音的发音和西方人士想象的并不一样。中国人不认识以拼音写出来的地名和地址;建议使用中文汉字来记录书面信息。
==观光==
中国有着无尽的美景,您在中国永远不会无处可去。特别是在沿海地区,如果您已经游遍了繁华闹市中的景点的话,那么随便乘一趟短途火车您就会发现下一个美景。
无论您是痴迷于历史、寄情于山水,还是只想找个怡人的沙滩放松放松,从[[北京]]雄伟的紫禁城到令人叹为观止的[[九寨沟]],您想要的中国都能给您。就算您已经在中国生活了很多年了,但是在这个幅员辽阔的国家的其他地方总有一些新的景物和事情有待您去发现。或许是由于中国疆土的辽阔和历史的源远流长,中国在联合国教科文组织中的世界遗产数目位列第三(第一第二分别是意大利和西班牙)。
[[Image:Diecaishan.jpg|thumb|240px|喀斯特地貌、桂林]]
=== 主要景点 ===
* [[万里长城]]
* [[天坛]]
* [[天安门]]
* [[秦始皇陵和兵马俑]]
* [[鼓浪屿]]
*[[黄山]]
* [[壶口瀑布]]
*[[西安|西安城墙]]
* [[布达拉宫]]
* [[婺源|婺源古镇]]
* [[泰山]]
* [[黄果树瀑布|黄果树大瀑布]]
* [[颐和园]]
*[[北京/故宫|故宫]]
* [[苏州园林]]
* [[东方明珠塔]]
* [[外滩]]
* [[华山]]
* [[大三巴牌坊]]
* [[少林寺]]
* [[九寨沟]]
[[File:1 jiuzhaigou valley national park wu hua hai.jpg|thumbnail|九寨沟的五花海]]
* [[张家界]]
* [[漓江山水]]
[[File:Lijiang River scenery.jpg|thumbnail|桂林漓江山水]]
* [[天涯海角]]
[[File:Sanya Sun Photo by Dale Preston.jpg|thumbnail|right|海南省风光]]
===喀斯特地貌===
'''山丘绵延、奇石陡峰'''是的中国艺术家梦寐以求的一种传统风景。中国的南部和西南部多这中形态各异的岩溶地貌,又称“喀斯特地貌”。喀斯特是一种石灰岩地貌,是以[[南斯拉夫]]石灰岩高原的地名命名。随着石灰岩被化学腐蚀,密度较大的抗腐蚀性石头或者地块形成了各异的山峰。山下形成的山洞会坍塌而形成落水洞和暗流,它们和地下河道连通。在喀斯特地貌中,溶蚀形成了星罗棋布的山峰、拱形洞穴和通道。其中最著名的例子就是云南省昆明附近的石林。中国很多最著名的景区都以喀斯特地貌风光著称— [[广西]]的[[桂林]]和[[阳朔]]和贵州省中部和西部等地。
===圣地===
中国的如下景点有非常著名的佛教艺术:
* [[山西]]的[[Datong#See|云冈石窟]] - 石窟依山开凿,有五万一千多个佛像雕刻,可以追溯到1500多年以前
* [[甘肃]]的[[Dunhuang#See|莫高窟]] - 可以追溯到公元4世纪的艺术和壁画
* 重庆附近的[[重庆/大足|大足石刻]] - 可以追溯到7-13世纪之间
* 洛阳附近的[[Longmen National Park|龙门石窟]] - 可以追溯到5-10世纪。
===圣山===
中国有很多圣山。
和道教有关的“五岳”:
* [[泰山]] ,山东(海拔1545米)
* [[华山]],陕西(海拔2054米)
* [[衡山]],湖南(海拔1290米)
* [[恒山]],山西(海拔2017米)
* [[嵩山]] (嵩山),河南省(著名的少林寺也在河南)(海拔1494米)
和佛教有关的“四大佛教名山”:
* [[峨嵋山]],四川(海拔3099米)
*[[青阳|九华山]],安徽(海拔1342米)
* [[普陀山]],浙江(海拔297米,是一个岛)
* [[五台山]],山西(海拔3058米)
西藏佛教三大主要圣山:
* [[冈仁波齐峰]],[[西藏]](海拔5656米),它也是印度教徒朝圣的印度教最神圣的山峰之一
* [[梅里雪山]]
* [[阿尼玛卿雪山]]
中国还有很多其他非常有名的大山。在中国很多大山即便并没有身处圣地,当时还是有很多庙宇:
* [[黄山]],安徽,风景秀丽,景色引人入胜。
* [[青城山]],四川
* [[龙虎山]],江西
*[[青岛|崂山]],山东
* [[武夷山]],福建,主要的旅游胜地,有大片的茶山
* [[喜马拉雅山]],横亘尼泊尔和西藏边界,世界上最高的山脉
* [[武当山]],在湖北[[丹江口]]附近,道教圣地,是太极和武当拳的发源地
*[[长白山自然保护区|长白山]](朝鲜语:백두산),对于满族人和朝鲜族人来说是世界上最神圣的山脉,位于中国和朝鲜的边界处。
===革命圣地===
* [[韶山]] - 中国共产党第一人主席和中国领导人毛泽东故乡
* [[井冈山]] - 共产党在1927年国民党围剿后的第一个农村根据地
* [[瑞金]] - 1929到1934年间中华苏维埃共和国所在地
* [[遵义]] - 遵义会议所在地,之后毛泽东进入政治局常委
* [[泸定]] - 传说中飞夺泸定桥所在地
* [[延安]] - 从1939年到1945年中共产党的主要根据地所在地
* [[武汉]] - 推翻清廷的武昌起义发源地
* [[广州]] - 黄埔军校所在地,国民党和共产党的很多领导人(蒋介石、周恩来、毛泽东)都曾有黄埔军校经历,在1926-27年被北伐前开展了很多军事和政治学习。
===旅游线路===
以下是全程都在中国境内的一些旅游线路:
* [[中国两周到一月游]]
* [[香港附近一周游]]
* [[长江沿线|长江沿线游]]
* [[黄河沿线|黄河沿线游]]
* [[京杭大运河流域|大运河沿线游]]
* [[云南游]]
* [[西藏游]]
* [[长征]]
其他涉及中国的旅游线路:
* [[欧洲到南亚陆路旅游]]
* [[丝绸之路]] - 古代从中国到欧洲的商队之路
* [[中巴公路|喀喇昆仑公路]] - 从中国经由喜马拉雅山到巴基斯坦
* [[马可·波罗的足迹|探寻马可·波罗的脚步]]
* [[昆明到香港陆上行]]
==活动==
===按摩===
中国按摩场所遍布全国,而且一般都物美价廉。在亚洲,盲人有从事按摩的传统。一般比较专业的按摩价格在20元到40元一小时之间。
* 基本上所有的理发师都可以帮您洗头,并且给您做一个头部按摩,只收20块钱。这一般还包括帮您清理耳屎和一些颈部和手臂按摩。加上理发和/或刮面,一般收15元到25元。在大城市里,理发费用一般在50元以上。
* 足疗的地方也很多,一般足疗场所的招牌上都有光脚图片作为标示。价格一般在20元到100元。
* 全身按摩场所也非常多,价格一般在每小时15元以上。一般有两种:按摩一般就是普通的按摩;而推拿可能会用到针灸中使用的中草药。最专业的按摩一般都在专门的按摩医院或者一般的中医院,价格一般都在50元每小时以上。性价比最高的一些在不明显场所的盲人按摩。
很多地方这三种按摩都有。
有的按摩场所其实就是妓院。卖淫在中国虽然非法,但是却很普遍并且经常会以按摩作为掩护。很多温泉和桑拿场所都提供“全套”放松服务。在一些小地方,只要您看到粉红色的灯光和穿短裙的女孩子,那么很有可能他们提供的就不仅仅是按摩,而且她们也不怎么会按摩。很多发廊也是这样,既是按摩场所也是妓院。
没有粉红色灯光的地方一般都提供很不错的按摩服务,而不提供性服务。如果某个按摩场所的广告中注明了是盲人按摩,那么这基本上是合法场所。
在很多按摩场所您可以小睡几个小时,甚至在那里过夜都可以。理发店一般没有可供睡觉的地方,但是您也可以在做全身按摩的时候在按摩桌上睡一会,或者在做足部按摩的时候在沙发上睡一会儿。一般费用都不会很高,这估计是在中国最便宜的过夜的方式。但是,请注意,除了带有独立包间的高端桑拿场所,在其他的按摩/桑拿场所中,您都要和那里的员工公用厕所,而且不能将您的行李锁起来。寄存行李最好的办法是把行李寄存在火车站(所有火车站都有行李寄存处),一般价格在10-20元左右。
===传统艺术===
如果您计划在中国停留的时间比较长,那么建议您学一点中国传统艺术。毕竟,人在中国本身就是学习中国传统艺术的绝佳机会,如果您对某项中国传统艺术已经略懂一二,那么通过直接向这一艺术所在国度的大师学习可以提升您的技能。很多城市都有很多知识分子接收初学者,而且不懂中文也不碍事,因为您可以通过实例或者模仿进行学习。书法现在仍然是中国人热爱的一种艺术。很多城市的书法家都用毛笔蘸水在城市公园的人行道上练习。其他的您可以参加培训班的传统艺术包括演奏中国传统乐器(您可以询问买中国传统乐器的商店,很多商店就有培训班)、中国厨艺、甚至京剧演唱。费用一般都非常合理,而且也不需要特别大量的辅助材料。唯一的要求就是要在一个地方足够久;最好不要在旅游景点参加这样的培训课程。
===武术和太极===
和中国传统文化艺术一样,有兴趣、有时间的人可以学学中国久负盛名的武术。有的武术,譬如说太极,学习的方法很简单,清晨直接去市区的随便哪个公园跟着那里的人练就可以了。您会发现那里有很多人很乐意做你的老师的。其他的武术就需要更加深入的学习了。著名的武术培训地有[[嵩山]]的少林寺和[[大理]]附近的无为寺。
===传统的消遣活动===
中国有很多可以在茶室、公共公园甚至在大街上玩的传统消遣。只要有摊子,一般都会吸引很多路人。起源于中国的策略游戏有围棋和中国象棋。麻将是一种以麻将牌作为道具的游戏,麻将在中国非常流行而且经常(也不是没有例外)都是玩钱的。各地的麻将规则不一样,所以每到一处,你都要学习新的麻将规则。麻将最有名的打法是广东麻将、台湾麻将和日本麻将。跳棋虽然不是起源于中国,但是在中国也有很多人在玩。很多中国打扑克的技艺都很精湛;邓小平先生对于桥牌的钟爱是远近闻名的。
==购物==
中国的官方货币是人民币,经常缩写为RMB。人民币基本单位是元(在纸币上写作“圆”),它的国际货币代码是CNY。所有的标记都是以元为单位的,不是¥就是“元”。在[[香港]]和[[澳门]]特别行政区人民币'''不是'''法定货币,这两地都自行发行货币。当然,香港有的地方也接受人民币,但是都是按照人民币和港币1:1的汇率来算的(截止2017年9月17日,1人民币=1.2400港元)。1人民币元=0.1581美元,1美元=6.3246人民币元(截止2018年3月20日)
{{infobox|小贴士|* 10 ''分''等于1 ''角''
* 10 ''角''等于1 ''元'',基本单位
* ''元'' 也称''块''
* ''角''也称''毛''
* 10大写为''十'',或者''拾''
* 100大写为''百'',或者''佰''
* 1000大写为''千'',或者''仟''
* 10000大写为''万''}}
元的下面是角,10角为一元,之后是分,10分为1角。分币现在基本上已经非常难看到了(可能在非常贫困的地区偶尔能看到)。一般价值10分的硬币叫做1角而不是10分。但是在口语[[漢語|普通话]]中,人们一般都说''块''而不是''元'',说''毛''而不说''角''。例如3.7元一般会被念成3块7(最后一位单位会被省略)。
在数字方面,请注意一般都会省略最后一位的单位,例如:530,会被念成五百三。而且注意在中文中有一个单位叫做''万''(十千),所以50000一般叫做五万而不是五十千。
中国的很多钱币都既有纸币又有硬币,包括很多零钱。有的地区纸币用的多一些,有的地方硬币用的多一些,但是无论纸币还是硬币在哪里都能用,根据中国法律,拒收人民币属于违法行为。角(1元的十分之一)也有纸币和两种版本的硬币。相反,一元却有硬币和两个版本的纸币(1999版人民币一元纸币底色为绿色,正面为花纹和毛泽东像,背面为杭州西湖“三潭印月”景色)。您最要会辨认不同版本的钱币。
===假币===
假币是一个很严重的问题。所有在中国待过几个月的人都会或多或少的有这方面的经历。从1元的硬币到10元、20元、50元和100元,都有假币。在中国生活的第一步是收到钱(即使是硬币)之后要仔细看看。看的时候主要要注意不同部分的质地、金线、和在不同光线下颜色的变化。如果您不懂您可以问别人,每个人都有自己的办法。
收银员在收到您的纸币后经常会仔细辨认。请不要生气,这并不表示他们怀疑您用假币。只是他们要负责任的。在您拿到零钱后也要仔细看看,特别是50元以上的。售货员有可能会想办法把他们从别人那里拿到的假币给您。
最近几年,ATM机吐假币(虽然不常见)成为一个很热门的话题。如果您担心从ATM机里拿到假币,那么请去银行柜台上,并告诉银行操作人员“我怕拿到假钱了”。一般银行人员都会理解的。
也听说有黄牛在中国边境处将假币兑换给游客,强烈建议去银行兑换货币(部分银行网点不能兑换)。
一般当您在商店或者出租车里支付50元或者100元时,您可以记住这张钱编号的最后几位。可能他会说您的钱是假的,这时候您可以保证他退回来的和您给出去的是同一张。
===货币兑换===
虽然中国现在仍然实行外汇管制政策,但是在很多国家都可以很容易换到人民币,特别是在亚洲。在中国兑换美元、加元、欧元、英镑、澳元、日元和韩元都是比较容易的。除了新加坡币之外,东南亚其他国家的货币一般比较难兑换。建议尽量到比较大的银行(比如BOC中国银行)或者授权的货币兑换点(一般高端酒店或者机场都有,但是汇率一般会有差异)兑换货币。
确实存在货币兑换的黑市,但是强烈建议您不要在黑市兑换因为在中国兑换货币时'''假币'''情况非常严重。对于在市场找到的或者银行周围溜达的黄牛一定要小心。虽然他们的汇率非常诱人,但是如果没有当地的朋友帮忙的话,'''不要'''跟他们兑换。经常会有兑换了一大笔钱之后发现拿到的大部分是假币。尽量在'''中国银行'''或者其他银行的柜台进行兑换,虽然他们的汇率相对要差一点,但是拿到假币的可能性几乎为零。
中国外汇管制很严格。在全世界的旅游景点和购物中心都很常见的私人的货币兑换点在中国却并不常见。在银行兑换货币一般需要5分钟到60分钟左右,有时候在酒店兑换会更快一点。一般就算大城市的支行都会对兑换流程很熟悉,操作的很快,而三四线城市的分行却不熟悉,操作相对要慢一些。
无论在哪里兑换,您都需要填一张表并出示您的护照。一般都要扫描您的护照并需要一份护照复印件。如果您计划带着较大金额离开中国的话,兑换收据要留好。注意,并不是每个有“Exchange”标识的银行都会给不是他们客户的人提供现金兑换服务。例如,渣打银行就只给他们的客户提供美元和港币货币兑换(但是,就算您拿到是旅游签证,开户也是可以的,而且他们的汇率要比大部分本地银行要优惠)。
用美元兑换人民币程序很简单,但是一般在兑换之前银行对您的钱看的很仔细。如果有机会在国外买入人民币的话(比如通过香港或者越南入境的话),应该在国外换,因为国外的汇率要好一些。要卖出人民币也是一样的,出中国边境之后卖出人民币的汇率也会更好一点。另外,大部分国际银行的储蓄卡或者信用卡都可以在中国的ATM机中直接支取人民币现金。但是,这样做的汇率非常不利而且手续费会非常高。建议随身带一点儿国际货币,例如英镑、美元或者日元以防您在附近找不到柜员机。
===銀行卡===
在中国接受銀行卡消費的小商鋪較為少见,多為大型消费场所接受。絕大多數接受銀行卡的商鋪均只接受中國銀聯卡。有部分较多中国以外游客受众的场所可接受 Visa/MasterCard 等国际组织通道的银行卡 ,但一般也是大型消费场所,如国际酒店,且有可能要求收取額外手續費。發現(Discover)卡與中國銀聯簽署了協議,允許於大陸地區的收銀機上作為銀聯卡使用,然而發現卡近期發行的芯片卡則可能需要多嘗試幾次或根本無法使用,且發現卡於線上並不能作為銀聯卡消費使用。雖然大來卡(Diner's club)目前屬於發現卡公司所有,但是於中國大陸並不可以作為發現卡或銀聯卡使用,覆蓋情況與美國運通(American Express)類似。
中国到处都有 ATM 机,所有的 ATM 机均接受中国银联卡,其中大部分的 ATM 也可接受 Visa/ MasterCard 卡组织的卡,部分机器也会支持 JCB/ 美国运通卡 ,中国以外发行的卡片在使用时必须在发卡方开通跨境取款功能,此外发卡方、卡组织、取款的 ATM 所属银行都有可能收取一定的手续费或兑汇费。
注意:虽然中國農業銀行、民生银行、深圳发展银行和上海银行等等許多銀行的 ATM 机上有时候会有 PLUS/ Cirrus/ Maestro 等标志,但是实际上只有个别的 ATM 机可以真正接受这些卡。而且能不能用只有您试了以后才能知道。絕對不可以依賴銀行卡作為唯一的支付與提現手段。
===移動支付===
中國的移動支付正在蓬勃發展中,類似微信支付、支付寶等基於二維碼(QR)的移動支付目前已經普及。幾乎所有接受小額支付的商鋪,甚至一些接受大額支付的商鋪,均接受至少一種使用二維碼的移動支付方式。如果您於商舖中看到一個印有上述軟體的 Logo 的二維碼,便意味著您很可能可以使用微信支付、支付寶等方式付款。随着该支付方式的发展,很多中国人已很少使用现金,甚至出门不需要带钱包了。
然而基於 NFC 技術的移動支付方式卻尚未於中國普及。虽然大部分终端已支持非接触式支付,但一般也仅限于使用银联芯片卡非接触,而不是通过手机 NFC ,即使可以使用,小型商铺的店员也会已不会使用等理由拒绝,接受 Apple Pay 的商鋪亦只能使用中国区或香港区 Apple Pay 中綁定的銀聯卡。 不过目前通过银联云闪付乘坐公共交通(城市内的公交,地铁等)已经被普及了,故在一定场合内NFC是可以使用的.
Google Pay 由于 Google 遭到封锁,故不可在银联终端上使用,即使您遇到接受 Visa/ MasterCard 的终端也不大有机会通过 Google Pay 消费,因为这些终端通常位于机场、国际酒店等大额消费场所,使用 NFC 非接是不被接受的,其他区域的 Apple Pay 同理。
截止2022年中国官方目前仍在部分地区试点数字人民币,数字人民币是与纸币一样,是中国官方承认的法定货币,具有可溯源的属性。可以实现无网络离线支付。
==饮食==
{{seealso|中華美食}}
中国有很多饭店和路边摊。如果您第一次来中国建议先尝试一下街头小吃。这一般比较便宜。
===地方菜系===
[[File:Guangzhou-Nur-Bostani-Restaurant-pseudo-bagels-0473.jpg|thumb|各种烘焙食品是中国西北穆斯林民族的饮食特点]]
*京菜:家庭面条和包子、北京烤鸭、甘蓝菜、棒极了的泡菜,不喜欢也可以极大的满足。
*宫廷菜:晚清宫廷食品,由慈禧而出名,可在北京的高端专业餐厅品尝。美食结合满族食品如独特的新奇事物如驼掌、鹿肉、鱼翅和燕窝。
*徽菜:中国八大菜系之一,特色菜品如毛豆腐,臭鳜鱼等。
*粤菜:大多数西方游客的风格在某种程度上已经很熟悉了。不是太辣,重点是新鲜煮熟的食材和海鲜。点心通常在早餐或午餐吃,是一个亮点。也就是说,正宗的粤菜在中国的各种菜系中广东的是有名的,即使在中国,他们非常广泛的定义什么是食物。
*沪菜:由于其地理位置,上海菜被认为是一个很好的混合北部和南部中国烹饪风格。最著名的菜肴是小笼包和韭菜饺子。另一个特色是“拉面”,从日本拉面和韩国碗拉面被认为是来自于此。糖通常被添加到炒的菜给上海菜味道甜甜的。
*川菜
*豫菜:即河南菜系,是对在带有中原传统文化内涵的烹饪理论指导下,运用具备中原地域特点的技术和材料所制作的菜肴、面点和筵席的总称。豫菜是中国各大菜系的渊源,被中国烹饪界称为中国八大菜系的“母菜”,有“烹饪鼻祖”和“中华厨祖”之称的伊尹便出生于河南[[洛阳]],当代豫菜是在原宫廷菜、官府菜、市肆菜和民间菜的基础上,根据中原物质条件,逐步积累演变而发展起来的。
因河南地处中原地区,其饮食文化口味因地域影响,河南北部多为面食,南部多为米饭。豫菜中一些菜名比较华丽优美,主要因为一些菜式源自于汉宋唐宫廷,有些饮食文化历史可以追溯到商周时期。
*湘菜
*潮州菜
*闽菜
*黔菜
*浙菜
*琼菜
*鲁菜:中国四大菜系之一(与川、粤、苏菜并称),选料考究,技艺精湛,主要流行与北方地区,对京津、东北等地的饮食产生影响。分为济南、孔府、胶东三支,代表菜有奶汤蒲菜、九转大肠、葱烧海参、油爆双脆、一品豆腐等。选料多为海鲜和肉类,孔府菜擅长素菜烹饪。口味偏重偏咸,擅长奶汤料理。除代表菜外,鲁菜家常菜也非常流行。
===快餐===
[[File:Xiao Long Bao by Junhao!.jpg|thumb|包子是一种很常见的食物]]
[[File:Chuan'r LED sign hanging in front of Beijing shop.jpg|right|thumb|烤串店可能会在店铺门口挂出来一个呈“串”字形状的灯]]
各种类型的中国食品都特别的快速、便宜、美味、方便。从各个城市都可以去买到吃的。[[北京]]王府井地区的小吃街是一个非常值得注意的旅游区,适合街头食品。在一些讲[[粤语]]的地区(主要是[[广东]],但不包括[[深圳]]),街头食品摊贩叫做盖宾洞,这样的企业可以发展成为一个实质性的业务,而在传统的街头食品意义上,这些摊位几乎不能“流动”。全国各地的快餐包括:
* 特别多的面包店。在中国发现的各种糖果和甜食通常作为零食销售,而不是西餐馆的餐后甜点套餐。
* 各种烤肉,包括羊肉串是非常常见的。
* 饺子,可以用来煮,蒸或油炸馄饨样物品与各种馅料。而且几乎遍布了亚洲。
* 包子,馒头里面塞满咸,里面是甜的或蔬菜馅或者肉馅。
* 馒头,可以看成是带皮的白色面包,也可以在中间加一点吃的。
* 兰州拉面,这个行业主要由回族族裔所主宰——寻找一家拥有穆斯林服饰工作人员的小餐厅,男士们戴着白色的帽子,女士们则戴着头巾。
* 在广东和其他地方则有点心,在中国的任何主要旅游目的地,您都可以找到为香港客户提供点心的人。
* 煎饼,一个鸡蛋煎饼,裹在一个带有酱汁的饼干和可选的辣椒酱。又被称为“煎饼果子”。
西方的快餐概念可以说与国内品种一样受欢迎。肯德基、麦当劳、赛百味和必胜客在中等城市及以上地区都是无处不在。汉堡王和棒约翰等中国连锁店也很普遍。这些包括德克士:鸡肉汉堡,薯条等,比肯德基便宜,有些人说得更好 - 还有(真功夫)——有更多的中国菜单。
===礼节===
尊老爱幼,文明用餐。
===买单===
在中国没有给小费的习惯,所以不需要,如果你想给服务员小费,他们可能会觉得这很奇怪;在中国使用移动支付非常方便,可以不带现金,非常方便的使用微信支付或者支付宝支付,但出门身上最好携带一些现金,以防出现意外,例如无法使用移动支付,或某些商人因过于年迈而未配备移动支付。
===在餐厅用餐===
===独自用餐===
==夜生活==
中国有很多酒吧、KTV等娱乐场所。有人说这很不安全。但是请放心,中国有全世界反应能力最快的警察制度。如果遇到危险请拨打报警电话110,警察会赶到并为你解决危险。
==住宿==
在中国只要不是偏远山区,就会有酒店。但是请注意在旅游景点,尤其是节假日时酒店价格会非常贵,高星级酒店为800<nowiki>~</nowiki>5000+元。
以上海迪士尼乐园酒店为例,(2017/09/18-2017/09/19 ,1 间房间 ,1 宾客)
9月份平常工作日价格(豪华花园景观房)为¥1,950元每晚(不含服务费)
10月份国庆假期价格(2017/10/03-2017/10/04 ,1 间房间 ,1 宾客)(豪华花园景观房)为¥2,750元每晚(不含服务费)
您可以在一些提供酒店预定服务的网站或者APP上提前查找并预定酒店,也许可以找到一些价格低廉的房间,有时候甚至可以用一百多人民币在北京住上两晚。
至于您选择的时间及其房型价格到底划不划算,就是仁者见仁智者见智了。
==学习==
{{seealso|前往中国留学}}
中國大陆主要大學有清华大学、北京大學、武汉大學、华中科技大学、南京大学、中山大学、浙江大学、上海交通大學、深圳大学、同济大学和复旦大學等。
==工作==
{{seealso|前往中國工作}}
近年来,中国增长非常之快,这有望成为世界上最大的经济体。尽管劳动力市场对于外国人的访问是困难的,然而,对于那些希望体验中国的人来说,有重要的机会。
就业机会包括英语教学,工程及跨国公司工作。
==安全==
在中国,游客的人身安全总体上可以得到保障,夜间主要街道也都基本安全,但是在人多的场合请务必保管好个人财物以免遭遇盗窃,小额的财物损失较难获得警方重视,追回的概率也不大,中国民间几乎没有枪械。在中国报警时,可以环顾四周的路灯杆上是否存在数字编号,这些编号可以告诉警方来迅速来确定你的位置。中国的报警电话是110,火警是119,急救电话是120。
==医疗==
===流行病学===
除了所有旅行者均应接种的常规疫苗外,美国的疾病预防和控制中心(CDC)建议对下述传染性病原体缺乏免疫力的人士额外接种疫苗:
*大部分旅行者应接种
**甲肝疫苗(HAV)
**伤寒疫苗(Thyroid)
*部分旅行者应该接种
**乙肝疫苗(HBV),如果您可能与当地人发生性行为,或者在当地接受手术和纹身。
**日本脑炎疫苗(JE),如果您的旅程超过一个月或者您打算访问乡村地区。
**小儿麻痹症疫苗(Polio),如果您打算访问新疆。
**狂犬疫苗(Rabies),如果您可能接触犬类。
**黄热病疫苗(Yellow Fever)(中国境内并没有感染黄热病的风险,这么建议是因为中国政府强制性要求部分来自黄热病疫区的旅客接种,否则不让过关。如果您并非来自疫区,可以不接种)
**疟疾疫苗(Malaria),如果您前往亚热带地区。
有些疫苗从首次接种到免疫获得可能长达6个月,因此请提前接种。由于访问东亚国家时,大量推荐疫苗都是重复的,所以尽早接种,就算去不了也不亏,这免疫力以后还能用得上。
在新冠疫情影响下,注射满全流程新冠疫苗在入境前也是必须的.
==举止==
通常的'''[[用电|电力系统]]'''使用是220伏/50赫兹。一般都能支持两针欧洲和北美,以及三针澳式插头。但是,请仔细阅读设备上的电压信息,以确保它们在插入之前接受220V(两倍于许多国家使用的110V)的电压,否则可能会导致倦怠和对诸如吹风机和剃须刀等设备的永久性损坏。可以处理各种插头形状(包括英国)的通用延长线被广泛使用。
中国是右行制国家,这意味这车辆、行人、电车、火车等均应当靠右行驶——这和一些地方不一样。
对于比较长的街道的名称通常以中间词语表示街道的一部分。例如,白马街或白马路可以拆分为白马路、白马北路、白马中路和白马南路。除此之外,也可以使用“东”或者是“西”。
然而,在一些城市,这些名称并不表示某条街道的一部分。例如在[[厦门]],湖滨北路和湖滨南路平行,在湖的南北两侧东西走向。在[[南京]],中山路,中山北路和中山东路是三条独立的主要道路。
'''洗衣'''服务可能价格昂贵或难以找到。在一些高端酒店,每件衣物洗涤费用为10-30元人民币。一些地区的廉价酒店甚至没有洗衣服务,但在其他地区,如沿着[[云南]]的旅游线路,这项服务是常见的,而且往往是免费的。在大部分地区,除大城市中心地区外,您可以找到可以洗衣服的小商店。在大门上寻找的标志是洗衣,或者是从天花板上垂下来的衣服。成本约为每件2-5元人民币。在即使是最小的城市,干洗店网点的分布也广泛,可以洗衣服,但在某些地区,您将被卡在手洗衣服这个环节,这是耗时且令人厌烦的,所以可能选择快速干燥的面料,如聚酯或丝绸,如果你确实找到一家洗衣店的酒店,通常他们会把所有的衣服放在一起洗,甚至与酒店的其他物品一起洗,所以最好用携带浅色的衣服。
[[File:Jianshui - old city - P1370481.JPG|thumb|用来销售的传统烟管]]
禁止在公共建筑和公共交通工具上'''吸烟''',除了一些餐厅和酒吧(包括KTV)——其中许多是很明显的吸烟场所,虽然许多跨国连锁餐厅禁止吸烟。这些禁令在全国范围内得到执行。一般来说,[[上海]]和[[北京]]的吸烟法律是最严格的,而在其他地方则更为严格。许多地方(特别是火车站,医院,办公楼和机场)都会设有吸烟室,一些长途列车可能在每辆汽车的尽头都有吸烟区,'''中国高速铁路列车全列禁烟'''。非吸烟者的设施往往很差;在大多数餐馆,酒吧和酒店除了高端设施外不会有非吸烟区,尽管许多现代化的建筑物都有排烟系统,通过天花板通风口将香烟烟雾吸出房间——这意味着烟雾不会在室内飘着。
{{Cquote|我可以吸烟吗?}}
{{Cquote|禁止吸烟!}}
中国的公众假期值得关注。尽管在最受欢迎的旅游景点中,你永远不会独处,其中包括特殊山区,周末和公众假期的热门徒步旅行,但由于当地旅游业的关系,这些地区可能会接近无法通行。你可能计划作为一个沉思的徒步旅行,可能会变成一个多小时的队列!了解国庆节日期并据此计划([[w:中华人民共和国节日与公众假期|参见]])。
关于香港、台湾的政治和所属话题,请不要发表您的意见,也不要与人谈论——这涉及到较大的政治争议。
==通讯==
=== 电话 ===
{{seealso|中国大陆电话区号}}
中国大陆有四大国营电信运营商:中国联通、中国电信、中国移动和中国广电。中国联通和中国电信涵盖移动电话和固定电话业务,中国移动只有移动电话业务(和铁通合并后也有固定电话业务),为大陆规模最大的移动运营商。不过近年来也有虚拟运营商开始提供移动通信服务,这类运营商使用的170、171、173、176号段都是虚拟运营商的专用号段。中国广电成立于2014年5月28日,是唯一国家级智慧广电网络运营商、综合文化信息服务提供商、新型基础网络设施运营商和基础电信业务运营商。
中国比较大型的酒店一般都有直拨国际电话IDD,可以拨打国际和港澳台电话。很多酒店都有网线接口、无线Wi-Fi上网、语音留言系统、视频系统等,实现了方便快捷的通讯服务。
移动通信方面,中国联通主要使用FDD-LTE、中国电信使用FDD-LTE、中国移动仅使用TD-LTE作为4G制式。各家移动运营商的信号覆盖都很广。
电信诈骗案件在中国时有发生,如果你接到了陌生的电话或短信,千万不要向对方转账或付款。
=== 网络 ===
中国电信和中国联通是中国境内两大拥有全国性骨干网的典型运营商,因此相对于其他小型运营商而言,这两家的网络性能较好,同时价格也更高。大部分宾馆客房里都有互联网连接,不少机场、商场、饭店等公共场所也有无线网络覆盖,不过它们大多需要经过手机短信验证等步骤才能使用。
中国的网络审查很严格,连接部分外国网站时可能会遇到长城防火墙(GFW)封锁,Facebook、 Twitter、 Google(包括维基百科,YouTube)等服务也在其中(见[[w:中华人民共和国被封锁网站列表|已被大陆封锁的网站]]),不过有些技术(VPN)可以绕过此类封锁,建议有需求的游客提前下载好相应软件并做好配置(Google Play 商店 在中国也被封锁,因此 Android 设备用户须提前准备)。值得注意的是,私自使用VPN浏览被封锁的网站在中国大陆系违法行为,但警察通常不会对使用者进行处罚。
在中国,许多中国应用开发商会开发两套应用,一套在Google Play商店受到严格审查,另一套受中国工业和信息化简单审查的应用可以在开发者的网站上获取。
{{usablecountry}}
{{位于|东亚}}
{{geo|39|103|zoom=4}}
{{related|在中國駕駛}}
ihvt2mlgf2y3jqhu8zfb47bqrrl1axi
183853
183852
2022-08-04T12:51:08Z
Taxi passenger
15345
/* 英语和其他外语 */
wikitext
text/x-wiki
{{pagebanner|China_Banner_2.jpg|disambig=中國}}
{{quickbar
| image=Gran Muralla China5184.JPG
| caption=The Great Wall of China.
| location=LocationPRChina.png
| flag=Flag of the People's Republic of China.svg
| capital=[[北京]]
| government=Single Party Socialist Republic
| currency=人民币/港幣/澳门元
| area=(中華人民共和國)9,596,960 km<sup>2</sup>
| population=(中華人民共和國)1,411,778,724(2020年官方统计值)
| language=官方語言:[[普通话会话手册|現代標準漢語(普通話/國語)]]<br>汉语地區語言:[[吴语会话手册|吳語]]、[[廣東話會話手冊|粵語]]、[[福州话会话手册|閩東語]]、[[閩南語會話手冊|閩南語]]、[[湘语会话手册|湘語]]、[[赣语会话手册|贛語]]、[[客家语会话手册|客家語]]等<br>其他少數語言:[[维吾尔语会话手册|维吾尔语]]、[[哈萨克语会话手册|哈萨克语]]、[[蒙古语会话手册|蒙古语]]、[[藏语会话手册|藏语]]、[[朝鲜语会话手册|朝鲜语]]、[[柯尔克孜语会话手册|柯尔克孜语]]、[[壮语会话手册|壮语]]
| religion= 道教 30%、佛教 11-18%、基督教(新教、天主教)3-5%、伊斯蘭教 1.5-2%、三教、無神論 53-59%.
| electricity=220V/50Hz (澳大利亞2/3腳插頭)
| callingcode=+86
| tld=.cn
| timezone=UTC +8
}}
{{COVID-19 box|[[2019冠状病毒病|新型冠状病毒感染的肺炎]]在中国大陆境内的流行高峰期已经过去,但中国政府仍然实施“动态清零”政策,部分城市有封锁措施,部分公共场所可能关闭,防疫政策未完全取消。为了阻断境外输入病例,境外来华人士需接受为期10天(7天集中隔离医学观察+3天居家健康监测)的隔离观察,[[2019冠状病毒病 (中国)|在中国大陆境内旅游]]也需要遵循当地的防疫政策。前往已开放的室内公共场所,请佩戴口罩并配合出示[[w:健康码|健康码]]、登记个人信息等要求。
具体请见[[2019冠状病毒病 (中国)]]}}
{{Disclaimerbox|'''注意:'''<br/>
#本文帶有歐美國家的地域中心傾向,請協助修正。<br/>
#由于现实原因,本文大多數內容'''僅僅涉及中国大陆地区''';關於其他地區,請見:[[香港]]、[[澳门]]及[[台湾]]。<br/><br/>
注:某些習慣上,'''中國'''有時候只指'''不包括香港、澳門地區的中華人民共和國實際領土'''。[[香港]]和[[澳门]]都是中華人民共和國的特别行政区,实行“一个国家,两种制度(一国两制)”,与現今中国大陆的社會主義不同;台湾本岛、[[金门]]、[[马祖]]和[[澎湖]]被中華民國政權管轄至今。这样编写,维基导游并不代表'''任何一方的政治立场'''。<br/>
}}
'''中国大陆'''是由'''中华人民共和国'''实际統治的区域。中华人民共和国位于[[东亚]],是世界人口最多,面积第三或第四大(官方声称是第三大)的主权国家。有14个陆上邻国,分别为[[东亚]]的[[朝鲜]]和[[蒙古]],[[南亚]]的[[阿富汗]]、[[巴基斯坦]]、[[印度]]、[[尼泊尔]]、[[不丹]],[[东南亚]]的[[缅甸]]、[[老挝]]、[[越南]],[[中亚]]的[[塔吉克斯坦]]、[[哈萨克斯坦]]和[[吉尔吉斯斯坦]],以及[[北亚]]横跨欧亚大陆的联邦制国家[[俄罗斯]]。
==了解==
中华文明五千余年的悠久历史中,既经历过长期的太平盛世,也经历过无数次巨大的动荡和革命。很多诸如马可波罗和戈特弗里德·莱布尼茨这样的西方人士通过丝绸之路和过去几个世纪更多的文化交流方式对中国产生了巨大的兴趣,中华文明的深邃和伟大让他们深深地着迷。同时,现今的中国也是世界上最具有影响力的国家之一,中华文明将继续让全世界的旅行者兴奋着迷。
===历史===
{{seealso|中國歷代首都之行}}
若想知道中国的历史,请点选[[w:中国历史|中国历史]]及[[w:中华人民共和国历史|中华人民共和国历史]],那两大维基的条目有做详尽的历史写照。中国历经过的时期有:史前时期、传说时期、夏商周时期(含春秋、战国时代)、秦汉时期、魏晋南北朝、隋唐五代时期、宋辽夏金元时期、明清时期、中华民国大陆时期及现今的中华人民共和国,至今约有五千来年的历史。
===政治===
中华人民共和国是一个目前由中国共产党执政的国家,而共产党作为执政党可以领导政府,共产党的最高负责人为总书记,一般也是国家的实际最高领导人。国家主席是礼仪性的国家元首,一般都由总书记兼任。中国共产党中央军事委员会主席是最高军事统帅,但一般和国家主席、中国共产党中央委员会总书记是同一个人,所以中国共产党中央委员会总书记是实际上的最高统帅。政府由行政部门——国务院、一院制的立法机构和最高权力机构——全国人民代表大会(但是实质上,几乎每项法案的提案都要经由中国共产党中央政治局讨论,是实质上的议会,相当于英国的下议院、美国的众议院;经中央政治局通过后,再提交到全国人民代表大会或其常设机构——全国人民代表大会常务委员会通过,才能形成正式法案),还有国家军委、最高人民法院和最高人民检察院组成。中央委员会总书记既是国家最高领导人,拥有治理国家的全部权利,身兼国家军事主权和政治主权。现任中共中央总书记兼国家主席是习近平,国务院总理是李克强。
中华人民共和国的行政规划,中华人民共和国共有34个省级行政区域,包括23个省,5个自治区,4个直辖市,2个特别行政区。
包括:北京市,天津市,上海市,重庆市,河北省,山西省,辽宁省,吉林省,黑龙江省,江苏省,浙江省,安徽省,福建省,江西省,山东省,河南省,湖北省,湖南省,广东省,海南省,四川省,贵州省,云南省,陕西省,甘肃省,青海省,台湾省,内蒙古自治区,广西壮族自治区,西藏自治区,宁夏回族自治区,新疆维吾尔自治区,香港特别行政区,澳门特别行政区。一般每个一级行政区下都设有若干地级市等二级行政区,但四个直辖市和两个特别行政区下不设地级市。省政府拥有各自省内事宜的权力,而自治区政府比一般省政府都更大的自治权,但现实中一般不认为自治区和省有太大差别,所有自治区的政府除了可以使用自己独立的民族语言外,并无其他独立的司法和行政权。
与上述地区相比,香港特别行政区、澳门特别行政区和台湾省都有相对独立的政府部门,但是大陆政府主张它们是中华人民共和国的一部分。实际上,这是一个长久的争议话题,包括港独、台独、藏独等均是政治敏感话题,请不要与本地人谈论这些问题,以避免争吵。
===民族和习惯===
中国是一个有着不同文化、语言、习惯和经济水平的充满差异性的国家。经济发展状况的差异在全国各地尤为明显。但自从1980年代以来,邓小平政府宣布改革开放,开始实行社会主义市场经济并推行经济体制改革。中国大陆近年至2010年,GDP超过72000亿美元,已经成为美国之后的世界第二经济大国,普遍认为中国目前仍然是世界上发展速度最快的经济体,但是人均国民生产总值仍位于世界中等水平(第89位),并逐渐受到资源限制和贫富差距加大的制约。中华人民共和国省份中,广东为GDP最高的第一强省,浙江为人均收入最高的第一富省。中国的贫富差距正在日益趋于平均,截止2016年中国国内以几乎消灭贫困。所有乡村(包括大山深处的村庄)全部铺设了现代化道路,设有路灯。
这样一个幅员辽阔的国家,文化的多样性自然就不足为奇了。中华人民共和国官方承认的民族有56个,最大的民族是汉族,大约占人口总数92%。即便是汉族,也有很多相互之间不能理解的地方方言(例如粤语、吴语、客家语等);大部分语言学家把这些方言归类为基本都使用同一套中文文字的不同语言。很多少数民族也都有他们各自的语言。和大部分人所认为的不同的是,并没有单独统一的汉文化,虽然他们都有共同之处,比如儒家和道教思想,汉族本身的区域性差异也是非常巨大的。很多习俗和神灵都是有着明显的地域(有时候甚至村与村都不一样)特征的。春节和其他全国性的节日在各地也有着很大的不同之处。很多和婚礼、葬礼、迎接新生儿有关的习俗也都大有不同。总体说来,现代的中国社会没有明显的宗教倾向,并且在日常生活的背后还是隐藏着中国的传统文化。在少数民族中,壮族、满族、回族和苗族人口是最多的。其他主要的少数民族包括:朝鲜族、藏族、蒙古族、维吾尔族、吉尔吉斯人甚至还有俄裔。事实上,中国是除了韩国和朝鲜之外朝鲜族人口最多的,而且中国的蒙古族人数比蒙古共和国的蒙古人都多。很多少数民族都有不同程度的语言和风俗的流逝。
在海外部分中国人的行为或许不能被接受:
* 吸烟:几乎所有地方,包括有“请勿吸烟”标示的地方,包括健身俱乐部、足球场甚至医院,都有人在角落吸烟。北京现在不允许在大部分餐厅吸烟,也很少有餐厅会有吸烟区域。对于公共场合禁烟,各地执行程度不一。在一些并不高档的场所,一般都没有摆设烟灰缸。在中国,民航客机和高速铁路列车是对禁烟执行的最为彻底的公共场所。如果您所在的国家在绝大数公共场合已经进行了禁烟,那么您可能会对中国社会的禁烟力度感到遗憾。
* 盯着看:这在很多国家都很常见,但是几乎都是出于好奇而不是敌意。如果有人向你走过来然后端详你(就像看电视那样),请不要过度反应,这是没有什么害处的!少部分时间中国人看待日本人是有一定敌意的,这个国家给中国造成了不可磨灭的民族伤痕。但这部分中国人中也有人开始逐渐接纳日本人的优点。
* 喝酒:在吃饭的时候晚辈给年长的人敬酒是很常见的。别人敬酒你不接(即使是出于善意)也会被认为是很大的不尊重。
* 大声说话、吵闹或者吵架:这都很常见。这估计是您刚到中国发现的第一个现象。大声说话虽然有可能是因为说话者生气了或者在吵架,但是并不一定是这样,中国的有一部分民族因为生活中需要大声交流,所以保留下来了说话声音比较大的习惯,但如果你能提醒他小声一点,只要能听得懂你的语言,所有中国人都会去注意自己的言行。在中国诸如打架这样的暴力事件并不常见,但是也会发生。如果发现这样的事情,请离开,不要参与。在中国几乎从来没有人将外国人做为攻击的目标,只要作为外国人的您不是十分过分,那么一般中国人都是非常尊重您的。如果您在乘长途汽车或者火车时无法接受这种现象可以寻找工作人员协助处理。
有些长期居住在中国的外国人说这些现象日益恶化,而有些人说的却正好相反。通常来说,有可能是因为有时大量对于城市生活不熟悉的农民工涌入了城市。
总体来说,中国人还是比较爱说爱笑的,因为中国本来就有很多民族,而且还有很多从其他地方来的外来人,所以他们也习惯了以不同的方式处理事情。确实,中国人走到一起的一个常见话题之一就是讨论各自方言之间的异同。他们都很习惯打手势,而且对于非语言的笑话或者双关语反应得很快。中国人非常喜欢小孩,对他们很宠爱,并且关心得无微不至,这是中国人民对生命的尊重,孩子是人类的未来。如果您有小孩的话,也一起带上吧!
====数字习俗====
对于大部分中国人来说3、6、8、和9是吉祥数字。
* “三”意味着三阳开泰,三阳预示着福、寿、禄三路神仙。
* “六”代表着六六大顺。很多人都选带六的日子来结婚,比如说6号,16号或者26号。
* “八”(bā)听起来像发(fā),所以很多人都相信八是和财运联系在一起的。所以,2008年的北京奥运会选在2008年8月8日开也没有什么好奇怪的了。
* “九”被认为有长长久久的意思,并且在中国人的思想中为最大。
* “四”(sì)对大多数中国人来说是一个忌讳,因为发音听起来像“死”(sǐ)。所以在中国的一些大型商场、住宅里面,索性直接跳过4号楼,3号楼的下一号楼是5号楼。
* “73”、“84”在中国老人中也是比较忌讳的两个数字。因为在中国古代的圣人中,孔子是在73岁时去世的,孟子是在84岁时去世的。
* “250”在中国大众中也是一个特别不受欢迎的数字。人们常把说话不正经、办事不认真、处事随便、好出洋相、脑袋很笨的人叫做“二百五”,是用来骂人的脏话。
* “38”多指比较八卦、啰嗦、嫌人的女人,也可以指有这些特征的像女人一样的男人,也是用来骂人的脏话。
* “2”是指对方极为愚蠢,笨蛋的脏话,主要用于北方地区。
* “18”,中国有“十八层地狱”一说,部分住宅的18层用17A代替或做其他用途。
总体而言,中国人喜欢谐音。有时“四”也可以是吉祥数字。很多人在2013年1月4日注册结婚证,因为那一天听起来像是“爱你一生一世(201314)”。
==== 送礼习俗 ====
{{cquote|礼尚往来,往而不来非礼也,来而不往亦非礼也。}}
说的便是中国人们的礼物交换。中国自古以来就有“礼仪之邦”之称,礼被认为是中国传统文化的核心,是中华民族宝贵的精神财富。“礼之用,和为贵”实际上揭示了中国传统礼的本质精神。邓云乡著《红楼风俗谭》把其中的送礼分为八类,概括了送礼的大体类型:
# 纯属友谊情感的馈赠。如第三十一回写史湘云送姐妹们绛纹石戒指,东西虽小,但有送有收,也属送礼。
# 初次见面的馈赠,即常说的见面礼。其中有为友情的,有因礼貌的,还有另存目的的,情况较为复杂。
# 红、白喜事的送礼。娶亲、聘女、过寿是红喜事;死人是丧事,但白寿也当喜事办,叫“白喜事”。此外尚有盖房上梁、乔迁新居、做佛事等,都当喜事送礼。各种红白喜事送礼,除关系特殊者外,一般是“礼”的成分多而“情”的成分少了。
# 生日送礼,一般生日与整寿祝寿的礼不同,所送礼物也因过生日者的身分地位而有区别。
# 节礼,过年、元宵、清明、端午、中秋、冬至、腊八等大小节日都要送礼。节礼亲友之间要送,上下级之间要送;宫廷也要向王公贵戚家送,不过不说“送”,而叫“赏”。还有借送节礼来“打秋风”的,即倚仗权势,借着给富豪之家送一点不值钱的礼物(如年节送对联等),换取银钱财物等价值更重的回礼,其送礼为名,图利是实。
# 送土特产,过去叫“馈送土仪”。古代旅行不易,长途跋涉到外地,总要带些地方特产送礼。如《红楼梦》第十六回写黛玉由江南回来,“将些纸笔等物分送与宝钗、迎春、宝玉等”,也属于这一类。
# 穷富亲友之间的礼物。如刘姥姥和荣国府之间的礼物往来,虽然刘姥姥只送了点瓜果干菜而却得到了更多的回礼和资助,但其性质不同于“打秋风”、敲竹杠。
# 钻营的送礼。即以送礼为手段去结交权贵,拉拢关系,进而达到投机钻营的目的,得到更大好处。这在政府的治理之下,逐渐减少了。
除此之外:
* 中国人忌讳送伞,因为“伞”(sǎn)谐音“散”(sàn)。
*在中国也尽量避免送鞋,特别是情侣之间。因为送鞋代表着分离,通常会用作分手礼品所用。
* 在中国,给人送礼千万不能送钟(尤其是给老人和病人),因为“送钟”在汉语中与“送终”(sòngzhōng)读音相同。
* 送水果时,不能送梨,因为中国人不喜欢分离。而“梨”与“离”(lí)同音。
* 中国人喜欢带有蝙蝠图案的物品,“蝠”与“福”(fú)同音。
* 中国人不会当着客人的面打开礼物,必须由收礼者打开,或者等到送礼人离开时才能打开。否则会被认为是不礼貌的行为。这与西方不同。
==== 做客习俗 ====
* 一般不用提前通知主人,但要接受别人的邀请,否则将被视作无礼。
* 在每个地区,都会有相应的礼节与忌讳,请入乡随俗。
===气候和地形===
由于中国地域广袤,所以气候会复杂多样,从南方的热带地区到北方的亚北极。[[海南]]岛的纬度和牙买加大致相同,而[[哈尔滨]],中国北方最大的城市之一,则和蒙特利尔的纬度和气候相当。中国北方四季分明,夏天炎热,冬天寒冷。而南方气候就会更加温润。越靠近西北气候越干燥。一旦您离开中国东部,踏上壮丽的西藏高原或者甘肃和新疆的草原,那么您会领略到那里的土地很辽阔。
在计划经济时代,规定在秦岭淮河以北地区可以供暖,而长江以南地区不能供暖——这意味着像上海、南京这样的城市,虽然温度经常低于零度,但是依然没有暖气。这一规定虽然早就失去了原来的作用了,但是影响还是显而易见的。总体说来,中国人暖气使用较少,建筑的隔热也较少,在相同的天气下,中国人比西方人穿得厚。在学校、商场或者办公楼,就算房间里面有供暖,过道也是没有的。很少有双层玻璃窗。学校的老师和学生在教室都穿冬装。空调虽然日渐普遍,但是过道同样没有,并且经常都是门窗大开。
中国的地形范围很广,内陆有山脉、高原,中部和西部有戈壁。东部则以平原、三角洲和丘陵为主。广州和香港周围的珠三角地区和上海周围长三角地区是全球经济的动力中心,还有北京周围的华北平原和黄河流域。[[珠穆朗玛峰]]处于西藏自治区和尼泊尔的边境上,高度为8848米,是世界上最高的山峰。西北部新疆维吾尔自治区的[[吐鲁番]]盆地是中国的最低点,海拔为-154米,它也是世界陆地中仅次于[[死海]]海拔第二低的地方。
===节假日===
{{seealso|中国黄金周}}
中国每年有六个重大节日:
* '''农历新年'''或者春节——是农历的新的一年的开始,但不止是农历正月初一,民间从农历十二月(被称为腊月)廿三(或廿四)到正月十五,公历一月底到二月中旬。春节是中国全民最大的节日,所有民族都会一同庆祝。相当于欧美国家的圣诞节。
* '''清明节'''——一般在4月的4-6日间,或者叫扫墓日,这一天所有人都去给自己的先人扫墓并送上祭拜品。通往公墓的交通在这一天会非常拥堵。
* '''劳动节'''——5月1日
* '''端午节'''——农历的五月初五,一般在公历的5月到6月之间。这一天人们要赛龙舟、吃粽子。
* '''中秋节'''——农历八月十五,一般在公历10月份。中秋节是中国仅次于春节的隆重节日。中秋节起源于上古时代,普及于汉代,定型于唐朝初年,盛行于宋朝以后。中秋节是秋季时令习俗的综合,其所包含的节俗因素,大都有着古老的渊源。中秋节以月之圆兆人之团圆,为寄托思念故乡,思念亲人之情,祈盼丰收、幸福,成为丰富多彩、弥足珍贵的文化遗产。在这天大家会一同食用月饼,又叫月团、丰收饼、宫饼、团圆饼等,是古代中秋祭拜月神的供品。月饼最初是用来祭奉月神的祭品,后来人们逐渐把中秋赏月与品尝月饼,作为家人团圆的一大象征。
* '''国庆节'''——10月1日,是为了庆祝1949年新中国成立。
春节和国庆节一般假期都不止一天;几乎所有工人春节假都有至少一星期,有的甚至有两星期或者三星期,学生会放四到六周寒假。国庆放假一般一星期。
'''春节'''期间一般都很忙。这不仅仅是最长的假期,而且也是传统走亲访友的时间。这一段时间,整个国家基本上都处于休息状态。基本上所有外出打工的人都会回家。这几乎是他们回家的唯一机会。人人都想回家,中国人口众多!在春节期间,很多商店都会关门好几天、一周,甚至更久,因此,如果您在中国大陆没有亲戚或者好友,那不建议您在这一段时间去中国旅游。
在七月初的中国大陆,会有大批大学生放假回家(约两千多万!),然后在八月底他们又要返校,这段时间从东部沿海地区到四川、甘肃、西藏和新疆的交通格外拥堵。
如果要列出一个中国节日的完整清单的话,那么这个清单就会很长,因为很多地区和民族都有他们独特的地方性节日。以下是上面没有提到的但是同样是非常重要的节日:
* '''元宵节'''(或者上元节)——农历正月十五,紧随春节,一般在公历的二月到三月。在很多城市,例如泉州,全市上下都会被装点上各式各样的灯笼。
* '''七夕'''——农历七月初七,是中国的情人节。
* '''中元節'''——农历七月十五,又称“鬼节”。
* '''重阳节'''——农历九月初九,一般在公历的10月份。
* '''冬至'''——12月22日或者23日。
除了以上的节日,中国很多地方,特别是大城市,也过西方的节日。在圣诞节期间,大街小巷都能听到圣诞颂歌,大部分都是英文的,也有中文版本的。很多商店都会进行装饰,有的店员会穿上圣诞的衣服。情人节期间,很多餐馆都会推出特殊的晚餐。中国大陆的基督徒也会在政府批准的新教和天主教教堂举行礼拜或者弥撒。
===书籍===
'''旅游篇:'''
* '''马可.波罗游记''',作者马可.波罗 - 威尼斯旅行家在中国的旅途故事(''参阅:'' [[On the trail of Marco Polo]])
* '''Dialogues Tibetan Dialogues Han''',作者:Hannü (''ISBN 9789889799939'')
* '''Behind the Wall- A journey through china''',作者:Colin Thubron. Thubron重述了他1987年在中国从北京到嘉峪关的旅行。
'''文学篇:'''
* '''《大地》''',作者赛珍珠 - 关于20世纪世纪之交时中国农民生活的经典之作,赛珍珠点燃了20世纪30年底美国公众对于中国的兴趣。赛珍珠女士关于中国的作品使她获得了1938年诺贝尔文学奖。
* '''《三国演义》''' - 中国经典名著,讲述了汉朝末年三国时期群雄并起的年代中的英雄豪杰。以对于兵法和政治策略的描述见长。四大名著之一。整个东亚地区,不断有关于这一题材的电视、电影、动画和游戏。
* '''《水浒传》''' - 一个关于在宋代时期居住在淮河流域的人和腐朽的政府相抗衡的故事。以主角们对于现实统治的反抗而著称。四大名著之一。
* '''《西游记》''' - 可能是最出名的中文小说,关于唐僧在孙悟空、猪悟能(八戒)和沙悟净的协助下西天取经的玄幻小说。以出色的想象力见长。四大名著之一。
* '''《红楼梦》''' - 贵族家庭三家人的恩恩怨怨。以对中国贵族家庭生活的入微描写而见长,被认为是中国文学的顶尖之作。四大名著之一。
* '''《红高粱家族》''' - 背景是民国时期的山东高密,男女主人公历经曲折后一起经营一家高粱酒坊。但是在日军侵略战争中,除男主人公(姜文扮演)及幼子外,女主人公和酒坊伙计均因参与抵抗运动被日本军虐杀的故事。作者莫言获得2012年诺贝尔文学奖。
'''历史篇:'''
* '''《紫禁城的黄昏》'''作者:R.F. Johnston (''ISBN 0968045952'')。Kindle上也有。Johnston(庄士敦)是历史上唯一一位被允许进入小朝廷的外国人,他生于英国,是皇上的老师。庄士敦身居高位,在紫禁城和颐和园都住过。《紫禁城的黄昏》是对于他亲眼所见的重大事情的陈述。
* '''《追寻现代中国》'''作者:Jonathan Spence - 是一部由耶鲁大学教授撰写的1644年以后的中国历史。
* '''《万历十五年》'''作者:黄仁宇 - 描述了中国明朝的一个多事之年。它是一部关于这个时期的最著名的史学著作。
* '''《中国新史》'''作者:John K. Fairbank - 一名美国著名学者的最后一部著作,它对现代汉学有着深远的影响。
* '''《剑桥中国史》''' - 剑桥大学出版社出版的一个系列,包括了早期和现代中国历史。这是最大最全面的关于中国历史的英文著作。
* '''《开放的帝国:1600年前的中国历史》'''作者:Valerie Hansen - 详细地描述了从商代到明朝中国历史、文化、社会经济的发展。
* '''《1421中国发现世界》'''作者:Gavin Menzies (''ISBN 0553815229'') - 关于中国对于探索世界并绘制世界地图所作出的努力,这本书颇有争议。有意思的是,本书暗含中国是发现新大陆的第一个国家,而各界对这一观点都表示批评的态度,并指出这是中国学术界的臆想。
* '''《北京的六分仪》'''作者:衞周安 - 总结了关于中国比想象中开放而且并不如想象中排外的近代思想。
* '''《南京大屠杀》''' 作者:Iris Chang (''ISBN 0140277447'') - 被世人遗忘的二战大屠杀。
* '''《拉贝日记》''' 作者:John Rabe - 对于二战中日本军人所犯罪行和Rabe最终成功拯救大约250000无辜生命的第一首描述。
* '''《红色中国布鲁斯——从毛到现在,我的长征》'''作者:黄明珍,加拿大环球邮报记者。概述描述了他作为第一个外国交换生在文革后的中国生活以及他一直到20世纪90年代中期作为一名记者在中国的生活经历。
===电影===
*贝纳多·贝托鲁奇 - '''《末代皇帝》''' (1987)
*张艺谋 - '''《大红灯笼高高挂》''' (1991)
*陈凯歌 - '''《霸王别姬》''' (1993)
*张艺谋 - '''《活着》''' (1994)
*吴子牛 - '''《南京1937》''' (1995)
*吴天明 - '''《变脸》''' (1996)
*张艺谋 - '''《有话好好说》''' (1997)
*谢晋 - '''《鸦片战争》''' (1997)
*张扬 - '''《洗澡》''' (1999)
*冯小刚 - '''《没完没了》''' (1999)
*张艺谋 - '''《一个都不能少》''' (1999)
*王小帅 – '''《十七岁的单车》''' (2001)
*张艺谋 - '''《千里走单骑》''' (2005)
*吉安尼·阿米里奥 - '''La stella che non c’è''' (《消失的星星》) (2006)
*张元 - '''《看上去很美》''' (2006)
*李仁港 - '''《三国之见龙卸甲》''' (2008)
*罗杰·斯波蒂伍德 - '''《黄石的孩子》''' (2008)
==地区==
一般情况下,中国被分作了七大地理区域,分别为华北、东北、西北、华东、中南和西南,这里并没有采用这样的划分方法,而是做了一些调整,使之更适应于旅行者。由于现实原因,这里只包含了中国大陆。
{{Regionlist
| regionmap=Map of China (zh-hans).png
| regionmaptext=中国大陆地理分区(此图不含[[南海诸岛]])
| regionmapsize=500px
| region1name=[[中国东北|东北]]
| region1color=#d5dc76
| region1items=[[辽宁]]、[[吉林]]、[[黑龙江]]
| region1description=历史上被称作满洲,而现在被称作东北,包含了“老工业区”城市、广阔的森林、漫长多雪的冬天。
| region2name=[[华北]]
| region2color=#b383b3
| region2items=[[山东]]、[[山西]]、[[内蒙古]]、[[河南]]、[[河北]]、[[北京]]、[[天津]]
| region2description=黄河流域,中华文明的摇篮和历史中心。
| region3name=[[中国西北|西北]]
| region3color=#71b37b
| region3items=[[陕西]]、[[甘肃]]、[[宁夏]]、[[青海]]、[[新疆]]
| region3description=长安,中国1000年来的故都,丝绸之路向西延伸横跨沙漠、山脉、草原游牧民族地区和伊斯兰地区。
| region4name=[[中国西南|西南]]
| region4color=#4da9c4
| region4items=[[西藏]]、[[云南]]、[[广西]]、[[贵州]]
| region4description=异国情调、少数民族、壮丽的景色和背包客的天堂。
| region5name=[[华南]]
| region5color=#a78379
| region5items=[[安徽]]、[[四川]]、[[重庆]]、[[湖北]]、[[湖南]]、[[江西]]
| region5description=长江流域、农场、山区、河流峡谷、温带和亚热带森林。
| region6name=[[中国东南|东南]]
| region6color=#ffd0d0
| region6items=[[广东]]、[[海南]]、[[福建]]
| region6description=传统贸易中心、强大的制造业与海外华人的祖籍。
| region7name=[[华东]]
| region7color=#d56d76
| region7items=[[江苏]]、[[上海]]、[[浙江]]
| region7description=“鱼米之乡”(相当于中国的“牛奶和蜂蜜的土地”),传统的水乡,和当代中国的主要经济中心。
}}
== 城市 ==
中国有许多著名的大城市。
* [[北京]],中国首都和文化中心,2008年奥运会和2022年冬奥会的举办城市。金、元、明、清、中华民国(北洋政府时期)等五个朝代在此定都,因此分布着大量的历史古迹。
* [[天津]],紧邻北京市的城市,有很多西方国家曾在此设立租界,因而拥有大量的西洋历史建筑,海河的夜景以及各式各样的桥梁是天津景观的特色。北京到天津的高速铁路车程约30分钟。
* [[上海]],中国人口最多的城市和经济中心,富有很多购物场所。
* [[南京]],“六朝古都”“十朝都会”,一个有很多历史古迹的地方,江苏省省会。
* [[苏州]],一座具有千年历史的古城,有着很多中式的园林。
* [[杭州]],“上有天堂下有苏杭”,著名的丝绸产地之一。
* [[郑州]],“绿城”,华夏文明发祥地,是轩辕皇帝的故里,河南省省会,具有少林寺等众多景点。
* [[西安]],“十三朝古都”,兵马俑、华山等旅游景点世界闻名,陕西省省会。
* [[厦门]],福建省沿海的滨海城市。
* [[大连]],辽宁省的滨海城市,世界花园城市,经济发达。
* [[青岛]],山东省的滨海城市,经济发达。
* [[广州]],中国南方最发达的城市之一,岭南地区的文化中心。
* [[深圳]],中国南方经济最发达的城市之一,以金融业和高科技产业而闻名,但旅游资源匮乏,与[[香港]]接壤。
* [[武汉]],中国中部经济最发达的城市之一,别称“江城、东方芝加哥”,湖北省省会,有“九省通衢”的美誉。
* [[成都]],中国西部经济中心之一,中国国宝大熊猫繁育基地所在地,三国时期“蜀国”的首府。
* [[重庆]],中国西部经济中心之一,在第二次世界大战期间为中华民国的临时首都,现为中国面积最大的直辖市。
* [[桂林]],“桂林山水甲天下”,是一个非常受欢迎的旅游目的地。
* [[昆明]],“春城”,云南省省会。
* [[沈阳]],“一朝发祥地,两代帝王都”,辽宁省省会。
* [[合肥]],综合性国家科学中心,“一带一路”和长江经济带战略双节点城市,国家重要的科研教育基地,现代制造业基地和综合交通枢纽,安徽省省会,700万人口。
* [[宁波]],简称甬,世界第四大港口城市,中国大陆综合发展水平前15强中心城市,长三角五大都市圈中心城市之一,长三角南翼经济中心,国家历史文化名城,连续五次蝉联全国文明城市。
你可以乘坐四通八达的[[高铁]]前往上述这些地方旅游。
==其他目的地==
* [[万里长城]] - 长度超过8000公里,这个古长城是中国的象征。
* [[兵马俑]] - 中国十大名胜之一,号称“世界第八大奇迹”,被联合国教科文组织列为世界文化遗产。
* [[海南]] - 热带天堂岛屿,目前正在进行大规模的旅游开发。
* [[九寨沟]] - 以熊猫栖息地、美丽的瀑布和多彩的湖泊闻名。
* [[乐山]] - 以一整座山雕刻而成的乐山大佛而闻名(靠近[[峨眉山]])。
* [[喜马拉雅山]] - 在西藏和尼泊尔交界处,世界上最高的山脉。
* [[泰山]] - “五岳”之首,中国道教五大圣山之一,由于其历史渊源也是登山人数最多的山。
* [[西藏]] - 西藏大部分都是藏佛教教徒,有浓郁的传统西藏文化,感觉好像身处于另一个世界。
* [[吐鲁番]] - 在新疆的穆斯林地区,这一地区以葡萄、严峻的天气条件和维吾尔族文化闻名。
* [[云冈石窟]] - 这些依山的洞穴和石窟总数超过50个,石窟中有超过51000个佛像。
* [[黄山]] - 中国十大风景名胜之一,世界文化与自然遗产,同时也为世界地质公园。
==抵达==
===签证===
{{seealso|w:中华人民共和国签证政策|香港出入境手冊|w:澳門簽證政策}}
大部分访问大陆的游客都需要签证(visa)。大部分情况下,您需要在离开前从中国大使馆或者领事馆获取签证。前往香港和澳门的签证也可以在中国大使馆或者领事馆申请,但是不能和前往大陆的签证有所区分。但是,[[香港]]和[[澳门]]对大部分西方国家游客免签。
但是,这一规定最重要的一个例外是在某些机场的转机大部分机场允许乘客没有签证而在机场待24小时(前提是旅客不离开机场),但是上海浦东机场和虹桥国际机场允许没有签证停留48小时。
对于大多数外国公民,以任何理由进入中国大陆基本上都是需要签证的。然而,[[日本]]、[[新加坡]]和[[文莱]]公民可以免签证在中国大陆停留15天。此外,根据双边协议,[[白俄罗斯]]、[[格林纳达]]、[[汤加]]、[[塞舌尔]]、[[巴哈马]]、[[巴巴多斯]]、[[斐济]]、[[卡塔尔]]、[[塞尔维亚]]、[[厄瓜多尔]]和[[阿联酋]]公民可以免签证在中国大陆停留30天。[[毛里求斯]]公民可以免签证在中国大陆停留60天。上述国家的公民以免签证待遇入境后只能进行旅游、探亲访友、商务等活动。[[圣马力诺]]、[[波黑]]和[[亚美尼亚]]公民则可以以任何理由免签证进入中国大陆并停留90天。
[[香港]]和[[澳门]]的中華人民共和國籍公民访问中国大陆时需要向中国旅行社申请回乡证,中旅是唯一的授权机构。回乡证大小和信用卡相同,有效期1年,在有效期内都可以停留,也没有雇佣方面的任何限制。[[臺灣|台湾]]居民可以在[[大连]]、[[福州]]、[[海口]]、[[青岛]]、[[三亚]]、[[上海]]、[[武汉]]、[[厦门]]的机场以及在[[香港]]和[[澳门]]的中旅申请有效期为3个月的入境文件。台湾旅客必须持中华民国护照、台湾人身份证和台胞证。可以在[[大连]]、[[福州]]、[[海口]]、[[青岛]]、[[三亚]]、[[上海]]、[[武汉]]、[[厦门]]机场申请台胞证。入境费用为100元加上50元一次性台胞证。旅客出行前须查看最新的政策信息。
{{infobox|签证类型|
* '''G签''' - 中转
* '''L签证''' - 旅游、访亲
* '''F签证''' - 商务、实习、短期调研
* '''Z签证''' - 工作签、多次出入
* '''X签证''' - 6个月以上学习
}}
旅游签证申请比较容易,也不需要邀请函(商务签和工作签都需要)。一般的单次旅游签停留期是30天,有效期是三个月。双次出入境签证有效期为六个月。有的国家的游客可以拿到90天的旅游签。
可以在各地出入境管理局申请旅游签延期,需要的资料是:有效护照、签证延期申请表(含两张2寸证件照),一份您在当地派出所拿到的临时居住表。[[上海]]的进出境管理局位于浦东明生路1500号。延期需要5个工作日。
有的旅客需要双次签证。例如,如果您持有单次签证,然后您去了香港或者澳门,从那里再次返回中国大陆则需要新的签证。按照规定,在香港,多次出入境签证只能给持香港身份的人,但是相关部门愿意稍加变通,也可以给短期的相关居民(包括交换生)三个月的多次出入境签证。在这种情况下,建议直接向中国政府申请,因为有的代理人不愿意代表您提交这样的申请。
落地签只能在[[深圳]]或者[[珠海]]的经济特区申请,也只能在这些地区使用。在经由罗湖火车站(一定记住不是[[落马洲]])前往[[深圳]]时,可以获取只限于深圳使用的有效期5天的签证,申请时间不限于工作时间,很多国籍游客([[爱尔兰]]、[[新西兰]]或者[[加拿大]])的现场申请费用为160元(2007年10月的价格),但是[[美国]]游客''不能申请'',而[[英国]]游客则须支付450元。现在该签证办公室只接受人民币,请一定记得带上足够的现金。
到2013年,大部分过境旅客可以获取仅适用于[[上海]]和[[北京]]的72小时的落地签。
由于政治原因,签证政策可能会不断变化。例如:
* 作为对[[美国]]提高中華人民共和國內地游客签证费用的报复,美国国籍游客签证费被增加到140美元(旅游团为110美元)
* 香港颁发的签证一般限制在30天内,多次出入境的签证变的很难拿到甚至会拿不到。
几年之前,Z(工作签)证是长期签证。现在Z证只能在中国国内待30天;一旦您在中国,雇主须为您办理居住证。实际上,这才是多次出入境签证,您可以用它往返中国。如果您持旅游签来中国,有的签证部门会拒绝为您办理居住证明。这种情况下,您需要使用工作签。工作签只能在国外申请,因此您可能需要去香港或者韩国(请注意,因为首尔的中国领事馆不给非韩国居民办理签证,所以没有外国人等级证的游客必须到釜山)。工作签需要雇主的邀请函。有时候也可以将L签(旅游签)转为Z签(工作签),这都取决于办理签证的具体公安局和您雇主是否有足够的关系。
和中国公民结婚的外国人(见[[中国婚姻]])可以选择办理6-12个月的''探亲''签证。''探亲''签实质上是L签,但是它允许您在签证有效期内一直停留在中国。想要申请''探亲''签的人要先以其他签证进入中国,之后在您婚姻登记所在地的公安局(一般是您配偶的户籍地)办理。办理时需要带上您的结婚照和您配偶的身份证。
大部分外国人可以在[[蒙古]]的[[乌兰巴托]]办理签证。[http://mn.china-embassy.org/eng/lsfw/ 领事馆网站]。在旺季,领馆可能在中午11点之后就拒绝办理。可能会有很长的队,所以您需要来的早一点。并且,中国重大节日期间,使领馆都会休息几天。
====住所登记====
如果您住在酒店或者宾馆中,在您入住时酒店人员可能会要求看甚至要扫描您的护照、签证和入境章。
如果您住在私人住所中,理论上需要您在到达的24小时(市区)或者72小时(农村)内在当地公安局登记,但是,这条法律在现实中很少(如果一定要说有的话)有人执行,只要您不惹麻烦就行。警察会问你要:
# 您护照的复印件
# 签证复印件
# 入境章复印件
# 照片
# 您居住场所的凭证。凭证上的名字可以不是您的名字。
* 您每次来中国都需要登记(有居住证的例外-居住证持有者只需在新签证办理完后登记即可)
* 如果您不登记,有可能会受到500元以下的罚款。
* 手续比较长(3个多小时),最好带上翻译(在上海,只要您有任何形式的居住许可就不用办理登记)。
===乘飞机===
进入中国大陸的主要门户有[[北京]]、[[上海]]和[[广州]];近來許多大型城市也陸續開通洲際航線,[[武漢]]、[[成都]]、[[西安]]、[[重慶]]、[[昆明]]等;[[烏魯木齊]]因為比鄰中亞的地緣優勢,也開通了前往獨立國協國家的航班。几乎每个有一定规模的城市都会有一个国际机场,但是運營範圍以區域航線如[[香港]]、[[韩国]]、[[日本]]、[[东南亚]]為主。
{{infobox|到香港和澳门|
如果您到了香港或者澳门,有渡船可以将您直接送到其他地方,比如蛇口、[[深圳宝安机场]]、[[澳门国际机场]]、[[珠海]]和其他地方,而不用“进入”香港或者澳门。有摆渡车将旅客直接送到轮船码头,这样他们的入境地点将会在轮航码头而非机场。请注意,轮航都有不同的运行时间。如果您的航班到港比较晚的话,您可能就需要进入港澳或者直接到您的最终目的地。例如,如果从香港国际机场通过澳门轮航码头到澳门的话,则需要办理移民手续。香港码头最新消息,请参阅[http://www.hongkongairport.com/eng/index.html 香港国际机场网站]。}}
虽然很多大的航空公司都有到[[北京]]、[[上海]]、[[广州]]和[[香港]]的航班,但是票价都比较高。要想买到较实惠的票,最好还是尽早订票。在夏初和夏末时候机票特别贵,因为这个时候中国学生都要回家或者飞往全世界各地的大学。和其他车票一样,飞机票在春节期间也会很难买。
如果您居住在海外华人社区较多的城市(例如:[[多伦多]]、[[旧金山|三藩]]、[[悉尼]]或者[[伦敦]]),那您可以看看华人社区或者中国人开的旅行社有没有低价的机票。有时候,航班只在中文报纸上广告,或者中国人的旅行社的航班价格就很低。
{{seealso|亚洲的廉价航线|中国主要民用机场列表}}
'''航空公司和航班'''
中国航空公司增长迅速。空客估计中国客机数量会从2009年的1400架增长到2029年的4200架。
中国航空公司也在努力提高价格和服务上的竞争力。航空公司包括[http://www.cs-air.com/en/ 南航],[http://www.chinaeastern.co.uk/ 东方航空],[http://www.air.com.cn/en/index.shtml 国航],和[http://global.hnair.com/ 海航]。
乘客可能会更喜欢亚洲的航空公司的航班,因为这些航班的乘务人员一般都较多,而且服务也比较好。可以选择香港的[http://www.cathaypacific.com 国泰航空]。其他的航空公司比如[http://www.singaporeair.com/saa/ 新加坡航空]、[http://www.jal.co.jp/en/ 日本航空]、[http://www.garuda-indonesia.com 印尼航空]。[http://www.koreanair.com 韩国航空]在亚洲范围内的航线价格都比较好,比如从[[曼谷]]经停[[首尔]]到北美。一般转接航班都比直航,这一点要记住。韩国航空也飞在中国十几个城市,包括上海。
*[[北美洲|北美]]:[http://www.delta.com 达美航空]经由[[成田]]飞香港、北京、上海和广州,也有从底特律、波士顿、和西雅图的直飞航班。[http://www.united.com/ 联合航空]直飞航班最多,从[[旧金山]]、[[Newark (New Jersey)|纽瓦克]]、和[[Washington, D.C.|华盛顿]]直飞香港、北京和上海,与此同时,联航还拥有从旧金山直飞成都的航班。[http://www.aa.com/homePage.do 美航]从芝加哥和达拉斯直飞北京 、上海和香港。[http://www.aircanada.com/ 加拿大航空]从[[多伦多]]和[[温哥华]]直飞上海、北京和香港。
* [[澳大利亚]]:[http://www.qantas.com 澳航]有从[[悉尼]]、[[墨尔本]]、[[布里斯班]]和[[佩斯]]到香港的直航。澳航从悉尼到上海和北京,但是从墨尔本到上海只有代码共享服务。经由东南亚的可能会有便宜的航班,那里有一些打折航班飞往澳大利亚。中国南方航空有从[[布里斯班]]、[[悉尼]]、和[[墨尔本]]直飞[[广州]]的直航,从那里您可以飞往其他主要城市。东
* [[新西兰]]:只有[http://www.airnz.co.nz 新西兰航空]有飞往中国大陆的直飞航班。直飞航线到北京、上海和香港。
* [[东南亚]]:据说由于新加坡有大量华人,所有[[新加坡]]的航线网络最好,往所有的大城市和一些区域性的中心城市(比如厦门、昆明和深圳)都有航班。除了新加坡,[[吉隆坡]]、[[曼谷]]和[[马尼拉]]的航线也不错。[http://www.tigerairways.com 老虎航空]、[http://www.jetstar.com Jetstar]、[http://www.airasia.com 亚洲航空]、和宿雾[http://www.cebupacificair.com 太平洋航空]也都有从[[东南亚]](曼谷、[[清迈]]、新加坡、吉隆坡和[[马尼拉]])到中国南方城市(包括厦门、[[景洪]]、广州、[[海口]]和澳门)的低价航班。
* [[欧洲]]: 欧洲大部分大的航空公司都有到香港、北京和上海的直航(有的也飞往广州),包括[http://www.airfrance.com/indexCOM.html 法国航空]、[http://www.britishairways.com/travel/globalgateway.jsp/global/public/en_ 英国航空]和[http://www.finnair.com/finnaircom/wps/portal/finnair/jump?locale=en_INT 芬兰航空]。但是很少有到其他中国城市的航线。例如[http://www.klm.com/travel/klm_splash/index.html 荷兰航空]有从[[阿姆斯特丹]]直飞[[成都]]、[[杭州]]和[[厦门]]的航班,[http://www.lufthansa.com/online/portal/lh/de/homepage?l=en 汉莎航空]有从[[法兰克福]]到[[南京]]、[[青岛]]和[[沈阳]]的航线。
* [[台湾]]:自2008年开始,两岸恢复直航,目前台湾和中国大陆的主要城市之间每天都有直航。
'''中国和欧洲之间的航班'''
{| class="wikitable sortable" border="1" cellspacing="0" cellpadding="3"
! 航空公司!! 起飞 !! 降落 !! 航班时间 !! 出发日期 !! 经济舱 P/W !! 说明
|-
| 芬兰航空 || 赫尔辛基 (HEL) || 北京 (PEK) || 7:50 || 周一到周日 || 32" / 18" ||
|-
| 芬兰航空 || 北京 (PEK) || 赫尔辛基 (HEL) || 8:30 || 周一到周六 || 32" / 18" ||
|-
| 芬兰航空 || 赫尔辛基 (HEL) || 重庆 (CKG) || 8:40 || 一三五六 || 32" / 18" || 2012.5.9开始
|-
| 芬兰航空 || 重庆 (CKG) || 赫尔辛基 (HEL) || 9:25 || 二四六日 || 32" / 18" || 2012.5.9开始
|-
| 芬兰航空 || 赫尔辛基 (HEL) || 上海 (PVG) || 9:05 || 周一到周日 || 32" / 18" ||
|-
| 芬兰航空 || 上海 (PVG) || 赫尔辛基 (HEL) || 10:15 || 周一到周日 || 32" / 18" ||
|-
| 海南航空 || 柏林 (TXL) || 北京 (PEK) || 9:25 || 三五日 || 32" / 19" ||
|-
| 海南航空 || 北京 (PEK) || 柏林 (TXL) || 10:20 || 三日 || 32" / 19" ||
|-
| 海南航空|| 布达佩斯 (BUD) || 北京 (PEK) || 9:20 || 一五 || 32" / 19" ||
|-
| 海南航空 || 北京 (PEK) || 布达佩斯 (BUD) || 10:10 || 一五 || 32" / 19" ||
|-
| 海南航空 || 布鲁塞尔 (BRU) || 北京 (PEK) || 9:40 || 二四六日 || 32" / 19" || 从2012年4月,周五也有,2012年7月开始周一也有
|-
| 海南航空 || 北京 (PEK) || 布鲁塞尔 (BRU) || 10:35 || 二四六日 || 32" / 19" || 从2012年4月,周五也有,2012年7月开始周一也有
|-
| 海南航空 || 布鲁塞尔 (BRU) || 上海 (PVG) || || || 32" / 19" ||
|-
| 海南航空 || 上海 (PVG) || 布鲁塞尔 (BRU) || || || 32" / 19" ||
|-
| 海南航空 || 苏黎世 (ZRH) || 北京 (PEK) || 10:00 || 二四六 || 32" / 19" ||
|-
| 海南航空 || 北京 (PEK) || 苏黎世 (ZRH) || 10:45 || 二四六 || 32" / 19" ||
|-
| 荷兰航空 || 阿姆斯特丹 (AMS) || 成都 (CTU) || 9:25 || || 31" / 17.5" ||
|-
| 荷兰航空 || 成都 (CTU) || 阿姆斯特丹 (AMS) || 10:35 || || 31" / 17.5" ||
|-
| 汉莎航空 || 法兰克福 (FRA) || 青岛 (TAO) || 13:10 || 一三五 || 32" / 17.5" || 经停沈阳
|-
| 汉莎航空 || 青岛 (TAO) || 法兰克福 (FRA) || 14:25 || 二四六 || 32" / 17.5" || 经停沈阳
|-
| 汉莎航空 || 法兰克福 (FRA) || 沈阳 (SHE) || 10:15 || 一三五 || 32" / 17.5" ||
|-
| 汉莎航空 || 沈阳 (SHE) || 法兰克福 (FRA) || 11:15 || 三五日 || 32" / 17.5" ||
|}
===火车===
可以从中国周边的邻国乘火车前往中国,甚至可以从欧洲一路乘火车到中国。
* '''俄罗斯&欧洲''' - [[西伯利亚铁路]]两条线(横穿蒙古和东北),从[[莫斯科]]和北京出发,经停俄罗斯多个城市,在蒙古境内经停[[乌兰巴托]]。这条铁路的沿途风景无比绚丽,但时间过长,需要140小时左右。
* '''哈萨克斯坦&中亚''' - 从哈萨克斯坦[[阿拉木图]]可以乘火车到新疆的[[乌鲁木齐]]。在过海关时候和换另一国的轨道轮距会等很长时间。
* '''香港''' - [[香港]]和中国大陆之间有固定列车。从香港的红磡和廣州东站之间有直达列车。海关手续在各自火车站办理。此外,香港亦有直通火車前往[[上海]]、[[北京]]、[[肇慶]]、[[佛山]]。香港的港鐵从香港市区到深圳边界的两个点有直达,分別是落馬州以及羅湖,但主要的过境点在罗湖,也是深圳的主站。
* '''越南''' - 从广西南宁经过友谊关到越南。自2002年起,从[[昆明]]发出的列车就被暂停了。
* '''朝鲜''' - 从平壤到北京之间每周有四列列车。
* '''老挝''' - 从昆明到万象直接于2021年末开行的列车
===公路===
中国和14个国家之间有陆地边境;这一邻国的数量只有[[俄罗斯]]可以与之匹敌。另外,中国大陆和[[香港]]和[[澳门]]特区之间都有路上边境,由于实际原因,这些边境和国际边境一样。中国西部边境都在遥远的山区,这些地方虽然难以到达和游览,但是游客们会在那里看到让人叹为观止的美景。
====[[印度]]====
这两个国家之间的关系总是处于欠佳状态,但是最近开放了从印度[[锡金]]到藏南的亚东口岸。但是,这个入境口不对游客开放,从这两个国家访问这个口岸都需要特殊的许可证。
====[[缅甸]]====
可以通过中国[[瑞丽]]到缅甸[[腊戍]]从缅甸进入中国,但是需要在缅甸政府办理许可。一般来说,您需要加入旅游团。
====[[越南]]====
对于大部分旅行者来说,走陆路到中国旅游的起点都在河内。有三个国际口岸:
* '''同登镇(越南)- 凭祥(中国)'''
:您可以从河内汽车东站(Ben Xe街,嘉林区,电话:04/827-1529)到谅山,从那里您需要转乘小型公共汽车或者摩的到同登镇的口岸。还有另一个选择就是选择旅行社(有急事的游客),他们可以提供酒店和过境服务。
:您可以从黄牛手中换外汇,但是之前要好好确认汇率。
:过境手续大约需要30分钟。在中国境内,穿过“友谊关”之后打个的(大约20元,使劲儿砍价!)去[[凭祥]]。小型公共汽车车费大约5元。汽车总站车站正对面就有一家中国银行;ATM机上可以用Maestro卡。您可以乘汽车或者火车到南宁。
* '''老街(越南)-河口(中国)'''
:您可以乘火车河内到老街,软卧大约420,000越南盾(截止2011年11月)。这一段大约8小时。从那里您可以走到老街/河口口岸(乘车5分钟)。
:过境很简单,填好出境卡然后排队等。他们会检查您的行李(特别是您的书/书面材料)。河口口岸外面是各种商店,汽车站离口岸有10分钟车程。从河口到昆明的车票大约¥140;时间大约7小时。
* '''芒街市(越南)-东兴(中国)'''
:您可以从东兴乘汽车去南宁,有到广州的卧铺大巴(票价大约180元)和到深圳的卧铺大巴(票价大约230元,12小时)。
====[[老挝]]====
您可以从[[琅南塔]]乘大约早上8点的车到[[磨憨]](中国口岸)和[[勐腊]]的汽车。但是您要有中国签证,因为口岸不能办理签证。海关手续需要整整一小时或许还要多。一趟大概需要45000基普(老挝货币)。
另外,从[[琅勃拉邦]]到昆明有直达的卧铺大巴(要大约32个小时)。您可以在从[[琅南塔]]的小巴碰到卧铺大巴的地方上车。车费不会超过200元的。
====[[巴基斯坦]]====
从[[巴基斯坦]]北部到中国西部的[[中巴公路]]是世界上最为壮观的公路之一。冬天会对旅客封路。因为走这条线的旅客不多以及两国的良好关系,所以过境很快。从中国喀什噶尔到巴基斯坦有长途汽车。
====[[尼泊尔]]====
[[尼泊尔#抵达|从尼泊尔]]到西藏的公路经过喜马拉雅山附近,穿越蔚为壮观的高山。从尼泊尔到西藏只能跟团,但是个人可以从西藏到尼泊尔旅游。
====[[蒙古]]====
蒙古1945年正式从中国独立,当时的中央政权是“国民政府”。现在的中国和蒙古有两个边境口岸。它们是[[二连浩特]]([[内蒙古]])/[[扎门乌德]]边境口岸和[[塔克什肯]]([[新疆]])/[[布尔干]] 边境口岸。
中国有从二连浩特开始的火车或者长途客车,经过扎门乌德到达乌兰巴托。火车和长途汽车站大多数大部分时间都是第一天晚上出发,第二天早上到达。边界在上午八点半左右开放。从二连浩特有去往中国其他地方的长途汽车和火车。
====[[哈萨克斯坦]]====
到中国的口岸分别在[[霍尔果斯]]、[[阿拉山口]]和[[吉木乃]]。几乎每一天都有汽车从[[阿拉木图]]到[[乌鲁木齐]]和[[伊宁]]。不能办理落地签,所以出发之前先保证您已经准备好了哈萨克签证和中国签证。
====[[吉尔吉斯斯坦]]====
可以通过[[图噜噶尔特山口]]进出吉尔吉斯斯坦,但是道路非常崎岖,并且这个口岸只在每年的夏季开放几个月(6月-9月)。也可以安排走喀什,但是先要准备好签证。
另外,另一条路(虽然风景略差,但是路况较好)是经过直达图噜噶尔特南部的[[伊尔克什坦口岸]]。这条路每周大约有2-3次大巴(卧铺),大巴行程大约24小时。
====[[塔吉克斯坦]]====
塔吉克斯坦和中国唯一的口岸在[[阔勒买]],这一口岸在五月到十一月之间的周日开放。从新疆[[喀什噶尔]]到塔吉克斯坦[[科洛格]]之间有大巴。但是这班车不对除塔吉克斯坦人和中国人以外的人开放。
====[[俄罗斯]]====
最主要的口岸是[[内蒙古]]的[[满洲里]]。从满洲里到俄罗斯的[[后贝加尔斯克]]有大巴。从[[黑河]]到布拉戈维申斯克、从抚远到哈巴罗夫斯克有渡轮。再往东,在[[绥芬河]]、东宁、和珲春都有路上口岸。在出发之前要保证您已经申请了俄罗斯签证。
====[[朝鲜|朝鮮民主主義人民共和國]]====
在中國前往朝鮮民主主義人民共和國(下称:朝鲜)要經由[[丹東]]/[[新义州]](신의주),而且必須預早在北京安排導遊。相反,從北韓旅遊後進入中國,則較容易。另外, 除了上述口岸外,在鴨綠江和圖們江亦有其他出入境口岸,但這些口岸可能不允許旅客通行。最後,在通關前,請確保阁下持有有效中國及北韓簽證。
====[[香港]]====
香港主要有四個陸路口岸進入中國大陆,分別是落馬洲、沙頭角、文錦渡以及深圳灣。某些國藉的旅客可於落馬洲申請落地簽證,但若使用其他口岸必須預先安排。
====[[澳門]]====
澳門分別有兩個陸路口岸連接[[珠海]],分別是關閘邊檢大樓(大陆稱:拱北口岸)以及路氹邊檢大樓(中國大陆稱:橫琴口岸)。持有某國藉的旅客可在路氹邊檢大樓申請簽證。
====其他====
暫時為止,旅客尚未可利用陸路前往[[不丹]]及[[阿富汗]]。
===水路===
====香港以及澳門====
香港和澳門與[[珠江三角洲]]的城市間,設有定期高速客輪服務,來往[[廣州]],[[深圳]]以及[[珠海]]等地。同時,[[香港赤臘角國際機場]]亦設有跨境快船轉駁服務,旅客無須入境香港而前往[[廣州]]、[[珠海]]等地。
====日本====
每星期有一至兩班(根據季節而定)定期客輪由[[上海]]和[[天津]]來往[[大阪]],船程約為兩天。此外,[[青島]]每星期有兩班客船來往[[下關]]以及每星期一班由[[上海]]來往[[長崎]]。
====南韓====
以下數個港口均有定期航班前往南韓仁川:[[上海]]、[[天津]]、[[青島]]、[[威海]]以及[[大連]]。
====台灣====
每日有18班渡輪由[[廈門]]來往[[金門]],行程約一小時三十分鐘。另外,每天亦有4班來往[[金門]]及[[泉州]],兩班來往[[馬祖]]及[[福州]]。此外,每星期亦有跨台灣海峽航班,由[[廈門]]至[[臺中|台中]]或[[基隆]]。
====泰國====
每星期有3班高速客輪來往[[雲南]][[景洪]]及[[泰國]][[清盛]]。盡管航班會經過[[緬甸]],[[老撾]]但旅客亦無需持有其簽證。
====遊輪====
在秋天,有數條遊輪航線會由[[美國]]前往[[亞洲]],例如:[[安克雷奇]]、[[溫哥華]]或[[西雅圖]]。另外,麗星郵輪亦有運作[[基隆]]、[[廈門]]以及一些[[日本]]外島的航線。
==交通==
===飞机===
中国幅员辽阔,所以,如果您不想浪费太多时间在路上的话,最好还是选择飞机出行。中国的大城市和主要旅游目的地之间有很多国内航班。三大国际航空公司分别是:国航、南航、和东航,除此之外也有一些地方航空公司,包括:海航、深圳航空、四川航空和上海航空。最近几年大城市和各省纷纷建立了自己的航空公司,包括:重庆航空、成都航空、河北航空等。海南航空的母公司发展了包括大新华航空,扬子江快运,香港航空公司、金鹿航空等11家航空公司。
中國香港特區或者中國澳门特區到內地城市的航线都算是国际航线,因此价格較為昂貴。因此,如果要在內地和香港或者澳门之间往返,那么走深圳或者珠海(跟香港或者澳门一江之隔)会便宜'''很多''',或者走广州(广州距离香港或者澳门较远,但是有往来航班的城市却更多)。例如,从福州到香港、深圳或者广州的距离相似,但是在2005年时,飞往香港的航班价格为1400元,但是飞往其他城市的价格仅为880元,飞往深圳的打折机票仅为550元。到这些城市称汽车的话价格约为250元。
国内航班都是有标准价的,但是都会打折,特别是比较繁忙的航线。大部分酒店和招待所都有订票服务,酒店订票可能会有7.5折到3折优惠。中国的所有城市都遍布着旅行社和票务公司,他们的折扣基本相当。 就算不打折,在中国乘飞机出行也并不贵。中国两大在线订票网站[http://www.elong.net/ 艺龙]和[http://english.ctrip.com/ 携程]都有英文网站,但是航空公司网页一般都只有中文,或者需要中国手机号码来订票。
在中国旅游,一般最好在旅行社买票最划算,或者只在中文网站上买。在国外买的话(例如,通过Expedia或者甚至通过国航网点买)都会贵很多,因为国外只卖全价票。而打折机票只在中国境内出售。国内航班的时刻表一般要到航班时间前2-3个月才能定下来。和大部分国家的空运市场不同的是,买的早的人要多付钱,因为到后面会有折扣。飞机越空的航班,越容易在航班起飞的前几天买到折扣比较高的票。只要您敲定了您的行程,建议您关注飞机票价,看看什么时候涨,什么时候跌(一般都会有波动的)。但是,如果在外出旺季出行(例如春节期间),建议尽早订票,以保证您能买到票。一些价格比较高的票可以允许先退票(退票费5%-20%),然后再买低价票。最近,国内航班的头等舱也可以打折了。有的线路头等舱和经济舱价格差异并不大,还是比较划算的。但是,请注意,在空港的很多福利(例如:候机大厅、额外的行李和积分等)就不适用于打折机票了。
请注意,虽然政府和顾客都给航空公司施压,但是毫无理由的飞机延误还是很正常的。有时候飞机出行还不如其他的选择。取消航班也并不罕见。如果您从中国的票务处买的票,他们一般会联系您(如果您留下了联系方式)并通知您航班的变化。如果您在国外买的票的话, 一定要在您乘机的前一两天查看航班状态。一旦出现航班延误,中国的航空公司很快就会送出餐盒或者点心(尽管这些盒饭/点心并不一定合西方人的口味)。建议在中国旅游时随时准备好B计划。水是过不了安检的,但是所有的中国机场都有开水处,所以您可以带上杯子和茶叶。
和全世界所有地方一样,中国机场的餐饮费用也贵的离奇。在市区25元的咖啡,在机场的相同连锁店里面可以卖到78元。KFC的价格好像没有变化;他们很多机场的门店的价格和其他地方门店的价格都一样的。花20元以上吃一顿KFC还不如在街对面吃一碗5块钱的面呢,但是在机场的话,KFC还是最划算的。
===火车===
{{infobox|中国的春运时的火车票|以春节为中心,共40天左右,每年农历腊月十五到次年正月廿五,那时候民工开始放假,纷纷乘交通工具回乡,在这个阶段,有30多亿人次的人口流动,占世界人口(约70亿人)的3/7,相当于全国人民进行两次大迁移,同时也是当今世界上规模最大的人口迁移。每年春运,铁路运输是重中之重,为了解决春运问题,中国政府每年都要提前部署,但仍无法满足春运要求。所以,在此期间尽量避免乘火车出行,因为买到火车票会非常困难。}}
[[File:A maglev train coming out, Pudong International Airport, Shanghai.jpg|right|thumb|200px|[[上海]]的磁悬浮列车]]
火车是大部分中国人长途旅行的首选。铁路线路网络不断在扩展,覆盖了全国各地。中国大约占据了全世界铁路交通的1/4。
中国目前正在建立一个高铁网,类似于法国的TGV和日本的新干线。中国现在已经有很多高铁线路在运行了。中国高铁叫做“和谐号”及“复兴号”,高铁列车车次通常以“G(高)”“C(城际)”“D(动)”开头。如果您的预算允许的话,乘高铁是“最好的出行方式”。更多详情,请参阅[[中国高速列车]]。
==== 火车类型 ====
中国的火车被分成了不同的类型,在各自的车票上都有显示。中国火车从最快的到最慢的分别如下:
* 高速動車組列車(高速「G」):營運最高時速380公里,現限速300公里 使用CRH系列「和諧號」高速電力動車組,列車車次為G1-G9998.注:2017.9.21 复兴号已经提速至350km/h,部分线路车次已经开始换装复兴号。
* 城際動車組列車(城際「C」):營運最高時速350公里,現限速200~300公里 使用CRH系列「和諧號」高速電力動車組,列車車次為C1-C9998(其中,京津城際鐵路使用C2000 - C2999作為其車次,鄭州鄭開城際鐵路使用C28xx作為其車次,上海金山鐵路使用C3000 - C3999作為其車次,武漢武咸城際鐵路,武黃城際鐵路使用C50xx,C55xx作為其車次,成都成灌鐵路,成綿樂客運專線使用C61xx - C63xx作為其車次,廣州廣深鐵路使用C70xx - C72xx作為其車次,珠海廣珠城際鐵路使用C76xx作為其車次)。
* 動車組列車(動車組「D」):最高時速200-300公里,現限速160-300km/h,使用CRH系列「和諧號」電力動車組,列車車次為D1- D9998。
* 直達特別旅客快車(直特「Z」):最高時速160公里、中途不停車或者僅停靠少數車站的夕發朝至跨局或管內列車(跨局列車是指可以在本鐵路局/公司管轄範圍以內和以外的綫路上行駛的列車),列車車次為Z1-Z9998。
* 特別旅客快車(特快「T」):最高時速140公里/160公里(少數按直達特快等級運行的列車)的跨局或管內列車(管內列車是指僅可以在本鐵路局/公司管轄範圍內運營的列車),列車車次為T1-T9998。
* 快速旅客列車(快速「K」):最高時速120公里/140公里的跨局或管內列車,列車車次為K1-K9998,亦有诸如K53,K54(北京-沈阳北)的夕发朝至直达卧铺列车。
* 普通旅客快車(普快):最高時速120公里的跨局或管內列車(直快僅限跨局列車),列車車次範圍是1001-5998,無字母。
* 普通旅客列車(普客):最高時速100公里的跨局或管內列車,列車車次範圍是6001-7598,無字母。
* 通勤或路用列車(通勤):用於沿線鐵路職工上下班通勤的列車,列車車次為7601-8998。
* 市郊動車組列車(市郊「S」):最高時速80公里的城市內動車組列車,使用和諧長城號內燃動車組,現僅運營於北京市郊鐵路S2線,列車車次為S201-S299。
* 臨時旅遊列車(旅遊「Y」):為旅遊高峰客流而開行的旅客列車,列車車次為Y1-Y998。
* 臨時旅客列車(臨客「L」):在春運、暑運等客流高峰開行的列車,列車車次為L1-L9998。
另外從2015年春運起,L字頭臨客列車已大為減少,普速臨客列車車次多為3xxx、K4xxx、K5xxx、K6xxx、T3xx、T4xx、Z4xxx、Z9xxx;動車組臨客列車車次為D4xxx、D9xx;城際動車組臨客列車車次為C9xxx;高速動車組臨客列車車次為G4xxx,G9xxx。
==== 座位级别 ====
普通的非和谐号列车主要有五个座位级别:
[[File:Soft sleeper compartment for train T138 from Shanghai to Xi'an.jpg|thumb|特快火车软卧车厢]]
* '''软卧'''是最舒服的出行方式,以西方的标准很便宜。软卧的一个包厢有四个铺位,两个一列(现在更新的列车也有两个铺位的包厢),门可以上锁,空间也比较大。
* '''硬卧'''的话,一排有3张铺位,没有门。上铺很高,而且床的上面空间很小。上铺最适合身高较高的游客(1.9米以上),因为您的脚可以伸出去,而且不必担心被碰到。如果您有需要藏起来的东西(例如:照相机)的话,上铺也是最好的选择。东西放在上铺的枕头下面,一般小偷是够不到的。硬卧并不是硬板床,也是有个床垫的,而且也还比较舒服。所有的卧铺都有枕头和床单。
* '''软座'''是一种很少见的可以放下来的座位。软在只在4-8小时的短途日间列车和高速列车(D以上)会有。
* '''硬座'''就是一般的座位票,一排有5个座位,过道两边一边2个座位,一边3个。大部分的背包游客都选择硬座出行。虽然有“请勿吸烟”的提示牌,但是仅在车厢内禁止吸烟。一般在两节车厢的连接处都会有很多人在吸烟,烟就会源源不断的飘进车厢。大部分火车车厢的连接处都是吸烟区,那里有中文提示“吸烟区”。乘硬座车过夜是非常不舒服的,漫漫长夜而又无法入睡的感觉确实很不好。
* '''无座'''票是在硬座车厢的,但是没有座位。站票的话,您可以随身带一个小马扎。 价格和硬座相同。
此外,还有单人独包,高级软卧等相对等级、价格更高的铺位,不过一般只在部分高等级列车才会出现。
目前,中国的列车大部分都是全封闭的空调车厢。
和谐号一般有5个等级 - '''二等座'''(3+2的座位),'''一等座'''(2+2的座位)和三个'''VIP舱'''(2+1的座位,连着驾驶室)。VIP舱位也分三个等级,分别是“商务座”、“观光座”、和“特等座”。和飞机不同的是,和谐号的商务座实际上比“一等座”好。 商务座和观光座价格一样,但是特等座一般比“一等座”要贵,但比商务座和观光座便宜。
==== 火车票 ====
[[File:China G Train Ticket.jpg|220px|thumb|带有文字说明的中国纸质火车票]]
一般车票在列车开车前30天就可以买了(12306订票提前30天,电话提前28天)。开车之后,可能会有少量的车票给途经的较大的站预留的。如果您想找个座位,或者想补个卧铺,您可以找到列车员然后他会告诉您还有没有,需求量最大的为硬座票和硬卧票,所以这种方式能够得到您心仪的几率很少。从2012年一月份开始,所有的购票人都必须持'''有效证件'''来买票(一般就是身份证或者护照)。中国铁路客运部门在2020年6月份起,不再发行纸质火车票,实行电子票(可以在App12306中查看)。对于仍然需要纸质信息的乘客,中国铁路客运部门会提供一张载明乘车日期、车次、发到站、发车时间、席位号等信息的纸质凭条帮助旅客乘车。
在市区很多地方都有火车票代售点的,那里很清楚地以中英文标注着“火车票代售点”,还有火车头的图标,但是因为这些代售点都很小,可能也不是很好找。代售点的电脑和车站的订票系统是联网的。在代售点一般可以买到10天以前的票,而且都是按照票面价格卖的。工作人员一般不会说英语。
就算在大城市也不要指望车站的售票员会讲英语。就算售票员找到会讲英语的同事,不要指望他会操作订票系统。因此,如果您不会讲中文,那么就将始发站和到达站、开车时间、车次和要买的票的类型用中文写在纸上。车站名称您可以写拼音,因为售票员输入的也是拼音。请注意,很多城市的普通车站和高铁车站都不在一起。高铁车站一般都带方向的(例如:北京南、杭州东等)。
在出行高峰时段(例如,春节期间),车站的票一下就卖完了。最好还是找中介提前订票。在大城市里,也有稍微加一点手续费的票务机构。这些手续费可以省去在车站排长队,还是很值的。旅行社会收你的钱,然后提前订票,但是,在车站放票之前没人可以保证您一定就可以买到票,车站放票之后旅行社才会去买他们之前向您“保证了”的车票。
==== 旅途须知 ====
普通火车上的厕所一般比汽车上或者大部分公共场所的厕所要“好”一些,因为火车上的厕所非常简单,小部分直接把排泄物抛洒在铁轨上,火车上的厕所味道没有那么刺鼻,但是现在大部分的火车都已经安装或者部分安装了真空集便装置。软卧车一般在车的一头有欧式的坐便器,另一头是中式的蹲坑式的厕所。请注意,直接将排泄物抛洒在铁轨上的列车在车站停车时列车员会将厕所临时关闭,以防止排泄物抛洒在车站范围内的铁轨上。
长途车会有餐车,餐车会有热饭,但是一般都会很贵,都在15-45元,而且确实不好吃。菜单都是中文,但是如果您愿意冒个险的话,您可以记住几个中文字,或者问问看常见的菜有没有。如果您的预算有限,那只能等到站的时候。站台上的小贩一般会卖面条、小吃和水果,价格一般会稍微好一点。车上一般都有开水处,所以您可以带上茶叶和泡面等。
在火车上要留心自己的财物,这几年公共交通设施上财物失窃的事情越来越常见了。
大部分比较高级一点的车上(T、K、Z和和谐号列车),都会播放实现录制好的中文、英文、粤语(如果火车路过广东或者香港)、蒙古语(内蒙)、藏语(西藏)或者维吾尔族语(新疆)的报站广播。但是,在短途列车上没有英文报站,因此,知道从哪里下车很重要。
如果晕车的话,建议备好晕车药。如果睡觉怕被吵到,建议戴耳塞。长途卧铺车厢上铺的空调在夏天会很凉。如果担心因为自己的不注意而错过到达站,您还可以跟列车员讲在即将到站时来通知你一声,列车员很乐意帮找你。
如果您有可以和大家一起分享的东西的话,那时间会好过一点。旅途中的中国人也都一样觉得很无聊,他们很乐意和您聊一聊,或者一起在电脑上看一部电影。总的来说,乘火车看看中国乡村风景还是挺不错的。
在出入站时都要验票,一般在进候车大厅、上车和出站出都有人检票。进了候车大厅后,在电子显示屏上找对应的站台上车(虽然是中文,但是会显示您票上印的车次)。在上车前大约10分钟的样子,就可以进站检票了,进站后您只需要跟着人流走就好了,一定要确保您不要坐在错误的候车区域了,因为一般火车在一般的站只停几分钟。一些比较新的站是高站台,这样站台会和车门齐平,但是小站的站台都很低,然后上车都要走几步很陡的台阶,所以如果您有大件行李的话,要有心理准备。一般的乘客也都很友好的,都会主动伸手帮您一把的。
在车厢内部是不允许抽烟的,但是在两节车厢的连接过道处是可以的。所有的高铁车组及动车车组都属于全列车禁烟列车。车站也不许吸烟,但是设有单独的吸烟室,但这些吸烟室里面都很糟糕,而且通风也很差。
==== 有用的网站 ====
*[http://kyfw.12306.cn 12306]是中国铁路总公司的官方购票网站,有用性不言而喻。购票高峰期会出现各种不可预测的故障(因为中国在运输高峰期时会有十几亿客流量通过铁路发送,购票者过多导致跟DDoS类似。)注意,这是中国铁路(含高速铁路)购票唯一的官方网站。
*[http://www.seat61.com/China.htm Seat 61]网站上关于中国列车的介绍较为全面。
*[http://www.absolutechinatours.com/china-trains Absolute China Tours]或者[http://www.chinahighlights.com/china-trains/ China Highlights]有票价信息(注意,这里的信息虽然非常有用,但是也并不是100%的全的)。
*[http://www.oklx.com/cn/train/search_station.aspx OK Travel]有更多车次。这个网站大部分都是中文但是,地名都用的是罗马字母,这样您不懂中文也没有关系了。在搜索页面,只要从列表中选择就可以了:左手边是始发地,右手边是目的地。注意,您需要在下拉栏中选择省份或者区域之后才会出现相应的城市。选择您需要的城市,然后点击左下方的按钮(“确认”)进行搜索。如果您可以输入汉字,这个网站还可以帮你计划转车。
*[http://www.cnvol.com CNVOL]有中国国内运行的所有列车车次,而且更新很快。只要输入您旅途的起点和终点,您就会找到所有往来的车次(包括过路车),每列车注明了始发站、终点站和时间。点击您喜欢的车次,然后您可以看到各个座位的票价。
*[http://huoche.wiki 火车Wiki]讓您可以了解某个车次的车辆情况。
*[http://piao.today 票.今天]让您可以了解某个区间的余票趋势。因中国客运分淡旺季,所以淡季内的趋势一般来说是相同的;旺季同理。有时12306因为客流量过大导致前端无法访问时(前提后端正常),也可以在该网站上查询余票。因该网站查询实时余票时会同时将所有的票价同时抓取,导致速度较慢,除非12306出现前端技术故障,否则不建议使用该网站的实时余票功能。由于12306接口关闭,本站只能浏览以前的数据,而不能使用查询实时余票/添加新趋势等功能。
*[http://yupiao.info 余票网]著名的火车票查询网站,可以显示出预售期内所有指定区间有票的车次,方便购票。但是因为原作者停止维护,所以本网站可能随时下线/出现暂时性的故障。
*[https://www.ctrip.com/ 携程]现今中国最大的旅游、住宿、车票、机票等预定网站,美国纳达斯科上市企业。有多国语言支持。提供可以发送到电子邮箱的电子行程单。
=== 汽车 ===
城际'''公共汽车'''或者长途汽车并不贵,非常适用于市内和短途的交通运输。
每个城市的公交车各有不同---但一般情况下都是塑料座椅、人多、没有英文标识、司机态度一般。当然,如果您对于公交车线路比较熟悉的话,这不失是一种非常经济而且四通八达的出行方式。一般情况下,公交车上都会播放报站录音,例如“下一站:中山路(Next stop is Zhongshan Road)”,或者“上海南站到了(We are now at Shanghai South Railway Station)”。一些大城市,例如北京或者杭州,的一些主要线路上有英文报站。票价一般为1到2元(一般1元为老式公交车,2元为新式带空调公交车),如果公交车路线到了市郊,票价会相应高一些。大部分公交车已经没有售票员了(收钱、找零、撕车票),取而代之的是上客门旁边都有个自动投币的铁箱,您可以把您要支付的票价投入投币箱内(不找零,所以要自备零钱)。注意,一般公交车司机都会开的比较快,不怎么会在乎乘客的感受,所以要扶好站稳。
{{Infobox|卧铺大巴(已弃用)|卧铺大巴在中国20世纪初很常见;车上没有座位,取而代之的是卧铺床位。中国交通部门在2020年发布关于卧铺大巴禁行公告。这是长途旅行不错的选择— 大巴在高速公路上的夜间行驶速度一般为100KM或者更快— 因为铺位空间有限,可能有的身高比较高或者块头比较大的旅客会觉得不舒服。
一般来说,在发达的沿海省份,这还是比较舒适和便捷的交通方式,但是在欠发达地区就不一样了。尽量不要买车位的铺位,因为车在过减速带的时候,车位的乘客晃动比较厉害,可能会有晕车症状。
在有的地方,在您上车时必须要先脱掉鞋子;车上会提供一个塑料袋放鞋子。如果到了服务区或者上厕所的时候,您需要再穿上鞋子。如果您平时穿靴子的话,建议您随身再带上一双拖鞋。}}
各地的大巴,或者'''长途大巴'''的情况各不一样,有的很舒适,而有的地方的大巴就会很不舒适。一般从东南沿海较大城市发出的大巴都带有空调、软座。东南沿海地区的路况非常好,车开的很平稳,您可以欣赏沿途风景或者小睡一会儿。一般汽车会比火车会贵一点,但是要舒服一点。大巴的乘务员都很愿意帮忙,但是和空乘人员相比,他们对于外国人就没那么熟悉,能说英语的非常少。有的大巴有厕所,但是一般都很脏,而且汽车转弯比较多,造成使用厕所比较不便。
中国农村地区的大巴就完全不同了。 车站里面的表示要么只要中文要么只要本地语言,路线都是贴在车窗上的,在您走过的时候司机或者招揽客会向您大声喊叫他这趟车的目的地,一般大巴的车牌号应该印在票上的,但是通常票上印的车牌号都是错的。由于风俗习惯等的差异,外国人可能会觉得大巴司乘人员不够礼貌,乘客素质也欠佳,他们会随地吐痰和抽烟。如果司机一路都想多上人的话,巴士可能会非常拥挤。中国农村地区的道路通常都是坑坑洼洼的,这样乘坐巴士就会非常颠簸;如果您坐在巴士靠后的座位上,那么颠簸会更加厉害。发车和到达时间都只是预计时间,因为很多车票不卖完不走(这可能使发车延误数小时),加上车有点小问题和其他事情,您的行程可能会被大幅延长。如果您要在这样的车况和路况下乘车10个甚至20个小时的话,那您一定会感觉痛苦难忍的。虽然这样的车程让人非常不舒服,但是在中国很多地方,这样的大巴是唯一的交通方式。当然,好的一点是,如果您想去比较偏远而且又没有直达车的地方旅行的话,您可以在路上随时下车。而且,您也可以在路上随时拦车,一般车票都是视路程长短而不同的。
在中国,司机不遵守交规是一种普遍现象,而且中国的交通事故也比较多发。突然急转弯或者刹车都会造成人员受伤,所以上车后要坐稳扶好。中国的司机经常按喇叭,所以,如果您想在路上睡一会儿,还是带上衣服耳塞的好。
买票有时候会比较难。大的车站有售票柜台,票面上印的有出发时间、上车闸口、和您所乘车的车牌号(有时候不准),票价是固定的。小一点的车站到处都是招揽乘客的人在大声喊叫自己车辆的目的地,他们会把您领过去,然后您上车后再买票。就算在大的车站也有招揽客,他们会给司机打电话让司机等,然后用摩托车把您拉过去,您到了之后可以和司机讲价。这种情况有时候可能完全就是一个骗局,有时候您可以省下35%的车费(取决于您的砍价水平和中文水平)。
===地铁===
大城市 — 至上北京、天津、上海、广州、深圳、武汉、沈阳、郑州、西安、重庆、成都和南京等 — 都有了地铁系统。重庆还有单轨轨交系统。这些设施总体都比较现代、干净而且高效。标识和售票机都是中英双语的。
这些轨交系统现在都在逐步地建设和扩建中,几乎每个有地铁系统的大城市都在修建新的线路。中国在这方面的长期目标非常大胆,每个大城市都在计划修建多条线路。到2020年,中国可能会有世界上最大规模的城市交通基础设施。很多城市都在规划诸如广州和深圳之间的区域间轨交系统。
===出租车===
出租车(或者的士)比较常见,而且价格也比较合理。起步费一般从5元到15元,一般超过起步费范围每公里2元左右(3千米起步)。一般在市内打车费用在10到50元以内。行李不另行收费,但是很多城市夜间打车费要高一些。不用给小费。有些地区还会收取附加燃油费一般1元到2元,视地区而定。
出租车司机故意选一条较长的线路来欺骗乘客的事情虽然不是没有,但是也并不常见,所以不必过于担心这一点。就算司机选了较长的路线,车费也不会差很大。但是,如果您觉得在去酒店的路上被出租车司机骗了,并且您住在中高端的酒店(一般都有门童),您可以向门童和/或者前台人员寻求帮助:一般一句能揭穿他的骗局的话就足以解决问题了。
小心一些黑出租,他们会在机场或者车站里面或者门口跟上您,然后会跟您谈一个带您去某地的固定价格,他们的收费往往是打表费用的1-3倍。如果您对所在城市不熟悉,那么一定要去机场外面指定的出租车区域,并且坚持让司机打表。出租车费率一般都标注在车外的醒目位置。
在高峰时段打车比较困难。如果再遇到下雨天,那就更是难上加难了。尽量避免高峰时段(特别是晚高峰),打车之后一定要记得拿小票。在中国,打车和其他所有事情一样,小费可以给也可以不给,中国人没有给小费的习惯,所以不给也没有人在意。
可以坐在副驾位置;有时候只有副驾位置能看清楚计价器。出租车司机有可能摇下自己那边的窗户就直接开始抽烟,而不会征求乘客意见。在有的城市,出租车还会在沿途搭客(在大致方向一致的情况下)。每个乘客都要付全价,但是这样会省去乘客们等车的时间。
虽然北京在迎奥运和上海迎世博期间做过一些工作,但是即便在这两个城市也很难找到会讲英语的出租车司机。在其他的城市基本上是不可能的。如果您试着用您带口音的普通话说出您要去的目的地,司机也有可能会理解不了。所以,建议您随身携带一张写着您打车要去的目的地的纸条。纸条上最好写汉字(而不是拼音),因为一个拼音可能对应好几个不同的汉字。带着您所在酒店和您喜欢的餐厅的名片,必要时出示给出租车司机。您可以先学一点儿基本的中文简单对话,这类的教材网上都是有的。
如果您在中国待的时间较长,那么考虑买一张中国的SIM卡,这样您可以给您在中国的朋友打电话,然后让他们跟司机说说您要去哪里。SIM卡在中国很容易可以买到。
有的城市的出租车公司有对司机的评级系统,从0到5星,这个打分器在仪表板上方的司机信息牌上,一般在副驾座前面。一般0或者较低分数虽然不一定代表司机不好,但是5星则表示司机对城市很熟悉,并且会以最短的路程将您带到目的地。另一种识别司机能力的方式同样是看司机信息牌---上面的司机代号。一般代号越小,则说明这个师傅从业时间比较长,可能对市区路线会更熟悉一些。如果您觉得被出租车司机骗了,很简单的一个办法就可以引起出租车司机的重视,那就是下车后马上把出租车车牌号抄下来,如果您会说简单的中文的话,您可以告诉他您要向市政机构或者出租车公司举报他。大部分司机都是诚实的,车费也不会太高,但是也有小部分不好的司机会利用您不会讲中文来侵害您的利益。
中国人在打车的时候一般不会让别人的。拦到车的人不一定就可以乘这个车。别人跑到搭车人前面先上车或者把拦出租车的人挤开自己上车的事情也并不是没有。如果一起有几个人都在打车,那么在拦到车后尽快上车。不过随着uber、滴滴等出行工具的普及,通过移动网络预约出租车成为绝大多数乘坐出租车的人的首选,在街上随手拦下一辆出租车的情况已经很少见了。
出租车司机可能会说您不用系安全带,但是无论怎样上车后一定要系上安全带(如果能找到的话)。
===电车===
有的城市有电车。电车一般经停站比轻轨要多,如果您要去的城市有的话,电车不失为一种出行的一种很实用的选择。但是,电车的话有可能会有堵车情况。
===自行车===
自行车、电瓶车和摩托车是中国最常见的交通方式;在高峰时期,中国的各个城市都有成千上万的两轮车。大部分自行车都是不可调速的老式车型,但是普通的山地车也比较常见。对于乘客来说,骑自行车要比挤进高峰时段的公交车要经济而且便利的多。
在中国对于骑自行车的人来说,有两大'''危险''':
* 一个是其他的'''交通车辆''';汽车和摩托车会经常让人毫无准备地拐出来,有的地方的红绿灯纯属摆设。更多相关评论,见[[中国驾驶习惯]].
* 在中国各个城市中'''偷车贼都很猖獗'''。需要观察其他人是如何停放自行车的。有的地方的当地居民会随手停放自行车,但是在其他很多城市中,人们都会将自行车锁在饭店或者网吧中。这就是一种警示。不要认为您的高档锁能确保您的自行车万无一失(偷车贼只需要摆弄一下就能打开)。建议尽可能将您的自行车停在有管理员的指定的停车区域;一般您只需要交1-2元钱。有的当地居民会故意买二手的老旧自行车,这样小偷就不会惦记着了。
在绝大多数景区 — 无论是像[[北京]]这样的大城市还是像[[阳朔]]这样游客云集的小镇 — 租车和修车都是非常方便的。而且都有骑行旅游的指南。
在中国,购买自行车是一件非常容易的事情。大行、美利达和捷安特是业余和半职业市场上最流行的三个品牌,所有的城市都有这些品牌的分销商。很多超市也会出售款式繁多的自行车。价格一般从150元到10000元不等。如果要在像西藏这样的地区骑行的话,一般3000到4500元价位的山地车就可以了。诸如上海和北京这样的大城市一般会有更多的职业高端自行车,但是如果您的要求非常特殊,那么香港就是您最后的希望了。
无论是在城市还是在乡村,修车铺随处可见;语言不通的外国游客可能不是很容易能找到,但是您只要找外面摆着自行车和自行车胎的店铺就可以了。要是车胎漏气这样的小问题的话,路边上有很多地方放着一盆水和一些自行车胎的地方都能修。但是如果是刹车碟这样的特殊部件的话,建议您在城区以外的地方骑行时还是随身携带好备件吧。
中国幅员辽阔,她的高山和沙漠都给专业的骑行者提供了无尽的挑战。但是,截止2010年5月,如果外国游客要在西藏高原上骑行,则必须''依照法律获取许可并须雇用一名导游''。
一段风光超越想象但是却艰难异常的自行车骑行线路,请参阅[[中巴公路|喀喇昆仑公路]]。中国自行车网和Intrepid Travel都在这条线路上组织小规模的骑行观光。
=== 共享单车 ===
在中国的许多城市,除了城市公共自行车以外,您还会在大街上看到一些装饰相同并装有二维码智能锁的自行车,这些就是共享单车了。
它们与城市公共自行车相比,最大的特点是无桩,您可以自由地在街边租还共享单车,它在城市交通中已经占了很重要的地位。您在旅游一些城市时,可以用共享单车到达目的地,也可以领略城市各个角落的风景
共享单车品牌繁多,不同品牌的押金和收费也不尽相同,但绝大多数品牌的共享单车价格都比较低廉,目前摩拜单车和青桔单车占据了大部分市场。您除了可以下载应用程序打开共享单车,还可以用微信和支付宝打开一些品牌的共享单车。
=== 自驾 ===
{{参见|在中国驾驶}}
截止到2022年,中国已经实现与阿联酋、比利时、法国和塞尔维亚4国驾驶证互认换领。注意,中国大陆将香港和澳门的驾照都视为外国驾照,因此,就算您有这两个地方的驾照,也不应该在中国大陆开车。这一情况在07年有所改变---没有中国驾照的短途驾驶成为合法。但是,和很多中国的法律一样,官方的变更和现实中的改变并不一定完全是一致的;直到2008年12月,没有中国驾照在中国开车仍然是违法的。除非您有外交身份,否则,要把外国的车运进中国基本是不可能的。
租的车大部分都是带司机的,和北美的一种租车服务remises类似;租带司机的车是游览中国最好的方式。就算您有初级的中文读写能力,而且取得了中国驾照,建议最好还是''不要''您自己驾车出游---当然,如果您已经习惯非常混乱的交通状况的话除外。如果您没有足够的勇气,请不要在中国的市内开车,并且停车位也非常难找。但是,尽管如此,在中国开车比在亚洲其他发展中国家,例如越南,要好很多。中国是属于靠右道行驶的国家。中国很多邻国,例如印度、巴基斯坦、尼泊尔、不丹以及香港和澳门特别行政区都是靠左行驶的。
在西方游客比较多的大城市,比如北京、上海还有其他的大城市中英文指示标识随处可见。但是,在其他较小的城市,英文标识就非常少,而在农村英文的标识基本上就不存在。因此,最好每次都带上写有您目的地名称(中文汉字)的纸条,这样,即便您迷路了,当地人也可以给您指路。
建议外国人不要在大城市之外的地方开车,“单行道”标识一般都是“并不一定是单行”。在高速上,仍然有的一小部分司机开过了出口匝道后会减速,然后转个270°的弯转上匝道。司机本会有各式各样的穿插技术。
在过马路时,一定把路两边都看清楚。不仅仅是自行车可能逆行,而且越来越常见的电动车也会---并且它们都没有什么声音的。
=== 摩托车 ===
{{参见|在中国驾驶#机车}}
摩的在中国很常见,特别是在小城市和农村地区。摩的一般都很便宜,而且很灵活高效(但是偶尔有点儿吓人)。车费可以讲价。
各个地方对于摩托车的管理规定有所不同。在有的地方,50cc的輕便摩托可以不用驾照,但是由于事故频发,目前很多地方都已经禁止了这种摩托,或者对这种摩托有了新的规定。要在中国骑“真正的”摩托可就难多了-这一部分是因为骑摩托车需要中国的驾照,一部分是因为很多城市都禁止摩托车驾驶,还有一部分是因为由于汽车和电瓶车的发展摩托车的生产和进口大幅下降了。中国的摩托车一般都是125cc的,一般可以到100km/h,大部分都是老式的。这种车速度一般都比较慢,也不是特别好骑。由于政府对于发动机尺寸的限制,所以赛车比较少,但是也不是找不到。还有一种比较流行的是仿制本田CN250的“Maxi”摩托车,它速度更快而且也比较舒适,可以自动换挡,这样在市区里骑会容易一点。
大部分城市都有各种摩托车市场,卖给您的车一般都是假的牌照或者非法牌照-在中国骑摩托车的外国人并不多,很容易被警察注意到。骑“真正的”自行车必须戴头盔,但是电瓶车就不用。理论上说来,您要去办理个牌照:摩托车牌照是黄色或者蓝色,电瓶车是绿色或者红色牌照。自己申请牌照的费用可能要好几千(电瓶车几十元),但是您也可以花很少的钱弄到假牌照——后果自负。
===三轮车(人力车)===
{{infobox|名称中有什么差异?|在中国的外国人通常会混用三轮车和人力车这两个词,但是它们指的却是两种不同的运输方式-其中一种已经不再存在。著名(臭名昭著)的人力车是一种前面有两个把手的两轮车,车夫拉着把手把乘客送到(走路或者跑步)目的地。人力车在19世纪晚期尤为盛行,但是在20世纪50年代逐渐被淘汰了。西方的精英分子坐着中国工人拉着的人力车上打马球的视频显示了人力车剥夺和压榨的本质。在很多小的欠发达城市还能看到人力车的衍生品,工人们每天早上拉着类似人力车的车子等待运输建筑材料和其他东西。三轮车已经取代了人力车---三轮车是一种类似自行车的有三个轮子的车辆。}}
在有的中型城市里,短距离出行的话三轮车会方便很多。三轮车有人力脚踏的和动力的两种,在中国农村地区和大城市的较不发达(也就是游人较少)的区域非常常见。上车前一定记得要先谈好价钱。
对于“司机经常欺骗游客”的报道一般多指像在北京秀水街、王府井、和老舍茶馆这些旅游景点发生的事情。一般的规则是“要提防在旅游区兜售任何东西的任何人”。
如果您看到一般的中国人使用“三轮”,例如,从北京动物园到最近的地铁站-那这就是安全的。不要乘任何穿着老式服装以吸引游客的师傅的车。他会收您市价上10倍的车费。
可能的话,尽量选乘脚踏三轮车。在选乘脚踏三轮车的同时,您也在帮助确实比较贫困的人,让他们有生意可做,而且您也在帮助中国留下一些传统的东西。在上海,由脚踏三轮车发展和改进而来的电动的三轮车占大多数。
==语言==
[[File:Map of sinitic languages-en.svg|thumb|240px|中国方言地图]]
中国官方语言是'''[[漢語會話手冊|标准普通话]]''',它主要是基于北京方言发展演化而来的。从20世纪50年代以来,普通话是中国教育系统使用的唯一的语言,所以大部分人都会说。普通话是有声调的,声调正确对于学习和使用普通话很重要。
中国很多地区,特别是东南和南部地区都有他们自己的“方言”。这些方言其实就像完全不同的语言,就好像法语和意大利语一样。这些“方言”和普通话一样也都是有声调的。即便同样是普通话(地图中大片的棕色区域),各地方的口音也不一样,而且各地都夹杂着自己本地的俚语和一些很鲜活的地方语言。除了普通话,使用最多的方言是'''[[吳語會話手冊|吴语]]''',主要集中在上海、浙江和[[江苏]]省南部地区;其次是'''[[廣東話會話手冊|广东话]]''',集中在广东省大部、香港和澳门;再次是'''闽语'''(福建)语支,它包括 '''在[[厦门]]周边区域和台湾使用较多的[[閩南語會話手冊|闽南语]]'''(闽南语有一种次方言叫做潮州话,主要在潮汕地区使用),和在[[福州]]周边地区使用较多的'''闽东语''' 。大部分中国人都可以讲自己的家乡话(方言)和普通话两种语言。有的上年纪的和受教育较少的人可能只会讲他们的家乡话,但是这对游客没多大影响。最好能有一个可以讲本地方言的导游,讲本地语言就说明这个人是对本地比较熟悉。虽然您凭着一口标准的普通话就能在中国大部分地区畅游无阻,但是如果您可以试着和当地人讲几句他们的当地方言,那他们是会非常高兴的,所以学习几句简单的方言问候语或者俚语会让您很快就和本地人熟悉了。一般来说,如果能听懂或者比较喜欢当地的方言的话会对去比较偏远地区旅行是很有帮助的。当然,在这些偏远区域,带上一本中文常用语手册还是很有必要的,因为全国的中文写出来都基本是一样的。
无论各地方言差异有多大,所有正式的书面中文都是一样的。甚至很多日文和韩文都用很多相同的汉字,而且和中文中的意思一样或者相似。但是,要注意的是中国大陆使用的是“简体中文”,这种简体中文是在20世纪50年代中期为了消除文盲而发展出来的。香港、台湾、澳门和很多海外华人都在使用繁体中文,但是在大陆的的一些广告和商业标识上也能看到繁体字。汉字简化总体还是比较系统化的,一般以简体中文为母语的人基本也能阅读繁体字,反之亦然,所以只要学会书写一种中文一般就足够了。
注意,在书法中不同由于书法家有不同的风格,所以每个字的笔画差异非常大。中文有五种字体:篆书(篆書)、隶书(隸書)、楷书(楷書)、行书(行書)、和草书(草書),其中楷书是中国的官方字体。去中国旅游只要知道一种字体就可以了。对于对中国传统文化有深厚兴趣的人来说,学习中文字体肯定会大有裨益。
在中国遥远的西部,有的少数民族会使用土耳其语系中的[[維吾爾語會話手冊|维吾尔语]]、吉尔吉斯语、哈萨克语以及其他语言(例如:[[藏語會話手冊|藏语]])。在中国的北部和东北部少数民族聚集的地方,这些少数民族会使用自己各自的语言,例如满语、[[蒙古語會話手冊|蒙古语]]、[[朝鮮語會話手冊|朝鲜语]] 等。在中国云南、贵州、海南和广西居住着许多少数民族,例如:苗族、侗族、壮族、白族等,他们都使用自己各自民族的语言。除了这些地区的老年人,一般的年轻人都能说普通话,而且大部分年轻人都既可以说普通话又可以说自己的民族语言。很可惜的是,很多少数民族语言(如:满语)都在慢慢的消亡。
===英语和其他外语===
在过去20年中,从小学高年级或者初中开始外语便成了他们的必修课。到了高中,俄语、日语、德语、法语、西班牙语成为可以代替英语的考试项目。现在添加了大学里面无论你是什么专业,一定的外语等级都和学位挂钩。但是,所有的教学的终点都在正式语法,轻听说而重读写。
上海、北京、广州和深圳能讲英语的本地居民比例较高。在有的城市,除了在有涉外服务的旅游景点和场所外很难找到能讲英语的本地人。航空公司和大酒店-特别是国际连锁店的员工基本都会讲一些基本的英语,但是能用英语深入交流的非常少。
国际机场、警察局、医院等公共服务提供场所的接待人士基本都会说初级英语——尤其是年轻的,因为中国是在近几年开始重视英语的。
在中国讲英文的时候,请尽量简化您的英语语言:讲慢一些,标准一些(就像您在电视上看到的新闻主持人一样),避免俚语、成语或者较长的单词,尽量使用简单的现在时态和一些陈述语句结构。不要说“Would you mind if I come back tomorrow?”直接说简单的(尽管可能有些唐突无礼),例如“Tomorrow I will return.”这样说和中文语义更加相近,而更容易被理解。
同时,部分中国人的英语可能有口音(像中文一样抑扬顿挫或者单词等时),此时请叫
在中国结交朋友的一个方法就是询问“英语角”- 英语角是指本地居民约定好一个时间和地点一起见面并练习英语的地方。一般都由一个外国人主持,一般时间都在周五晚上、周六晚上或者周日,在公共公园、英语培训学校、书店和大学校园。可能还会有其他的比如“法语角”、“俄语角”、“德语角”等。
如果您要去比较偏远的地区,建议在您旅途开始之前找一个导游帮您安排行程。这至少会帮您克服语言障碍,因为这些地方的本地居民基本不可能会讲任何外语的。
===学习中文===
''參見:'' [[#学习|学习]]
在西方,不知何故,中文以她的难懂而闻名。虽然中文和西方语言有所不同,但是旅客们会很吃惊地发现中文的基本语法还是比较简单的。动词不分人称和时态。名词没有词性(注:很多语言,如法语,名字有阴性和阳性之分)。最主要的难点在于中文使用了欧洲语系中不存在的几个辅音以及声调。
普通话和越南语以及泰语一样都是声调语言,它们使用不同的语调来表示不同的意思。“Ma”这个发音可以代表妈、马、麻、骂四个字中任意一个,完全取决于音调。中文的同音字非常常见;即就是音调一样的一个读音都会有十几个不同的汉字。“Zhōng”可以是中、忠、钟、终等。中国人在报出自己的名字的时候一般都会逐个字来解释。“我叫王菲,王是三横王,菲是是非的非加草头。”
对于很多人来说,书面的中文看起来跟一个个神秘代码相去并不远,但是如果您都可以辨识那么多的商标图案(这些图案一般并没有逻辑联系),那么就说明您也有认识大量汉字的潜在能力。并且,大部分汉字之间都是有逻辑联系或者有规律可循的。
理论上来说,中文有5万多个汉字。好的一点是,这其中85%的都是不常见字。跟很多种语言是一样的,大部分中国人也不知道要看一本中文书需要认识多少个汉字,永远都不要去数哪个中国人认识多少汉字。有的人声称小学生应该至少学习2000个汉字,大学毕业生则至少认识5000个。
拼音的发展是为了弥补识字和发音之间的鸿沟,拼音使用了罗马字母,是中国人学习中文的辅助工具。不能按直觉对拼音进行发音,因为有的字母和辅音辅音连缀代表了很多欧洲语系并不存在的发音,因此很多拼音的发音和西方人士想象的并不一样。中国人不认识以拼音写出来的地名和地址;建议使用中文汉字来记录书面信息。
==观光==
中国有着无尽的美景,您在中国永远不会无处可去。特别是在沿海地区,如果您已经游遍了繁华闹市中的景点的话,那么随便乘一趟短途火车您就会发现下一个美景。
无论您是痴迷于历史、寄情于山水,还是只想找个怡人的沙滩放松放松,从[[北京]]雄伟的紫禁城到令人叹为观止的[[九寨沟]],您想要的中国都能给您。就算您已经在中国生活了很多年了,但是在这个幅员辽阔的国家的其他地方总有一些新的景物和事情有待您去发现。或许是由于中国疆土的辽阔和历史的源远流长,中国在联合国教科文组织中的世界遗产数目位列第三(第一第二分别是意大利和西班牙)。
[[Image:Diecaishan.jpg|thumb|240px|喀斯特地貌、桂林]]
=== 主要景点 ===
* [[万里长城]]
* [[天坛]]
* [[天安门]]
* [[秦始皇陵和兵马俑]]
* [[鼓浪屿]]
*[[黄山]]
* [[壶口瀑布]]
*[[西安|西安城墙]]
* [[布达拉宫]]
* [[婺源|婺源古镇]]
* [[泰山]]
* [[黄果树瀑布|黄果树大瀑布]]
* [[颐和园]]
*[[北京/故宫|故宫]]
* [[苏州园林]]
* [[东方明珠塔]]
* [[外滩]]
* [[华山]]
* [[大三巴牌坊]]
* [[少林寺]]
* [[九寨沟]]
[[File:1 jiuzhaigou valley national park wu hua hai.jpg|thumbnail|九寨沟的五花海]]
* [[张家界]]
* [[漓江山水]]
[[File:Lijiang River scenery.jpg|thumbnail|桂林漓江山水]]
* [[天涯海角]]
[[File:Sanya Sun Photo by Dale Preston.jpg|thumbnail|right|海南省风光]]
===喀斯特地貌===
'''山丘绵延、奇石陡峰'''是的中国艺术家梦寐以求的一种传统风景。中国的南部和西南部多这中形态各异的岩溶地貌,又称“喀斯特地貌”。喀斯特是一种石灰岩地貌,是以[[南斯拉夫]]石灰岩高原的地名命名。随着石灰岩被化学腐蚀,密度较大的抗腐蚀性石头或者地块形成了各异的山峰。山下形成的山洞会坍塌而形成落水洞和暗流,它们和地下河道连通。在喀斯特地貌中,溶蚀形成了星罗棋布的山峰、拱形洞穴和通道。其中最著名的例子就是云南省昆明附近的石林。中国很多最著名的景区都以喀斯特地貌风光著称— [[广西]]的[[桂林]]和[[阳朔]]和贵州省中部和西部等地。
===圣地===
中国的如下景点有非常著名的佛教艺术:
* [[山西]]的[[Datong#See|云冈石窟]] - 石窟依山开凿,有五万一千多个佛像雕刻,可以追溯到1500多年以前
* [[甘肃]]的[[Dunhuang#See|莫高窟]] - 可以追溯到公元4世纪的艺术和壁画
* 重庆附近的[[重庆/大足|大足石刻]] - 可以追溯到7-13世纪之间
* 洛阳附近的[[Longmen National Park|龙门石窟]] - 可以追溯到5-10世纪。
===圣山===
中国有很多圣山。
和道教有关的“五岳”:
* [[泰山]] ,山东(海拔1545米)
* [[华山]],陕西(海拔2054米)
* [[衡山]],湖南(海拔1290米)
* [[恒山]],山西(海拔2017米)
* [[嵩山]] (嵩山),河南省(著名的少林寺也在河南)(海拔1494米)
和佛教有关的“四大佛教名山”:
* [[峨嵋山]],四川(海拔3099米)
*[[青阳|九华山]],安徽(海拔1342米)
* [[普陀山]],浙江(海拔297米,是一个岛)
* [[五台山]],山西(海拔3058米)
西藏佛教三大主要圣山:
* [[冈仁波齐峰]],[[西藏]](海拔5656米),它也是印度教徒朝圣的印度教最神圣的山峰之一
* [[梅里雪山]]
* [[阿尼玛卿雪山]]
中国还有很多其他非常有名的大山。在中国很多大山即便并没有身处圣地,当时还是有很多庙宇:
* [[黄山]],安徽,风景秀丽,景色引人入胜。
* [[青城山]],四川
* [[龙虎山]],江西
*[[青岛|崂山]],山东
* [[武夷山]],福建,主要的旅游胜地,有大片的茶山
* [[喜马拉雅山]],横亘尼泊尔和西藏边界,世界上最高的山脉
* [[武当山]],在湖北[[丹江口]]附近,道教圣地,是太极和武当拳的发源地
*[[长白山自然保护区|长白山]](朝鲜语:백두산),对于满族人和朝鲜族人来说是世界上最神圣的山脉,位于中国和朝鲜的边界处。
===革命圣地===
* [[韶山]] - 中国共产党第一人主席和中国领导人毛泽东故乡
* [[井冈山]] - 共产党在1927年国民党围剿后的第一个农村根据地
* [[瑞金]] - 1929到1934年间中华苏维埃共和国所在地
* [[遵义]] - 遵义会议所在地,之后毛泽东进入政治局常委
* [[泸定]] - 传说中飞夺泸定桥所在地
* [[延安]] - 从1939年到1945年中共产党的主要根据地所在地
* [[武汉]] - 推翻清廷的武昌起义发源地
* [[广州]] - 黄埔军校所在地,国民党和共产党的很多领导人(蒋介石、周恩来、毛泽东)都曾有黄埔军校经历,在1926-27年被北伐前开展了很多军事和政治学习。
===旅游线路===
以下是全程都在中国境内的一些旅游线路:
* [[中国两周到一月游]]
* [[香港附近一周游]]
* [[长江沿线|长江沿线游]]
* [[黄河沿线|黄河沿线游]]
* [[京杭大运河流域|大运河沿线游]]
* [[云南游]]
* [[西藏游]]
* [[长征]]
其他涉及中国的旅游线路:
* [[欧洲到南亚陆路旅游]]
* [[丝绸之路]] - 古代从中国到欧洲的商队之路
* [[中巴公路|喀喇昆仑公路]] - 从中国经由喜马拉雅山到巴基斯坦
* [[马可·波罗的足迹|探寻马可·波罗的脚步]]
* [[昆明到香港陆上行]]
==活动==
===按摩===
中国按摩场所遍布全国,而且一般都物美价廉。在亚洲,盲人有从事按摩的传统。一般比较专业的按摩价格在20元到40元一小时之间。
* 基本上所有的理发师都可以帮您洗头,并且给您做一个头部按摩,只收20块钱。这一般还包括帮您清理耳屎和一些颈部和手臂按摩。加上理发和/或刮面,一般收15元到25元。在大城市里,理发费用一般在50元以上。
* 足疗的地方也很多,一般足疗场所的招牌上都有光脚图片作为标示。价格一般在20元到100元。
* 全身按摩场所也非常多,价格一般在每小时15元以上。一般有两种:按摩一般就是普通的按摩;而推拿可能会用到针灸中使用的中草药。最专业的按摩一般都在专门的按摩医院或者一般的中医院,价格一般都在50元每小时以上。性价比最高的一些在不明显场所的盲人按摩。
很多地方这三种按摩都有。
有的按摩场所其实就是妓院。卖淫在中国虽然非法,但是却很普遍并且经常会以按摩作为掩护。很多温泉和桑拿场所都提供“全套”放松服务。在一些小地方,只要您看到粉红色的灯光和穿短裙的女孩子,那么很有可能他们提供的就不仅仅是按摩,而且她们也不怎么会按摩。很多发廊也是这样,既是按摩场所也是妓院。
没有粉红色灯光的地方一般都提供很不错的按摩服务,而不提供性服务。如果某个按摩场所的广告中注明了是盲人按摩,那么这基本上是合法场所。
在很多按摩场所您可以小睡几个小时,甚至在那里过夜都可以。理发店一般没有可供睡觉的地方,但是您也可以在做全身按摩的时候在按摩桌上睡一会,或者在做足部按摩的时候在沙发上睡一会儿。一般费用都不会很高,这估计是在中国最便宜的过夜的方式。但是,请注意,除了带有独立包间的高端桑拿场所,在其他的按摩/桑拿场所中,您都要和那里的员工公用厕所,而且不能将您的行李锁起来。寄存行李最好的办法是把行李寄存在火车站(所有火车站都有行李寄存处),一般价格在10-20元左右。
===传统艺术===
如果您计划在中国停留的时间比较长,那么建议您学一点中国传统艺术。毕竟,人在中国本身就是学习中国传统艺术的绝佳机会,如果您对某项中国传统艺术已经略懂一二,那么通过直接向这一艺术所在国度的大师学习可以提升您的技能。很多城市都有很多知识分子接收初学者,而且不懂中文也不碍事,因为您可以通过实例或者模仿进行学习。书法现在仍然是中国人热爱的一种艺术。很多城市的书法家都用毛笔蘸水在城市公园的人行道上练习。其他的您可以参加培训班的传统艺术包括演奏中国传统乐器(您可以询问买中国传统乐器的商店,很多商店就有培训班)、中国厨艺、甚至京剧演唱。费用一般都非常合理,而且也不需要特别大量的辅助材料。唯一的要求就是要在一个地方足够久;最好不要在旅游景点参加这样的培训课程。
===武术和太极===
和中国传统文化艺术一样,有兴趣、有时间的人可以学学中国久负盛名的武术。有的武术,譬如说太极,学习的方法很简单,清晨直接去市区的随便哪个公园跟着那里的人练就可以了。您会发现那里有很多人很乐意做你的老师的。其他的武术就需要更加深入的学习了。著名的武术培训地有[[嵩山]]的少林寺和[[大理]]附近的无为寺。
===传统的消遣活动===
中国有很多可以在茶室、公共公园甚至在大街上玩的传统消遣。只要有摊子,一般都会吸引很多路人。起源于中国的策略游戏有围棋和中国象棋。麻将是一种以麻将牌作为道具的游戏,麻将在中国非常流行而且经常(也不是没有例外)都是玩钱的。各地的麻将规则不一样,所以每到一处,你都要学习新的麻将规则。麻将最有名的打法是广东麻将、台湾麻将和日本麻将。跳棋虽然不是起源于中国,但是在中国也有很多人在玩。很多中国打扑克的技艺都很精湛;邓小平先生对于桥牌的钟爱是远近闻名的。
==购物==
中国的官方货币是人民币,经常缩写为RMB。人民币基本单位是元(在纸币上写作“圆”),它的国际货币代码是CNY。所有的标记都是以元为单位的,不是¥就是“元”。在[[香港]]和[[澳门]]特别行政区人民币'''不是'''法定货币,这两地都自行发行货币。当然,香港有的地方也接受人民币,但是都是按照人民币和港币1:1的汇率来算的(截止2017年9月17日,1人民币=1.2400港元)。1人民币元=0.1581美元,1美元=6.3246人民币元(截止2018年3月20日)
{{infobox|小贴士|* 10 ''分''等于1 ''角''
* 10 ''角''等于1 ''元'',基本单位
* ''元'' 也称''块''
* ''角''也称''毛''
* 10大写为''十'',或者''拾''
* 100大写为''百'',或者''佰''
* 1000大写为''千'',或者''仟''
* 10000大写为''万''}}
元的下面是角,10角为一元,之后是分,10分为1角。分币现在基本上已经非常难看到了(可能在非常贫困的地区偶尔能看到)。一般价值10分的硬币叫做1角而不是10分。但是在口语[[漢語|普通话]]中,人们一般都说''块''而不是''元'',说''毛''而不说''角''。例如3.7元一般会被念成3块7(最后一位单位会被省略)。
在数字方面,请注意一般都会省略最后一位的单位,例如:530,会被念成五百三。而且注意在中文中有一个单位叫做''万''(十千),所以50000一般叫做五万而不是五十千。
中国的很多钱币都既有纸币又有硬币,包括很多零钱。有的地区纸币用的多一些,有的地方硬币用的多一些,但是无论纸币还是硬币在哪里都能用,根据中国法律,拒收人民币属于违法行为。角(1元的十分之一)也有纸币和两种版本的硬币。相反,一元却有硬币和两个版本的纸币(1999版人民币一元纸币底色为绿色,正面为花纹和毛泽东像,背面为杭州西湖“三潭印月”景色)。您最要会辨认不同版本的钱币。
===假币===
假币是一个很严重的问题。所有在中国待过几个月的人都会或多或少的有这方面的经历。从1元的硬币到10元、20元、50元和100元,都有假币。在中国生活的第一步是收到钱(即使是硬币)之后要仔细看看。看的时候主要要注意不同部分的质地、金线、和在不同光线下颜色的变化。如果您不懂您可以问别人,每个人都有自己的办法。
收银员在收到您的纸币后经常会仔细辨认。请不要生气,这并不表示他们怀疑您用假币。只是他们要负责任的。在您拿到零钱后也要仔细看看,特别是50元以上的。售货员有可能会想办法把他们从别人那里拿到的假币给您。
最近几年,ATM机吐假币(虽然不常见)成为一个很热门的话题。如果您担心从ATM机里拿到假币,那么请去银行柜台上,并告诉银行操作人员“我怕拿到假钱了”。一般银行人员都会理解的。
也听说有黄牛在中国边境处将假币兑换给游客,强烈建议去银行兑换货币(部分银行网点不能兑换)。
一般当您在商店或者出租车里支付50元或者100元时,您可以记住这张钱编号的最后几位。可能他会说您的钱是假的,这时候您可以保证他退回来的和您给出去的是同一张。
===货币兑换===
虽然中国现在仍然实行外汇管制政策,但是在很多国家都可以很容易换到人民币,特别是在亚洲。在中国兑换美元、加元、欧元、英镑、澳元、日元和韩元都是比较容易的。除了新加坡币之外,东南亚其他国家的货币一般比较难兑换。建议尽量到比较大的银行(比如BOC中国银行)或者授权的货币兑换点(一般高端酒店或者机场都有,但是汇率一般会有差异)兑换货币。
确实存在货币兑换的黑市,但是强烈建议您不要在黑市兑换因为在中国兑换货币时'''假币'''情况非常严重。对于在市场找到的或者银行周围溜达的黄牛一定要小心。虽然他们的汇率非常诱人,但是如果没有当地的朋友帮忙的话,'''不要'''跟他们兑换。经常会有兑换了一大笔钱之后发现拿到的大部分是假币。尽量在'''中国银行'''或者其他银行的柜台进行兑换,虽然他们的汇率相对要差一点,但是拿到假币的可能性几乎为零。
中国外汇管制很严格。在全世界的旅游景点和购物中心都很常见的私人的货币兑换点在中国却并不常见。在银行兑换货币一般需要5分钟到60分钟左右,有时候在酒店兑换会更快一点。一般就算大城市的支行都会对兑换流程很熟悉,操作的很快,而三四线城市的分行却不熟悉,操作相对要慢一些。
无论在哪里兑换,您都需要填一张表并出示您的护照。一般都要扫描您的护照并需要一份护照复印件。如果您计划带着较大金额离开中国的话,兑换收据要留好。注意,并不是每个有“Exchange”标识的银行都会给不是他们客户的人提供现金兑换服务。例如,渣打银行就只给他们的客户提供美元和港币货币兑换(但是,就算您拿到是旅游签证,开户也是可以的,而且他们的汇率要比大部分本地银行要优惠)。
用美元兑换人民币程序很简单,但是一般在兑换之前银行对您的钱看的很仔细。如果有机会在国外买入人民币的话(比如通过香港或者越南入境的话),应该在国外换,因为国外的汇率要好一些。要卖出人民币也是一样的,出中国边境之后卖出人民币的汇率也会更好一点。另外,大部分国际银行的储蓄卡或者信用卡都可以在中国的ATM机中直接支取人民币现金。但是,这样做的汇率非常不利而且手续费会非常高。建议随身带一点儿国际货币,例如英镑、美元或者日元以防您在附近找不到柜员机。
===銀行卡===
在中国接受銀行卡消費的小商鋪較為少见,多為大型消费场所接受。絕大多數接受銀行卡的商鋪均只接受中國銀聯卡。有部分较多中国以外游客受众的场所可接受 Visa/MasterCard 等国际组织通道的银行卡 ,但一般也是大型消费场所,如国际酒店,且有可能要求收取額外手續費。發現(Discover)卡與中國銀聯簽署了協議,允許於大陸地區的收銀機上作為銀聯卡使用,然而發現卡近期發行的芯片卡則可能需要多嘗試幾次或根本無法使用,且發現卡於線上並不能作為銀聯卡消費使用。雖然大來卡(Diner's club)目前屬於發現卡公司所有,但是於中國大陸並不可以作為發現卡或銀聯卡使用,覆蓋情況與美國運通(American Express)類似。
中国到处都有 ATM 机,所有的 ATM 机均接受中国银联卡,其中大部分的 ATM 也可接受 Visa/ MasterCard 卡组织的卡,部分机器也会支持 JCB/ 美国运通卡 ,中国以外发行的卡片在使用时必须在发卡方开通跨境取款功能,此外发卡方、卡组织、取款的 ATM 所属银行都有可能收取一定的手续费或兑汇费。
注意:虽然中國農業銀行、民生银行、深圳发展银行和上海银行等等許多銀行的 ATM 机上有时候会有 PLUS/ Cirrus/ Maestro 等标志,但是实际上只有个别的 ATM 机可以真正接受这些卡。而且能不能用只有您试了以后才能知道。絕對不可以依賴銀行卡作為唯一的支付與提現手段。
===移動支付===
中國的移動支付正在蓬勃發展中,類似微信支付、支付寶等基於二維碼(QR)的移動支付目前已經普及。幾乎所有接受小額支付的商鋪,甚至一些接受大額支付的商鋪,均接受至少一種使用二維碼的移動支付方式。如果您於商舖中看到一個印有上述軟體的 Logo 的二維碼,便意味著您很可能可以使用微信支付、支付寶等方式付款。随着该支付方式的发展,很多中国人已很少使用现金,甚至出门不需要带钱包了。
然而基於 NFC 技術的移動支付方式卻尚未於中國普及。虽然大部分终端已支持非接触式支付,但一般也仅限于使用银联芯片卡非接触,而不是通过手机 NFC ,即使可以使用,小型商铺的店员也会已不会使用等理由拒绝,接受 Apple Pay 的商鋪亦只能使用中国区或香港区 Apple Pay 中綁定的銀聯卡。 不过目前通过银联云闪付乘坐公共交通(城市内的公交,地铁等)已经被普及了,故在一定场合内NFC是可以使用的.
Google Pay 由于 Google 遭到封锁,故不可在银联终端上使用,即使您遇到接受 Visa/ MasterCard 的终端也不大有机会通过 Google Pay 消费,因为这些终端通常位于机场、国际酒店等大额消费场所,使用 NFC 非接是不被接受的,其他区域的 Apple Pay 同理。
截止2022年中国官方目前仍在部分地区试点数字人民币,数字人民币是与纸币一样,是中国官方承认的法定货币,具有可溯源的属性。可以实现无网络离线支付。
==饮食==
{{seealso|中華美食}}
中国有很多饭店和路边摊。如果您第一次来中国建议先尝试一下街头小吃。这一般比较便宜。
===地方菜系===
[[File:Guangzhou-Nur-Bostani-Restaurant-pseudo-bagels-0473.jpg|thumb|各种烘焙食品是中国西北穆斯林民族的饮食特点]]
*京菜:家庭面条和包子、北京烤鸭、甘蓝菜、棒极了的泡菜,不喜欢也可以极大的满足。
*宫廷菜:晚清宫廷食品,由慈禧而出名,可在北京的高端专业餐厅品尝。美食结合满族食品如独特的新奇事物如驼掌、鹿肉、鱼翅和燕窝。
*徽菜:中国八大菜系之一,特色菜品如毛豆腐,臭鳜鱼等。
*粤菜:大多数西方游客的风格在某种程度上已经很熟悉了。不是太辣,重点是新鲜煮熟的食材和海鲜。点心通常在早餐或午餐吃,是一个亮点。也就是说,正宗的粤菜在中国的各种菜系中广东的是有名的,即使在中国,他们非常广泛的定义什么是食物。
*沪菜:由于其地理位置,上海菜被认为是一个很好的混合北部和南部中国烹饪风格。最著名的菜肴是小笼包和韭菜饺子。另一个特色是“拉面”,从日本拉面和韩国碗拉面被认为是来自于此。糖通常被添加到炒的菜给上海菜味道甜甜的。
*川菜
*豫菜:即河南菜系,是对在带有中原传统文化内涵的烹饪理论指导下,运用具备中原地域特点的技术和材料所制作的菜肴、面点和筵席的总称。豫菜是中国各大菜系的渊源,被中国烹饪界称为中国八大菜系的“母菜”,有“烹饪鼻祖”和“中华厨祖”之称的伊尹便出生于河南[[洛阳]],当代豫菜是在原宫廷菜、官府菜、市肆菜和民间菜的基础上,根据中原物质条件,逐步积累演变而发展起来的。
因河南地处中原地区,其饮食文化口味因地域影响,河南北部多为面食,南部多为米饭。豫菜中一些菜名比较华丽优美,主要因为一些菜式源自于汉宋唐宫廷,有些饮食文化历史可以追溯到商周时期。
*湘菜
*潮州菜
*闽菜
*黔菜
*浙菜
*琼菜
*鲁菜:中国四大菜系之一(与川、粤、苏菜并称),选料考究,技艺精湛,主要流行与北方地区,对京津、东北等地的饮食产生影响。分为济南、孔府、胶东三支,代表菜有奶汤蒲菜、九转大肠、葱烧海参、油爆双脆、一品豆腐等。选料多为海鲜和肉类,孔府菜擅长素菜烹饪。口味偏重偏咸,擅长奶汤料理。除代表菜外,鲁菜家常菜也非常流行。
===快餐===
[[File:Xiao Long Bao by Junhao!.jpg|thumb|包子是一种很常见的食物]]
[[File:Chuan'r LED sign hanging in front of Beijing shop.jpg|right|thumb|烤串店可能会在店铺门口挂出来一个呈“串”字形状的灯]]
各种类型的中国食品都特别的快速、便宜、美味、方便。从各个城市都可以去买到吃的。[[北京]]王府井地区的小吃街是一个非常值得注意的旅游区,适合街头食品。在一些讲[[粤语]]的地区(主要是[[广东]],但不包括[[深圳]]),街头食品摊贩叫做盖宾洞,这样的企业可以发展成为一个实质性的业务,而在传统的街头食品意义上,这些摊位几乎不能“流动”。全国各地的快餐包括:
* 特别多的面包店。在中国发现的各种糖果和甜食通常作为零食销售,而不是西餐馆的餐后甜点套餐。
* 各种烤肉,包括羊肉串是非常常见的。
* 饺子,可以用来煮,蒸或油炸馄饨样物品与各种馅料。而且几乎遍布了亚洲。
* 包子,馒头里面塞满咸,里面是甜的或蔬菜馅或者肉馅。
* 馒头,可以看成是带皮的白色面包,也可以在中间加一点吃的。
* 兰州拉面,这个行业主要由回族族裔所主宰——寻找一家拥有穆斯林服饰工作人员的小餐厅,男士们戴着白色的帽子,女士们则戴着头巾。
* 在广东和其他地方则有点心,在中国的任何主要旅游目的地,您都可以找到为香港客户提供点心的人。
* 煎饼,一个鸡蛋煎饼,裹在一个带有酱汁的饼干和可选的辣椒酱。又被称为“煎饼果子”。
西方的快餐概念可以说与国内品种一样受欢迎。肯德基、麦当劳、赛百味和必胜客在中等城市及以上地区都是无处不在。汉堡王和棒约翰等中国连锁店也很普遍。这些包括德克士:鸡肉汉堡,薯条等,比肯德基便宜,有些人说得更好 - 还有(真功夫)——有更多的中国菜单。
===礼节===
尊老爱幼,文明用餐。
===买单===
在中国没有给小费的习惯,所以不需要,如果你想给服务员小费,他们可能会觉得这很奇怪;在中国使用移动支付非常方便,可以不带现金,非常方便的使用微信支付或者支付宝支付,但出门身上最好携带一些现金,以防出现意外,例如无法使用移动支付,或某些商人因过于年迈而未配备移动支付。
===在餐厅用餐===
===独自用餐===
==夜生活==
中国有很多酒吧、KTV等娱乐场所。有人说这很不安全。但是请放心,中国有全世界反应能力最快的警察制度。如果遇到危险请拨打报警电话110,警察会赶到并为你解决危险。
==住宿==
在中国只要不是偏远山区,就会有酒店。但是请注意在旅游景点,尤其是节假日时酒店价格会非常贵,高星级酒店为800<nowiki>~</nowiki>5000+元。
以上海迪士尼乐园酒店为例,(2017/09/18-2017/09/19 ,1 间房间 ,1 宾客)
9月份平常工作日价格(豪华花园景观房)为¥1,950元每晚(不含服务费)
10月份国庆假期价格(2017/10/03-2017/10/04 ,1 间房间 ,1 宾客)(豪华花园景观房)为¥2,750元每晚(不含服务费)
您可以在一些提供酒店预定服务的网站或者APP上提前查找并预定酒店,也许可以找到一些价格低廉的房间,有时候甚至可以用一百多人民币在北京住上两晚。
至于您选择的时间及其房型价格到底划不划算,就是仁者见仁智者见智了。
==学习==
{{seealso|前往中国留学}}
中國大陆主要大學有清华大学、北京大學、武汉大學、华中科技大学、南京大学、中山大学、浙江大学、上海交通大學、深圳大学、同济大学和复旦大學等。
==工作==
{{seealso|前往中國工作}}
近年来,中国增长非常之快,这有望成为世界上最大的经济体。尽管劳动力市场对于外国人的访问是困难的,然而,对于那些希望体验中国的人来说,有重要的机会。
就业机会包括英语教学,工程及跨国公司工作。
==安全==
在中国,游客的人身安全总体上可以得到保障,夜间主要街道也都基本安全,但是在人多的场合请务必保管好个人财物以免遭遇盗窃,小额的财物损失较难获得警方重视,追回的概率也不大,中国民间几乎没有枪械。在中国报警时,可以环顾四周的路灯杆上是否存在数字编号,这些编号可以告诉警方来迅速来确定你的位置。中国的报警电话是110,火警是119,急救电话是120。
==医疗==
===流行病学===
除了所有旅行者均应接种的常规疫苗外,美国的疾病预防和控制中心(CDC)建议对下述传染性病原体缺乏免疫力的人士额外接种疫苗:
*大部分旅行者应接种
**甲肝疫苗(HAV)
**伤寒疫苗(Thyroid)
*部分旅行者应该接种
**乙肝疫苗(HBV),如果您可能与当地人发生性行为,或者在当地接受手术和纹身。
**日本脑炎疫苗(JE),如果您的旅程超过一个月或者您打算访问乡村地区。
**小儿麻痹症疫苗(Polio),如果您打算访问新疆。
**狂犬疫苗(Rabies),如果您可能接触犬类。
**黄热病疫苗(Yellow Fever)(中国境内并没有感染黄热病的风险,这么建议是因为中国政府强制性要求部分来自黄热病疫区的旅客接种,否则不让过关。如果您并非来自疫区,可以不接种)
**疟疾疫苗(Malaria),如果您前往亚热带地区。
有些疫苗从首次接种到免疫获得可能长达6个月,因此请提前接种。由于访问东亚国家时,大量推荐疫苗都是重复的,所以尽早接种,就算去不了也不亏,这免疫力以后还能用得上。
在新冠疫情影响下,注射满全流程新冠疫苗在入境前也是必须的.
==举止==
通常的'''[[用电|电力系统]]'''使用是220伏/50赫兹。一般都能支持两针欧洲和北美,以及三针澳式插头。但是,请仔细阅读设备上的电压信息,以确保它们在插入之前接受220V(两倍于许多国家使用的110V)的电压,否则可能会导致倦怠和对诸如吹风机和剃须刀等设备的永久性损坏。可以处理各种插头形状(包括英国)的通用延长线被广泛使用。
中国是右行制国家,这意味这车辆、行人、电车、火车等均应当靠右行驶——这和一些地方不一样。
对于比较长的街道的名称通常以中间词语表示街道的一部分。例如,白马街或白马路可以拆分为白马路、白马北路、白马中路和白马南路。除此之外,也可以使用“东”或者是“西”。
然而,在一些城市,这些名称并不表示某条街道的一部分。例如在[[厦门]],湖滨北路和湖滨南路平行,在湖的南北两侧东西走向。在[[南京]],中山路,中山北路和中山东路是三条独立的主要道路。
'''洗衣'''服务可能价格昂贵或难以找到。在一些高端酒店,每件衣物洗涤费用为10-30元人民币。一些地区的廉价酒店甚至没有洗衣服务,但在其他地区,如沿着[[云南]]的旅游线路,这项服务是常见的,而且往往是免费的。在大部分地区,除大城市中心地区外,您可以找到可以洗衣服的小商店。在大门上寻找的标志是洗衣,或者是从天花板上垂下来的衣服。成本约为每件2-5元人民币。在即使是最小的城市,干洗店网点的分布也广泛,可以洗衣服,但在某些地区,您将被卡在手洗衣服这个环节,这是耗时且令人厌烦的,所以可能选择快速干燥的面料,如聚酯或丝绸,如果你确实找到一家洗衣店的酒店,通常他们会把所有的衣服放在一起洗,甚至与酒店的其他物品一起洗,所以最好用携带浅色的衣服。
[[File:Jianshui - old city - P1370481.JPG|thumb|用来销售的传统烟管]]
禁止在公共建筑和公共交通工具上'''吸烟''',除了一些餐厅和酒吧(包括KTV)——其中许多是很明显的吸烟场所,虽然许多跨国连锁餐厅禁止吸烟。这些禁令在全国范围内得到执行。一般来说,[[上海]]和[[北京]]的吸烟法律是最严格的,而在其他地方则更为严格。许多地方(特别是火车站,医院,办公楼和机场)都会设有吸烟室,一些长途列车可能在每辆汽车的尽头都有吸烟区,'''中国高速铁路列车全列禁烟'''。非吸烟者的设施往往很差;在大多数餐馆,酒吧和酒店除了高端设施外不会有非吸烟区,尽管许多现代化的建筑物都有排烟系统,通过天花板通风口将香烟烟雾吸出房间——这意味着烟雾不会在室内飘着。
{{Cquote|我可以吸烟吗?}}
{{Cquote|禁止吸烟!}}
中国的公众假期值得关注。尽管在最受欢迎的旅游景点中,你永远不会独处,其中包括特殊山区,周末和公众假期的热门徒步旅行,但由于当地旅游业的关系,这些地区可能会接近无法通行。你可能计划作为一个沉思的徒步旅行,可能会变成一个多小时的队列!了解国庆节日期并据此计划([[w:中华人民共和国节日与公众假期|参见]])。
关于香港、台湾的政治和所属话题,请不要发表您的意见,也不要与人谈论——这涉及到较大的政治争议。
==通讯==
=== 电话 ===
{{seealso|中国大陆电话区号}}
中国大陆有四大国营电信运营商:中国联通、中国电信、中国移动和中国广电。中国联通和中国电信涵盖移动电话和固定电话业务,中国移动只有移动电话业务(和铁通合并后也有固定电话业务),为大陆规模最大的移动运营商。不过近年来也有虚拟运营商开始提供移动通信服务,这类运营商使用的170、171、173、176号段都是虚拟运营商的专用号段。中国广电成立于2014年5月28日,是唯一国家级智慧广电网络运营商、综合文化信息服务提供商、新型基础网络设施运营商和基础电信业务运营商。
中国比较大型的酒店一般都有直拨国际电话IDD,可以拨打国际和港澳台电话。很多酒店都有网线接口、无线Wi-Fi上网、语音留言系统、视频系统等,实现了方便快捷的通讯服务。
移动通信方面,中国联通主要使用FDD-LTE、中国电信使用FDD-LTE、中国移动仅使用TD-LTE作为4G制式。各家移动运营商的信号覆盖都很广。
电信诈骗案件在中国时有发生,如果你接到了陌生的电话或短信,千万不要向对方转账或付款。
=== 网络 ===
中国电信和中国联通是中国境内两大拥有全国性骨干网的典型运营商,因此相对于其他小型运营商而言,这两家的网络性能较好,同时价格也更高。大部分宾馆客房里都有互联网连接,不少机场、商场、饭店等公共场所也有无线网络覆盖,不过它们大多需要经过手机短信验证等步骤才能使用。
中国的网络审查很严格,连接部分外国网站时可能会遇到长城防火墙(GFW)封锁,Facebook、 Twitter、 Google(包括维基百科,YouTube)等服务也在其中(见[[w:中华人民共和国被封锁网站列表|已被大陆封锁的网站]]),不过有些技术(VPN)可以绕过此类封锁,建议有需求的游客提前下载好相应软件并做好配置(Google Play 商店 在中国也被封锁,因此 Android 设备用户须提前准备)。值得注意的是,私自使用VPN浏览被封锁的网站在中国大陆系违法行为,但警察通常不会对使用者进行处罚。
在中国,许多中国应用开发商会开发两套应用,一套在Google Play商店受到严格审查,另一套受中国工业和信息化简单审查的应用可以在开发者的网站上获取。
{{usablecountry}}
{{位于|东亚}}
{{geo|39|103|zoom=4}}
{{related|在中國駕駛}}
alarzhvv0p822477qkzt979eyo4sp6b
Wikivoyage:權限申請/申請巡查權與回退權
4
2646
183872
176607
2022-08-04T14:41:38Z
S8321414
141
wikitext
text/x-wiki
<noinclude>{{Wikivoyage:權限申請/申請巡查權與回退權/header}}</noinclude>
__NOTOC__
=== [[Wikivoyage:權限申請/申請巡查權與回退權|申請巡查權與回退權]] ===
==== [[User:S8321414]] ====
: {{status|新申請}}<!-- 請勿修改本行,留予授權者填寫 -->
{{rfp/core|S8321414}}
: 希望能為中文維基導遊做出一點站務方面的貢獻,想先從巡查與回退開始。
d3th4c94ytjaovnfw75oo2b25erjdo2
183910
183872
2022-08-04T14:57:29Z
S8321414
141
/* 申請巡查權與回退權 */補簽名
wikitext
text/x-wiki
<noinclude>{{Wikivoyage:權限申請/申請巡查權與回退權/header}}</noinclude>
__NOTOC__
=== [[Wikivoyage:權限申請/申請巡查權與回退權|申請巡查權與回退權]] ===
==== [[User:S8321414]] ====
: {{status|新申請}}<!-- 請勿修改本行,留予授權者填寫 -->
{{rfp/core|S8321414}}
: 希望能為中文維基導遊做出一點站務方面的貢獻,想先從巡查與回退開始。—[[User:S8321414|S8321414]]([[User talk:S8321414|留言]]) 2022年8月4日 (四) 22:57 (CST)
9vefgcp7skten647j2n9r5ji0xdkc68
Module:IsPartOf
828
2932
183905
83900
2022-08-04T14:47:06Z
Xiplus
4323
已保护“[[Module:IsPartOf]]”:高風險模板:5194引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
Scribunto
text/plain
--Used by [[Template:IsPartOf]]
local title = tostring(mw.title.getCurrentTitle())
local entity = mw.wikibase.getEntityObject()
function suggest(pid)
if entity and entity.claims and entity.claims[pid] then
local qid = entity.claims[pid][1].mainsnak.datavalue.value["numeric-id"]
local link = mw.wikibase.sitelink("Q" .. qid)
if link and link ~= title then return link else return nil end
end
return nil
end
local p = {}
function p.suggest(frame)
if frame:getParent().args[1] == nil or frame:getParent().args[1] == '' then
return suggest("P131") or suggest("P17") or suggest("P30") or ''
else
if mw.title.new( frame:getParent().args[1], 0 ).exists then
return frame:getParent().args[1]
else
return suggest("P131") or suggest("P17") or suggest("P30") or frame:getParent().args[1]
end
end
end
function p.autocreate(frame)
local content=mw.title.makeTitle( 0, mw.title.getCurrentTitle().text ):getContent()
local place=frame:getParent().args[1]
if place=='' then
place=nil
end
if content and not place then
content=mw.ustring.gsub( content, "isPartOf", "IsPartOf")
content=mw.ustring.gsub( content, "ispartof", "IsPartOf")
content=mw.ustring.gsub( content, "Ispartof", "IsPartOf")
content=mw.ustring.gsub( content, "IsIn", "IsPartOf")
content=mw.ustring.gsub( content, "isIn", "IsPartOf")
content=mw.ustring.gsub( content, "Isin", "IsPartOf")
content=mw.ustring.gsub( content, "isin", "IsPartOf")
content=mw.ustring.gsub( content, "Partof", "IsPartOf")
content=mw.ustring.gsub( content, "partof", "IsPartOf")
content=mw.ustring.gsub( content, "位于", "IsPartOf")
content=mw.ustring.gsub( content, "位於", "IsPartOf")
content=mw.ustring.gsub( content, "处于", "IsPartOf")
content=mw.ustring.gsub( content, "處於", "IsPartOf")
if mw.ustring.find(content, "{{IsPartOf}}", 1, true) then
--wait for T74815
elseif mw.ustring.find(content, "{{IsPartOf|", 1, true) then
content=mw.ustring.sub( content,mw.ustring.find(content, "{{IsPartOf|", 1, true)+11)
place=mw.ustring.sub( content,1,mw.ustring.find(content, "}}", 1, true)-1)
end
end
if place then
return '{{IsPartOf|'..place..'}}'
else
return '{{IsPartOf/error}}'
end
end
return p
85ad05t45a33emekjqe4yb15usyomob
Module:HiddenUnicode
828
4043
183898
157728
2022-08-04T14:45:56Z
Xiplus
4323
已保护“[[Module:HiddenUnicode]]”:高風險模板:2375引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
Scribunto
text/plain
local i = {}
function i.HiddenUnicode(frame)
local txt = frame.args[1] or '';
local catUnicodeIssue = '';
-- Note the quote ("") below is not empty and actually contains a hidden unicode character.
if mw.ustring.match(txt,"") ~= nil then
catUnicodeIssue = '[[' .. 'Category:列表項含有隱藏Unicode字元]]'
end
return catUnicodeIssue;
end
return i;
1jh5p9fzinjrhmj6l4r3zmmyfz94ek9
Template:Infobox emergency call
10
4057
183859
162970
2022-08-04T14:39:35Z
Xiplus
4323
已保护“[[Template:Infobox emergency call]]”:高風險模板:1118引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
wikitext
text/x-wiki
<div class="nomobile">
<div style="display: table; border-radius: 6px; background-color: #fef4f4; border: 1px solid #FF0000; margin: 0.5em 1em 0.5em 1em; padding: 6px; box-shadow: 0px 0px 5px #aaa; width:30%; float:right;" class="pp_warningbox" >
{|
|- style="vertical-align: top;"
| style="width: 56px;"|[[File:SymbolPhone.svg|link=|50px|旅行警告]]
|<span style="font-size: 130%; color: #FF0000">'''緊急電話號碼:'''</span><!--
-->{{ #if:{{{general|}}}|</br>'''所有緊急服務:''' <span style="color: #FF0000;">'''{{{general}}}'''</span> <span style="font-size: 90%;">{{#if:{{{info general|}}}|{{{info general}}}|}}</span>|}}<!--
-->{{ #if:{{{police|}}}|</br>'''-{zh-hans:警察:;zh-cn:警察:;zh-hant:警察:;}-''' <span style="color: #FF0000;">'''{{{police}}}'''</span> <span style="font-size: 90%;">{{#if:{{{info police|}}}|{{{info police}}}|}}</span>|}}<!--
-->{{ #if:{{{ambulance|}}}|</br>'''-{zh-hans:救护车:;zh-cn:急救:;zh-hant:救護車:;}-''' <span style="color: #FF0000;">'''{{{ambulance}}}'''</span> <span style="font-size: 90%;">{{#if:{{{info ambulance|}}}|{{{info ambulance}}}|}}</span>|}}<!--
-->{{ #if:{{{fireman|}}}|</br>'''-{zh-hans:消防队: ;zh-cn:火警:;zh-hant:消防隊:;}-''' <span style="color: #FF0000;">'''{{{fireman}}}'''</span> <span style="font-size: 90%;">{{#if:{{{info fireman|}}}|{{{info fireman}}}|}}</span>|}}<!--
-->{{ #if:{{{other1|}}}|</br>'''{{{nomautre1}}}:''' <span style="color: #FF0000;">'''{{{other1|}}}'''</span> <span style="font-size: 90%;">{{#if:{{{info other1|}}}|{{{info other1}}}|}}</span>|}}<!--
-->{{ #if:{{{other2|}}}|</br>'''{{{nomautre2}}}:''' <span style="color: #FF0000;">'''{{{other2|}}}'''</span> <span style="font-size: 90%;">{{#if:{{{info other2|}}}|{{{info other2}}}|}}</span>|}}<!--
-->{{ #if:{{{other3|}}}|</br>'''{{{nomautre3}}}:''' <span style="color: #FF0000;">'''{{{other3|}}}'''</span> <span style="font-size: 90%;">{{#if:{{{info other3|}}}|{{{info other3}}}|}}</span>|}}<!--
-->{{ #if:{{{other4|}}}|</br>'''{{{nomautre4}}}:''' <span style="color: #FF0000;">'''{{{other4|}}}'''</span> <span style="font-size: 90%;">{{#if:{{{info other4|}}}|{{{info other4}}}|}}</span>|}}
|}</div>
</div>
<div class="mf-mobile-only" id="mf-pub">
<div style="display: table; border-radius: 6px; background-color: #fef4f4; border: 1px solid #FF0000; margin: 0.5em 1em 0.5em 1em; padding: 6px; box-shadow: 0px 0px 5px #aaa; float:right;" class="pp_warningbox" >
{|
|- style="vertical-align: top;"
| style="width: 56px;"|[[File:SymbolPhone.svg|link=|50px|Avertissement de voyage]]
|<span style="font-size: 130%; color: #FF0000">'''緊急電話號碼:'''</span><!--
-->{{ #if:{{{general|}}}|</br>'''所有緊急服務:''' <span style="color: #FF0000;">'''{{{general}}}'''</span> <span style="font-size: 90%;">{{#if:{{{info general|}}}|{{{info general}}}|}}</span>|}}<!--
-->{{ #if:{{{police|}}}|</br>'''-{zh-hans:警察:;zh-cn:匪警:;zh-hant:警察:;}-''' <span style="color: #FF0000;">'''{{{police}}}'''</span> <span style="font-size: 90%;">{{#if:{{{info police|}}}|{{{info police}}}|}}</span>|}}<!--
-->{{ #if:{{{ambulance|}}}|</br>'''-{zh-hans:救护车:;zh-cn:急救:;zh-hant:救護車:;}-''' <span style="color: #FF0000;">'''{{{ambulance}}}'''</span> <span style="font-size: 90%;">{{#if:{{{info ambulance|}}}|{{{info ambulance}}}|}}</span>|}}<!--
-->{{ #if:{{{fireman|}}}|</br>'''-{zh-hans:消防队: ;zh-cn:火警:;zh-hant:消防隊:;}-''' <span style="color: #FF0000;">'''{{{fireman}}}'''</span> <span style="font-size: 90%;">{{#if:{{{info fireman|}}}|{{{info fireman}}}|}}</span>|}}<!--
-->{{ #if:{{{other1|}}}|</br>'''{{{nomautre1}}}:''' <span style="color: #FF0000;">'''{{{other1|}}}'''</span> <span style="font-size: 90%;">{{#if:{{{info other1|}}}|{{{info other1}}}|}}</span>|}}<!--
-->{{ #if:{{{other2|}}}|</br>'''{{{nomautre2}}}:''' <span style="color: #FF0000;">'''{{{other2|}}}'''</span> <span style="font-size: 90%;">{{#if:{{{info other2|}}}|{{{info other2}}}|}}</span>|}}<!--
-->{{ #if:{{{other3|}}}|</br>'''{{{nomautre3}}}:''' <span style="color: #FF0000;">'''{{{other3|}}}'''</span> <span style="font-size: 90%;">{{#if:{{{info other3|}}}|{{{info other3}}}|}}</span>|}}<!--
-->{{ #if:{{{other4|}}}|</br>'''{{{nomautre4}}}:''' <span style="color: #FF0000;">'''{{{other4|}}}'''</span> <span style="font-size: 90%;">{{#if:{{{info other4|}}}|{{{info other4}}}|}}</span>|}}
|}</div>
</div><noinclude>
{{documentation}}
[[Category:模板]]
</noinclude>
rm7hlyfx2x245f01gymfhuvcbvd5jf4
Module:Category handler
828
6320
183887
105285
2022-08-04T14:44:06Z
Xiplus
4323
已保护“[[Module:Category handler]]”:高風險模板:1600引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
Scribunto
text/plain
--------------------------------------------------------------------------------
-- --
-- CATEGORY HANDLER --
-- --
-- This module implements the {{category handler}} template in Lua, --
-- with a few improvements: all namespaces and all namespace aliases --
-- are supported, and namespace names are detected automatically for --
-- the local wiki. This module requires [[Module:Namespace detect]] --
-- and [[Module:Yesno]] to be available on the local wiki. It can be --
-- configured for different wikis by altering the values in --
-- [[Module:Category handler/config]], and pages can be blacklisted --
-- from categorisation by using [[Module:Category handler/blacklist]]. --
-- --
--------------------------------------------------------------------------------
-- Load required modules
local yesno = require('Module:Yesno')
-- Lazily load things we don't always need
local mShared, mappings
local p = {}
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function trimWhitespace(s, removeBlanks)
if type(s) ~= 'string' then
return s
end
s = s:match('^%s*(.-)%s*$')
if removeBlanks then
if s ~= '' then
return s
else
return nil
end
else
return s
end
end
--------------------------------------------------------------------------------
-- CategoryHandler class
--------------------------------------------------------------------------------
local CategoryHandler = {}
CategoryHandler.__index = CategoryHandler
function CategoryHandler.new(data, args)
local obj = setmetatable({ _data = data, _args = args }, CategoryHandler)
-- Set the title object
do
local pagename = obj:parameter('demopage')
local success, titleObj
if pagename then
success, titleObj = pcall(mw.title.new, pagename)
end
if success and titleObj then
obj.title = titleObj
if titleObj == mw.title.getCurrentTitle() then
obj._usesCurrentTitle = true
end
else
obj.title = mw.title.getCurrentTitle()
obj._usesCurrentTitle = true
end
end
-- Set suppression parameter values
for _, key in ipairs{'nocat', 'categories'} do
local value = obj:parameter(key)
value = trimWhitespace(value, true)
obj['_' .. key] = yesno(value)
end
do
local subpage = obj:parameter('subpage')
local category2 = obj:parameter('category2')
if type(subpage) == 'string' then
subpage = mw.ustring.lower(subpage)
end
if type(category2) == 'string' then
subpage = mw.ustring.lower(category2)
end
obj._subpage = trimWhitespace(subpage, true)
obj._category2 = trimWhitespace(category2) -- don't remove blank values
end
return obj
end
function CategoryHandler:parameter(key)
local parameterNames = self._data.parameters[key]
local pntype = type(parameterNames)
if pntype == 'string' or pntype == 'number' then
return self._args[parameterNames]
elseif pntype == 'table' then
for _, name in ipairs(parameterNames) do
local value = self._args[name]
if value ~= nil then
return value
end
end
return nil
else
error(string.format(
'invalid config key "%s"',
tostring(key)
), 2)
end
end
function CategoryHandler:isSuppressedByArguments()
return
-- See if a category suppression argument has been set.
self._nocat == true
or self._categories == false
or (
self._category2
and self._category2 ~= self._data.category2Yes
and self._category2 ~= self._data.category2Negative
)
-- Check whether we are on a subpage, and see if categories are
-- suppressed based on our subpage status.
or self._subpage == self._data.subpageNo and self.title.isSubpage
or self._subpage == self._data.subpageOnly and not self.title.isSubpage
end
function CategoryHandler:shouldSkipBlacklistCheck()
-- Check whether the category suppression arguments indicate we
-- should skip the blacklist check.
return self._nocat == false
or self._categories == true
or self._category2 == self._data.category2Yes
end
function CategoryHandler:matchesBlacklist()
if self._usesCurrentTitle then
return self._data.currentTitleMatchesBlacklist
else
mShared = mShared or require('Module:Category handler/shared')
return mShared.matchesBlacklist(
self.title.prefixedText,
mw.loadData('Module:Category handler/blacklist')
)
end
end
function CategoryHandler:isSuppressed()
-- Find if categories are suppressed by either the arguments or by
-- matching the blacklist.
return self:isSuppressedByArguments()
or not self:shouldSkipBlacklistCheck() and self:matchesBlacklist()
end
function CategoryHandler:getNamespaceParameters()
if self._usesCurrentTitle then
return self._data.currentTitleNamespaceParameters
else
if not mappings then
mShared = mShared or require('Module:Category handler/shared')
mappings = mShared.getParamMappings(true) -- gets mappings with mw.loadData
end
return mShared.getNamespaceParameters(
self.title,
mappings
)
end
end
function CategoryHandler:namespaceParametersExist()
-- Find whether any namespace parameters have been specified.
-- We use the order "all" --> namespace params --> "other" as this is what
-- the old template did.
if self:parameter('all') then
return true
end
if not mappings then
mShared = mShared or require('Module:Category handler/shared')
mappings = mShared.getParamMappings(true) -- gets mappings with mw.loadData
end
for ns, params in pairs(mappings) do
for i, param in ipairs(params) do
if self._args[param] then
return true
end
end
end
if self:parameter('other') then
return true
end
return false
end
function CategoryHandler:getCategories()
local params = self:getNamespaceParameters()
local nsCategory
for i, param in ipairs(params) do
local value = self._args[param]
if value ~= nil then
nsCategory = value
break
end
end
if nsCategory ~= nil or self:namespaceParametersExist() then
-- Namespace parameters exist - advanced usage.
if nsCategory == nil then
nsCategory = self:parameter('other')
end
local ret = {self:parameter('all')}
local numParam = tonumber(nsCategory)
if numParam and numParam >= 1 and math.floor(numParam) == numParam then
-- nsCategory is an integer
ret[#ret + 1] = self._args[numParam]
else
ret[#ret + 1] = nsCategory
end
if #ret < 1 then
return nil
else
return table.concat(ret)
end
elseif self._data.defaultNamespaces[self.title.namespace] then
-- Namespace parameters don't exist, simple usage.
return self._args[1]
end
return nil
end
--------------------------------------------------------------------------------
-- Exports
--------------------------------------------------------------------------------
local p = {}
function p._exportClasses()
-- Used for testing purposes.
return {
CategoryHandler = CategoryHandler
}
end
function p._main(args, data)
data = data or mw.loadData('Module:Category handler/data')
local handler = CategoryHandler.new(data, args)
if handler:isSuppressed() then
return nil
end
return handler:getCategories()
end
function p.main(frame, data)
data = data or mw.loadData('Module:Category handler/data')
local args = require('Module:Arguments').getArgs(frame, {
wrappers = data.wrappers,
valueFunc = function (k, v)
v = trimWhitespace(v)
if type(k) == 'number' then
if v ~= '' then
return v
else
return nil
end
else
return v
end
end
})
return p._main(args, data)
end
return p
letwavu3yvlayfzew66uuwixmwebq5b
Module:Namespace detect/data
828
6322
183915
105696
2022-08-04T15:09:05Z
Xiplus
4323
已保护“[[Module:Namespace detect/data]]”:高風險模板:1596引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
Scribunto
text/plain
--------------------------------------------------------------------------------
-- Namespace detect data --
-- This module holds data for [[Module:Namespace detect]] to be loaded per --
-- page, rather than per #invoke, for performance reasons. --
--------------------------------------------------------------------------------
local cfg = require('Module:Namespace detect/config')
local function addKey(t, key, defaultKey)
if key ~= defaultKey then
t[#t + 1] = key
end
end
-- Get a table of parameters to query for each default parameter name.
-- This allows wikis to customise parameter names in the cfg table while
-- ensuring that default parameter names will always work. The cfg table
-- values can be added as a string, or as an array of strings.
local defaultKeys = {
'main',
'talk',
'other',
'subjectns',
'demospace',
'demopage'
}
local argKeys = {}
for i, defaultKey in ipairs(defaultKeys) do
argKeys[defaultKey] = {defaultKey}
end
for defaultKey, t in pairs(argKeys) do
local cfgValue = cfg[defaultKey]
local cfgValueType = type(cfgValue)
if cfgValueType == 'string' then
addKey(t, cfgValue, defaultKey)
elseif cfgValueType == 'table' then
for i, key in ipairs(cfgValue) do
addKey(t, key, defaultKey)
end
end
cfg[defaultKey] = nil -- Free the cfg value as we don't need it any more.
end
local function getParamMappings()
--[[
-- Returns a table of how parameter names map to namespace names. The keys
-- are the actual namespace names, in lower case, and the values are the
-- possible parameter names for that namespace, also in lower case. The
-- table entries are structured like this:
-- {
-- [''] = {'main'},
-- ['wikipedia'] = {'wikipedia', 'project', 'wp'},
-- ...
-- }
--]]
local mappings = {}
local mainNsName = mw.site.subjectNamespaces[0].name
mainNsName = mw.ustring.lower(mainNsName)
mappings[mainNsName] = mw.clone(argKeys.main)
mappings['talk'] = mw.clone(argKeys.talk)
for nsid, ns in pairs(mw.site.subjectNamespaces) do
if nsid ~= 0 then -- Exclude main namespace.
local nsname = mw.ustring.lower(ns.name)
local canonicalName = mw.ustring.lower(ns.canonicalName)
mappings[nsname] = {nsname}
if canonicalName ~= nsname then
table.insert(mappings[nsname], canonicalName)
end
for _, alias in ipairs(ns.aliases) do
table.insert(mappings[nsname], mw.ustring.lower(alias))
end
end
end
return mappings
end
return {
argKeys = argKeys,
cfg = cfg,
mappings = getParamMappings()
}
ojp6d3pc8mql5nufaqdg576c9so3479
Module:Namespace detect/config
828
6323
183914
105693
2022-08-04T15:08:55Z
Xiplus
4323
已保护“[[Module:Namespace detect/config]]”:高風險模板:1596引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
Scribunto
text/plain
--------------------------------------------------------------------------------
-- Namespace detect configuration data --
-- --
-- This module stores configuration data for Module:Namespace detect. Here --
-- you can localise the module to your wiki's language. --
-- --
-- To activate a configuration item, you need to uncomment it. This means --
-- that you need to remove the text "-- " at the start of the line. --
--------------------------------------------------------------------------------
local cfg = {} -- Don't edit this line.
--------------------------------------------------------------------------------
-- Parameter names --
-- These configuration items specify custom parameter names. Values added --
-- here will work in addition to the default English parameter names. --
-- To add one extra name, you can use this format: --
-- --
-- cfg.foo = 'parameter name' --
-- --
-- To add multiple names, you can use this format: --
-- --
-- cfg.foo = {'parameter name 1', 'parameter name 2', 'parameter name 3'} --
--------------------------------------------------------------------------------
---- This parameter displays content for the main namespace:
-- cfg.main = 'main'
---- This parameter displays in talk namespaces:
-- cfg.talk = 'talk'
---- This parameter displays content for "other" namespaces (namespaces for which
---- parameters have not been specified):
-- cfg.other = 'other'
---- This parameter makes talk pages behave as though they are the corresponding
---- subject namespace. Note that this parameter is used with [[Module:Yesno]].
---- Edit that module to change the default values of "yes", "no", etc.
-- cfg.subjectns = 'subjectns'
---- This parameter sets a demonstration namespace:
-- cfg.demospace = 'demospace'
---- This parameter sets a specific page to compare:
cfg.demopage = 'page'
--------------------------------------------------------------------------------
-- Table configuration --
-- These configuration items allow customisation of the "table" function, --
-- used to generate a table of possible parameters in the module --
-- documentation. --
--------------------------------------------------------------------------------
---- The header for the namespace column in the wikitable containing the list of
---- possible subject-space parameters.
-- cfg.wikitableNamespaceHeader = 'Namespace'
---- The header for the wikitable containing the list of possible subject-space
---- parameters.
-- cfg.wikitableAliasesHeader = 'Aliases'
--------------------------------------------------------------------------------
-- End of configuration data --
--------------------------------------------------------------------------------
return cfg -- Don't edit this line.
1o6ozz56i8q0xgyl6xa41n2v7kelhli
Module:TableTools
828
6324
183920
173196
2022-08-04T15:09:55Z
Xiplus
4323
已保护“[[Module:TableTools]]”:高風險模板:961引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
Scribunto
text/plain
--[[
------------------------------------------------------------------------------------
-- TableTools --
-- --
-- This module includes a number of functions for dealing with Lua tables. --
-- It is a meta-module, meant to be called from other Lua modules, and should --
-- not be called directly from #invoke. --
------------------------------------------------------------------------------------
--]]
local libraryUtil = require('libraryUtil')
local p = {}
-- Define often-used variables and functions.
local floor = math.floor
local infinity = math.huge
local checkType = libraryUtil.checkType
local checkTypeMulti = libraryUtil.checkTypeMulti
--[[
------------------------------------------------------------------------------------
-- isPositiveInteger
--
-- This function returns true if the given value is a positive integer, and false
-- if not. Although it doesn't operate on tables, it is included here as it is
-- useful for determining whether a given table key is in the array part or the
-- hash part of a table.
------------------------------------------------------------------------------------
--]]
function p.isPositiveInteger(v)
return type(v) == 'number' and v >= 1 and floor(v) == v and v < infinity
end
--[[
------------------------------------------------------------------------------------
-- isNan
--
-- This function returns true if the given number is a NaN value, and false
-- if not. Although it doesn't operate on tables, it is included here as it is
-- useful for determining whether a value can be a valid table key. Lua will
-- generate an error if a NaN is used as a table key.
------------------------------------------------------------------------------------
--]]
function p.isNan(v)
return type(v) == 'number' and tostring(v) == '-nan'
end
--[[
------------------------------------------------------------------------------------
-- shallowClone
--
-- This returns a clone of a table. The value returned is a new table, but all
-- subtables and functions are shared. Metamethods are respected, but the returned
-- table will have no metatable of its own.
------------------------------------------------------------------------------------
--]]
function p.shallowClone(t)
local ret = {}
for k, v in pairs(t) do
ret[k] = v
end
return ret
end
--[[
------------------------------------------------------------------------------------
-- removeDuplicates
--
-- This removes duplicate values from an array. Non-positive-integer keys are
-- ignored. The earliest value is kept, and all subsequent duplicate values are
-- removed, but otherwise the array order is unchanged.
------------------------------------------------------------------------------------
--]]
function p.removeDuplicates(t)
checkType('removeDuplicates', 1, t, 'table')
local isNan = p.isNan
local ret, exists = {}, {}
for i, v in ipairs(t) do
if isNan(v) then
-- NaNs can't be table keys, and they are also unique, so we don't need to check existence.
ret[#ret + 1] = v
else
if not exists[v] then
ret[#ret + 1] = v
exists[v] = true
end
end
end
return ret
end
--[[
------------------------------------------------------------------------------------
-- numKeys
--
-- This takes a table and returns an array containing the numbers of any numerical
-- keys that have non-nil values, sorted in numerical order.
------------------------------------------------------------------------------------
--]]
function p.numKeys(t)
checkType('numKeys', 1, t, 'table')
local isPositiveInteger = p.isPositiveInteger
local nums = {}
for k, v in pairs(t) do
if isPositiveInteger(k) then
nums[#nums + 1] = k
end
end
table.sort(nums)
return nums
end
--[[
------------------------------------------------------------------------------------
-- affixNums
--
-- This takes a table and returns an array containing the numbers of keys with the
-- specified prefix and suffix. For example, for the table
-- {a1 = 'foo', a3 = 'bar', a6 = 'baz'} and the prefix "a", affixNums will
-- return {1, 3, 6}.
------------------------------------------------------------------------------------
--]]
function p.affixNums(t, prefix, suffix)
checkType('affixNums', 1, t, 'table')
checkType('affixNums', 2, prefix, 'string', true)
checkType('affixNums', 3, suffix, 'string', true)
local function cleanPattern(s)
-- Cleans a pattern so that the magic characters ()%.[]*+-?^$ are interpreted literally.
return s:gsub('([%(%)%%%.%[%]%*%+%-%?%^%$])', '%%%1')
end
prefix = prefix or ''
suffix = suffix or ''
prefix = cleanPattern(prefix)
suffix = cleanPattern(suffix)
local pattern = '^' .. prefix .. '([1-9]%d*)' .. suffix .. '$'
local nums = {}
for k, v in pairs(t) do
if type(k) == 'string' then
local num = mw.ustring.match(k, pattern)
if num then
nums[#nums + 1] = tonumber(num)
end
end
end
table.sort(nums)
return nums
end
--[[
------------------------------------------------------------------------------------
-- numData
--
-- Given a table with keys like ("foo1", "bar1", "foo2", "baz2"), returns a table
-- of subtables in the format
-- { [1] = {foo = 'text', bar = 'text'}, [2] = {foo = 'text', baz = 'text'} }
-- Keys that don't end with an integer are stored in a subtable named "other".
-- The compress option compresses the table so that it can be iterated over with
-- ipairs.
------------------------------------------------------------------------------------
--]]
function p.numData(t, compress)
checkType('numData', 1, t, 'table')
checkType('numData', 2, compress, 'boolean', true)
local ret = {}
for k, v in pairs(t) do
local prefix, num = mw.ustring.match(tostring(k), '^([^0-9]*)([1-9][0-9]*)$')
if num then
num = tonumber(num)
local subtable = ret[num] or {}
if prefix == '' then
-- Positional parameters match the blank string; put them at the start of the subtable instead.
prefix = 1
end
subtable[prefix] = v
ret[num] = subtable
else
local subtable = ret.other or {}
subtable[k] = v
ret.other = subtable
end
end
if compress then
local other = ret.other
ret = p.compressSparseArray(ret)
ret.other = other
end
return ret
end
--[[
------------------------------------------------------------------------------------
-- compressSparseArray
--
-- This takes an array with one or more nil values, and removes the nil values
-- while preserving the order, so that the array can be safely traversed with
-- ipairs.
------------------------------------------------------------------------------------
--]]
function p.compressSparseArray(t)
checkType('compressSparseArray', 1, t, 'table')
local ret = {}
local nums = p.numKeys(t)
for _, num in ipairs(nums) do
ret[#ret + 1] = t[num]
end
return ret
end
--[[
------------------------------------------------------------------------------------
-- sparseIpairs
--
-- This is an iterator for sparse arrays. It can be used like ipairs, but can
-- handle nil values.
------------------------------------------------------------------------------------
--]]
function p.sparseIpairs(t)
checkType('sparseIpairs', 1, t, 'table')
local nums = p.numKeys(t)
local i = 0
local lim = #nums
return function ()
i = i + 1
if i <= lim then
local key = nums[i]
return key, t[key]
else
return nil, nil
end
end
end
--[[
------------------------------------------------------------------------------------
-- size
--
-- This returns the size of a key/value pair table. It will also work on arrays,
-- but for arrays it is more efficient to use the # operator.
------------------------------------------------------------------------------------
--]]
function p.size(t)
checkType('size', 1, t, 'table')
local i = 0
for k in pairs(t) do
i = i + 1
end
return i
end
local function defaultKeySort(item1, item2)
-- "number" < "string", so numbers will be sorted before strings.
local type1, type2 = type(item1), type(item2)
if type1 ~= type2 then
return type1 < type2
else -- This will fail with table, boolean, function.
return item1 < item2
end
end
--[[
Returns a list of the keys in a table, sorted using either a default
comparison function or a custom keySort function.
]]
function p.keysToList(t, keySort, checked)
if not checked then
checkType('keysToList', 1, t, 'table')
checkTypeMulti('keysToList', 2, keySort, { 'function', 'boolean', 'nil' })
end
local list = {}
local index = 1
for key, value in pairs(t) do
list[index] = key
index = index + 1
end
if keySort ~= false then
keySort = type(keySort) == 'function' and keySort or defaultKeySort
table.sort(list, keySort)
end
return list
end
--[[
Iterates through a table, with the keys sorted using the keysToList function.
If there are only numerical keys, sparseIpairs is probably more efficient.
]]
function p.sortedPairs(t, keySort)
checkType('sortedPairs', 1, t, 'table')
checkType('sortedPairs', 2, keySort, 'function', true)
local list = p.keysToList(t, keySort, true)
local i = 0
return function()
i = i + 1
local key = list[i]
if key ~= nil then
return key, t[key]
else
return nil, nil
end
end
end
--[[
Returns true if all keys in the table are consecutive integers starting at 1.
--]]
function p.isArray(t)
checkType("isArray", 1, t, "table")
local i = 0
for k, v in pairs(t) do
i = i + 1
if t[i] == nil then
return false
end
end
return true
end
-- { "a", "b", "c" } -> { a = 1, b = 2, c = 3 }
function p.invert(array)
checkType("invert", 1, array, "table")
local map = {}
for i, v in ipairs(array) do
map[v] = i
end
return map
end
--[[
{ "a", "b", "c" } -> { ["a"] = true, ["b"] = true, ["c"] = true }
--]]
function p.listToSet(t)
checkType("listToSet", 1, t, "table")
local set = {}
for _, item in ipairs(t) do
set[item] = true
end
return set
end
--[[
Recursive deep copy function.
Preserves identities of subtables.
]]
local function _deepCopy(orig, includeMetatable, already_seen)
-- Stores copies of tables indexed by the original table.
already_seen = already_seen or {}
local copy = already_seen[orig]
if copy ~= nil then
return copy
end
if type(orig) == 'table' then
copy = {}
for orig_key, orig_value in pairs(orig) do
copy[deepcopy(orig_key, includeMetatable, already_seen)] = deepcopy(orig_value, includeMetatable, already_seen)
end
already_seen[orig] = copy
if includeMetatable then
local mt = getmetatable(orig)
if mt ~= nil then
local mt_copy = deepcopy(mt, includeMetatable, already_seen)
setmetatable(copy, mt_copy)
already_seen[mt] = mt_copy
end
end
else -- number, string, boolean, etc
copy = orig
end
return copy
end
function p.deepCopy(orig, noMetatable, already_seen)
checkType("deepCopy", 3, already_seen, "table", true)
return _deepCopy(orig, not noMetatable, already_seen)
end
--[[
Concatenates all values in the table that are indexed by a number, in order.
sparseConcat{ a, nil, c, d } => "acd"
sparseConcat{ nil, b, c, d } => "bcd"
]]
function p.sparseConcat(t, sep, i, j)
local list = {}
local list_i = 0
for _, v in p.sparseIpairs(t) do
list_i = list_i + 1
list[list_i] = v
end
return table.concat(list, sep, i, j)
end
--[[
-- Finds the length of an array, or of a quasi-array with keys such
-- as "data1", "data2", etc., using an exponential search algorithm.
-- It is similar to the operator #, but may return
-- a different value when there are gaps in the array portion of the table.
-- Intended to be used on data loaded with mw.loadData. For other tables, use #.
-- Note: #frame.args in frame object always be set to 0, regardless of
-- the number of unnamed template parameters, so use this function for
-- frame.args.
--]]
function p.length(t, prefix)
-- requiring module inline so that [[Module:Exponential search]]
-- which is only needed by this one function
-- doesn't get millions of transclusions
local expSearch = require("Module:Exponential search")
checkType('length', 1, t, 'table')
checkType('length', 2, prefix, 'string', true)
return expSearch(function(i)
local key
if prefix then
key = prefix .. tostring(i)
else
key = i
end
return t[key] ~= nil
end) or 0
end
function p.inArray(arr, valueToFind)
checkType("inArray", 1, arr, "table")
-- if valueToFind is nil, error?
for _, v in ipairs(arr) do
if v == valueToFind then
return true
end
end
return false
end
return p
k8alxjj4kl038b9fpyfzl6qf0yqrdst
Module:Yesno
828
6325
183925
180037
2022-08-04T15:10:46Z
Xiplus
4323
已保护“[[Module:Yesno]]”:高風險模板:2479引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
Scribunto
text/plain
-- Function allowing for consistent treatment of boolean-like wikitext input.
-- It works similarly to the template {{yesno}}.
return function (val, default)
-- If your wiki uses non-ascii characters for any of "yes", "no", etc., you
-- should replace "val:lower()" with "mw.ustring.lower(val)" in the
-- following line.
val = type(val) == 'string' and val:lower() or val
if val == nil then
return nil
elseif val == true
or val == 'yes'
or val == 'y'
or val == 'true'
or val == 't'
or val == 'on'
or val == '是'
or val == '开'
or val == '開'
or tonumber(val) == 1
then
return true
elseif val == false
or val == 'no'
or val == 'n'
or val == 'false'
or val == 'f'
or val == 'off'
or val == '否'
or val == '关'
or val == '關'
or tonumber(val) == 0
then
return false
else
return default
end
end
5hqvgmakelaihcallcdiwwqvnkeqhqo
在中國駕駛
0
7971
183930
183848
2022-08-05T10:25:09Z
Taxi passenger
15345
增加在中国驾驶方法
wikitext
text/x-wiki
{{pagebanner|WV banner Driving in China.jpg}}
[[File:PeopleSquareTraffic.JPG|thumbnail|驾驶通过人民广场]]
'''在中国驾驶'''很难掌控大多数的访客,建议您聘请司机来驾驶您的车辆,相对而言比较廉價(便宜),而且您将可以拜访更多的旅游景点。
==驾照==
[[File:中国的驾考考场.jpg|缩略图|驾考考场]]
=== 在中国申请临时驾照(最长不超过三个月) ===
在中国,您可以按照当地法律取得驾照,以下是中国官方给出[http://www.gov.cn/hudong/2018-01/05/content_5253638.htm 答复(简体中文)]
申领临时机动车驾驶许可的,应当用中文填写[http://jtgl.beijing.gov.cn/jgj/93950/94025/325740429/2022033115385359080.xls 《临时机动车驾驶许可申请表》],提交下列证明、凭证:
# 入出境身份证件;
# 境外机动车驾驶证,属于非中文表述的,还应当出具中文翻译文本;
# 年龄、身体条件符合中国驾驶许可条件的证明文件;
# 两张一寸彩色照片(近期半身免冠正面白底);
# 参加有组织的旅游、比赛以及其他交往活动的,还应当提交中国相关主管部门出具的证明。
公安机关交通管理部门应当在收到申请材料之日起三日内进行审查,符合规定的,组织道路交通安全法律、法规学习,核发临时机动车驾驶许可。
临时机动车驾驶许可有效期截止日期应当与机动车驾驶人入出境身份证件上签注的准许入境期限的截止日期一致,但有效期'''最长不超过三个月。'''
=== 在中国申请长期驾照 ===
中国法律表明外国居民可以拥有驾驶执照,国际教育中心可以被转换为本地驾照,可能会有额外的检查, '''也有可能在中國的主要城市(像[[北京]])輕易地立即取得临时驾照'''。在北京首都国际机场下飞机,您无须透过任何测试就可以立即取得一张临时驾照,事实上取得一张正规的驾照有可能是相当地复杂。具体的复杂度因地方而异,并随着时间的推移而变化。
* 首先,从1300项多重选择题中随机抽出100项题目进行电脑理论考试,90分才能通过;若当日考试未通过,您可以免费补考一次。在主要城市中,这些测试含有多国语言的版本,在人烟稀少的地方,官方坚持您一定要使用中文版本去做驾照考试,有些不允许您携带翻译机,有些则没有。除了共同翻译以外,译者将决定你确切的答案,此外一小笔费用不超过100元。
* 一般而言,如果你有一个外国驾照,您可以免除实际道路驾驶考试。
* 比利时驾照、香港驾照持有者可取得一张中国驾照,有效期六年,无须透过任何测试。但您必须提供来自于官方的翻译,体检证书来自于中国医院以及两张照片。
为外国人采取最简单的方式,轻易拿到内地牌照采取下列措施:在香港,将您的外地驾驶执照转换成香港驾驶执照约120美元。然后,转到中国(广州可能是最容易的地方),將您的香港牌照转换成中国的驾驶执照就可以了。
全部由自己通过测试是可行的。文书工作(注册考试,测试,获取驾照)全在车管所完成。你将不得不去那里好几次,因此它是相当的耗时间。你会发现更好的办法是可在每第二个点在深圳要求小型驾驶学校做所有的文书工作。测试随处至少使用英语进行,和英语的试题准备都不难找到。
在大多数地方,家教是被允诺给予常识和合理的关照:这意味着在新手试车中,至少有一个人必须有一个有效的驾驶执照在汽车中陪者新手驾驶,但不一定该驱动程序。
至少在一些城市'''电动机车在法律上视为自行车'''。你需要注册脚踏车执照,因為脚踏车执照比机车执照价格便宜、操作简单,'''你不需要驾驶执照'''就能骑它。有些城市全面禁止使用电动自行车。若不是在主车道(内车道),通常就不会受到限制。
===自驾车之旅===
这里有各区域的自驾车旅游常与包括获得中国的驾照和囊括租车的行程的服务。
== 外籍车辆 ==
=== 在中国行驶 ===
在中国,您可以通过下列方式取得车辆临时牌照后在中国道路上行驶。
境外机动车临时入境行驶,应当向入境地或者始发地所在的直辖市或者设区的市公安机关交通管理部门申领临时入境机动车号牌和行驶证,用中文填写《临时入境机动车号牌、行驶证申请表》,交验机动车,并提交以下证明、凭证:
(一)境外主管部门核发的机动车登记证明,属于非中文表述的,还应当出具中文翻译文本;
(二)中国海关等部门出具的准许机动车入境的凭证;
(三)属于有组织的旅游、比赛以及其他交往活动的,还应当提交中国相关主管部门出具的证明;
(四)机动车安全技术检验合格证明,属于境外主管部门核发的,还应当出具中文翻译文本;
(五)不少于临时入境期限的中国机动车交通事故责任强制保险凭证。
=== 机动车临时入境行驶的情形 ===
境外机动车临时进入中华人民共和国境内行驶的,主要包括以下几种情形:
(一)经国家主管部门批准,临时入境参加有组织的旅游、比赛以及其他交往活动的;
(二)临时入境后仅在边境地区一定范围内行驶的。
与中国签订有双边或者多边过境运输协定的,按照协定办理。国家或者政府之间对机动车牌证和驾驶证有互相认可协议的,按照协议办理。
{{Infobox|至2022年中国与外国驾照互认的国家|阿联酋、比利时、法国、塞尔维亚}}
==法律==
《[[:s:中華人民共和國道路交通安全法|中華人民共和國道路交通安全法]]》是中華人民共和國第一部關於道路交通與安全的法律,於2003年10月28日由第十屆全國人民代表大會常務委員會第五次會議通過並由胡錦濤簽署中華人民共和國主席令公布,自2004年5月1日在中國內地施行。
{{cautionbox|
《中華人民共和國道路交通安全法》(以下簡稱《道路交通安全法》)否定了所謂「撞了白撞」。根據《道路交通安全法》,如果機動車與行人、非機動車發生交通事故,機動車一方應負責任。
《道路交通安全法》對無證駕駛、無牌駕駛、嚴重超速、飲酒醉酒駕駛等一些情節比較嚴重的違章行為進行了更嚴肅和嚴厲的懲罰。
根據新的《道路交通安全法》,如果機動車發生交通意外,且肇事者逃跑,將吊銷其駕駛執照,且終生不得領取新的駕駛證。}}
==速限==
下列叙述遵守速限:
* 30 km/h (每小时19英里) :城市單向道路。
* 40 km/h (每小时25英里) :中国国道的最低速限。
* 70 km/h (每小时43英里) 以上:主要城市道路(中央分道) 、有双黄线的道路。
* 80 km/h (每小时50英里) :中国国道。
* 100 km/h (每小时62英里):城市快速道路。
* 120 km/h (每小时75英里):高速公路。
宽容速度是一般约10 km/h(每小时6英里)。 有些高速公路可能宽容速度设置攀升至20 km/h (每小时12英里);然而,在任何国家,驾驶若超过宽容速度界由15 km/h(每小时9英里)和20 km/h(每小时12英里)会有比较高的风险。
测速区的标志:“雷达测速区”或“超速摄像”。
超过限速的处罚如下:
* 超出的速度超过 10 km/h(每小时6英里),低于50%的速度极限时,高达200元。 ''例子:''如果在 100 km/h(每小时62英里)的 80 km/h行驶(每小时50英里)的区域。
* 超过了限速的50%时,高达2000元,还可能會被吊銷駕照。 ''例子:''如果在190 km/h(每小时118英里)在120 km/h行驶(每小时75英里)的高速公路。
超速最为常见,城市和农村已经濒临危险的驾驶环境。一些实施可以在高速公路上的系统中找到。超速的共称“飙车”。
==路面情况==
<div style="float: right;"><gallery widths="50" width="275px" heights="50" perrow="3">
File:China road sign 警 3b.gif|注意弯路
File:China road sign 警 37.gif|注意安全
File:China road sign 警 1a.gif|十字交叉路口
File:China road sign 警 7a.gif|狹路(两侧狭窄)
File:China road sign 警 1j.gif|环形交叉路口
File:China road sign 警 9.gif|双向道
File:China road sign 警 14.gif|注意信号灯
File:China road sign 禁 2.gif|减速让行
File:China road sign 禁 1.svg|停车讓行
</gallery></div>
===普遍性===
道路和公路養護和維修費本身状况差异很大,从市到市与西部省份比东部沿海差。由于道路建设和维护资金大多由地方政府提供,则可能跨越省界的时候发现的急剧变化。中國東邊的经济具有高超的基础设施。
如果可能的话,开车靠近马路旁的排水井盖偶尔被盗。路旁有时出現是行人、自行车、三轮车、动物的混合、无盖的排水井以及农民使用道路的一部分曝晒谷物。
并在某些地方关闭主要道路可能需要從事越野驾驶的技术和设备,它是非法的。
===城市道路===
主要城市的道路經常發生交通拥堵。即使有五环路和九个动脉高速公路,北京依然通常被認為是交通擁堵狀況最糟糕的城市。[[上海]]排名相对较好。
中國的路面狀況远比在西方国家更为复杂。即使在黑暗中,自行车、摩托車、電動自行車等亦有可能蜂拥而上。農村地區還可能會遇到拖拉機、牛車等等。
===中国国道===
''([[:w:中华人民共和国国道|維基百科]]編號及發展狀況)''
[[File:G107-Heshengqiao-Zhen-9725.JPG|thumb|一座典型的里程碑 (距北京1306公里)於107國道]]
国道的收费情况视所在城市而定,通常一般国道不会收费,而省际公路可能会收取过路费。
G-層級 (國家級) 在中国国家道路驾驶通常而言是一种乐趣。 速限 80 km/h (每小时50英里),但由於它通常缺乏测速照相机,有些车辆可能會超速到100 km/h (每小时62英里)以上。
S-層級 (省級) 公路驾驶时可能沒有國道那麼平順。有时没有中央分道或道路分离,還有可能会受到单向行駛的限制。
X-層級 (縣級) 公路不一定是最坏的。它們有些是具有挑战性乡镇级公路,有些則可能是给来访的外国人所使用,所以路況較佳。
===高速公路===
高速公路對於在中國的外來駕駛者是一大福音。它們通常有着英语和中文双语交通标志、充足的应急设施、服务区、加油站、很多出口及較高的車速限制,行駛也通常較為顺畅。然而,当发生交通事故時可能會需要等待几个小时,甚至几天的時間才能夠移除殘骸並疏通交通。此外,这将导致司机争夺位置和干扰紧急路肩,进一步增加交通拥堵的等待时间和潜在更大的事故之发生机率。
虽然在英语,无论快速公路和高速公路都被称为“expressways”,在中文却擁有不同的命名與解释。快速公路通常是指城市和较大市区的快速链接道路,而高速公路則通常連接不同城市。
快速公路比高速公路的限速更低。在北京,一些高速公路有明确速度限制。京津唐高速公路(北京段)和京华高速公路(北京段)的最高速限為 90 km/h(每小时56英里)。
==障碍物==
[[image:ChinaTrafficBicycles.jpg|thumb|相對溫和的車流量,自行車於自行車專用道外行駛是很常見的。]]
只要是阻碍驾驶视线的物品,'''易造成交通事故''',称之为“障碍物”。尤其是大型的障碍物,'''往往是最致命的'''。
根据[http://www.car-accidents.com/country-car-accidents/china-car-accidents-crash.html 中国统计], 每年大约有十万起交通事故因障碍物阻碍视线,驾驶应注意而不注意所引起,远远超越美国交通事故的统计。根据[http://www.who.int/world-health-day/previous/2004/en/ 世界卫生组织(WHO)统计] “在中国,交通事故而导致死亡为主要原因有15至45人”而每年中国交通死亡人数已接近25万人。
[[File:Hubei-S334-tunnel-4870.jpg|thumb|在農村地區,距離較長的隧道也許沒有照明設施。]]
对于一位新手驾驶而言,中国的交通似乎没有规则,或者如果有规矩,看来他们依然没有遵循,也没有强制执行。当然,在现实中也有规则;他们通常设法避免撞上对方。然而,从大多数游客都采用對於中国的规则是非常不同意的。西方的眼睛,令人吃惊的不良驾驶竟是常态,而后面疯狂操控方向盤或自杀的行为是相当普遍的。
'''不要以为中国司机会按照你知道的任何规则'''。规则对他们而言只是看看就好,他们只关心自己的车辆。但是如果你的车辆出现交通事故装有行车记录仪的前提下,警察会根据这些记录下来的视频然后按照当地法律划分责任。你也可以在中国司机违反交通规则时,记下时间和地点,并附上当时的视频证据提交给当地的交通警察部门,交通警察部门会处罚这些司机。
外地司机必须努力适应这个(或者更理智,放弃并采取出租车或租用带司机)。你不必去学开车像中国,但至少你应该不会感到惊讶,当他们这样做绝对不会有一点生气,如果有人否定你关闭或对红灯或道路的错误一边的驱动器,您只需要讲一下,仿佛什么也没有发生。
每车/驱动器有一个“身体语言”,它预测他们下一步会做什么。重要的是通过它来学习这个“身体语言”和驱动器。如果你是拉低了四车道的道路,并在出租车前面的车道你的权利,并略有提前,你被封锁,车道前方是免费的,你应该立即承担出租车会向左移动到你的车道无任何警告。这种超前思维或防御性驾驶,可以帮你避免很多问题,但你依然无法预知一切可能发生。
另一种方式来看待它是只有两个规则,你必须服从,都同样重要。不要打任何东西,不要被什么击中。
尽管上述所有,驾驶条件都不如乱作为说,[[越南]]和[[印尼]]。很多老外在推动中国和适应后,感觉有些合理的舒适和自信了。
===正确形式===
即用路权的概念比照其他许多国家在中国是完全不同的。 事实上任何车辆已进入该间隙的权利。这实质上允许任何驱动切进右出交通流迫使对立车辆停止或崩溃的习惯。此规则适用于变更车道也可以来随时从任何角度。警惕制动在任何时刻!如果你不强迫你的方式,你永远不会被允许进入交通繁忙的路段。
一般的规则似乎是'''继续前进,不管是什么'''。无论转弯进入对面车道,开车的肩膀,或在操刀的自行车道,不然就是以错误的方式下了分道公路都很好,只要他们让你朝着正确的大方向,不导致立即发生事故。甚至相当普遍的看汽车、卡车和摩托车,在人行道上与行人和自行车都去自己单独的方式!出租车是最严重的罪犯。
'''融会贯通''': 无论车辆经过何处路口、街道、小巷口和停车场,驾驶必须衡量下一步的动作是否遵守交通规则再行转弯、通过或停下。
'''转换车道''': 先打方向灯再观察左后方、右后方、正后方车辆的动态再行转换车道。
'''转弯''': 受地形、交通情况及行驶阻力的影响,车辆转弯时往往要求减速。这时驾驶员必须根据动力和转弯时车速的需要,综合路况选择适当的挡位安全地通过弯道。
至于一般左转;车辆渴望跨越迎面而来的车辆左转不会屈服迎面而来,设立交通标志,等待一个“安全”的开幕。任何开放路口可以被利用,开放所需的最小尺寸显然取决于自我保护的左转驾驶感(大型车辆和质量较差的车辆将事先采取更多左转的机会)。迎面而来的车辆速度慢,驾驶员可能從不明智转向谨慎,一般大马路的交通标志往往会提示驾驶员转向。迎面而来的司机似乎没有停顿,同时准备重刹车或变线,以适应本特纳。
'''汽车行人相互作用'''是复杂的;无处不在的行人、自行车,往往表演特技疏忽甚至忘记周围交通的动向,通常被认为是在它们与车辆之间是否有任何碰撞。如果一个较大的车辆撞击行人或骑车人,较大的车辆一般会假设负责。考虑到这一点,车辆使用他们的速度和安全优势,而且往往是按喇叭,操纵甚至通过密集而占用通道。意识到行人通常会想到计算车辆将通过时间的步数,并且如果车辆停止,以允许他们通过,经常被混淆。涂跨阶层(画在道路的方式白条)通常不观察“行人保护”的地方,但酸溜溜的司机罢工谁一行人在那里。永远不要假设一个司机会实际上是在一个显着的交叉阻止你。假设你会提出他们的方式,司机居然在他们面前掉在人行道或路边推什么。
====正确驾驶姿势调整====
*调整离合器,煞车,油门与腿部及座椅之间适当的距离
*调整座椅适当的角度和高度
*手臂与方向盘之间距离适度调整
*头枕与头部之间的适度调整
=== 闯红灯 ===
中国车手经常去闯红灯,不去在意交通的流量。就连行人的流量也未被记入流量,只是按个喇叭叫行人赶快通过马路而已。既使设有红绿灯,许多驾驶也义无反顾的闯红灯。
许多驾驶会利用深夜时间(晚上10点到隔天凌晨4点)在京密公路或朝阳北路(北京)进行竞速、比赛之用途。有时恶名昭彰的司机除了闯红灯,还超载乘客,这一切的一切都是违反纪律及法律,经济原因也因此受到影响。
====明文規定====
2012年10月8日,公安部发布新修订的《机动车驾驶证申领和使用规定》规定,2013年起司机闯红灯一律扣6分,不按规定避让校车记6分,挡号牌扣12分。醉驾大中型客货车将终身禁驾,对3年以下驾龄的驾驶人发生交通死亡事故的,倒查考试发证民警的责任。驾龄1年以下的实习期驾驶人将被重点管理,驾车上高速必须由持相应或更高车型驾驶证3年以上的驾驶人陪同。新规将于明年1月1日起施行。
=== 双向交通随处可见 ===
自行车,摩托车和汽车,有时忽略了单向的迹象。上分公路,看到行人,自行车和摩托车走错路了下来肩膀是完全正常的,和一些去中心护栏旁边的错误的方式。在交通圈(环岛),司机讨厌绕来绕去的,如果他们能避免中间的小岛;他们往往只是挥杆代替。车道标记也经常忽略;例如,出租车通常是通过标记为只左转弯车道直行通过路口,因为这让他们过去等车。
在较新的道路可能是,例如,一个实际的交集的大约三角交通岛西南部。双方的道路;第三个是弯曲的车道供司机右转东行的形式南行。在中国,司机左转从北到南行经常使用的车道。
中国的许多城市都有自行车专用道的道路两侧围起来。这些车道将进行交通流的方向双向通行,无论:包括自行车和摩托车加上偶尔的汽车,卡车和行人。汽车通常采取这些车道,如果在主车道交通堵塞;然后,他们按喇叭骑自行车的人,迫使他们出了使用他们的喇叭为“音速犁”清除在他们面前的道路的一种形式的方式。该驱动程序运行,你会移动的假设下,如果你不及时提出你冒着被打倒了,如果步行或骑自行车,将最有可能被指责。
就连人行道经常携带双向自行车和摩托车的交通,再加上奇车前往或从一个停车位。汽车再次,他们所拥有的人行道和你来摆脱他们的方式的假设下进行操作。同样,即使是在边路,车辆按喇叭行人,让他们走出''他们''的方式。
===开灯===
[[File:G106-Dajipu-to-Daye-hills-0071.jpg|thumb|路边壁板提醒居民,切勿在公共道路边缘从事曝晒农作物。]]
货车或卡车司机或许不理会到在晚上要开车灯,您必须打开最亮的车灯— 事实上,如果没有车接近您的车时,全开是最合理的。如果大白天开者车灯,日间行车灯除外,官方警察会找上门来询问你的情况—这与[[欧洲]]些许国家的交通规则截然不同!
少數中國駕駛知道調車燈亮度的位置。尤其在高速公路夜间行车,是很不舒畅又危险,其实这是可以避免的。
当夜间行车时,会看不到行人时常穿着暗色衣物、行走在马路中间,又刚好面临来车,这其中之一的原因可能是当地的司机不常常清理车灯所导致。在国内,甚至有人睡在马路上。
自行车很少有灯光,甚至很多没有反光板,摩托车在夜间行驶时没有开灯,有时还骑到错误的一边。
在高速公路隧道,通常会有驾驶开车灯;然而隧道很短,还是比较少去开车灯!因此行驶之前先确保你的车辆的灯都在良好的工作秩序。
===其他怪癖===
[[image:ChinaTrafficTaxiSign.jpg|thumb|由于混乱的交通标志导致出租车呼啸而过。]]
尽管是非法的,在中国显而易见。其中之一是在快车道上经常出现缓慢的车辆,如果你发现自己身后的车辆,传递正确的讯息,随时注意四边周围的情况再行通过,转弯和停下。
公共巴士和許多私營公交車,部分挪為私用,而不是承載需要的乘客;有些駕駛或行人無視鄉村的紅綠燈,強行通過,即使遇到來車,也依照自己的觀念進行緩慢或快速通過。其他怪癖,擢發難數,怪不得車禍屢見不鮮。
===新手驾驶===
間接而言就是實習駕駛,了解交通的安全性及重要性,更深入地理解到面臨突發狀況時,應如何以冷靜的心態解決問題,漸漸熟練相關交通訓練之操作。
==机车==
中国的气候一般是有利于骑摩托车,你可以看到自行车在中国各地的许多城市。然而,'''交通肯定是不容易应付'''。中国的官僚体制是没有更好的。它可以是相当困难的外国人拿到驾驶执照,保险和许可证在中国旅行对他们个人的摩托车。尽管如此,不少外国居民有自行车和一些游客可能会想尝试一下。记住的机动两轮车是合法的,它需要在法律上与车牌登记;你必须有保险和中国的摩托车驾照。
有一些限制:摩托车被禁止在大部分高速公路和一些城市市区的核心(又称市中心),努力控制交通不再拥堵。例如:摩托车由市中心禁止的有[[广州]]、[[东莞]]、[[深圳]]、[[厦门]]、[[珠海]]和[[杭州]] ,并且在限制北京和[[上海]]。骑摩托车到这些禁止地区可能导致罚款和甚至没收。还可以有驾照的影响;例如,在一些城市(如北京)只有都市圈内必须向该政府登记的才可以合法骑摩托车。
总而言之考虑危险驾驶在中国怎么能够通过选择骑摩托车只有在冒险,而不是一件轻松的事情。
=== 三轮摩托车 ===
[[File:Cj750 motorcycle.jpg|thumb|长江 750 (750毫升平双侧阀三轮摩托车)]]
或许在中国最有趣的自行车是在[http://www.chang-jiang.com/motocycle.html 长江]。早在20世纪30年代,[[:w:BMW|宝马]]设计了一个750毫升平双侧阀三轮摩托车出现于[[德国]]军队。它们都建造于[[俄罗斯]],因[[:w:凡尔赛条约|凡尔赛条约]]禁止德国人建造军事装备,包括摩托车,当时的希特勒和斯大林都在良好的条件下制造。在战争结束后,俄罗斯采取了全厂在德国战争赔款,感动了整个乌拉尔和继续生产自行车的设计。俄罗斯品牌被称为第聂伯河和伏尔加河。他们也给了中国出售设备和长江是最美好的成果。
侧阀机仍在生产,但也有现代化的版本开销阀和电起动。这些都不是你的高性能运动自行车;即使是新的OHV模式只有32马力。然而,他们被设计用于军事用途,并会以''非常'坚固。价格为¥20多万。他们都不约而同地出售,缠身的三轮;它可能无法进行许可他们没有它。
有很多老常江的身边,如果你买一个足够老了,这是''可能''被归类为古董车。这''可能''的意思是免除贵国的进口限制;最安全和污染的法律有某种豁免古董。这是有风险的:''有些人在海关已经失去了自行车''。你甚至认为它之前需要一个''彻底''贵国的法规的认识。
一个真正的狂热可能会考虑骑长江从中国到欧洲航线使用在欧洲南亚土地和丝路行程。你可以在俄罗斯从人们熟悉的第聂伯河和伏尔加河得到自行车上的服务;某些部分甚至可以互换。
===摩托车旅行===
有各个区域基于摩托车旅游,往往在长江租赁包括:
* [http://www.genghiskhanrun.com 成吉思汗骑摩托车] 史诗经典高级骑車,12天从内蒙古到长城。玩具大男孩、只要有足够恰到好处的奢华装饰品、[[古巴]]雪茄、谷饲牛排等。
* [http://www.hctravel.com/chinamongolia.htm HC 旅游] ,总部设在[[英国]],提供从长江旅行到[[长城]]、[[西藏]]和[[蒙古]]。
* [http://www.dragonbiketour.com/ 神龙单车旅行] 基于中国,提供丝路旅游。
* [http://www.asiabiketours.com/MotorcycleTours.html 亞州單車旅行] ,总部设在[[印度]],并使用恩菲尔德式,进入西藏旅游。
[[银川|银川市]]在六月底举行一年一度的 [http://www.horizonsunlimited.com/country/china/mcfestival2002.shtml 摩托车旅游节]。
===电动机车===
中國大陸[[:w:電動機車|電動機車]]與電動腳踏車的研究開始於西元1940年代,但直到西元1983年才有系統之發展,1987年更成立中國電動車輛研究會,以整合大陸地區之電動機車與電動腳踏車之發展。
中國大陸推廣電動車措施,由全國成立國家電動車協調指導小組,由國務院15個部委組成,實行統一規劃,明確分工,協調行動。將電動機車的示範地點擺在上海市,同時在上海市成立上海市電動車產業發展中心,由「市經委總工程師」擔任主任,下設專門辦事機構全面負責電動車的發展與規劃及指導協調和管理實施。
中國大陸以上海市優先發展電動機車,同時逐漸淘汰燃油助動機車。上海市為大力推展電動機車計畫西元2000年時將目前47萬輛燃油助動車減少為10萬輛,減少部分由電力助動車或電動機車替代。
{{usabletopic}}
{{partoftopic|中国话题}}
{{PartOfTopic|驾驶}}
1ybe6e2jk58l5b49tt47wf3c7r5zi6y
Module:Stbox
828
8278
183919
103221
2022-08-04T15:09:45Z
Xiplus
4323
已保护“[[Module:Stbox]]”:高風險模板:4776引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
Scribunto
text/plain
local p = {}
local name = {
district='区',
city='城市',
airport='机场',
park='公园',
diveguide='潜水点',
region='地区',
country='国家',
continent='洲',
itinerary='旅行路线',
topic='话题',
phrasebook='会话手册',
usable='可用',
outline='大纲',
guide='指南',
star='明星',
}
local usabletext = {
district='有抵达信息以及一些完整的餐馆和旅馆列表项',
city='有抵达信息以及一些完整的餐馆和旅馆列表项',
airport='有关于[[Wikivoyage:机场条目模板#航班|航班]]和[[Wikivoyage:机场条目模板#地面交通|地面交通]]的信息以及一些完整的机场内餐饮选择列表项',
park='有关于这个公园的抵达、少许景点和园内住宿信息',
diveguide='有关于地点和设备的信息以及一些完整的景观列表项',
region='提供了关于此地区在视觉、抵达等多方面的信息以及指向与之相关的主要目的地的链接',
country='拥有一些关于抵达此国家和连接到其他目的地的链接',
continent='拥有一些关于此大洲和到其他目的地的链接',
itinerary='讲解说明了如何抵达那里并提及了路上需要注意的要点',
topic='提及了关于此话题的大主题',
phrasebook='讲解了旅游最基本交流用语的发音'
}
local guidetext = {
district='包括旅馆、餐馆、景点、抵达和下一站信息在内的',
city='包括旅馆、餐馆、景点、抵达和下一站信息在内的',
airport='包括航班、地面交通、餐馆、抵达和下一站信息在内的',
park='包括景点、活动、住宿、宿营地、餐馆和抵达/下一站信息在内的',
diveguide='包括地点、条件与设备和关于海洋生物及其他景观的信息在内的',
region='遍及整个地区及地区内所有目的地的',
country='包括游览地点链接、景点、抵达和下一站信息在内的关于这个国家的',
continent='包括住宿、饮食、观光、抵达和下一站信息在内的',
itinerary='覆盖整条路线的',
topic='覆盖整个话题的',
phrasebook='覆盖了所有主要的旅途话题的'
}
local startext = {
itinerary='拥有覆盖整个旅行路线的优质的信息和可视化的内容',
topic='有覆盖整个话题的优质文字信息和可视化信息',
phrasebook='几乎覆盖了所有可能遇到的旅行交流的话题,由优质的文本、可视化信息组成'
}
function p.main(frame)
args = frame:getParent().args
entity = mw.wikibase.getEntityObject()
title = mw.title.getCurrentTitle()
wdstatus='outline'
type=args.type or 'country'
if entity then
if entity.sitelinks.zhwikivoyage.badges[1]=='Q17559452' then
wdstatus='usable'
elseif entity.sitelinks.zhwikivoyage.badges[1]=='Q17437798' then
wdstatus='guide'
elseif entity.sitelinks.zhwikivoyage.badges[1]=='Q17437796' then
wdstatus='star'
end
end
status=args.status or wdstatus
text='<div class="noprint">'
text=text..'<table id="'..status..'_'..type..'" class="articleState" '
if status=='star' then
text=text..'style="border-style:double;border-width:6px;"'
elseif status=='usable' then
text=text..'style="border-style:dashed;border-width:2px;"'
elseif status=='outline' then
text=text..'style="border-style:dotted;border-width:2px;"'
end
text=text..'>\n'
if status=='star' then
text=text..'<td>[[Image:Cscr-featured.svg|30px]]</td>'
end
text=text..'\n<td>本[['
if type=='park' then
text=text..'Wikivoyage:地理分层#其他类型'
elseif type=='diveguide' then
text=text..'Wikivoyage:什么是潜水指南'
elseif type=='itinerary' then
text=text..'Wikivoyage:旅行路线'
elseif type=='topic' then
text=text..'旅行话题'
elseif type=='phrasebook' then
text=text..'会话手册'
else
text=text..'Wikivoyage:地理分层#'..name[type]
end
text=text..'|'..name[type]..'条目]]是[[Wikivoyage:'..name[status]..'条目|'..name[status]..']]条目'
if status=='outline' then
text=text..',需要更多内容。它有[[Wikivoyage:条目模板|条目模板]],但是目前没有充足的[[Wikivoyage:信息可以放在哪里|信息]]。'
if type=='country' then
text=text.."如果该国家列出了[[Wikivoyage:城市条目状态|城市]]和'''其他目的地''',那么它们可能并未全都达到'''可用'''状态;或者该国家没有[[Wikivoyage:国家条目状态|有效的地区结构]]和叙述所有抵达这里的典型方式的“抵达”段落。"
end
text=text..'请[[Wikivoyage:勇往直前|勇往直前]],[[Wikivoyage:如何编辑页面|帮助它充实]]!'
elseif status=='usable' then
text=text..'。它'..usabletext[type]..'。爱冒险的人可以直接使用此条目,但还是请[[Wikivoyage:勇往直前|勇往直前]],[[Wikivoyage:如何编辑页面|帮助它充实]]!'
elseif status=='guide' then
text=text..'。它有'..guidetext[type].."完整优质的信息。[[Wikivoyage:勇往直前|勇往直前]],帮助我们把它打造为'''[[Wikivoyage:明星条目|明星]]'''!"
elseif status=='star' then
text=text..'。它'..(startext[type] or '是由地图、照片和充足的信息组成的高品质条目')..'。如果你知道有什么新变化,请[[Wikivoyage:勇往直前|勇往直前]],[[Wikivoyage:如何编辑页面|帮助它充实]]!'
end
text=text..'</td></table></div>'
if title.namespace == 0 then
text=text..'[[Category:'..name[status]..name[type]..']][[Category:'..name[status]..'条目]][[Category:'..name[type]
if type=='phrasebook' or type=='itinerary' then
text=text..']]'
else
text=text..'条目]]'
end
if type=='region' then
subcats=mw.site.stats.pagesInCategory( title.text, 'subcats' )
pages=mw.site.stats.pagesInCategory( title.text, 'pages' )
if subcats+pages==0 then
text=text..'[[Category:空地区]]'
end
if not mw.title.new( title.text, 14 ).exists then
text=text..'[[Category:无分类地区]]'
end
if subcats==0 then
text=text..'[[Category:底层地区]]'
end
if pages>25 then
text=text..'[[Category:多于25个条目的地区]]'
end
if pages>40 then
text=text..'[[Category:多于40个条目的地区]]'
end
if subcats>9 then
text=text..'[[Category:多于9个下级地区的地区]]'
end
elseif type~='topic' and type~='continent' and type~='country' and mw.title.new( title.text, 14 ).exists then
text=text..'[[Category:有分类的'..name[type]..']]'
end
if wdstatus~=status then
text=text..'[[Category:需要更新维基数据徽章的页面|'
if wdstatus=='outline' then
text=text..string.upper(string.sub(status,1,1))
elseif status=='outline' then
text=text..'-'
else
text=text..string.sub(status,1,1)
end
text=text..']]'
end
end
return text
end
return p
acpkzpcjwirtry5gm4g6k2pvocsk052
Template:Stbox
10
8279
183874
58685
2022-08-04T14:41:55Z
Xiplus
4323
已保护“[[Template:Stbox]]”:高風險模板:4774引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
wikitext
text/x-wiki
{{#invoke:Stbox|main}}<noinclude>{{doc}}</noinclude>
mp56v9wwbght44itsm1l1jbxbkkxoot
Template:醫院
10
8999
183882
104739
2022-08-04T14:43:16Z
Xiplus
4323
已保护“[[Template:醫院]]”:高風險模板:960引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
wikitext
text/x-wiki
醫院 [[File:Aiga firstaid.svg|25px|link=]]<noinclude>[[Category:AIGA模板]]</noinclude>
ie9x8zyofjbq26r89w3xbjisrfdufyu
高雄/橋頭
0
9975
183854
183642
2022-08-04T14:17:00Z
S8321414
141
wikitext
text/x-wiki
{{pagebanner|頁名=橋頭}}
{{districtbar
| city= 高雄
| district= 橋頭
| districtlocal= [[臺語會話手冊|臺語]]:{{lang|nan|Kiô-thâu}}
| location= Gangshan_District.PNG
| website= https://ctc.kcg.gov.tw/
| image= 橋頭老街jpg.jpg
| caption = 橋頭老街
}}
'''{{<includeonly>safesubst:</includeonly>BASICPAGENAME}}'''([[臺語]]:{{lang|nan|Kiô-thâu}})是[[高雄]]的一個分區。
==抵達==
{{Mapframe|22.751139|120.300498|zoom=13|height=400|width=400|layer=M}}
{{Mapshape|wikidata=Q708216}}
==={{汽車}}===
* 行駛「[[File:TWHW1.svg|23px]]國道1號」由「岡山交流道」下,再向西行駛「[[File:TW CHW186.svg|23px]]186市道」,至與「[[File:TW PHW1.svg|23px]]省道1號」的交叉路口轉向南行駛省道1號,通過岡山樂購廣場後,即達橋頭區。
==={{鐵路}}===
* 搭乘臺鐵列車於橋頭車站下車,即達橋頭區。
==={{高雄捷運}}===
* 搭乘高雄捷運於橋頭火車站、橋頭糖廠站、青埔站下車,即達橋頭區。
==觀光==
* {{see
| name=橋頭糖廠 | alt=橋仔頭糖廠、高雄糖廠 | url=https://www.taisugar.com.tw/chinese/Attractions_detail.aspx?n=10048&s=2&p=0 | email=
| address=高雄市橋頭區糖廠路24號 | lat=22.7578 | long=120.314 | directions=
| phone=+886-7-611-9299#5 | tollfree= | fax=
| hours=09:00-16:30 | price=
| wikipedia=橋頭糖廠 | image=橋仔頭糖廠 Taiwan Sugar Museum - panoramio.jpg | wikidata=Q11121917
| lastedit=2022-07-17
| content=臺灣第一座現代化機械式製糖工廠,被列為市定(原高雄縣)文化景觀,搭乘高雄捷運紅線至橋頭糖廠站下車即可抵達。
}}
==活動==
==購物==
==飲食==
==夜生活==
==住宿==
==通訊==
在橋頭區,手機的使用非常普遍,也有機會找到公共電話;通常政府或公共機關之區域,都有提供免費[http://itaiwan.gov.tw/hotspotQueryList.php iTaiwan Wi-Fi]上網,其網路涵蓋範圍是相當足夠的。
如果您留在橋頭區有好幾天以上,且如果您還沒有一個匹配的本地標準(可能要使用一個),需要建議您買一個預付費的SIM卡(您可能被要求一本護照)和手機進行撥打本地電話,這將是比在大多數情況下,漫遊便宜得多。 SIM卡有餘額將花費您不到10美元。每個網點遍布整個地區。您可以在數家大超市、手機通訊行和便利商店支付您的通話費。對於國際長途電話,可考慮購買長途電話卡使得有非常便宜的電話費。從飯店客房打電話,可能會致使支付相當令人頭痛的費用。
免費WiFi是在大多數飯店、商業和購物中心可使用。在餐館和酒吧,Wifi真是無處不在,這歸功於熱愛使用通訊產品的臺灣人。
旅途中若有任何問題,可參考下列兩項臺灣官方提供外籍人士使用的服務:
*外國人在臺生活諮詢服務網(提供中文、英文、日文、越南語、印尼語、泰語和柬埔寨語服務)
:網址: http://iff.immigration.gov.tw/
*外國人在臺生活服務熱線(免付費,24小時全年無休,中英日三語諮詢)
:電話: 0800-024-111
{{outlinedistrict}}
{{IsPartOf|高雄}}
<includeonly>{{geo||}}</includeonly>
8hk0dc31buk1ducldn8ecq4j4amk3ar
183855
183854
2022-08-04T14:18:05Z
S8321414
141
/* 觀光 */ 更新列表項:橋頭糖廠
wikitext
text/x-wiki
{{pagebanner|頁名=橋頭}}
{{districtbar
| city= 高雄
| district= 橋頭
| districtlocal= [[臺語會話手冊|臺語]]:{{lang|nan|Kiô-thâu}}
| location= Gangshan_District.PNG
| website= https://ctc.kcg.gov.tw/
| image= 橋頭老街jpg.jpg
| caption = 橋頭老街
}}
'''{{<includeonly>safesubst:</includeonly>BASICPAGENAME}}'''([[臺語]]:{{lang|nan|Kiô-thâu}})是[[高雄]]的一個分區。
==抵達==
{{Mapframe|22.751139|120.300498|zoom=13|height=400|width=400|layer=M}}
{{Mapshape|wikidata=Q708216}}
==={{汽車}}===
* 行駛「[[File:TWHW1.svg|23px]]國道1號」由「岡山交流道」下,再向西行駛「[[File:TW CHW186.svg|23px]]186市道」,至與「[[File:TW PHW1.svg|23px]]省道1號」的交叉路口轉向南行駛省道1號,通過岡山樂購廣場後,即達橋頭區。
==={{鐵路}}===
* 搭乘臺鐵列車於橋頭車站下車,即達橋頭區。
==={{高雄捷運}}===
* 搭乘高雄捷運於橋頭火車站、橋頭糖廠站、青埔站下車,即達橋頭區。
==觀光==
* {{see
| name=橋頭糖廠 | alt=橋仔頭糖廠、高雄糖廠 | url=https://www.taisugar.com.tw/chinese/Attractions_detail.aspx?n=10048&s=2&p=0 | email=
| address=高雄市橋頭區糖廠路24號 | lat=22.7578 | long=120.314 | directions=
| phone=+886-7-611-9299-5 | tollfree= | fax=
| hours=09:00-16:30 | price=
| wikipedia=橋頭糖廠 | image=橋仔頭糖廠 Taiwan Sugar Museum - panoramio.jpg | wikidata=Q11121917
| lastedit=2022-07-17
| content=臺灣第一座現代化機械式製糖工廠,被列為市定(原高雄縣)文化景觀,搭乘高雄捷運紅線至橋頭糖廠站下車即可抵達。
}}
==活動==
==購物==
==飲食==
==夜生活==
==住宿==
==通訊==
在橋頭區,手機的使用非常普遍,也有機會找到公共電話;通常政府或公共機關之區域,都有提供免費[http://itaiwan.gov.tw/hotspotQueryList.php iTaiwan Wi-Fi]上網,其網路涵蓋範圍是相當足夠的。
如果您留在橋頭區有好幾天以上,且如果您還沒有一個匹配的本地標準(可能要使用一個),需要建議您買一個預付費的SIM卡(您可能被要求一本護照)和手機進行撥打本地電話,這將是比在大多數情況下,漫遊便宜得多。 SIM卡有餘額將花費您不到10美元。每個網點遍布整個地區。您可以在數家大超市、手機通訊行和便利商店支付您的通話費。對於國際長途電話,可考慮購買長途電話卡使得有非常便宜的電話費。從飯店客房打電話,可能會致使支付相當令人頭痛的費用。
免費WiFi是在大多數飯店、商業和購物中心可使用。在餐館和酒吧,Wifi真是無處不在,這歸功於熱愛使用通訊產品的臺灣人。
旅途中若有任何問題,可參考下列兩項臺灣官方提供外籍人士使用的服務:
*外國人在臺生活諮詢服務網(提供中文、英文、日文、越南語、印尼語、泰語和柬埔寨語服務)
:網址: http://iff.immigration.gov.tw/
*外國人在臺生活服務熱線(免付費,24小時全年無休,中英日三語諮詢)
:電話: 0800-024-111
{{outlinedistrict}}
{{IsPartOf|高雄}}
<includeonly>{{geo||}}</includeonly>
h3de0402l2idph7mnzcokkjhi0di8xv
Template:Mapshape
10
12938
183864
101651
2022-08-04T14:40:25Z
Xiplus
4323
已保护“[[Template:Mapshape]]”:高風險模板:1134引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
wikitext
text/x-wiki
<includeonly>{{Mapshape/Inner
| wikidata={{{wikidata|{{#invoke:Wikidata|pageId}}}}}
| wikicommons={{{wikicommons|}}}
| type={{{type|geomask}}}
| group={{{group|mask}}}
| fill={{{fill|#555555}}}
| opacity={{{opacity|0.5}}}
| stroke={{{stroke|#000000}}}
| stroke-width={{{stroke-width|1}}}
| stroke-opacity={{{stroke-opacity|1}}}
| title={{{title|}}}
}}</includeonly><noinclude>{{documentation}}</noinclude>
bikz150g8bgri4uxnbhkprb2tuxg6i0
Template:Mapshape/Inner
10
12939
183865
113151
2022-08-04T14:40:35Z
Xiplus
4323
已保护“[[Template:Mapshape/Inner]]”:高風險模板:1134引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
wikitext
text/x-wiki
<includeonly>{{#tag:maplink
|
{
"type": "ExternalData",
"service": "{{{type}}}",
"ids": "{{{wikidata}}}",
"title": "{{{wikicommons|}}}",
"properties": {
"fill": "{{{fill}}}",
"fill-opacity": {{{opacity}}},
"stroke": "{{{stroke}}}",
"stroke-width": {{{stroke-width}}},
"stroke-opacity": {{{stroke-opacity}}},
"title": "{{{title|}}}"
}
}
| text=""
| group={{{group}}}
| class=no-icon
}}</includeonly><noinclude>[[Category:动态地图模板]]</noinclude>
l5ekh14i7x314a9nar33wrv3oiwgs0l
Module:EmailTracking
828
14415
183896
101827
2022-08-04T14:45:36Z
Xiplus
4323
已保护“[[Module:EmailTracking]]”:高風險模板:2360引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
Scribunto
text/plain
local i = {}
function i.EmailTracking(frame)
local output = '';
local email = frame.args["email"] or '';
if mw.ustring.match(email,'@.*@') ~= nil then
output = '[[' .. 'Category:列表項有多個電子郵件地址]]<span class="phoneinfo" style="display:none;">MULTIPLE-EMAIL</span>';
end
if mw.title.getCurrentTitle().namespace ~= 0 then
output = '';
end
return output;
end
return i;
mankior7vqr4ppe0ex1600oiz4ugsk0
Template:Maplink
10
14449
183863
101749
2022-08-04T14:40:15Z
Xiplus
4323
已保护“[[Template:Maplink]]”:高風險模板:1842引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
wikitext
text/x-wiki
<includeonly>{{#invoke: map
| tag
| type = maplink
| zoom = {{{zoom|auto}}}
| show = {{{show | {{Maplayers}} }}}
| latitude = {{{1|}}}
| longitude = {{{2|}}}
| text = {{{name|}}}
| class = {{{class|}}}
}}</includeonly><noinclude>{{Documentation}}</noinclude>
ii3fwixf4wu3dq8v4rt3zr1b01l5qah
Module:Map
828
14450
183911
167248
2022-08-04T15:08:25Z
Xiplus
4323
已保护“[[Module:Map]]”:高風險模板:3145引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
Scribunto
text/plain
local getArgs = require('Module:Arguments').getArgs
local p = {}
function dbg(v, msg)
mw.log((msg or '') .. mw.text.jsonEncode(v))
end
local function has_value (tab, val)
for index, value in ipairs(tab) do
if value == val then
return true
end
end
return false
end
-- Parse all unnamed string parameters in a form of "latitude, longitude" into the real number pairs
function getSequence(args)
local coords = {}
for ind, val in pairs( args ) do
if type(ind) == "number" then
local valid = false
local val2 = mw.text.split( val, ',', true )
-- allow for elevation
if #val2 >= 2 and #val2 <= 3 then
local lat = tonumber(val2[1])
local lon = tonumber(val2[2])
if lat ~= nil and lon ~= nil then
table.insert(coords, { lon, lat } )
valid = true
end
end
if not valid then error('Unnamed parameter #' .. ind .. ' "' .. val .. '" is not recognized as a valid "latitude,longitude" value') end
end
end
return coords
end
-- See http://geojson.org/geojson-spec.html
-- Convert a comma and semicolon separated numbers into geojson coordinate arrays
-- Each geotype expects a certain array depth:
-- Point - [ lon, lat ] All other types use point as the basic type
-- MultiPoint - array of points: [ point, ... ]
-- LineString - array of 2 or more points: [ point, point, ... ]
-- MultiLineString - array of LineStrings: [ [ point, point, ... ], ... ]
-- Polygon - [ [ point, point, point, point, ... ], ... ]
-- each LinearRing is an array of 4 or more points, where first and last must be the same
-- first LinearRing is the exterior ring, subsequent rings are holes in it
-- MultiPolygon - array of Polygons: [ [ [ point, point, point, point, ... ], ... ], ... ]
--
-- For example, for the LineString, data "p1;p2;p3" would be converted to [p1,p2,p3] (each "p" is a [lon,lat] value)
-- LineString has the depth of "1" -- array of points (each point being a two value array)
-- For Polygon, the same sequence "p1;p2;p3" would be converted to [[p1,p2,p3]]
-- Which is an array of array of points. But sometimes we need to specify two subarrays of points:
-- [[p1,p2],[p3]] (last point is in a separate array), and we do it with "p1;p2;;p3"
-- Similarly, for MultiPolygon, "p1;p2;;;p3" would generate [[[p1,p2]],[[p3]]]
--
function p.parseGeoSequence(args)
local result = p._parseGeoSequence(args)
if type(result) == 'string' then error(result) end
return result
end
function p._parseGeoSequence(args)
local allTypes = {
-- how many nested array levels until we get to the Point,
-- second is the minimum number of values each Points array must have
Point = { 1, 1 },
MultiPoint = { 1, 0 },
LineString = { 1, 2 },
MultiLineString = { 2, 2 },
Polygon = { 2, 4 },
MultiPolygon = { 3, 4 },
}
if not allTypes[args.geotype] then return ('Unknown geotype ' .. args.geotype) end
local levels, min = unpack(allTypes[args.geotype])
local result
result = {}
for i = 1, levels do result[i] = {} end
local gap = 0
-- Example for levels==3, converting "p1 ; p2 ; ; ; p3 ; ; p4" => [[[p1, p2]], [[p3],[p4]]]
-- This function will be called after each gap, and all values are done, so the above will call:
-- before p3: gap=2, [],[],[p1,p2] => [[[p1,p2]]],[],[]
-- before p4: gap=1, [[[p1,p2]]],[],[p3] => [[[p1,p2]]],[[p3]]],[]
-- the end, gap=2, [[[p1,p2]]],[[p3]]],[p4] => [[[p1,p2]],[[p3],[p4]]],[],[]
-- Here, convert at "p1 ; ; " from [[],[p1]]
local closeArrays = function (gap)
if #result[levels] < min then
error('Each points array must be at least ' .. min .. ' values')
elseif min == 1 and #result[levels] ~= 1 then
-- Point
error('Point must have exactly one data point')
end
-- attach arrays in reverse order to the higher order ones
for i = levels, levels-gap+1, -1 do
table.insert(result[i-1], result[i])
result[i] = {}
end
return 0
end
local usedSequence = false
for val in mw.text.gsplit(args.data, ';', true) do
local val2 = mw.text.split(val, ',', true)
-- allow for elevation
if #val2 >= 2 and #val2 <= 3 and not usedSequence then
if gap > 0 then gap = closeArrays(gap) end
local lat = tonumber(val2[1])
local lon = tonumber(val2[2])
if lat == nil or lon == nil then return ('Bad data value "' .. val .. '"') end
table.insert(result[levels], { lon, lat } )
else
val = mw.text.trim(val)
if val == '' then
usedSequence = false
gap = gap + 1
if (gap >= levels) then return ('Data must not skip more than ' .. levels-1 .. ' values') end
elseif usedSequence then
return ('Coordinates may not be added right after the named sequence')
else
if gap > 0 then
gap = closeArrays(gap)
elseif #result[levels] > 0 then
return ('Named sequence "' .. val .. '" cannot be used in the middle of the sequence')
end
-- Parse value as a sequence name. Eventually we can load data from external data sources
if val == 'values' then
val = getSequence(args)
elseif min == 4 and val == 'world' then
val = {{36000,-180}, {36000,180}, {-36000,180}, {-36000,-180}, {36000,-180}}
elseif tonumber(val) ~= nil then
return ('Not a valid coordinate or a sequence name: ' .. val)
else
return ('Sequence "' .. val .. '" is not known. Try "values" or "world" (for Polygons), or specify values as lat,lon;lat,lon;... pairs')
end
result[levels] = val
usedSequence = true
end
end
end
-- allow one empty last value (some might close the list with an extra semicolon)
if (gap > 1) then return ('Data values must not have blanks at the end') end
closeArrays(levels-1)
return args.geotype == 'Point' and result[1][1] or result[1]
end
-- Run this function to check that the above works ok
function p.parseGeoSequenceTest()
local testSeq = function(data, expected)
local result = getSequence(data)
if type(result) == 'table' then
local actual = mw.text.jsonEncode(result)
result = actual ~= expected and 'data="' .. mw.text.jsonEncode(data) .. '", actual="' .. actual .. '", expected="' .. expected .. '"<br>\n' or ''
else
result = result .. '<br>\n'
end
return result
end
local test = function(geotype, data, expected, values)
values = values or {}
values.geotype = geotype;
values.data = data;
local result = p._parseGeoSequence(values)
if type(result) == 'table' then
local actual = mw.text.jsonEncode(result)
result = actual ~= expected and 'geotype="' .. geotype .. '", data="' .. data .. '", actual="' .. actual .. '", expected="' .. expected .. '"<br>\n' or ''
else
result = 'geotype="' .. geotype .. '", data="' .. data .. '", error="' .. result .. '<br>\n'
end
return result
end
local values = {' 9 , 8 ','7,6'}
local result = '' ..
testSeq({}, '[]') ..
testSeq({'\t\n 1 \r,-10'}, '[[-10,1]]') ..
testSeq(values, '[[8,9],[6,7]]') ..
test('Point', '1,2', '[2,1]') ..
test('MultiPoint', '1,2;3,4;5,6', '[[2,1],[4,3],[6,5]]') ..
test('LineString', '1,2;3,4', '[[2,1],[4,3]]') ..
test('MultiLineString', '1,2;3,4', '[[[2,1],[4,3]]]') ..
test('MultiLineString', '1,2;3,4;;5,6;7,8', '[[[2,1],[4,3]],[[6,5],[8,7]]]') ..
test('Polygon', '1,2;3,4;5,6;1,2', '[[[2,1],[4,3],[6,5],[2,1]]]') ..
test('MultiPolygon', '1,2;3,4;5,6;1,2', '[[[[2,1],[4,3],[6,5],[2,1]]]]') ..
test('MultiPolygon', '1,2;3,4;5,6;1,2;;11,12;13,14;15,16;11,12', '[[[[2,1],[4,3],[6,5],[2,1]],[[12,11],[14,13],[16,15],[12,11]]]]') ..
test('MultiPolygon', '1,2;3,4;5,6;1,2;;;11,12;13,14;15,16;11,12', '[[[[2,1],[4,3],[6,5],[2,1]]],[[[12,11],[14,13],[16,15],[12,11]]]]') ..
test('MultiPolygon', '1,2;3,4;5,6;1,2;;;11,12;13,14;15,16;11,12;;21,22;23,24;25,26;21,22', '[[[[2,1],[4,3],[6,5],[2,1]]],[[[12,11],[14,13],[16,15],[12,11]],[[22,21],[24,23],[26,25],[22,21]]]]') ..
test('MultiLineString', 'values;;1,2;3,4', '[[[8,9],[6,7]],[[2,1],[4,3]]]', values) ..
test('Polygon', 'world;;world', '[[[36000,-180],[36000,180],[-36000,180],[-36000,-180],[36000,-180]],[[36000,-180],[36000,180],[-36000,180],[-36000,-180],[36000,-180]]]') ..
''
return result ~= '' and result or 'Tests passed'
end
function p._tag(args)
local tagname = args.type or 'maplink'
if tagname ~= 'maplink' and tagname ~= 'mapframe' then error('unknown type "' .. tagname .. '"') end
local geojson
local tagArgs = {
text = args.text,
zoom = tonumber(args.zoom),
latitude = tonumber(args.latitude),
longitude = tonumber(args.longitude),
group = args.group,
show = args.show,
class = args.class,
url = args.url,
image = args.image,
}
if (args.wikidata ~= nil) then
local e = mw.wikibase.getEntity(args.wikidata)
if e.claims ~= nil then
if (not tagArgs.latitude or not tagArgs.longitude) then
if e.claims.P625 ~= nil then
tagArgs.latitude = e.claims.P625[1].mainsnak.datavalue.value.latitude
tagArgs.longitude = e.claims.P625[1].mainsnak.datavalue.value.longitude
end
end
if not args.title then
if e.labels.zh ~= nil then
args.title = e.labels.zh.value
elseif e.labels.en ~= nil then
args.title = e.labels.en.value
end
end
--if not tagArgs.url then
-- if e.claims.P856 ~= nil then
-- tagArgs.url = e.claims.P856[1].mainsnak.datavalue.value
-- end
--end
if not tagArgs.image then
if e.claims.P18 ~= nil then
tagArgs.image = e.claims.P18[1].mainsnak.datavalue.value
end
end
end
end
if not args.title then
args.title = ''
end
if not tagArgs.url then
tagArgs.url = ''
end
if not tagArgs.image then
tagArgs.image = ''
end
tagArgs.title = args.title
if args.ismarker and (args.latitude == 'NA' or args.longitude == 'NA' or not tagArgs.latitude or not tagArgs.longitude) then
return 'nowiki', '', tagArgs
end
if tagname == 'mapframe' then
tagArgs.width = args.width == nil and 420 or args.width
tagArgs.height = args.height == nil and 420 or args.height
tagArgs.align = args.align == nil and 'right' or args.align
elseif not args.class and (args.text == '' or args.text == '""') then
-- Hide pushpin icon in front of an empty text link
tagArgs.class = 'no-icon'
end
if args.data == '' then args.data = nil end
if (not args.geotype) ~= (not args.data) then
-- one is given, but not the other
if args.data then
error('Parameter "data" is given, but "geotype" is not set. Use one of these: Point, MultiPoint, LineString, MultiLineString, Polygon, MultiPolygon')
elseif args.geotype == "Point" and tagArgs.latitude ~= nil and tagArgs.longitude ~= nil then
-- For Point geotype, it is enough to set latitude and logitude, and data will be set up automatically
args.data = tagArgs.latitude .. ',' .. tagArgs.longitude
else
error('Parameter data must be set. Use "values" to use all unnamed parameters as coordinates (lat,lon|lat,lon|...), "world" for the whole world, a combination to make a mask, e.g. "world;;values", or direct values "lat,lon;lat,lon..." with ";" as value separator')
end
end
-- Kartographer can now automatically calculate needed zoom & lat/long based on the data provided
-- Current version ignores mapmasks, but that will also be fixed soon. Leaving this for now, but can be removed if all is good.
-- tagArgs.zoom = tagArgs.zoom == nil and 14 or tagArgs.zoom
-- tagArgs.latitude = tagArgs.latitude == nil and 51.47766 or tagArgs.latitude
-- tagArgs.longitude = tagArgs.longitude == nil and -0.00115 or tagArgs.longitude
if tagArgs.image ~= '' then
args.description = (args.description or '') .. '[[file:' .. tagArgs.image .. '|300px]]'
end
local geojsontitle = args.title
if geojsontitle ~= '' then
geojsontitle = geojsontitle .. '<sup>[[#' .. geojsontitle .. '|內容]]</sup>'
end
if args.geotype then
geojson = {
type = "Feature",
properties = {
title = geojsontitle,
description = args.description,
['marker-size'] = args['marker-size'],
['marker-symbol'] = args['marker-symbol'],
['marker-color'] = args['marker-color'],
stroke = args.stroke,
['stroke-opacity'] = tonumber(args['stroke-opacity']),
['stroke-width'] = tonumber(args['stroke-width']),
fill = args.fill,
['fill-opacity'] = tonumber(args['fill-opacity']),
},
geometry = {
type = args.geotype,
coordinates = p.parseGeoSequence(args)
}
}
end
if args.debug ~= nil then
local html = mw.html.create(tagname, not geojson and {selfClosing=true} or nil)
:attr(tagArgs)
if geojson then
html:wikitext( mw.text.jsonEncode(geojson, mw.text.JSON_PRETTY) )
end
return 'syntaxhighlight', tostring(html) .. mw.text.jsonEncode(args, mw.text.JSON_PRETTY), { lang = 'json', latitude=0, longitude=0, title='', url='' }
end
return tagname, geojson and mw.text.jsonEncode(geojson) or '', tagArgs
end
function p.tag(frame)
out = {}
local args = getArgs(frame)
local tag, geojson, tagArgs = p._tag(args)
if args.ismarker == 'yes' then
if geojson ~= '' then
coordargs = {tagArgs.latitude, tagArgs.longitude, ['title'] = tagArgs.title}
out[#out + 1] = '<span class="noprint listing-coordinates" style="display:none">'
out[#out + 1] = '<span class="geo">'
out[#out + 1] = '<abbr class="latitude">' .. tagArgs.latitude ..'</abbr>'
out[#out + 1] = '<abbr class="longitude">' .. tagArgs.longitude ..'</abbr>'
out[#out + 1] = '</span></span>'
out[#out + 1] = '<span title="此為 \''.. args.group ..'\' 所標記的地圖">' -- TODO
out[#out + 1] = frame:extensionTag(tag, geojson, tagArgs)
out[#out + 1] = ' </span>'
if mw.title.getCurrentTitle().namespace == 0 then
out[#out + 1] = "[[Category:有地圖標記]]"
end
else
if mw.title.getCurrentTitle().namespace == 0 and
has_value({'觀光', '用餐', '購物', '夜生活', '住宿'}, string.lower(args.group)) and
(args.latitude ~= 'NA' and args.longitude ~= 'NA')
then
out[#out + 1] = "[[Category:"..string.lower(args.group).."的列表中沒有坐標]]"
end
end
if mw.title.getCurrentTitle().namespace == 0 and
has_value({'city', 'vicinity'}, string.lower(args.group)) and
args.wikidata == nil or args.wikidata == '' then
out[#out + 1] = "[[Category:沒有維基數據的地區標記]]"
end
if tagArgs.title ~= '' then
title = '<span id="'.. mw.uri.anchorEncode(tagArgs.title) ..'" class="fn org listing-name">\'\'\''.. tagArgs.title ..'\'\'\'</span>'
else
title = ''
end
if tagArgs.url ~= '' then
out[#out + 1] = '['.. tagArgs.url ..' '..title..']'
else
out[#out + 1] = title
end
return table.concat(out, "")
else
return frame:extensionTag(tag, geojson, tagArgs)
end
end
return p
o6tc4wpggruom18w8gmt1s5yyfnpe99
Template:Maplayers
10
14452
183862
157824
2022-08-04T14:40:05Z
Xiplus
4323
已保护“[[Template:Maplayers]]”:高風險模板:3145引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
wikitext
text/x-wiki
<includeonly>mask,around,buy,city,do,drink,eat,go,listing,other,see,sleep,vicinity,view,black,blue,brown,chocolate,forestgreen,gold,gray,grey,lime,magenta,maroon,mediumaquamarine,navy,red,royalblue,silver,steelblue,teal,fuchsia</includeonly><noinclude>
This template exists solely to allow a single place to store all map layers, allowing map templates to stay in sync if new layers are added.
Current value: {{maplayers}}
[[Category:動態地圖模板]]
</noinclude>
js2mp37p2raypqkfr3vj2s2tj8nmgnz
Module:TypeToColor
828
14458
183921
167508
2022-08-04T15:10:06Z
Xiplus
4323
已保护“[[Module:TypeToColor]]”:高風險模板:2163引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
Scribunto
text/plain
local p = {}
function p.convert( frame )
return p.convertImpl(frame.args[1])
end
function p.convertImpl(type)
type = type:lower()
local types = {
['do'] = '808080',
around = '800080',
buy = '008080',
city = '0000FF',
drink = '000000',
eat = 'D2691E',
go = 'A52A2A',
listing = '228B22',
other = '228B22',
see = '4682B4',
sleep = '000080',
vicinity = '800000',
view = '4169E1',
launchsite = 'FF8C00',
}
local result = types[type]
if result then
return result
end
-- Deprecated usage - trace it
types = {
black = '000000',
blue = '0000FF',
brown = 'A52A2A',
chocolate = 'D2691E',
forestgreen = '228B22',
gold = 'FFD700',
gray = '808080',
grey = '808080',
lime = 'BFFF00',
magenta = 'FF00FF',
maroon = '800000',
mediumaquamarine = '66CDAA',
navy = '000080',
orange = 'FFA500',
plum = 'DDA0DD',
purple = '800080',
red = 'FF0000',
royalblue = '4169E1',
silver = 'C0C0C0',
steelblue = '4682B4',
teal = '008080',
}
local result = types[type]
if result then
return result -- .. '[[category:Fixme TypeToColor]]'
end
return '393939' -- .. '[[category:Fixme TypeToColor Unknown]]'
end
return p
hy4pmxhoc1fasjm28cj72qjk6tvh3gn
Module:Category handler/blacklist
828
14984
183888
105288
2022-08-04T14:44:16Z
Xiplus
4323
已保护“[[Module:Category handler/blacklist]]”:高風險模板:1596引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
Scribunto
text/plain
-- This module contains the blacklist used by [[Module:Category handler]].
-- Pages that match Lua patterns in this list will not be categorised unless
-- categorisation is explicitly requested.
return {
'^Main Page$', -- don't categorise the main page.
-- Don't categorise the following pages or their subpages.
-- "%f[/\0]" matches if the next character is "/" or the end of the string.
'^Wikipedia:Cascade%-protected items%f[/\0]',
'^User:UBX%f[/\0]', -- The userbox "template" space.
'^User talk:UBX%f[/\0]',
-- Don't categorise subpages of these pages, but allow
-- categorisation of the base page.
'^Wikipedia:Template messages/.*$',
'/[aA]rchive' -- Don't categorise archives.
}
ne8sdldor304iu81gnqa05p401j3exc
Module:Category handler/config
828
14985
183889
105291
2022-08-04T14:44:26Z
Xiplus
4323
已保护“[[Module:Category handler/config]]”:高風險模板:1596引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
Scribunto
text/plain
--------------------------------------------------------------------------------
-- [[Module:Category handler]] configuration data --
-- Language-specific parameter names and values can be set here. --
-- For blacklist config, see [[Module:Category handler/blacklist]]. --
--------------------------------------------------------------------------------
local cfg = {} -- Don't edit this line.
--------------------------------------------------------------------------------
-- Start configuration data --
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
-- Parameter names --
-- These configuration items specify custom parameter names. --
-- To add one extra name, you can use this format: --
-- --
-- foo = 'parameter name', --
-- --
-- To add multiple names, you can use this format: --
-- --
-- foo = {'parameter name 1', 'parameter name 2', 'parameter name 3'}, --
--------------------------------------------------------------------------------
cfg.parameters = {
-- The nocat and categories parameter suppress
-- categorisation. They are used with Module:Yesno, and work as follows:
--
-- cfg.nocat:
-- Result of yesno() Effect
-- true Categorisation is suppressed
-- false Categorisation is allowed, and
-- the blacklist check is skipped
-- nil Categorisation is allowed
--
-- cfg.categories:
-- Result of yesno() Effect
-- true Categorisation is allowed, and
-- the blacklist check is skipped
-- false Categorisation is suppressed
-- nil Categorisation is allowed
nocat = 'nocat',
categories = 'categories',
-- The parameter name for the legacy "category2" parameter. This skips the
-- blacklist if set to the cfg.category2Yes value, and suppresses
-- categorisation if present but equal to anything other than
-- cfg.category2Yes or cfg.category2Negative.
category2 = 'category2',
-- cfg.subpage is the parameter name to specify how to behave on subpages.
subpage = 'subpage',
-- The parameter for data to return in all namespaces.
all = 'all',
-- The parameter name for data to return if no data is specified for the
-- namespace that is detected.
other = 'other',
-- The parameter name used to specify a page other than the current page;
-- used for testing and demonstration.
demopage = 'page',
}
--------------------------------------------------------------------------------
-- Parameter values --
-- These are set values that can be used with certain parameters. Only one --
-- value can be specified, like this: --
-- --
-- cfg.foo = 'value name' -- --
--------------------------------------------------------------------------------
-- The following settings are used with the cfg.category2 parameter. Setting
-- cfg.category2 to cfg.category2Yes skips the blacklist, and if cfg.category2
-- is present but equal to anything other than cfg.category2Yes or
-- cfg.category2Negative then it supresses cateogrisation.
cfg.category2Yes = 'yes'
cfg.category2Negative = '¬'
-- The following settings are used with the cfg.subpage parameter.
-- cfg.subpageNo is the value to specify to not categorise on subpages;
-- cfg.subpageOnly is the value to specify to only categorise on subpages.
cfg.subpageNo = 'no'
cfg.subpageOnly = 'only'
--------------------------------------------------------------------------------
-- Default namespaces --
-- This is a table of namespaces to categorise by default. The keys are the --
-- namespace numbers. --
--------------------------------------------------------------------------------
cfg.defaultNamespaces = {
[ 0] = true, -- main
[ 6] = true, -- file
[ 12] = true, -- help
[ 14] = true, -- category
[100] = true, -- portal
[108] = true, -- book
}
--------------------------------------------------------------------------------
-- Wrappers --
-- This is a wrapper template or a list of wrapper templates to be passed to --
-- [[Module:Arguments]]. --
--------------------------------------------------------------------------------
cfg.wrappers = 'Template:Category handler'
--------------------------------------------------------------------------------
-- End configuration data --
--------------------------------------------------------------------------------
return cfg -- Don't edit this line.
6ga9hbq2pdwalsvx68i53dmbr421rq5
Module:Category handler/data
828
14986
183890
105294
2022-08-04T14:44:36Z
Xiplus
4323
已保护“[[Module:Category handler/data]]”:高風險模板:1596引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
Scribunto
text/plain
-- This module assembles data to be passed to [[Module:Category handler]] using
-- mw.loadData. This includes the configuration data and whether the current
-- page matches the title blacklist.
local data = require('Module:Category handler/config')
local mShared = require('Module:Category handler/shared')
local blacklist = require('Module:Category handler/blacklist')
local title = mw.title.getCurrentTitle()
data.currentTitleMatchesBlacklist = mShared.matchesBlacklist(
title.prefixedText,
blacklist
)
data.currentTitleNamespaceParameters = mShared.getNamespaceParameters(
title,
mShared.getParamMappings()
)
return data
k26mwixuaeijisfddb0sxkg82iux8v4
Module:Category handler/shared
828
14987
183891
105297
2022-08-04T14:44:46Z
Xiplus
4323
已保护“[[Module:Category handler/shared]]”:高風險模板:1596引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
Scribunto
text/plain
-- This module contains shared functions used by [[Module:Category handler]]
-- and its submodules.
local p = {}
function p.matchesBlacklist(page, blacklist)
for i, pattern in ipairs(blacklist) do
local match = mw.ustring.match(page, pattern)
if match then
return true
end
end
return false
end
function p.getParamMappings(useLoadData)
local dataPage = 'Module:Namespace detect/data'
if useLoadData then
return mw.loadData(dataPage).mappings
else
return require(dataPage).mappings
end
end
function p.getNamespaceParameters(titleObj, mappings)
-- We don't use title.nsText for the namespace name because it adds
-- underscores.
local mappingsKey
if titleObj.isTalkPage then
mappingsKey = 'talk'
else
mappingsKey = mw.site.namespaces[titleObj.namespace].name
end
mappingsKey = mw.ustring.lower(mappingsKey)
return mappings[mappingsKey] or {}
end
return p
omlsnhudxz6juptvtxz7ns97jutbzc5
Module:Documentation
828
14993
183894
171700
2022-08-04T14:45:16Z
Xiplus
4323
已保护“[[Module:Documentation]]”:高風險模板:874引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
Scribunto
text/plain
-- This module implements {{documentation}}.
-- Get required modules.
local getArgs = require('Module:Arguments').getArgs
local messageBox = require('Module:Message box')
-- Get the config table.
local cfg = mw.loadData('Module:Documentation/config')
local p = {}
-- Often-used functions.
local ugsub = mw.ustring.gsub
----------------------------------------------------------------------------
-- Helper functions
--
-- These are defined as local functions, but are made available in the p
-- table for testing purposes.
----------------------------------------------------------------------------
local function message(cfgKey, valArray, expectType)
--[[
-- Gets a message from the cfg table and formats it if appropriate.
-- The function raises an error if the value from the cfg table is not
-- of the type expectType. The default type for expectType is 'string'.
-- If the table valArray is present, strings such as $1, $2 etc. in the
-- message are substituted with values from the table keys [1], [2] etc.
-- For example, if the message "foo-message" had the value 'Foo $2 bar $1.',
-- message('foo-message', {'baz', 'qux'}) would return "Foo qux bar baz."
--]]
local msg = cfg[cfgKey]
expectType = expectType or 'string'
if type(msg) ~= expectType then
error('message: type error in message cfg.' .. cfgKey .. ' (' .. expectType .. ' expected, got ' .. type(msg) .. ')', 2)
end
if not valArray then
return msg
end
local function getMessageVal(match)
match = tonumber(match)
return valArray[match] or error('message: no value found for key $' .. match .. ' in message cfg.' .. cfgKey, 4)
end
local ret = ugsub(msg, '$([1-9][0-9]*)', getMessageVal)
return ret
end
p.message = message
local function makeWikilink(page, display)
if display then
return mw.ustring.format('[[%s|%s]]', page, display)
else
return mw.ustring.format('[[%s]]', page)
end
end
p.makeWikilink = makeWikilink
local function makeCategoryLink(cat, sort)
local catns = mw.site.namespaces[14].name
return makeWikilink(catns .. ':' .. cat, sort)
end
p.makeCategoryLink = makeCategoryLink
local function makeUrlLink(url, display)
return mw.ustring.format('[%s %s]', url, display)
end
p.makeUrlLink = makeUrlLink
local function makeToolbar(...)
local ret = {}
local lim = select('#', ...)
if lim < 1 then
return nil
end
for i = 1, lim do
ret[#ret + 1] = select(i, ...)
end
return '<small style="font-style: normal;">(' .. table.concat(ret, ' | ') .. ')</small>'
end
p.makeToolbar = makeToolbar
----------------------------------------------------------------------------
-- Argument processing
----------------------------------------------------------------------------
local function makeInvokeFunc(funcName)
return function (frame)
local args = getArgs(frame, {
valueFunc = function (key, value)
if type(value) == 'string' then
value = value:match('^%s*(.-)%s*$') -- Remove whitespace.
if key == 'heading' or value ~= '' then
return value
else
return nil
end
else
return value
end
end
})
return p[funcName](args)
end
end
----------------------------------------------------------------------------
-- Entry points
----------------------------------------------------------------------------
function p.nonexistent(frame)
if mw.title.getCurrentTitle().subpageText == 'testcases' then
return frame:expandTemplate{title = 'module test cases notice'}
else
return p.main(frame)
end
end
----------------------------------------------------------------------------
-- Main function
----------------------------------------------------------------------------
p.main = makeInvokeFunc('_main')
function p._main(args)
--[[
-- This function defines logic flow for the module.
-- @args - table of arguments passed by the user
--
-- Messages:
-- 'main-div-id' --> 'template-documentation'
-- 'main-div-classes' --> 'template-documentation iezoomfix'
--]]
local env = p.getEnvironment(args)
local root = mw.html.create()
root
:wikitext(p._getModuleWikitext(args, env))
:wikitext(p.protectionTemplate(env))
:wikitext(p.sandboxNotice(args, env))
-- This div tag is from {{documentation/start box}}, but moving it here
-- so that we don't have to worry about unclosed tags.
:tag('div')
:attr('id', message('main-div-id'))
:addClass(message('main-div-classes'))
:newline()
:wikitext(p._startBox(args, env))
:wikitext(p._content(args, env))
:tag('div')
:css('clear', 'both') -- So right or left floating items don't stick out of the doc box.
:newline()
:done()
:done()
:wikitext(p._endBox(args, env))
:wikitext(p.addTrackingCategories(env))
return tostring(root)
end
----------------------------------------------------------------------------
-- Environment settings
----------------------------------------------------------------------------
function p.getEnvironment(args)
--[[
-- Returns a table with information about the environment, including title objects and other namespace- or
-- path-related data.
-- @args - table of arguments passed by the user
--
-- Title objects include:
-- env.title - the page we are making documentation for (usually the current title)
-- env.templateTitle - the template (or module, file, etc.)
-- env.docTitle - the /doc subpage.
-- env.sandboxTitle - the /sandbox subpage.
-- env.testcasesTitle - the /testcases subpage.
-- env.printTitle - the print version of the template, located at the /Print subpage.
--
-- Data includes:
-- env.protectionLevels - the protection levels table of the title object.
-- env.subjectSpace - the number of the title's subject namespace.
-- env.docSpace - the number of the namespace the title puts its documentation in.
-- env.docpageBase - the text of the base page of the /doc, /sandbox and /testcases pages, with namespace.
-- env.compareUrl - URL of the Special:ComparePages page comparing the sandbox with the template.
--
-- All table lookups are passed through pcall so that errors are caught. If an error occurs, the value
-- returned will be nil.
--]]
local env, envFuncs = {}, {}
-- Set up the metatable. If triggered we call the corresponding function in the envFuncs table. The value
-- returned by that function is memoized in the env table so that we don't call any of the functions
-- more than once. (Nils won't be memoized.)
setmetatable(env, {
__index = function (t, key)
local envFunc = envFuncs[key]
if envFunc then
local success, val = pcall(envFunc)
if success then
env[key] = val -- Memoise the value.
return val
end
end
return nil
end
})
function envFuncs.title()
-- The title object for the current page, or a test page passed with args.page.
local title
local titleArg = args.page
if titleArg then
title = mw.title.new(titleArg)
else
title = mw.title.getCurrentTitle()
end
return title
end
function envFuncs.templateTitle()
--[[
-- The template (or module, etc.) title object.
-- Messages:
-- 'sandbox-subpage' --> 'sandbox'
-- 'testcases-subpage' --> 'testcases'
--]]
local subjectSpace = env.subjectSpace
local title = env.title
local subpage = title.subpageText
if subpage == message('sandbox-subpage') or subpage == message('testcases-subpage') then
return mw.title.makeTitle(subjectSpace, title.baseText)
else
return mw.title.makeTitle(subjectSpace, title.text)
end
end
function envFuncs.docTitle()
--[[
-- Title object of the /doc subpage.
-- Messages:
-- 'doc-subpage' --> 'doc'
--]]
local title = env.title
local docname = args[1] -- User-specified doc page.
local docpage
if docname then
docpage = docname
else
docpage = env.docpageBase .. '/' .. message('doc-subpage')
end
return mw.title.new(docpage)
end
function envFuncs.sandboxTitle()
--[[
-- Title object for the /sandbox subpage.
-- Messages:
-- 'sandbox-subpage' --> 'sandbox'
--]]
return mw.title.new(env.docpageBase .. '/' .. message('sandbox-subpage'))
end
function envFuncs.testcasesTitle()
--[[
-- Title object for the /testcases subpage.
-- Messages:
-- 'testcases-subpage' --> 'testcases'
--]]
return mw.title.new(env.docpageBase .. '/' .. message('testcases-subpage'))
end
function envFuncs.printTitle()
--[[
-- Title object for the /Print subpage.
-- Messages:
-- 'print-subpage' --> 'Print'
--]]
return env.templateTitle:subPageTitle(message('print-subpage'))
end
function envFuncs.protectionLevels()
-- The protection levels table of the title object.
return env.title.protectionLevels
end
function envFuncs.subjectSpace()
-- The subject namespace number.
return mw.site.namespaces[env.title.namespace].subject.id
end
function envFuncs.docSpace()
-- The documentation namespace number. For most namespaces this is the same as the
-- subject namespace. However, pages in the Article, File, MediaWiki or Category
-- namespaces must have their /doc, /sandbox and /testcases pages in talk space.
local subjectSpace = env.subjectSpace
if subjectSpace == 0 or subjectSpace == 6 or subjectSpace == 8 or subjectSpace == 14 then
return subjectSpace + 1
else
return subjectSpace
end
end
function envFuncs.docpageBase()
-- The base page of the /doc, /sandbox, and /testcases subpages.
-- For some namespaces this is the talk page, rather than the template page.
local templateTitle = env.templateTitle
local docSpace = env.docSpace
local docSpaceText = mw.site.namespaces[docSpace].name
-- Assemble the link. docSpace is never the main namespace, so we can hardcode the colon.
return docSpaceText .. ':' .. templateTitle.text
end
function envFuncs.compareUrl()
-- Diff link between the sandbox and the main template using [[Special:ComparePages]].
local templateTitle = env.templateTitle
local sandboxTitle = env.sandboxTitle
if templateTitle.exists and sandboxTitle.exists then
local compareUrl = mw.uri.fullUrl(
'Special:ComparePages',
{page1 = templateTitle.prefixedText, page2 = sandboxTitle.prefixedText}
)
return tostring(compareUrl)
else
return nil
end
end
return env
end
----------------------------------------------------------------------------
-- Auxiliary templates
----------------------------------------------------------------------------
p.getModuleWikitext = makeInvokeFunc('_getModuleWikitext')
function p._getModuleWikitext(args, env)
local currentTitle = mw.title.getCurrentTitle()
if currentTitle.contentModel ~= 'Scribunto' then return end
pcall(require, currentTitle.prefixedText) -- if it fails, we don't care
local moduleWikitext = package.loaded["Module:Module wikitext"]
if moduleWikitext then
return moduleWikitext.main()
end
return ''
end
function p.sandboxNotice(args, env)
--[=[
-- Generates a sandbox notice for display above sandbox pages.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'sandbox-notice-image' --> '[[Image:Sandbox.svg|50px|alt=|link=]]'
-- 'sandbox-notice-blurb' --> 'This is the $1 for $2.'
-- 'sandbox-notice-diff-blurb' --> 'This is the $1 for $2 ($3).'
-- 'sandbox-notice-pagetype-template' --> '[[Wikipedia:Template test cases|template sandbox]] page'
-- 'sandbox-notice-pagetype-module' --> '[[Wikipedia:Template test cases|module sandbox]] page'
-- 'sandbox-notice-pagetype-other' --> 'sandbox page'
-- 'sandbox-notice-compare-link-display' --> 'diff'
-- 'sandbox-notice-testcases-blurb' --> 'See also the companion subpage for $1.'
-- 'sandbox-notice-testcases-link-display' --> 'test cases'
-- 'sandbox-category' --> 'Template sandboxes'
--]=]
local title = env.title
local sandboxTitle = env.sandboxTitle
local templateTitle = env.templateTitle
local subjectSpace = env.subjectSpace
if not (subjectSpace and title and sandboxTitle and templateTitle and mw.title.equals(title, sandboxTitle)) then
return nil
end
-- Build the table of arguments to pass to {{ombox}}. We need just two fields, "image" and "text".
local omargs = {}
omargs.image = message('sandbox-notice-image')
-- Get the text. We start with the opening blurb, which is something like
-- "This is the template sandbox for [[Template:Foo]] (diff)."
local text = ''
local pagetype
if subjectSpace == 10 then
pagetype = message('sandbox-notice-pagetype-template')
elseif subjectSpace == 828 then
pagetype = message('sandbox-notice-pagetype-module')
else
pagetype = message('sandbox-notice-pagetype-other')
end
local pagetypee
if subjectSpace == 10 then
pagetypee = message('template-pagetype')
elseif subjectSpace == 828 then
pagetypee = message('module-pagetype')
else
pagetypee = message('default-pagetype')--message 'other-pagetype' 不存在
end
local templateLink = makeWikilink(templateTitle.prefixedText)
local compareUrl = env.compareUrl
if compareUrl then
local compareDisplay = message('sandbox-notice-compare-link-display')
local compareLink = makeUrlLink(compareUrl, compareDisplay)
text = text .. message('sandbox-notice-diff-blurb', {pagetype, templateLink, compareLink})
else
text = text .. message('sandbox-notice-blurb', {pagetype, templateLink})
end
-- Get the test cases page blurb if the page exists. This is something like
-- "See also the companion subpage for [[Template:Foo/testcases|test cases]]."
local testcasesTitle = env.testcasesTitle
if testcasesTitle and testcasesTitle.exists then
if testcasesTitle.namespace == mw.site.namespaces.Module.id then
local testcasesLinkDisplay = message('sandbox-notice-testcases-link-display')
local testcasesRunLinkDisplay = message('sandbox-notice-testcases-run-link-display')
local testcasesLink = makeWikilink(testcasesTitle.prefixedText, testcasesLinkDisplay)
local testcasesRunLink = makeWikilink(testcasesTitle.talkPageTitle.prefixedText, testcasesRunLinkDisplay)
text = text .. '<br /><small>' .. message('sandbox-notice-testcases-run-blurb', {pagetypee, testcasesLink, testcasesRunLink}) .. '</small>'
else
local testcasesLinkDisplay = message('sandbox-notice-testcases-link-display')
local testcasesLink = makeWikilink(testcasesTitle.prefixedText, testcasesLinkDisplay)
text = text .. '<br /><small>' .. message('sandbox-notice-testcases-blurb', {pagetypee, testcasesLink}) .. '</small>'
end
end
-- Add the sandbox to the sandbox category.
text = text .. makeCategoryLink(message('sandbox-category'))
omargs.text = text
local ret = '<div style="clear: both;"></div>'
ret = ret .. messageBox.main('ombox', omargs)
return ret
end
function p.protectionTemplate(env)
-- Generates the padlock icon in the top right.
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'protection-template' --> 'pp-template'
-- 'protection-template-args' --> {docusage = 'yes'}
local protectionLevels, mProtectionBanner
local title = env.title
protectionLevels = env.protectionLevels
if not protectionLevels then
return nil
end
local editProt = protectionLevels.edit and protectionLevels.edit[1]
local moveProt = protectionLevels.move and protectionLevels.move[1]
if editProt then
-- The page is edit-protected.
mProtectionBanner = require('Module:Protection banner')
local reason = message('protection-reason-edit')
return mProtectionBanner._main{reason, small = true}
elseif moveProt and moveProt ~= 'autoconfirmed' then
-- The page is move-protected but not edit-protected. Exclude move
-- protection with the level "autoconfirmed", as this is equivalent to
-- no move protection at all.
mProtectionBanner = require('Module:Protection banner')
return mProtectionBanner._main{action = 'move', small = true}
else
return nil
end
end
----------------------------------------------------------------------------
-- Start box
----------------------------------------------------------------------------
p.startBox = makeInvokeFunc('_startBox')
function p._startBox(args, env)
--[[
-- This function generates the start box.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- The actual work is done by p.makeStartBoxLinksData and p.renderStartBoxLinks which make
-- the [view] [edit] [history] [purge] links, and by p.makeStartBoxData and p.renderStartBox
-- which generate the box HTML.
--]]
env = env or p.getEnvironment(args)
local links
local content = args.content
if not content then
-- No need to include the links if the documentation is on the template page itself.
local linksData = p.makeStartBoxLinksData(args, env)
if linksData then
links = p.renderStartBoxLinks(linksData)
end
end
-- Generate the start box html.
local data = p.makeStartBoxData(args, env, links)
if data then
return p.renderStartBox(data)
else
-- User specified no heading.
return nil
end
end
function p.makeStartBoxLinksData(args, env)
--[[
-- Does initial processing of data to make the [view] [edit] [history] [purge] links.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'view-link-display' --> 'view'
-- 'edit-link-display' --> 'edit'
-- 'history-link-display' --> 'history'
-- 'purge-link-display' --> 'purge'
-- 'file-docpage-preload' --> 'Template:Documentation/preload-filespace'
-- 'module-preload' --> 'Template:Documentation/preload-module-doc'
-- 'docpage-preload' --> 'Template:Documentation/preload'
-- 'create-link-display' --> 'create'
--]]
local subjectSpace = env.subjectSpace
local title = env.title
local docTitle = env.docTitle
if not title or not docTitle then
return nil
end
local data = {}
data.title = title
data.docTitle = docTitle
-- View, display, edit, and purge links if /doc exists.
data.viewLinkDisplay = message('view-link-display')
data.editLinkDisplay = message('edit-link-display')
data.historyLinkDisplay = message('history-link-display')
data.purgeLinkDisplay = message('purge-link-display')
-- Create link if /doc doesn't exist.
local preload = args.preload
if not preload then
if subjectSpace == 6 then -- File namespace
preload = message('file-docpage-preload')
elseif subjectSpace == 828 then -- Module namespace
preload = message('module-preload')
else
preload = message('docpage-preload')
end
end
data.preload = preload
data.createLinkDisplay = message('create-link-display')
return data
end
function p.renderStartBoxLinks(data)
--[[
-- Generates the [view][edit][history][purge] or [create] links from the data table.
-- @data - a table of data generated by p.makeStartBoxLinksData
--]]
local function escapeBrackets(s)
-- Escapes square brackets with HTML entities.
s = s:gsub('%[', '[') -- Replace square brackets with HTML entities.
s = s:gsub('%]', ']')
return s
end
local ret
local docTitle = data.docTitle
local title = data.title
if docTitle.exists then
local viewLink = makeWikilink(docTitle.prefixedText, data.viewLinkDisplay)
local editLink = makeUrlLink(docTitle:fullUrl{action = 'edit'}, data.editLinkDisplay)
local historyLink = makeUrlLink(docTitle:fullUrl{action = 'history'}, data.historyLinkDisplay)
local purgeLink = makeUrlLink(title:fullUrl{action = 'purge'}, data.purgeLinkDisplay)
ret = '[%s] [%s] [%s] [%s]'
ret = escapeBrackets(ret)
ret = mw.ustring.format(ret, viewLink, editLink, historyLink, purgeLink)
else
local createLink = makeUrlLink(docTitle:fullUrl{action = 'edit', preload = data.preload}, data.createLinkDisplay)
ret = '[%s]'
ret = escapeBrackets(ret)
ret = mw.ustring.format(ret, createLink)
end
return ret
end
function p.makeStartBoxData(args, env, links)
--[=[
-- Does initial processing of data to pass to the start-box render function, p.renderStartBox.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- @links - a string containing the [view][edit][history][purge] links - could be nil if there's an error.
--
-- Messages:
-- 'documentation-icon-wikitext' --> '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=]]'
-- 'template-namespace-heading' --> 'Template documentation'
-- 'module-namespace-heading' --> 'Module documentation'
-- 'file-namespace-heading' --> 'Summary'
-- 'other-namespaces-heading' --> 'Documentation'
-- 'start-box-linkclasses' --> 'mw-editsection-like plainlinks'
-- 'start-box-link-id' --> 'doc_editlinks'
-- 'testcases-create-link-display' --> 'create'
--]=]
local subjectSpace = env.subjectSpace
if not subjectSpace then
-- Default to an "other namespaces" namespace, so that we get at least some output
-- if an error occurs.
subjectSpace = 2
end
local data = {}
-- Heading
local heading = args.heading -- Blank values are not removed.
if heading == '' then
-- Don't display the start box if the heading arg is defined but blank.
return nil
end
if heading then
data.heading = heading
elseif subjectSpace == 10 then -- Template namespace
data.heading = message('documentation-icon-wikitext') .. ' ' .. message('template-namespace-heading')
elseif subjectSpace == 828 then -- Module namespace
data.heading = message('documentation-icon-wikitext') .. ' ' .. message('module-namespace-heading')
elseif subjectSpace == 6 then -- File namespace
data.heading = message('file-namespace-heading')
else
data.heading = message('other-namespaces-heading')
end
-- Heading CSS
local headingStyle = args['heading-style']
if headingStyle then
data.headingStyleText = headingStyle
elseif subjectSpace == 10 then
-- We are in the template or template talk namespaces.
data.headingFontWeight = 'bold'
data.headingFontSize = '125%'
else
data.headingFontSize = '150%'
end
-- Data for the [view][edit][history][purge] or [create] links.
if links then
data.linksClass = message('start-box-linkclasses')
data.linksId = message('start-box-link-id')
data.links = links
end
return data
end
function p.renderStartBox(data)
-- Renders the start box html.
-- @data - a table of data generated by p.makeStartBoxData.
local sbox = mw.html.create('div')
sbox
:css('padding-bottom', '3px')
:css('border-bottom', '1px solid #aaa')
:css('margin-bottom', '1ex')
:newline()
:tag('span')
:cssText(data.headingStyleText)
:css('font-weight', data.headingFontWeight)
:css('font-size', data.headingFontSize)
:wikitext(data.heading)
local links = data.links
if links then
sbox:tag('span')
:addClass(data.linksClass)
:attr('id', data.linksId)
:wikitext(links)
end
return tostring(sbox)
end
----------------------------------------------------------------------------
-- Documentation content
----------------------------------------------------------------------------
p.content = makeInvokeFunc('_content')
function p._content(args, env)
-- Displays the documentation contents
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
env = env or p.getEnvironment(args)
local docTitle = env.docTitle
local content = args.content
if not content and docTitle and docTitle.exists then
content = args._content or mw.getCurrentFrame():expandTemplate{title = docTitle.prefixedText}
end
-- The line breaks below are necessary so that "=== Headings ===" at the start and end
-- of docs are interpreted correctly.
return '\n' .. (content or '') .. '\n'
end
p.contentTitle = makeInvokeFunc('_contentTitle')
function p._contentTitle(args, env)
env = env or p.getEnvironment(args)
local docTitle = env.docTitle
if not args.content and docTitle and docTitle.exists then
return docTitle.prefixedText
else
return ''
end
end
----------------------------------------------------------------------------
-- End box
----------------------------------------------------------------------------
p.endBox = makeInvokeFunc('_endBox')
function p._endBox(args, env)
--[=[
-- This function generates the end box (also known as the link box).
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'fmbox-id' --> 'documentation-meta-data'
-- 'fmbox-style' --> 'background-color: #ecfcf4'
-- 'fmbox-textstyle' --> 'font-style: italic'
--
-- The HTML is generated by the {{fmbox}} template, courtesy of [[Module:Message box]].
--]=]
-- Get environment data.
env = env or p.getEnvironment(args)
local subjectSpace = env.subjectSpace
local docTitle = env.docTitle
if not subjectSpace or not docTitle then
return nil
end
-- Check whether we should output the end box at all. Add the end
-- box by default if the documentation exists or if we are in the
-- user, module or template namespaces.
local linkBox = args['link box']
if linkBox == 'off'
or not (
docTitle.exists
or subjectSpace == 2
or subjectSpace == 828
or subjectSpace == 10
)
then
return nil
end
-- Assemble the arguments for {{fmbox}}.
local fmargs = {}
fmargs.id = message('fmbox-id') -- Sets 'documentation-meta-data'
fmargs.image = 'none'
fmargs.style = message('fmbox-style') -- Sets 'background-color: #ecfcf4'
fmargs.textstyle = message('fmbox-textstyle') -- 'font-style: italic;'
-- Assemble the fmbox text field.
local text = ''
if linkBox then
text = text .. linkBox
else
text = text .. (p.makeDocPageBlurb(args, env) or '') -- "This documentation is transcluded from [[Foo]]."
if subjectSpace == 2 or subjectSpace == 10 or subjectSpace == 828 then
-- We are in the user, template or module namespaces.
-- Add sandbox and testcases links.
-- "Editors can experiment in this template's sandbox and testcases pages."
text = text .. (p.makeExperimentBlurb(args, env) or '')
text = text .. '<br />'
if not args.content and not args[1] then
-- "Please add categories to the /doc subpage."
-- Don't show this message with inline docs or with an explicitly specified doc page,
-- as then it is unclear where to add the categories.
text = text .. (p.makeCategoriesBlurb(args, env) or '')
end
text = text .. (p.makeSubpagesBlurb(args, env) or '') --"Subpages of this template"
local printBlurb = p.makePrintBlurb(args, env) -- Two-line blurb about print versions of templates.
if printBlurb then
text = text .. '<br />' .. printBlurb
end
end
end
fmargs.text = text
return messageBox.main('fmbox', fmargs)
end
function p.makeDocPageBlurb(args, env)
--[=[
-- Makes the blurb "This documentation is transcluded from [[Template:Foo]] (edit, history)".
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'edit-link-display' --> 'edit'
-- 'history-link-display' --> 'history'
-- 'transcluded-from-blurb' -->
-- 'The above [[Wikipedia:Template documentation|documentation]]
-- is [[Wikipedia:Transclusion|transcluded]] from $1.'
-- 'module-preload' --> 'Template:Documentation/preload-module-doc'
-- 'create-link-display' --> 'create'
-- 'create-module-doc-blurb' -->
-- 'You might want to $1 a documentation page for this [[Wikipedia:Lua|Scribunto module]].'
--]=]
local docTitle = env.docTitle
if not docTitle then
return nil
end
local ret
if docTitle.exists then
-- /doc exists; link to it.
local docLink = makeWikilink(docTitle.prefixedText)
local editUrl = docTitle:fullUrl{action = 'edit'}
local editDisplay = message('edit-link-display')
local editLink = makeUrlLink(editUrl, editDisplay)
local historyUrl = docTitle:fullUrl{action = 'history'}
local historyDisplay = message('history-link-display')
local historyLink = makeUrlLink(historyUrl, historyDisplay)
ret = message('transcluded-from-blurb', {docLink})
.. ' '
.. makeToolbar(editLink, historyLink)
.. '<br />'
elseif env.subjectSpace == 828 then
-- /doc does not exist; ask to create it.
local createUrl = docTitle:fullUrl{action = 'edit', preload = message('module-preload')}
local createDisplay = message('create-link-display')
local createLink = makeUrlLink(createUrl, createDisplay)
ret = message('create-module-doc-blurb', {createLink})
.. '<br />'
end
return ret
end
function p.makeExperimentBlurb(args, env)
--[[
-- Renders the text "Editors can experiment in this template's sandbox (edit | diff) and testcases (edit) pages."
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'sandbox-link-display' --> 'sandbox'
-- 'sandbox-edit-link-display' --> 'edit'
-- 'compare-link-display' --> 'diff'
-- 'module-sandbox-preload' --> 'Template:Documentation/preload-module-sandbox'
-- 'template-sandbox-preload' --> 'Template:Documentation/preload-sandbox'
-- 'sandbox-create-link-display' --> 'create'
-- 'mirror-edit-summary' --> 'Create sandbox version of $1'
-- 'mirror-link-display' --> 'mirror'
-- 'mirror-link-preload' --> 'Template:Documentation/mirror'
-- 'sandbox-link-display' --> 'sandbox'
-- 'testcases-link-display' --> 'testcases'
-- 'testcases-edit-link-display'--> 'edit'
-- 'template-sandbox-preload' --> 'Template:Documentation/preload-sandbox'
-- 'testcases-create-link-display' --> 'create'
-- 'testcases-link-display' --> 'testcases'
-- 'testcases-edit-link-display' --> 'edit'
-- 'module-testcases-preload' --> 'Template:Documentation/preload-module-testcases'
-- 'template-testcases-preload' --> 'Template:Documentation/preload-testcases'
-- 'experiment-blurb-module' --> 'Editors can experiment in this module's $1 and $2 pages.'
-- 'experiment-blurb-template' --> 'Editors can experiment in this template's $1 and $2 pages.'
--]]
local subjectSpace = env.subjectSpace
local templateTitle = env.templateTitle
local sandboxTitle = env.sandboxTitle
local testcasesTitle = env.testcasesTitle
local templatePage = templateTitle.prefixedText
if not subjectSpace or not templateTitle or not sandboxTitle or not testcasesTitle then
return nil
end
-- Make links.
local sandboxLinks, testcasesLinks
if sandboxTitle.exists then
local sandboxPage = sandboxTitle.prefixedText
local sandboxDisplay = message('sandbox-link-display')
local sandboxLink = makeWikilink(sandboxPage, sandboxDisplay)
local sandboxEditUrl = sandboxTitle:fullUrl{action = 'edit'}
local sandboxEditDisplay = message('sandbox-edit-link-display')
local sandboxEditLink = makeUrlLink(sandboxEditUrl, sandboxEditDisplay)
local compareUrl = env.compareUrl
local compareLink
if compareUrl then
local compareDisplay = message('compare-link-display')
compareLink = makeUrlLink(compareUrl, compareDisplay)
end
sandboxLinks = sandboxLink .. ' ' .. makeToolbar(sandboxEditLink, compareLink)
else
local sandboxPreload
if subjectSpace == 828 then
sandboxPreload = message('module-sandbox-preload')
else
sandboxPreload = message('template-sandbox-preload')
end
local sandboxCreateUrl = sandboxTitle:fullUrl{action = 'edit', preload = sandboxPreload}
local sandboxCreateDisplay = message('sandbox-create-link-display')
local sandboxCreateLink = makeUrlLink(sandboxCreateUrl, sandboxCreateDisplay)
local mirrorSummary = message('mirror-edit-summary', {makeWikilink(templatePage)})
local mirrorPreload = message('mirror-link-preload')
local mirrorUrl = sandboxTitle:fullUrl{action = 'edit', preload = mirrorPreload, summary = mirrorSummary}
if subjectSpace == 828 then
mirrorUrl = sandboxTitle:fullUrl{action = 'edit', preload = templateTitle.prefixedText, summary = mirrorSummary}
end
local mirrorDisplay = message('mirror-link-display')
local mirrorLink = makeUrlLink(mirrorUrl, mirrorDisplay)
sandboxLinks = message('sandbox-link-display') .. ' ' .. makeToolbar(sandboxCreateLink, mirrorLink)
end
if testcasesTitle.exists then
local testcasesPage = testcasesTitle.prefixedText
local testcasesDisplay = message('testcases-link-display')
local testcasesLink = makeWikilink(testcasesPage, testcasesDisplay)
local testcasesEditUrl = testcasesTitle:fullUrl{action = 'edit'}
local testcasesEditDisplay = message('testcases-edit-link-display')
local testcasesEditLink = makeUrlLink(testcasesEditUrl, testcasesEditDisplay)
-- for Modules, add testcases run link if exists
if subjectSpace == 828 and testcasesTitle.talkPageTitle and testcasesTitle.talkPageTitle.exists then
local testcasesRunLinkDisplay = message('testcases-run-link-display')
local testcasesRunLink = makeWikilink(testcasesTitle.talkPageTitle.prefixedText, testcasesRunLinkDisplay)
testcasesLinks = testcasesLink .. ' ' .. makeToolbar(testcasesEditLink, testcasesRunLink)
else
testcasesLinks = testcasesLink .. ' ' .. makeToolbar(testcasesEditLink)
end
else
local testcasesPreload
if subjectSpace == 828 then
testcasesPreload = message('module-testcases-preload')
else
testcasesPreload = message('template-testcases-preload')
end
local testcasesCreateUrl = testcasesTitle:fullUrl{action = 'edit', preload = testcasesPreload}
local testcasesCreateDisplay = message('testcases-create-link-display')
local testcasesCreateLink = makeUrlLink(testcasesCreateUrl, testcasesCreateDisplay)
testcasesLinks = message('testcases-link-display') .. ' ' .. makeToolbar(testcasesCreateLink)
end
local messageName
if subjectSpace == 828 then
messageName = 'experiment-blurb-module'
else
messageName = 'experiment-blurb-template'
end
return message(messageName, {sandboxLinks, testcasesLinks})
end
function p.makeCategoriesBlurb(args, env)
--[[
-- Generates the text "Please add categories to the /doc subpage."
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'doc-link-display' --> '/doc'
-- 'add-categories-blurb' --> 'Please add categories to the $1 subpage.'
--]]
local docTitle = env.docTitle
if not docTitle then
return nil
end
local docPathLink = makeWikilink(docTitle.prefixedText, message('doc-link-display'))
return message('add-categories-blurb', {docPathLink})
end
function p.makeSubpagesBlurb(args, env)
--[[
-- Generates the "Subpages of this template" link.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'template-pagetype' --> 'template'
-- 'module-pagetype' --> 'module'
-- 'default-pagetype' --> 'page'
-- 'subpages-link-display' --> 'Subpages of this $1'
--]]
local subjectSpace = env.subjectSpace
local templateTitle = env.templateTitle
if not subjectSpace or not templateTitle then
return nil
end
local pagetype
if subjectSpace == 10 then
pagetype = message('template-pagetype')
elseif subjectSpace == 828 then
pagetype = message('module-pagetype')
else
pagetype = message('default-pagetype')
end
local subpagesLink = makeWikilink(
'Special:PrefixIndex/' .. templateTitle.prefixedText .. '/',
message('subpages-link-display', {pagetype})
)
return message('subpages-blurb', {subpagesLink})
end
function p.makePrintBlurb(args, env)
--[=[
-- Generates the blurb displayed when there is a print version of the template available.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'print-link-display' --> '/Print'
-- 'print-blurb' --> 'A [[Help:Books/for experts#Improving the book layout|print version]]'
-- .. ' of this template exists at $1.'
-- .. ' If you make a change to this template, please update the print version as well.'
-- 'display-print-category' --> true
-- 'print-category' --> 'Templates with print versions'
--]=]
local printTitle = env.printTitle
if not printTitle then
return nil
end
local ret
if printTitle.exists then
local printLink = makeWikilink(printTitle.prefixedText, message('print-link-display'))
ret = message('print-blurb', {printLink})
local displayPrintCategory = message('display-print-category', nil, 'boolean')
if displayPrintCategory then
ret = ret .. makeCategoryLink(message('print-category'))
end
end
return ret
end
----------------------------------------------------------------------------
-- Tracking categories
----------------------------------------------------------------------------
function p.addTrackingCategories(env)
--[[
-- Check if {{documentation}} is transcluded on a /doc or /testcases page.
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'display-strange-usage-category' --> true
-- 'doc-subpage' --> 'doc'
-- 'testcases-subpage' --> 'testcases'
-- 'strange-usage-category' --> 'Wikipedia pages with strange ((documentation)) usage'
--
-- /testcases pages in the module namespace are not categorised, as they may have
-- {{documentation}} transcluded automatically.
--]]
local title = env.title
local subjectSpace = env.subjectSpace
if not title or not subjectSpace then
return nil
end
local subpage = title.subpageText
local ret = ''
if message('display-strange-usage-category', nil, 'boolean')
and (
subpage == message('doc-subpage')
or subjectSpace ~= 828 and subpage == message('testcases-subpage')
)
then
ret = ret .. makeCategoryLink(message('strange-usage-category'))
end
return ret
end
return p
50p732arvlvnk2lwecoqfra3cayqfzj
Module:Documentation/config
828
14994
183895
171704
2022-08-04T14:45:26Z
Xiplus
4323
已保护“[[Module:Documentation/config]]”:高風險模板:874引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
Scribunto
text/plain
----------------------------------------------------------------------------------------------------
--
-- Configuration for Module:Documentation
--
-- Here you can set the values of the parameters and messages used in Module:Documentation to
-- localise it to your wiki and your language. Unless specified otherwise, values given here
-- should be string values.
----------------------------------------------------------------------------------------------------
local cfg = {} -- Do not edit this line.
----------------------------------------------------------------------------------------------------
-- Protection template configuration
----------------------------------------------------------------------------------------------------
-- cfg['protection-reason-edit']
-- The protection reason for edit-protected templates to pass to
-- [[Module:Protection banner]].
cfg['protection-reason-edit'] = 'template'
--[[
----------------------------------------------------------------------------------------------------
-- Sandbox notice configuration
--
-- On sandbox pages the module can display a template notifying users that the current page is a
-- sandbox, and the location of test cases pages, etc. The module decides whether the page is a
-- sandbox or not based on the value of cfg['sandbox-subpage']. The following settings configure the
-- messages that the notices contains.
----------------------------------------------------------------------------------------------------
--]]
-- cfg['sandbox-notice-image']
-- The image displayed in the sandbox notice.
cfg['sandbox-notice-image'] = '[[Image:Sandbox.svg|50px|alt=|link=]]'
--[[
-- cfg['sandbox-notice-pagetype-template']
-- cfg['sandbox-notice-pagetype-module']
-- cfg['sandbox-notice-pagetype-other']
-- The page type of the sandbox page. The message that is displayed depends on the current subject
-- namespace. This message is used in either cfg['sandbox-notice-blurb'] or
-- cfg['sandbox-notice-diff-blurb'].
--]]
cfg['sandbox-notice-pagetype-template'] = '[[Wikipedia:模板的沙盒和测试样例|沙盒]]'
cfg['sandbox-notice-pagetype-module'] = '[[Wikipedia:模板的沙盒和测试样例|沙盒]]'
cfg['sandbox-notice-pagetype-other'] = '沙盒'
--[[
-- cfg['sandbox-notice-blurb']
-- cfg['sandbox-notice-diff-blurb']
-- cfg['sandbox-notice-diff-display']
-- Either cfg['sandbox-notice-blurb'] or cfg['sandbox-notice-diff-blurb'] is the opening sentence
-- of the sandbox notice. The latter has a diff link, but the former does not. $1 is the page
-- type, which is either cfg['sandbox-notice-pagetype-template'],
-- cfg['sandbox-notice-pagetype-module'] or cfg['sandbox-notice-pagetype-other'] depending what
-- namespace we are in. $2 is a link to the main template page, and $3 is a diff link between
-- the sandbox and the main template. The display value of the diff link is set by
-- cfg['sandbox-notice-compare-link-display'].
--]]
cfg['sandbox-notice-blurb'] = '这是$2的$1。'
cfg['sandbox-notice-diff-blurb'] = '这是$2($3)的$1。'
cfg['sandbox-notice-compare-link-display'] = '差异'
--[[
-- cfg['sandbox-notice-testcases-blurb']
-- cfg['sandbox-notice-testcases-link-display']
-- cfg['sandbox-notice-testcases-run-blurb']
-- cfg['sandbox-notice-testcases-run-link-display']
-- cfg['sandbox-notice-testcases-blurb'] is a sentence notifying the user that there is a test cases page
-- corresponding to this sandbox that they can edit. $1 is a link to the test cases page.
-- cfg['sandbox-notice-testcases-link-display'] is the display value for that link.
-- cfg['sandbox-notice-testcases-run-blurb'] is a sentence notifying the user that there is a test cases page
-- corresponding to this sandbox that they can edit, along with a link to run it. $1 is a link to the test
-- cases page, and $2 is a link to the page to run it.
-- cfg['sandbox-notice-testcases-run-link-display'] is the display value for the link to run the test
-- cases.
--]]
cfg['sandbox-notice-testcases-blurb'] = '参见本$1的$2。'
cfg['sandbox-notice-testcases-link-display'] = '测试样例'
cfg['sandbox-notice-testcases-run-blurb'] = '参见本$1的$2($3)。'
cfg['sandbox-notice-testcases-run-link-display'] = '-{zh-cn:运行; zh-tw:執行;}-'
-- cfg['sandbox-category']
-- A category to add to all template sandboxes.
cfg['sandbox-category'] = '模板沙盒'
----------------------------------------------------------------------------------------------------
-- Start box configuration
----------------------------------------------------------------------------------------------------
-- cfg['documentation-icon-wikitext']
-- The wikitext for the icon shown at the top of the template.
cfg['documentation-icon-wikitext'] = '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=-{zh-cn:文档; zh-tw:文件;}-图示]]'
-- cfg['template-namespace-heading']
-- The heading shown in the template namespace.
cfg['template-namespace-heading'] = '模板-{zh-cn:文档; zh-tw:文件;}-'
-- cfg['module-namespace-heading']
-- The heading shown in the module namespace.
cfg['module-namespace-heading'] = '-{zh-hans:模块;zh-hant:模組}--{zh-cn:文档; zh-tw:文件;}-'
-- cfg['file-namespace-heading']
-- The heading shown in the file namespace.
cfg['file-namespace-heading'] = 'Summary'
-- cfg['other-namespaces-heading']
-- The heading shown in other namespaces.
cfg['other-namespaces-heading'] = '-{zh-cn:文档; zh-tw:文件;}-'
-- cfg['view-link-display']
-- The text to display for "view" links.
cfg['view-link-display'] = '-{zh-cn:查看;zh-tw:檢視}-'
-- cfg['edit-link-display']
-- The text to display for "edit" links.
cfg['edit-link-display'] = '编辑'
-- cfg['history-link-display']
-- The text to display for "history" links.
cfg['history-link-display'] = '历史'
-- cfg['purge-link-display']
-- The text to display for "purge" links.
cfg['purge-link-display'] = '清除-{zh-hans:缓存;zh-hant:快取}-'
-- cfg['create-link-display']
-- The text to display for "create" links.
cfg['create-link-display'] = '-{zh-cn:创建; zh-tw:建立;}-'
----------------------------------------------------------------------------------------------------
-- Link box (end box) configuration
----------------------------------------------------------------------------------------------------
-- cfg['transcluded-from-blurb']
-- Notice displayed when the docs are transcluded from another page. $1 is a wikilink to that page.
cfg['transcluded-from-blurb'] = '上述[[Wikipedia:模板文檔頁模式|-{zh-cn:文档; zh-tw:文件;}-]][[Wikipedia:嵌入包含|嵌入]]自$1。'
--[[
-- cfg['create-module-doc-blurb']
-- Notice displayed in the module namespace when the documentation subpage does not exist.
-- $1 is a link to create the documentation page with the preload cfg['module-preload'] and the
-- display cfg['create-link-display'].
--]]
cfg['create-module-doc-blurb'] = '您可能想要$1本[[Wikipedia:Lua|Scribunto-{zh-hans:模块;zh-hant:模組}-]]的-{zh-cn:文档; zh-tw:文件;}-。'
----------------------------------------------------------------------------------------------------
-- Experiment blurb configuration
----------------------------------------------------------------------------------------------------
--[[
-- cfg['experiment-blurb-template']
-- cfg['experiment-blurb-module']
-- The experiment blurb is the text inviting editors to experiment in sandbox and test cases pages.
-- It is only shown in the template and module namespaces. With the default English settings, it
-- might look like this:
--
-- Editors can experiment in this template's sandbox (edit | diff) and testcases (edit) pages.
--
-- In this example, "sandbox", "edit", "diff", "testcases", and "edit" would all be links.
--
-- There are two versions, cfg['experiment-blurb-template'] and cfg['experiment-blurb-module'], depending
-- on what namespace we are in.
--
-- Parameters:
--
-- $1 is a link to the sandbox page. If the sandbox exists, it is in the following format:
--
-- cfg['sandbox-link-display'](cfg['sandbox-edit-link-display'] | cfg['compare-link-display'])
--
-- If the sandbox doesn't exist, it is in the format:
--
-- cfg['sandbox-link-display'](cfg['sandbox-create-link-display'] | cfg['mirror-link-display'])
--
-- The link for cfg['sandbox-create-link-display'] link preloads the page with cfg['template-sandbox-preload']
-- or cfg['module-sandbox-preload'], depending on the current namespace. The link for cfg['mirror-link-display']
-- loads a default edit summary of cfg['mirror-edit-summary'].
--
-- $2 is a link to the test cases page. If the test cases page exists, it is in the following format:
--
-- cfg['testcases-link-display'](cfg['testcases-edit-link-display'])
--
-- If the test cases page doesn't exist, it is in the format:
--
-- cfg['testcases-link-display'](cfg['testcases-create-link-display'])
--
-- If the test cases page doesn't exist, the link for cfg['testcases-create-link-display'] preloads the
-- page with cfg['template-testcases-preload'] or cfg['module-testcases-preload'], depending on the current
-- namespace.
--]]
cfg['experiment-blurb-template'] = "编者可以在本模板的$1和$2页面进行实验。"
cfg['experiment-blurb-module'] = "编者可以在本-{zh-cn:模板;zh-tw:模組}-的$1和$2页面进行实验。"
----------------------------------------------------------------------------------------------------
-- Sandbox link configuration
----------------------------------------------------------------------------------------------------
-- cfg['sandbox-subpage']
-- The name of the template subpage typically used for sandboxes.
cfg['sandbox-subpage'] = 'sandbox'
-- cfg['template-sandbox-preload']
-- Preload file for template sandbox pages.
cfg['template-sandbox-preload'] = 'Template:Documentation/preload-sandbox'
-- cfg['module-sandbox-preload']
-- Preload file for Lua module sandbox pages.
cfg['module-sandbox-preload'] = 'Template:Documentation/preload-module-sandbox'
-- cfg['sandbox-link-display']
-- The text to display for "sandbox" links.
cfg['sandbox-link-display'] = '沙盒'
-- cfg['sandbox-edit-link-display']
-- The text to display for sandbox "edit" links.
cfg['sandbox-edit-link-display'] = '编辑'
-- cfg['sandbox-create-link-display']
-- The text to display for sandbox "create" links.
cfg['sandbox-create-link-display'] = '-{zh-cn:创建; zh-tw:建立;}-'
-- cfg['compare-link-display']
-- The text to display for "compare" links.
cfg['compare-link-display'] = '差异'
-- cfg['mirror-edit-summary']
-- The default edit summary to use when a user clicks the "mirror" link. $1 is a wikilink to the
-- template page.
cfg['mirror-edit-summary'] = '建立$1的沙盒版本' -- 本訊息無法使用轉換
-- cfg['mirror-link-display']
-- The text to display for "mirror" links.
cfg['mirror-link-display'] = '镜像'
-- cfg['mirror-link-preload']
-- The page to preload when a user clicks the "mirror" link.
cfg['mirror-link-preload'] = 'Template:Documentation/mirror'
----------------------------------------------------------------------------------------------------
-- Test cases link configuration
----------------------------------------------------------------------------------------------------
-- cfg['testcases-subpage']
-- The name of the template subpage typically used for test cases.
cfg['testcases-subpage'] = 'testcases'
-- cfg['template-testcases-preload']
-- Preload file for template test cases pages.
cfg['template-testcases-preload'] = 'Template:Documentation/preload-testcases'
-- cfg['module-testcases-preload']
-- Preload file for Lua module test cases pages.
cfg['module-testcases-preload'] = 'Template:Documentation/preload-module-testcases'
-- cfg['testcases-link-display']
-- The text to display for "testcases" links.
cfg['testcases-link-display'] = '测试样例'
-- cfg['testcases-edit-link-display']
-- The text to display for test cases "edit" links.
cfg['testcases-edit-link-display'] = '编辑'
-- cfg['testcases-run-link-display']
-- The text to display for test cases "run" links.
cfg['testcases-run-link-display'] = '-{zh-cn:运行; zh-tw:執行;}-'
-- cfg['testcases-create-link-display']
-- The text to display for test cases "create" links.
cfg['testcases-create-link-display'] = '-{zh-cn:创建; zh-tw:建立;}-'
----------------------------------------------------------------------------------------------------
-- Add categories blurb configuration
----------------------------------------------------------------------------------------------------
--[[
-- cfg['add-categories-blurb']
-- Text to direct users to add categories to the /doc subpage. Not used if the "content" or
-- "docname fed" arguments are set, as then it is not clear where to add the categories. $1 is a
-- link to the /doc subpage with a display value of cfg['doc-link-display'].
--]]
cfg['add-categories-blurb'] = '请在$1子页面中添加分类。'
-- cfg['doc-link-display']
-- The text to display when linking to the /doc subpage.
cfg['doc-link-display'] = '/doc'
----------------------------------------------------------------------------------------------------
-- Subpages link configuration
----------------------------------------------------------------------------------------------------
--[[
-- cfg['subpages-blurb']
-- The "Subpages of this template" blurb. $1 is a link to the main template's subpages with a
-- display value of cfg['subpages-link-display']. In the English version this blurb is simply
-- the link followed by a period, and the link display provides the actual text.
--]]
cfg['subpages-blurb'] = '$1。'
--[[
-- cfg['subpages-link-display']
-- The text to display for the "subpages of this page" link. $1 is cfg['template-pagetype'],
-- cfg['module-pagetype'] or cfg['default-pagetype'], depending on whether the current page is in
-- the template namespace, the module namespace, or another namespace.
--]]
cfg['subpages-link-display'] = '本$1的子页面'
-- cfg['template-pagetype']
-- The pagetype to display for template pages.
cfg['template-pagetype'] = '模板'
-- cfg['module-pagetype']
-- The pagetype to display for Lua module pages.
cfg['module-pagetype'] = '-{zh-cn:模块;zh-tw:模組;}-'
-- cfg['default-pagetype']
-- The pagetype to display for pages other than templates or Lua modules.
cfg['default-pagetype'] = '页'
----------------------------------------------------------------------------------------------------
-- Doc link configuration
----------------------------------------------------------------------------------------------------
-- cfg['doc-subpage']
-- The name of the subpage typically used for documentation pages.
cfg['doc-subpage'] = 'doc'
-- cfg['file-docpage-preload']
-- Preload file for documentation page in the file namespace.
cfg['file-docpage-preload'] = 'Template:Documentation/preload-filespace'
-- cfg['docpage-preload']
-- Preload file for template documentation pages in all namespaces.
cfg['docpage-preload'] = 'Template:Documentation/preload'
-- cfg['module-preload']
-- Preload file for Lua module documentation pages.
cfg['module-preload'] = 'Template:Documentation/preload-module-doc'
----------------------------------------------------------------------------------------------------
-- Print version configuration
----------------------------------------------------------------------------------------------------
-- cfg['print-subpage']
-- The name of the template subpage used for print versions.
cfg['print-subpage'] = 'Print'
-- cfg['print-link-display']
-- The text to display when linking to the /Print subpage.
cfg['print-link-display'] = '/Print'
-- cfg['print-blurb']
-- Text to display if a /Print subpage exists. $1 is a link to the subpage with a display value of cfg['print-link-display'].
cfg['print-blurb'] = 'A [[Help:Books/for experts#Improving the book layout|print version]] of this template exists at $1.'
.. ' If you make a change to this template, please update the print version as well.'
-- cfg['display-print-category']
-- Set to true to enable output of cfg['print-category'] if a /Print subpage exists.
-- This should be a boolean value (either true or false).
cfg['display-print-category'] = true
-- cfg['print-category']
-- Category to output if cfg['display-print-category'] is set to true, and a /Print subpage exists.
cfg['print-category'] = 'Templates with print versions'
----------------------------------------------------------------------------------------------------
-- HTML and CSS configuration
----------------------------------------------------------------------------------------------------
-- cfg['main-div-id']
-- The "id" attribute of the main HTML "div" tag.
cfg['main-div-id'] = 'template-documentation'
-- cfg['main-div-classes']
-- The CSS classes added to the main HTML "div" tag.
cfg['main-div-classes'] = 'template-documentation iezoomfix'
-- cfg['start-box-linkclasses']
-- The CSS classes used for the [view][edit][history] or [create] links in the start box.
cfg['start-box-linkclasses'] = 'mw-editsection-like plainlinks'
-- cfg['start-box-link-id']
-- The HTML "id" attribute for the links in the start box.
cfg['start-box-link-id'] = 'doc_editlinks'
----------------------------------------------------------------------------------------------------
-- {{fmbox}} template configuration
----------------------------------------------------------------------------------------------------
-- cfg['fmbox-id']
-- The id sent to the "id" parameter of the {{fmbox}} template.
cfg['fmbox-id'] = 'documentation-meta-data'
-- cfg['fmbox-style']
-- The value sent to the style parameter of {{fmbox}}.
cfg['fmbox-style'] = 'background-color: #ecfcf4'
-- cfg['fmbox-textstyle']
-- The value sent to the "textstyle parameter of {{fmbox}}.
cfg['fmbox-textstyle'] = 'font-size: small'
----------------------------------------------------------------------------------------------------
-- Tracking category configuration
----------------------------------------------------------------------------------------------------
-- cfg['display-strange-usage-category']
-- Set to true to enable output of cfg['strange-usage-category'] if the module is used on a /doc subpage
-- or a /testcases subpage. This should be a boolean value (either true or false).
cfg['display-strange-usage-category'] = true
-- cfg['strange-usage-category']
-- Category to output if cfg['display-strange-usage-category'] is set to true and the module is used on a
-- /doc subpage or a /testcases subpage.
cfg['strange-usage-category'] = 'Wikipedia pages with strange ((documentation)) usage'
--[[
----------------------------------------------------------------------------------------------------
-- End configuration
--
-- Don't edit anything below this line.
----------------------------------------------------------------------------------------------------
--]]
return cfg
jn20st178omqjfkrl3tdvabfv2i3xv7
Module:Message box
828
14998
183912
171707
2022-08-04T15:08:35Z
Xiplus
4323
已保护“[[Module:Message box]]”:高風險模板:1600引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
Scribunto
text/plain
-- This is a meta-module for producing message box templates, including {{mbox}}, {{ambox}}, {{imbox}}, {{tmbox}}, {{ombox}}, {{cmbox}} and {{fmbox}}.
-- Require necessary modules.
local getArgs = require('Module:Arguments').getArgs
local categoryHandler = require('Module:Category handler').main
local yesno = require('Module:Yesno')
-- Load the configuration page.
local cfgTables = mw.loadData('Module:Message box/configuration')
-- Get a language object for formatDate and ucfirst.
local lang = mw.language.getContentLanguage()
-- Set aliases for often-used functions to reduce table lookups.
local format = mw.ustring.format
local tinsert = table.insert
local tconcat = table.concat
local trim = mw.text.trim
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function getTitleObject(page, ...)
if type(page) == 'string' then
-- Get the title object, passing the function through pcall
-- in case we are over the expensive function count limit.
local success, title = pcall(mw.title.new, page, ...)
if success then
return title
end
end
end
local function union(t1, t2)
-- Returns the union of two arrays.
local vals = {}
for i, v in ipairs(t1) do
vals[v] = true
end
for i, v in ipairs(t2) do
vals[v] = true
end
local ret = {}
for k in pairs(vals) do
tinsert(ret, k)
end
table.sort(ret)
return ret
end
local function getArgNums(args, prefix)
local nums = {}
for k, v in pairs(args) do
local num = mw.ustring.match(tostring(k), '^' .. prefix .. '([1-9]%d*)$')
if num then
tinsert(nums, tonumber(num))
end
end
table.sort(nums)
return nums
end
--------------------------------------------------------------------------------
-- Box class definition
--------------------------------------------------------------------------------
local box = {}
box.__index = box
function box.new()
local obj = {}
setmetatable(obj, box)
return obj
end
function box.getNamespaceId(ns)
if not ns then return end
if type(ns) == 'string' then
ns = lang:ucfirst(mw.ustring.lower(ns))
if ns == 'Main' then
ns = 0
end
end
local nsTable = mw.site.namespaces[ns]
if nsTable then
return nsTable.id
end
end
function box.getMboxType(nsid)
-- Gets the mbox type from a namespace number.
if nsid == 0 then
return 'ambox' -- main namespace
elseif nsid == 6 then
return 'imbox' -- file namespace
elseif nsid == 14 then
return 'cmbox' -- category namespace
else
local nsTable = mw.site.namespaces[nsid]
if nsTable and nsTable.isTalk then
return 'tmbox' -- any talk namespace
else
return 'ombox' -- other namespaces or invalid input
end
end
end
function box:addCat(ns, cat, sort)
if type(cat) ~= 'string' then return end
local nsVals = {'main', 'template', 'all'}
local tname
for i, val in ipairs(nsVals) do
if ns == val then
tname = ns .. 'Cats'
end
end
if not tname then
for i, val in ipairs(nsVals) do
nsVals[i] = format('"%s"', val)
end
error('無效的ns參數傳送到box:addCat;有效的數值為' .. mw.text.listToText(nsVals, '、', '或'))
end
self[tname] = self[tname] or {}
if type(sort) == 'string' then
tinsert(self[tname], format('[[Category:%s|%s]]', cat, sort))
else
tinsert(self[tname], format('[[Category:%s]]', cat))
end
end
function box:addClass(class)
if type(class) ~= 'string' then return end
self.classes = self.classes or {}
tinsert(self.classes, class)
end
function box:setTitle(args)
-- Get the title object and the namespace.
self.pageTitle = getTitleObject(args.page ~= '' and args.page)
self.title = self.pageTitle or mw.title.getCurrentTitle()
self.demospace = args.demospace ~= '' and args.demospace or nil
self.nsid = box.getNamespaceId(self.demospace) or self.title.namespace
end
function box:getConfig(boxType)
-- Get the box config data from the data page.
if boxType == 'mbox' then
boxType = box.getMboxType(self.nsid)
end
local cfg = cfgTables[boxType]
if not cfg then
local boxTypes = {}
for k, v in pairs(dataTables) do
tinsert(boxTypes, format('"%s"', k))
end
tinsert(boxTypes, '"mbox"')
error(format('無效的訊息框類型「%s」;有效的類型為%s', tostring(boxType), mw.text.listToText(boxTypes)), 2)
end
return cfg
end
function box:removeBlankArgs(cfg, args)
-- Only allow blank arguments for the parameter names listed in cfg.allowBlankParams.
local newArgs = {}
for k, v in pairs(args) do
if v ~= '' then
newArgs[k] = v
end
end
for i, param in ipairs(cfg.allowBlankParams or {}) do
newArgs[param] = args[param]
end
return newArgs
end
function box:setBoxParameters(cfg, args)
-- Get type data.
self.type = args.type
local typeData = cfg.types[self.type]
self.invalidTypeError = cfg.showInvalidTypeError and self.type and not typeData and true or false
typeData = typeData or cfg.types[cfg.default]
self.typeClass = typeData.class
self.typeImage = typeData.image
-- Find if the box has been wrongly substituted.
if cfg.substCheck and args.subst == 'SUBST' then
self.isSubstituted = true
end
-- Find whether we are using a small message box.
if cfg.allowSmall and (
cfg.smallParam and args.small == cfg.smallParam
or not cfg.smallParam and yesno(args.small)
)
then
self.isSmall = true
else
self.isSmall = false
end
-- Add attributes, classes and styles.
if cfg.allowId then
self.id = args.id
self.name = args.name
if self.name then
self:addClass('box-' .. string.gsub(self.name,' ','_'))
end
end
self:addClass(cfg.usePlainlinksParam and yesno(args.plainlinks or true) and 'plainlinks')
for _, class in ipairs(cfg.classes or {}) do
self:addClass(class)
end
if self.isSmall then
self:addClass(cfg.smallClass or 'mbox-small')
end
if yesno(args.hidden) then
self:addClass('infobox editsection')
end
self:addClass(self.typeClass)
self:addClass(args.class)
self.style = args.style
-- Set text style.
self.textstyle = args.textstyle
-- Find if we are on the template page or not. This functionality is only used if useCollapsibleTextFields is set,
-- or if both cfg.templateCategory and cfg.templateCategoryRequireName are set.
self.useCollapsibleTextFields = cfg.useCollapsibleTextFields
if self.useCollapsibleTextFields or cfg.templateCategory and cfg.templateCategoryRequireName then
self.name = args.name
if self.name then
local templateName = mw.ustring.match(self.name, '^[tT][eE][mM][pP][lL][aA][tT][eE][%s_]*:[%s_]*(.*)$') or self.name
templateName = 'Template:' .. templateName
self.templateTitle = getTitleObject(templateName)
end
self.isTemplatePage = self.templateTitle and mw.title.equals(self.title, self.templateTitle) or false
end
-- Process data for collapsible text fields. At the moment these are only used in {{ambox}}.
if self.useCollapsibleTextFields then
-- Get the self.issue value.
if self.isSmall and args.smalltext then
self.issue = args.smalltext
else
local sect
if args.sect == '' then
sect = '此' .. (cfg.sectionDefault or '頁面')
elseif type(args.sect) == 'string' then
sect = '此' .. args.sect
end
local issue = args.issue
issue = type(issue) == 'string' and issue ~= '' and issue or nil
local text = args.text
text = type(text) == 'string' and text or nil
local issues = {}
tinsert(issues, sect)
tinsert(issues, issue)
tinsert(issues, text)
self.issue = tconcat(issues)
end
-- Get the self.talk value.
local talk = args.talk
if talk == '' -- Show talk links on the template page or template subpages if the talk parameter is blank.
and self.templateTitle
and (mw.title.equals(self.templateTitle, self.title) or self.title:isSubpageOf(self.templateTitle))
then
talk = '#'
elseif talk == '' then
talk = nil
end
if talk then
-- If the talk value is a talk page, make a link to that page. Else assume that it's a section heading,
-- and make a link to the talk page of the current page with that section heading.
local talkTitle = getTitleObject(talk)
local talkArgIsTalkPage = true
if not talkTitle or not talkTitle.isTalkPage then
talkArgIsTalkPage = false
talkTitle = getTitleObject(self.title.text, mw.site.namespaces[self.title.namespace].talk.id)
end
if talkTitle and talkTitle.exists then
local talkText = '相關討論可見於'
if talkArgIsTalkPage then
talkText = format('%s[[%s|%s]]。', talkText, talk, talkTitle.prefixedText)
else
talkText = format('%s[[%s#%s|討論頁]]。', talkText, talkTitle.prefixedText, talk)
end
self.talk = talkText
end
end
-- Get other values.
local date
if args.date and args.date ~= '' then
date = args.date
elseif args.time == '' and self.isTemplatePage then
date = lang:formatDate('Y年n月j日')
elseif args.time and args.time ~= '' then
date = lang:formatDate('Y年n月j日', args.time)
end
if date then
local ok, tempdate = pcall(lang.formatDate, lang, 'Y年n月j日', date) -- 正規化日期
if ok then
date = tempdate
end
end
if date then
self.date = string.format(" <small class='date-container'>''(<span class='date'>%s</span>)''</small>", date)
end
if args.fix and args.fix ~= '' then
self.fix = format("<br /><small>%s</small>", args.fix)
else
self.fix = ''
end
self.info = args.info
end
-- Set the non-collapsible text field. At the moment this is used by all box types other than ambox,
-- and also by ambox when small=yes.
if self.isSmall then
self.text = args.smalltext or args.text
else
self.text = args.text
end
-- Set the below row.
self.below = cfg.below and args.below
-- General image settings.
self.imageCellDiv = not self.isSmall and cfg.imageCellDiv and true or false
self.imageEmptyCell = cfg.imageEmptyCell
if cfg.imageEmptyCellStyle then
self.imageEmptyCellStyle = 'border:none;padding:0px;width:1px'
end
-- Left image settings.
local imageLeft = self.isSmall and args.smallimage or args.image
if cfg.imageCheckBlank and imageLeft ~= 'blank' and imageLeft ~= 'none'
or not cfg.imageCheckBlank and imageLeft ~= 'none'
then
self.imageLeft = imageLeft
if not imageLeft then
local imageSize = self.isSmall and (cfg.imageSmallSize or '30x30px') or '40x40px'
self.imageLeft = format('[[File:%s|%s|link=|alt=]]', self.typeImage or 'Imbox notice.png', imageSize)
end
end
-- Right image settings.
local imageRight = self.isSmall and args.smallimageright or args.imageright
if not (cfg.imageRightNone and imageRight == 'none') then
self.imageRight = imageRight
end
-- Add mainspace categories. At the moment these are only used in {{ambox}}.
if cfg.allowMainspaceCategories then
if args.cat then
args.cat1 = args.cat
end
self.catNums = getArgNums(args, 'cat')
if args.category then
args.category1 = args.category
end
self.categoryNums = getArgNums(args, 'category')
if args.all then
args.all1 = args.all
end
self.allNums = getArgNums(args, 'all')
self.categoryParamNums = union(self.catNums, self.categoryNums)
self.categoryParamNums = union(self.categoryParamNums, self.allNums)
-- The following is roughly equivalent to the old {{Ambox/category}}.
local date
local sortDay
local dayName = {
[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] = '㏾'
}
if args.date and args.date ~= '' then
date = args.date
local ok, tempdate = pcall(lang.formatDate, lang, 'Y年n月', date) -- 正規化日期
if ok then
date = tempdate
end
elseif args.time and args.time ~= '' then
date = lang:formatDate('Y年n月', args.time)
sortDay = lang:formatDate('j', args.time)
sortDay = tonumber(sortDay)
sortDay = dayName[sortDay]
end
date = type(date) == 'string' and date
local preposition = '自'
for _, num in ipairs(self.categoryParamNums) do
local mainCat = args['cat' .. tostring(num)] or args['category' .. tostring(num)]
local allCat = args['all' .. tostring(num)]
mainCat = type(mainCat) == 'string' and mainCat
allCat = type(allCat) == 'string' and allCat
if mainCat and date and date ~= '' then
local catTitle = format('%s%s%s', preposition, date, mainCat)
if sortDay then
self:addCat('main', catTitle, sortDay)
else
self:addCat('main', catTitle)
end
catTitle = getTitleObject('Category:' .. catTitle)
if not catTitle or not catTitle.exists then
self:addCat('main', '模板中使用无效日期参数的条目')
end
elseif mainCat and (not date or date == '') then
self:addCat('main', mainCat)
end
if allCat then
self:addCat('main', allCat)
end
end
end
-- Add template-namespace categories.
if cfg.templateCategory then
if cfg.templateCategoryRequireName then
if self.isTemplatePage then
self:addCat('template', cfg.templateCategory)
end
elseif not self.title.isSubpage then
self:addCat('template', cfg.templateCategory)
end
end
-- Add template error category.
if cfg.templateErrorCategory then
local templateErrorCategory = cfg.templateErrorCategory
local templateCat, templateSort
if not self.name and not self.title.isSubpage then
templateCat = templateErrorCategory
elseif self.isTemplatePage then
local paramsToCheck = cfg.templateErrorParamsToCheck or {}
local count = 0
for i, param in ipairs(paramsToCheck) do
if not args[param] then
count = count + 1
end
end
if count > 0 then
templateCat = templateErrorCategory
templateSort = tostring(count)
end
if self.categoryNums and #self.categoryNums > 0 then
templateCat = templateErrorCategory
templateSort = 'C'
end
end
self:addCat('template', templateCat, templateSort)
end
-- Categories for all namespaces.
if self.invalidTypeError then
local allSort = (self.nsid == 0 and 'Main:' or '') .. self.title.prefixedText
self:addCat('all', '需要修复的信息框', allSort)
end
if self.isSubstituted then
self:addCat('all', '錯誤使用替換引用的頁面')
end
-- Convert category tables to strings and pass them through [[Module:Category handler]].
self.categories = categoryHandler{
main = tconcat(self.mainCats or {}),
template = tconcat(self.templateCats or {}),
all = tconcat(self.allCats or {}),
nocat = args.nocat,
demospace = self.demospace,
page = self.pageTitle and self.pageTitle.prefixedText or nil
}
end
function box:export()
local root = mw.html.create()
-- Add the subst check error.
if self.isSubstituted and self.name then
root
:tag('b')
:addClass('error')
:wikitext(format(
'模板<code>%s[[Template:%s|%s]]%s</code>被錯誤地替代。',
mw.text.nowiki('{{'), self.name, self.name, mw.text.nowiki('}}')
))
end
-- Create the box table.
local boxTable = root:tag('table')
boxTable
:attr('id', self.id)
for i, class in ipairs(self.classes or {}) do
boxTable
:addClass(class)
end
boxTable
:cssText(self.style)
:attr('role', 'presentation')
-- Add the left-hand image.
local row = boxTable:tag('tr')
if self.imageLeft then
local imageLeftCell = row:tag('td'):addClass('mbox-image')
if self.imageCellDiv then
-- If we are using a div, redefine imageLeftCell so that the image is inside it.
-- Divs use style="width: 52px;", which limits the image width to 52px. If any
-- images in a div are wider than that, they may overlap with the text or cause
-- other display problems.
imageLeftCell = imageLeftCell:tag('div'):css('width', '52px')
end
imageLeftCell
:wikitext(self.imageLeft)
elseif self.imageEmptyCell then
-- Some message boxes define an empty cell if no image is specified, and some don't.
-- The old template code in templates where empty cells are specified gives the following hint:
-- "No image. Cell with some width or padding necessary for text cell to have 100% width."
row:tag('td')
:addClass('mbox-empty-cell')
:cssText(self.imageEmptyCellStyle)
end
-- Add the text.
local textCell = row:tag('td'):addClass('mbox-text')
if self.useCollapsibleTextFields then
-- The message box uses advanced text parameters that allow things to be collapsible. At the
-- moment, only ambox uses this.
textCell
:cssText(self.textstyle)
local textCellSpan = textCell:tag('span')
textCellSpan
:addClass('mbox-text-span')
:wikitext(self.issue)
if not self.isSmall then
textCellSpan
:tag('span')
:addClass('hide-when-compact')
:wikitext(self.talk and self.talk)
end
textCellSpan
:wikitext(self.date and self.date)
if not self.isSmall and self.fix ~= '' then
textCellSpan
:tag('span')
:addClass('hide-when-compact')
:wikitext(self.fix and self.fix)
end
if not self.isSmall then
textCellSpan
:tag('span')
:addClass('hide-when-compact')
:wikitext(self.info and self.info)
end
else
-- Default text formatting - anything goes.
textCell
:cssText(self.textstyle)
:wikitext(self.text)
end
-- Add the right-hand image.
if self.imageRight then
local imageRightCell = row:tag('td'):addClass('mbox-imageright')
if self.imageCellDiv then
imageRightCell = imageRightCell:tag('div'):css('width', '52px') -- If we are using a div, redefine imageRightCell so that the image is inside it.
end
imageRightCell
:wikitext(self.imageRight)
end
-- Add the below row.
if self.below then
boxTable:tag('tr')
:tag('td')
:attr('colspan', self.imageRight and '3' or '2')
:addClass('mbox-text')
:cssText(self.textstyle)
:wikitext(self.below)
end
-- Add error message for invalid type parameters.
if self.invalidTypeError then
root
:tag('div')
:css('text-align', 'center')
:wikitext(format('此訊息框使用無效的「type=%s」參數,需要修復。', self.type or ''))
end
-- Add categories.
root
:wikitext(self.categories)
return tostring(root)
end
local function main(boxType, args)
local outputBox = box.new()
outputBox:setTitle(args)
local cfg = outputBox:getConfig(boxType)
args = outputBox:removeBlankArgs(cfg, args)
outputBox:setBoxParameters(cfg, args)
return outputBox:export()
end
local function makeWrapper(boxType)
return function (frame)
local args = getArgs(frame, {trim = false, removeBlanks = false})
return main(boxType, args)
end
end
local p = {
main = main,
mbox = makeWrapper('mbox')
}
for boxType in pairs(cfgTables) do
p[boxType] = makeWrapper(boxType)
end
return p
si3urgp36dnctgsl69jwbld9e0o8uzg
Module:Message box/configuration
828
14999
183913
164627
2022-08-04T15:08:45Z
Xiplus
4323
已保护“[[Module:Message box/configuration]]”:高風險模板:1600引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
Scribunto
text/plain
local ambox = {
types = {
speedy = {
class = 'ambox-speedy',
image = 'Ambox warning pn.svg'
},
delete = {
class = 'ambox-delete',
image = 'Ambox warning pn.svg'
},
content = {
class = 'ambox-content',
image = 'Ambox important.svg'
},
style = {
class = 'ambox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'ambox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'ambox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
notice = {
class = 'ambox-notice',
image = 'Information icon4.svg'
}
},
default = 'notice',
allowBlankParams = {'talk', 'sect', 'date', 'issue', 'fix', 'subst', 'hidden'},
allowSmall = true,
smallParam = 'left',
smallClass = 'mbox-small-left',
substCheck = true,
classes = {'metadata', 'ambox'},
usePlainlinksParam = true,
allowId = true,
imageEmptyCell = true,
imageCheckBlank = true,
imageSmallSize = '20x20px',
imageCellDiv = true,
useCollapsibleTextFields = true,
imageRightNone = true,
sectionDefault = '條目',
allowMainspaceCategories = true,
templateCategory = '條目訊息模板',
templateCategoryRequireName = true,
templateErrorCategory = '缺少參數的條目訊息模板',
templateErrorParamsToCheck = {'issue', 'fix', 'subst'}
}
local cmbox = {
types = {
speedy = {
class = 'cmbox-speedy',
image = 'Ambox warning pn.svg'
},
delete = {
class = 'cmbox-delete',
image = 'Ambox warning pn.svg'
},
content = {
class = 'cmbox-content',
image = 'Ambox important.svg'
},
style = {
class = 'cmbox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'cmbox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'cmbox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
notice = {
class = 'cmbox-notice',
image = 'Information icon4.svg'
}
},
default = 'notice',
showInvalidTypeError = true,
classes = {'cmbox'},
usePlainlinksParam = true,
imageEmptyCell = true
}
local fmbox = {
types = {
warning = {
class = 'fmbox-warning',
image = 'Ambox warning pn.svg'
},
editnotice = {
class = 'fmbox-editnotice',
image = 'Information icon4.svg'
},
system = {
class = 'fmbox-system',
image = 'Information icon4.svg'
}
},
default = 'system',
showInvalidTypeError = true,
allowId = true,
classes = {'fmbox'},
usePlainlinksParam = true,
imageEmptyCell = false,
imageRightNone = false
}
local imbox = {
types = {
speedy = {
class = 'imbox-speedy',
image = 'Ambox warning pn.svg'
},
delete = {
class = 'imbox-delete',
image = 'Ambox warning pn.svg'
},
content = {
class = 'imbox-content',
image = 'Ambox important.svg'
},
style = {
class = 'imbox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'imbox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'imbox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
license = {
class = 'imbox-license',
image = 'Imbox license.png'
},
featured = {
class = 'imbox-featured',
image = 'Cscr-featured.svg'
},
notice = {
class = 'imbox-notice',
image = 'Information icon4.svg'
}
},
default = 'notice',
showInvalidTypeError = true,
classes = {'imbox'},
usePlainlinksParam = true,
imageEmptyCell = true,
below = true,
templateCategory = '檔案訊息模板'
}
local ombox = {
types = {
speedy = {
class = 'ombox-speedy',
image = 'Ambox warning pn.svg'
},
delete = {
class = 'ombox-delete',
image = 'Ambox warning pn.svg'
},
content = {
class = 'ombox-content',
image = 'Ambox important.svg'
},
style = {
class = 'ombox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'ombox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'ombox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
notice = {
class = 'ombox-notice',
image = 'Information icon4.svg'
},
note = {
class = 'ombox-notice',
image = 'Information icon4.svg'
}
},
default = 'notice',
showInvalidTypeError = true,
classes = {'ombox'},
usePlainlinksParam = true,
allowSmall = true,
imageEmptyCell = true,
imageRightNone = true
}
local tmbox = {
types = {
speedy = {
class = 'tmbox-speedy',
image = 'Ambox warning pn.svg'
},
delete = {
class = 'tmbox-delete',
image = 'Ambox warning pn.svg'
},
content = {
class = 'tmbox-content',
image = 'Ambox important.svg'
},
style = {
class = 'tmbox-style',
image = 'Edit-clear.svg '
},
move = {
class = 'tmbox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'tmbox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
notice = {
class = 'tmbox-notice',
image = 'Information icon4.svg'
}
},
default = 'notice',
showInvalidTypeError = true,
classes = {'tmbox'},
usePlainlinksParam = true,
allowId = true,
allowSmall = true,
imageRightNone = true,
imageEmptyCell = true,
imageEmptyCellStyle = true,
templateCategory = '討論訊息模板'
}
return {
ambox = ambox,
cmbox = cmbox,
fmbox = fmbox,
imbox = imbox,
ombox = ombox,
tmbox = tmbox
}
p2ubt99bq93xuddwipvkbzm4777t3sc
Module:No globals
828
15000
183916
136184
2022-08-04T15:09:15Z
Xiplus
4323
已保护“[[Module:No globals]]”:高風險模板:5160引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
Scribunto
text/plain
local mt = getmetatable(_G) or {}
function mt.__index (t, k)
if k ~= 'arg' then
error('尝试读取空全局变量:' .. tostring(k), 2)
end
return nil
end
function mt.__newindex(t, k, v)
if k ~= 'arg' then
error('尝试写入全局变量:' .. tostring(k), 2)
end
rawset(t, k, v)
end
setmetatable(_G, mt)
ds1cgdo9zu6obd3d2bnmnnwfd6kq3cn
Module:Wikidata
828
16099
183923
113140
2022-08-04T15:10:26Z
Xiplus
4323
已保护“[[Module:Wikidata]]”:高風險模板:5131引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
Scribunto
text/plain
-- vim: set noexpandtab ft=lua ts=4 sw=4:
require('Module:No globals')
local p = {}
local debug = false
------------------------------------------------------------------------------
-- module local variables and functions
local wiki =
{
langcode = mw.language.getContentLanguage().code
}
-- internationalisation
local i18n =
{
["errors"] =
{
["property-not-found"] = "Property not found.",
["entity-not-found"] = "Wikidata entity not found.",
["unknown-claim-type"] = "Unknown claim type.",
["unknown-entity-type"] = "Unknown entity type.",
["qualifier-not-found"] = "Qualifier not found.",
["site-not-found"] = "Wikimedia project not found.",
["unknown-datetime-format"] = "Unknown datetime format.",
["local-article-not-found"] = "Article is not yet available in this wiki."
},
["datetime"] =
{
-- $1 is a placeholder for the actual number
[0] = "$1 billion years", -- precision: billion years
[1] = "$100 million years", -- precision: hundred million years
[2] = "$10 million years", -- precision: ten million years
[3] = "$1 million years", -- precision: million years
[4] = "$100,000 years", -- precision: hundred thousand years
[5] = "$10,000 years", -- precision: ten thousand years
[6] = "$1 millennium", -- precision: millennium
[7] = "$1 century", -- precision: century
[8] = "$1s", -- precision: decade
-- the following use the format of #time parser function
[9] = "Y", -- precision: year,
[10] = "F Y", -- precision: month
[11] = "F j, Y", -- precision: day
[12] = "F j, Y ga", -- precision: hour
[13] = "F j, Y g:ia", -- precision: minute
[14] = "F j, Y g:i:sa", -- precision: second
["beforenow"] = "$1 BCE", -- how to format negative numbers for precisions 0 to 5
["afternow"] = "$1 CE", -- how to format positive numbers for precisions 0 to 5
["bc"] = '$1 "BCE"', -- how print negative years
["ad"] = "$1", -- how print positive years
-- the following are for function getDateValue() and getQualifierDateValue()
["default-format"] = "dmy", -- default value of the #3 (getDateValue) or
-- #4 (getQualifierDateValue) argument
["default-addon"] = "BC", -- default value of the #4 (getDateValue) or
-- #5 (getQualifierDateValue) argument
["prefix-addon"] = false, -- set to true for languages put "BC" in front of the
-- datetime string; or the addon will be suffixed
["addon-sep"] = " ", -- separator between datetime string and addon (or inverse)
["format"] = -- options of the 3rd argument
{
["mdy"] = "F j, Y",
["my"] = "F Y",
["y"] = "Y",
["dmy"] = "j F Y",
["ymd"] = "Y-m-d",
["ym"] = "Y-m"
}
},
["monolingualtext"] = '<span lang="%language">%text</span>',
["warnDump"] = "[[Category:Called function 'Dump' from module Wikidata]]",
["ordinal"] =
{
[1] = "st",
[2] = "nd",
[3] = "rd",
["default"] = "th"
}
}
-- Credit to http://stackoverflow.com/a/1283608/2644759
-- cc-by-sa 3.0
local function tableMerge(t1, t2)
for k,v in pairs(t2) do
if type(v) == "table" then
if type(t1[k] or false) == "table" then
tableMerge(t1[k] or {}, t2[k] or {})
else
t1[k] = v
end
else
t1[k] = v
end
end
return t1
end
local function loadI18n()
local exist, res = pcall(require, "Module:Wikidata/i18n")
if exist and next(res) ~= nil then
tableMerge(i18n, res.i18n)
end
end
-- Function below not needed at the moment
-- loadI18n()
-- this function needs to be internationalised along with the above:
-- takes cardinal numer as a numeric and returns the ordinal as a string
-- we need three exceptions in English for 1st, 2nd, 3rd, 21st, .. 31st, etc.
local function makeOrdinal (cardinal)
local ordsuffix = i18n.ordinal.default
if cardinal % 10 == 1 then
ordsuffix = i18n.ordinal[1]
elseif cardinal % 10 == 2 then
ordsuffix = i18n.ordinal[2]
elseif cardinal % 10 == 3 then
ordsuffix = i18n.ordinal[3]
end
-- In English, 1, 21, 31, etc. use 'st', but 11, 111, etc. use 'th'
-- similarly for 12 and 13, etc.
if (cardinal % 100 == 11) or (cardinal % 100 == 12) or (cardinal % 100 == 13) then
ordsuffix = i18n.ordinal.default
end
return tostring(cardinal) .. ordsuffix
end
local function printError(code)
return '<span class="error">' .. (i18n.errors[code] or code) .. '</span>'
end
local function parseDateValue(timestamp, date_format, date_addon)
local prefix_addon = i18n["datetime"]["prefix-addon"]
local addon_sep = i18n["datetime"]["addon-sep"]
local addon = ""
-- check for negative date
if string.sub(timestamp, 1, 1) == '-' then
timestamp = '+' .. string.sub(timestamp, 2)
addon = date_addon
end
local function d(f)
local year_suffix
local tstr = ""
local lang_obj = mw.language.new(wiki.langcode)
local f_parts = mw.text.split(f, 'Y', true)
for idx, f_part in pairs(f_parts) do
year_suffix = ''
if string.match(f_part, "x[mijkot]$") then
-- for non-Gregorian year
f_part = f_part .. 'Y'
elseif idx < #f_parts then
-- supress leading zeros in year
year_suffix = lang_obj:formatDate('Y', timestamp)
year_suffix = string.gsub(year_suffix, '^0+', '', 1)
end
tstr = tstr .. lang_obj:formatDate(f_part, timestamp) .. year_suffix
end
if addon ~= "" and prefix_addon then
return addon .. addon_sep .. tstr
elseif addon ~= "" then
return tstr .. addon_sep .. addon
else
return tstr
end
end
local _date_format = i18n["datetime"]["format"][date_format]
if _date_format ~= nil then
return d(_date_format)
else
return printError("unknown-datetime-format")
end
end
-- This local function combines the year/month/day/BC/BCE handling of parseDateValue{}
-- with the millennium/century/decade handling of formatDate()
local function parseDateFull(timestamp, precision, date_format, date_addon)
local prefix_addon = i18n["datetime"]["prefix-addon"]
local addon_sep = i18n["datetime"]["addon-sep"]
local addon = ""
-- check for negative date
if string.sub(timestamp, 1, 1) == '-' then
timestamp = '+' .. string.sub(timestamp, 2)
addon = date_addon
end
-- get the next four characters after the + (should be the year now in all cases)
-- ok, so this is dirty, but let's get it working first
local intyear = tonumber(string.sub(timestamp, 2, 5))
if intyear == 0 and precision <= 9 then
return ""
end
-- precision is 10000 years or more
if precision <= 5 then
local factor = 10 ^ ((5 - precision) + 4)
local y2 = math.ceil(math.abs(intyear) / factor)
local relative = mw.ustring.gsub(i18n.datetime[precision], "$1", tostring(y2))
if addon ~= "" then
-- negative date
relative = mw.ustring.gsub(i18n.datetime.beforenow, "$1", relative)
else
relative = mw.ustring.gsub(i18n.datetime.afternow, "$1", relative)
end
return relative
end
-- precision is decades (8), centuries (7) and millennia (6)
local era, card
if precision == 6 then
card = math.floor((intyear - 1) / 1000) + 1
era = mw.ustring.gsub(i18n.datetime[6], "$1", makeOrdinal(card))
end
if precision == 7 then
card = math.floor((intyear - 1) / 100) + 1
era = mw.ustring.gsub(i18n.datetime[7], "$1", makeOrdinal(card))
end
if precision == 8 then
era = mw.ustring.gsub(i18n.datetime[8], "$1", tostring(math.floor(math.abs(intyear) / 10) * 10))
end
if era then
if addon ~= "" then
era = mw.ustring.gsub(mw.ustring.gsub(i18n.datetime.bc, '"', ""), "$1", era)
else
era = mw.ustring.gsub(mw.ustring.gsub(i18n.datetime.ad, '"', ""), "$1", era)
end
return era
end
local _date_format = i18n["datetime"]["format"][date_format]
if _date_format ~= nil then
-- check for precision is year and override supplied date_format
if precision == 9 then
_date_format = i18n["datetime"][9]
end
local year_suffix
local tstr = ""
local lang_obj = mw.language.new(wiki.langcode)
local f_parts = mw.text.split(_date_format, 'Y', true)
for idx, f_part in pairs(f_parts) do
year_suffix = ''
if string.match(f_part, "x[mijkot]$") then
-- for non-Gregorian year
f_part = f_part .. 'Y'
elseif idx < #f_parts then
-- supress leading zeros in year
year_suffix = lang_obj:formatDate('Y', timestamp)
year_suffix = string.gsub(year_suffix, '^0+', '', 1)
end
tstr = tstr .. lang_obj:formatDate(f_part, timestamp) .. year_suffix
end
local fdate
if addon ~= "" and prefix_addon then
fdate = addon .. addon_sep .. tstr
elseif addon ~= "" then
fdate = tstr .. addon_sep .. addon
else
fdate = tstr
end
return fdate
else
return printError("unknown-datetime-format")
end
end
-- the "qualifiers" and "snaks" field have a respective "qualifiers-order" and "snaks-order" field
-- use these as the second parameter and this function instead of the built-in "pairs" function
-- to iterate over all qualifiers and snaks in the intended order.
local function orderedpairs(array, order)
if not order then return pairs(array) end
-- return iterator function
local i = 0
return function()
i = i + 1
if order[i] then
return order[i], array[order[i]]
end
end
end
-- precision: 0 - billion years, 1 - hundred million years, ..., 6 - millennia, 7 - century, 8 - decade, 9 - year, 10 - month, 11 - day, 12 - hour, 13 - minute, 14 - second
local function normalizeDate(date)
date = mw.text.trim(date, "+")
-- extract year
local yearstr = mw.ustring.match(date, "^\-?%d+")
local year = tonumber(yearstr)
-- remove leading zeros of year
return year .. mw.ustring.sub(date, #yearstr + 1), year
end
local function formatDate(date, precision, timezone)
precision = precision or 11
local date, year = normalizeDate(date)
if year == 0 and precision <= 9 then return "" end
-- precision is 10000 years or more
if precision <= 5 then
local factor = 10 ^ ((5 - precision) + 4)
local y2 = math.ceil(math.abs(year) / factor)
local relative = mw.ustring.gsub(i18n.datetime[precision], "$1", tostring(y2))
if year < 0 then
relative = mw.ustring.gsub(i18n.datetime.beforenow, "$1", relative)
else
relative = mw.ustring.gsub(i18n.datetime.afternow, "$1", relative)
end
return relative
end
-- precision is decades, centuries and millennia
local era
if precision == 6 then era = mw.ustring.gsub(i18n.datetime[6], "$1", tostring(math.floor((math.abs(year) - 1) / 1000) + 1)) end
if precision == 7 then era = mw.ustring.gsub(i18n.datetime[7], "$1", tostring(math.floor((math.abs(year) - 1) / 100) + 1)) end
if precision == 8 then era = mw.ustring.gsub(i18n.datetime[8], "$1", tostring(math.floor(math.abs(year) / 10) * 10)) end
if era then
if year < 0 then era = mw.ustring.gsub(mw.ustring.gsub(i18n.datetime.bc, '"', ""), "$1", era)
elseif year > 0 then era = mw.ustring.gsub(mw.ustring.gsub(i18n.datetime.ad, '"', ""), "$1", era) end
return era
end
-- precision is year
if precision == 9 then
return year
end
-- precision is less than years
if precision > 9 then
--[[ the following code replaces the UTC suffix with the given negated timezone to convert the global time to the given local time
timezone = tonumber(timezone)
if timezone and timezone ~= 0 then
timezone = -timezone
timezone = string.format("%.2d%.2d", timezone / 60, timezone % 60)
if timezone[1] ~= '-' then timezone = "+" .. timezone end
date = mw.text.trim(date, "Z") .. " " .. timezone
end
]]--
local formatstr = i18n.datetime[precision]
if year == 0 then formatstr = mw.ustring.gsub(formatstr, i18n.datetime[9], "")
elseif year < 0 then
-- Mediawiki formatDate doesn't support negative years
date = mw.ustring.sub(date, 2)
formatstr = mw.ustring.gsub(formatstr, i18n.datetime[9], mw.ustring.gsub(i18n.datetime.bc, "$1", i18n.datetime[9]))
elseif year > 0 and i18n.datetime.ad ~= "$1" then
formatstr = mw.ustring.gsub(formatstr, i18n.datetime[9], mw.ustring.gsub(i18n.datetime.ad, "$1", i18n.datetime[9]))
end
return mw.language.new(wiki.langcode):formatDate(formatstr, date)
end
end
local function printDatavalueEntity(data, parameter)
-- data fields: entity-type [string], numeric-id [int, Wikidata id]
local id
if data["entity-type"] == "item" then id = "Q" .. data["numeric-id"]
elseif data["entity-type"] == "property" then id = "P" .. data["numeric-id"]
else return printError("unknown-entity-type")
end
if parameter then
if parameter == "link" then
local linkTarget = mw.wikibase.sitelink(id)
local linkName = mw.wikibase.label(id)
if linkTarget then
-- if there is a local Wikipedia article link to it using the label or the article title
return "[[" .. linkTarget .. "|" .. (linkName or linkTarget) .. "]]"
else
-- if there is no local Wikipedia article output the label or link to the Wikidata object to let the user input a proper label
if linkName then return linkName else return "[[:d:" .. id .. "|" .. id .. "]]" end
end
else
return data[parameter]
end
else
return mw.wikibase.label(id) or id
end
end
local function printDatavalueTime(data, parameter)
-- data fields: time [ISO 8601 time], timezone [int in minutes], before [int], after [int], precision [int], calendarmodel [wikidata URI]
-- precision: 0 - billion years, 1 - hundred million years, ..., 6 - millennia, 7 - century, 8 - decade, 9 - year, 10 - month, 11 - day, 12 - hour, 13 - minute, 14 - second
-- calendarmodel: e.g. http://www.wikidata.org/entity/Q1985727 for the proleptic Gregorian calendar or http://www.wikidata.org/wiki/Q11184 for the Julian calendar]
if parameter then
if parameter == "calendarmodel" then data.calendarmodel = mw.ustring.match(data.calendarmodel, "Q%d+") -- extract entity id from the calendar model URI
elseif parameter == "time" then data.time = normalizeDate(data.time) end
return data[parameter]
else
return formatDate(data.time, data.precision, data.timezone)
end
end
local function printDatavalueMonolingualText(data, parameter)
-- data fields: language [string], text [string]
if parameter then
return data[parameter]
else
local result = mw.ustring.gsub(mw.ustring.gsub(i18n.monolingualtext, "%%language", data["language"]), "%%text", data["text"])
return result
end
end
local function findClaims(entity, property)
if not property or not entity or not entity.claims then return end
if mw.ustring.match(property, "^P%d+$") then
-- if the property is given by an id (P..) access the claim list by this id
return entity.claims[property]
else
property = mw.wikibase.resolvePropertyId(property)
if not property then return end
return entity.claims[property]
end
end
local function getSnakValue(snak, parameter)
if snak.snaktype == "value" then
-- call the respective snak parser
if snak.datavalue.type == "string" then return snak.datavalue.value
elseif snak.datavalue.type == "globecoordinate" then return printDatavalueCoordinate(snak.datavalue.value, parameter)
elseif snak.datavalue.type == "quantity" then return printDatavalueQuantity(snak.datavalue.value, parameter)
elseif snak.datavalue.type == "time" then return printDatavalueTime(snak.datavalue.value, parameter)
elseif snak.datavalue.type == "wikibase-entityid" then return printDatavalueEntity(snak.datavalue.value, parameter)
elseif snak.datavalue.type == "monolingualtext" then return printDatavalueMonolingualText(snak.datavalue.value, parameter)
end
end
return mw.wikibase.renderSnak(snak)
end
local function getQualifierSnak(claim, qualifierId)
-- a "snak" is Wikidata terminology for a typed key/value pair
-- a claim consists of a main snak holding the main information of this claim,
-- as well as a list of attribute snaks and a list of references snaks
if qualifierId then
-- search the attribute snak with the given qualifier as key
if claim.qualifiers then
local qualifier = claim.qualifiers[qualifierId]
if qualifier then return qualifier[1] end
end
return nil, printError("qualifier-not-found")
else
-- otherwise return the main snak
return claim.mainsnak
end
end
local function getValueOfClaim(claim, qualifierId, parameter)
local error
local snak
snak, error = getQualifierSnak(claim, qualifierId)
if snak then
return getSnakValue(snak, parameter)
else
return nil, error
end
end
local function getReferences(frame, claim)
local result = ""
-- traverse through all references
for ref in pairs(claim.references or {}) do
local refparts
-- traverse through all parts of the current reference
for snakkey, snakval in orderedpairs(claim.references[ref].snaks or {}, claim.references[ref]["snaks-order"]) do
if refparts then refparts = refparts .. ", " else refparts = "" end
-- output the label of the property of the reference part, e.g. "imported from" for P143
refparts = refparts .. tostring(mw.wikibase.label(snakkey)) .. ": "
-- output all values of this reference part, e.g. "German Wikipedia" and "English Wikipedia" if the referenced claim was imported from both sites
for snakidx = 1, #snakval do
if snakidx > 1 then refparts = refparts .. ", " end
refparts = refparts .. getSnakValue(snakval[snakidx])
end
end
if refparts then result = result .. frame:extensionTag("ref", refparts) end
end
return result
end
------------------------------------------------------------------------------
-- module global functions
if debug then
function p.inspectI18n(frame)
local val = i18n
for _, key in pairs(frame.args) do
key = mw.text.trim(key)
val = val[key]
end
return val
end
end
function p.descriptionIn(frame)
local langcode = frame.args[1]
local id = frame.args[2] -- "id" must be nil, as access to other Wikidata objects is disabled in Mediawiki configuration
-- return description of a Wikidata entity in the given language or the default language of this Wikipedia site
return mw.wikibase.getEntityObject(id).descriptions[langcode or wiki.langcode].value
end
function p.labelIn(frame)
local langcode = frame.args[1]
local id = frame.args[2] -- "id" must be nil, as access to other Wikidata objects is disabled in Mediawiki configuration
-- return label of a Wikidata entity in the given language or the default language of this Wikipedia site
return mw.wikibase.getEntityObject(id).labels[langcode or wiki.langcode].value
end
-- This is used to get a value, or a comma separated list of them if multiple values exist
p.getValue = function(frame)
local propertyID = mw.text.trim(frame.args[1] or "")
local input_parm = mw.text.trim(frame.args[2] or "")
if input_parm == "FETCH_WIKIDATA" then
local entity = mw.wikibase.getEntityObject()
local claims
if entity and entity.claims then
claims = entity.claims[propertyID]
end
if claims then
-- if wiki-linked value output as link if possible
if (claims[1] and claims[1].mainsnak.snaktype == "value" and claims[1].mainsnak.datavalue.type == "wikibase-entityid") then
local out = {}
for k, v in pairs(claims) do
local sitelink = mw.wikibase.sitelink("Q" .. v.mainsnak.datavalue.value["numeric-id"])
local label = mw.wikibase.label("Q" .. v.mainsnak.datavalue.value["numeric-id"])
if label == nil then label = "Q" .. v.mainsnak.datavalue.value["numeric-id"] end
if sitelink then
out[#out + 1] = "[[" .. sitelink .. "|" .. label .. "]]"
else
out[#out + 1] = "[[:d:Q" .. v.mainsnak.datavalue.value["numeric-id"] .. "|" .. label .. "]]<abbr title='" .. i18n["errors"]["local-article-not-found"] .. "'>[*]</abbr>"
end
end
return table.concat(out, ", ")
else
-- just return best values
return entity:formatPropertyValues(propertyID).value
end
else
return ""
end
else
return input_parm
end
end
-- Same as above, but uses the short name property for label if available.
p.getValueShortName = function(frame)
local propertyID = mw.text.trim(frame.args[1] or "")
local input_parm = mw.text.trim(frame.args[2] or "")
if input_parm == "FETCH_WIKIDATA" then
local entity = mw.wikibase.getEntityObject()
local claims
if entity and entity.claims then
claims = entity.claims[propertyID]
end
if claims then
-- if wiki-linked value output as link if possible
if (claims[1] and claims[1].mainsnak.snaktype == "value" and claims[1].mainsnak.datavalue.type == "wikibase-entityid") then
local out = {}
for k, v in pairs(claims) do
local sitelink = mw.wikibase.sitelink("Q" .. v.mainsnak.datavalue.value["numeric-id"])
local label
local claimEntity = mw.wikibase.getEntity("Q" .. v.mainsnak.datavalue.value["numeric-id"])
if claimEntity ~= nil then
if claimEntity.claims.P1813 then
for k2, v2 in pairs(claimEntity.claims.P1813) do
if v2.mainsnak.datavalue.value.language == "en" then
label = v2.mainsnak.datavalue.value.text
end
end
end
end
if label == nil or label == "" then label = mw.wikibase.label("Q" .. v.mainsnak.datavalue.value["numeric-id"]) end
if label == nil then label = "Q" .. v.mainsnak.datavalue.value["numeric-id"] end
if sitelink then
out[#out + 1] = "[[" .. sitelink .. "|" .. label .. "]]"
else
out[#out + 1] = "[[:d:Q" .. v.mainsnak.datavalue.value["numeric-id"] .. "|" .. label .. "]]<abbr title='" .. i18n["errors"]["local-article-not-found"] .. "'>[*]</abbr>"
end
end
return table.concat(out, ", ")
else
-- just return best values
return entity:formatPropertyValues(propertyID).value
end
else
return ""
end
else
return input_parm
end
end
-- This is used to get a value, or a comma separated list of them if multiple values exist
-- from an arbitrary entry by using its QID.
-- Use : {{#invoke:Wikidata|getValueFromID|<ID>|<Property>|FETCH_WIKIDATA}}
-- E.g.: {{#invoke:Wikidata|getValueFromID|Q151973|P26|FETCH_WIKIDATA}} - to fetch value of 'spouse' (P26) from 'Richard Burton' (Q151973)
-- Please use sparingly - this is an *expensive call*.
p.getValueFromID = function(frame)
local itemID = mw.text.trim(frame.args[1] or "")
local propertyID = mw.text.trim(frame.args[2] or "")
local input_parm = mw.text.trim(frame.args[3] or "")
if input_parm == "FETCH_WIKIDATA" then
local entity = mw.wikibase.getEntity(itemID)
local claims = entity.claims[propertyID]
if claims then
-- if wiki-linked value output as link if possible
if (claims[1] and claims[1].mainsnak.snaktype == "value" and claims[1].mainsnak.datavalue.type == "wikibase-entityid") then
local out = {}
for k, v in pairs(claims) do
local sitelink = mw.wikibase.sitelink("Q" .. v.mainsnak.datavalue.value["numeric-id"])
local label = mw.wikibase.label("Q" .. v.mainsnak.datavalue.value["numeric-id"])
if label == nil then label = "Q" .. v.mainsnak.datavalue.value["numeric-id"] end
if sitelink then
out[#out + 1] = "[[" .. sitelink .. "|" .. label .. "]]"
else
out[#out + 1] = "[[:d:Q" .. v.mainsnak.datavalue.value["numeric-id"] .. "|" .. label .. "]]<abbr title='" .. i18n["errors"]["local-article-not-found"] .. "'>[*]</abbr>"
end
end
return table.concat(out, ", ")
else
return entity:formatPropertyValues(propertyID).value
end
else
return ""
end
else
return input_parm
end
end
p.getQualifierValue = function(frame)
local propertyID = mw.text.trim(frame.args[1] or "")
local qualifierID = mw.text.trim(frame.args[2] or "")
local input_parm = mw.text.trim(frame.args[3] or "")
if input_parm == "FETCH_WIKIDATA" then
local entity = mw.wikibase.getEntityObject()
if entity.claims[propertyID] ~= nil then
local out = {}
for k, v in pairs(entity.claims[propertyID]) do
for k2, v2 in pairs(v.qualifiers[qualifierID]) do
if v2.snaktype == 'value' then
if (mw.wikibase.sitelink("Q" .. v2.datavalue.value["numeric-id"])) then
out[#out + 1] = "[[" .. mw.wikibase.sitelink("Q" .. v2.datavalue.value["numeric-id"]) .. "]]"
else
out[#out + 1] = "[[:d:Q" .. v2.datavalue.value["numeric-id"] .. "|" .. mw.wikibase.label("Q" .. v2.datavalue.value["numeric-id"]) .. "]]<abbr title='" .. i18n["errors"]["local-article-not-found"] .. "'>[*]</abbr>"
end
end
end
end
return table.concat(out, ", ")
else
return ""
end
else
return input_parm
end
end
-- This is used to get a value like 'male' (for property p21) which won't be linked and numbers without the thousand separators
p.getRawValue = function(frame)
local propertyID = mw.text.trim(frame.args[1] or "")
local input_parm = mw.text.trim(frame.args[2] or "")
if input_parm == "FETCH_WIKIDATA" then
local entity = mw.wikibase.getEntityObject()
local claims
if entity and entity.claims then claims = entity.claims[propertyID] end
if claims then
local result = entity:formatPropertyValues(propertyID, mw.wikibase.entity.claimRanks).value
-- if number type: remove thousand separators, bounds and units
if (claims[1] and claims[1].mainsnak.snaktype == "value" and claims[1].mainsnak.datavalue.type == "quantity") then
result = mw.ustring.gsub(result, "(%d),(%d)", "%1%2")
result = mw.ustring.gsub(result, "(%d)±.*", "%1")
end
return result
else
return ""
end
else
return input_parm
end
end
-- This is used to get the unit name for the numeric value returned by getRawValue
p.getUnits = function(frame)
local propertyID = mw.text.trim(frame.args[1] or "")
local input_parm = mw.text.trim(frame.args[2] or "")
if input_parm == "FETCH_WIKIDATA" then
local entity = mw.wikibase.getEntityObject()
local claims
if entity and entity.claims then claims = entity.claims[propertyID] end
if claims then
local result = entity:formatPropertyValues(propertyID, mw.wikibase.entity.claimRanks).value
if (claims[1] and claims[1].mainsnak.snaktype == "value" and claims[1].mainsnak.datavalue.type == "quantity") then
result = mw.ustring.sub(result, mw.ustring.find(result, " ")+1, -1)
end
return result
else
return ""
end
else
return input_parm
end
end
-- This is used to get the unit's QID to use with the numeric value returned by getRawValue
p.getUnitID = function(frame)
local propertyID = mw.text.trim(frame.args[1] or "")
local input_parm = mw.text.trim(frame.args[2] or "")
if input_parm == "FETCH_WIKIDATA" then
local entity = mw.wikibase.getEntityObject()
local claims
if entity and entity.claims then claims = entity.claims[propertyID] end
if claims then
local result
if (claims[1] and claims[1].mainsnak.snaktype == "value" and claims[1].mainsnak.datavalue.type == "quantity") then
-- get the url for the unit entry on Wikidata:
result = claims[1].mainsnak.datavalue.value.unit
-- and just reurn the last bit from "Q" to the end (which is the QID):
result = mw.ustring.sub(result, mw.ustring.find(result, "Q"), -1)
end
return result
else
return ""
end
else
return input_parm
end
end
p.getRawQualifierValue = function(frame)
local propertyID = mw.text.trim(frame.args[1] or "")
local qualifierID = mw.text.trim(frame.args[2] or "")
local input_parm = mw.text.trim(frame.args[3] or "")
if input_parm == "FETCH_WIKIDATA" then
local entity = mw.wikibase.getEntityObject()
if entity.claims[propertyID] ~= nil then
local out = {}
for k, v in pairs(entity.claims[propertyID]) do
for k2, v2 in pairs(v.qualifiers[qualifierID]) do
if v2.snaktype == 'value' then
if v2.datavalue.value["numeric-id"] then
out[#out + 1] = mw.wikibase.label("Q" .. v2.datavalue.value["numeric-id"])
else
out[#out + 1] = v2.datavalue.value
end
end
end
end
local ret = table.concat(out, ", ")
return string.upper(string.sub(ret, 1, 1)) .. string.sub(ret, 2)
else
return ""
end
else
return input_parm
end
end
-- This is used to get a date value for date_of_birth (P569), etc. which won't be linked
-- Dates and times are stored in ISO 8601 format (sort of).
-- At present the local formatDate(date, precision, timezone) function doesn't handle timezone
-- So I'll just supply "Z" in the call to formatDate below:
p.getDateValue = function(frame)
local propertyID = mw.text.trim(frame.args[1] or "")
local input_parm = mw.text.trim(frame.args[2] or "")
local date_format = mw.text.trim(frame.args[3] or i18n["datetime"]["default-format"])
local date_addon = mw.text.trim(frame.args[4] or i18n["datetime"]["default-addon"])
if input_parm == "FETCH_WIKIDATA" then
local entity = mw.wikibase.getEntityObject()
if entity.claims[propertyID] ~= nil then
local out = {}
for k, v in pairs(entity.claims[propertyID]) do
if v.mainsnak.datavalue.type == 'time' then
local timestamp = v.mainsnak.datavalue.value.time
local dateprecision = v.mainsnak.datavalue.value.precision
out[#out + 1] = parseDateFull(timestamp, dateprecision, date_format, date_addon)
end
end
return table.concat(out, ", ")
else
return ""
end
else
return input_parm
end
end
p.getQualifierDateValue = function(frame)
local propertyID = mw.text.trim(frame.args[1] or "")
local qualifierID = mw.text.trim(frame.args[2] or "")
local input_parm = mw.text.trim(frame.args[3] or "")
local date_format = mw.text.trim(frame.args[4] or i18n["datetime"]["default-format"])
local date_addon = mw.text.trim(frame.args[5] or i18n["datetime"]["default-addon"])
if input_parm == "FETCH_WIKIDATA" then
local entity = mw.wikibase.getEntityObject()
if entity.claims[propertyID] ~= nil then
local out = {}
for k, v in pairs(entity.claims[propertyID]) do
for k2, v2 in pairs(v.qualifiers[qualifierID]) do
if v2.snaktype == 'value' then
local timestamp = v2.datavalue.value.time
out[#out + 1] = parseDateValue(timestamp, date_format, date_addon)
end
end
end
return table.concat(out, ", ")
else
return ""
end
else
return input_parm
end
end
-- This is used to fetch all of the images with a particular property, e.g. image (P18), Gene Atlas Image (P692), etc.
-- Parameters are | propertyID | value / FETCH_WIKIDATA / nil | separator (default=space) | size (default=frameless)
-- It will return a standard wiki-markup [[File:Filename | size]] for each image with a selectable size and separator (which may be html)
-- e.g. {{#invoke:Wikidata|getImages|P18|FETCH_WIKIDATA}}
-- e.g. {{#invoke:Wikidata|getImages|P18|FETCH_WIKIDATA|<br>|250px}}
-- If a property is chosen that is not of type "commonsMedia", it will return empty text.
p.getImages = function(frame)
local propertyID = mw.text.trim(frame.args[1] or "")
local input_parm = mw.text.trim(frame.args[2] or "")
local sep = mw.text.trim(frame.args[3] or " ")
local imgsize = mw.text.trim(frame.args[4] or "frameless")
if input_parm == "FETCH_WIKIDATA" then
local entity = mw.wikibase.getEntityObject()
local claims
if entity and entity.claims then
claims = entity.claims[propertyID]
end
if claims then
if (claims[1] and claims[1].mainsnak.datatype == "commonsMedia") then
local out = {}
for k, v in pairs(claims) do
local filename = v.mainsnak.datavalue.value
out[#out + 1] = "[[File:" .. filename .. "|" .. imgsize .. "]]"
end
return table.concat(out, sep)
else
return ""
end
else
return ""
end
else
return input_parm
end
end
-- This is used to get the TA98 (Terminologia Anatomica first edition 1998) values like 'A01.1.00.005' (property P1323)
-- which are then linked to http://www.unifr.ch/ifaa/Public/EntryPage/TA98%20Tree/Entity%20TA98%20EN/01.1.00.005%20Entity%20TA98%20EN.htm
-- uses the newer mw.wikibase calls instead of directly using the snaks
-- formatPropertyValues returns a table with the P1323 values concatenated with ", " so we have to split them out into a table in order to construct the return string
p.getTAValue = function(frame)
local ent = mw.wikibase.getEntityObject()
local props = ent:formatPropertyValues('P1323')
local out = {}
local t = {}
for k, v in pairs(props) do
if k == 'value' then
t = mw.text.split( v, ", ")
for k2, v2 in pairs(t) do
out[#out + 1] = "[http://www.unifr.ch/ifaa/Public/EntryPage/TA98%20Tree/Entity%20TA98%20EN/" .. string.sub(v2, 2) .. "%20Entity%20TA98%20EN.htm " .. v2 .. "]"
end
end
end
local ret = table.concat(out, "<br> ")
if #ret == 0 then
ret = "Invalid TA"
end
return ret
end
--[[
This is used to return an image legend from Wikidata
image is property P18
image legend is property P2096
Call as {{#invoke:Wikidata |getImageLegend | <PARAMETER> | lang=<ISO-639code> |id=<QID>}}
Returns PARAMETER, unless it is equal to "FETCH_WIKIDATA", from Item QID (expensive call)
If QID is omitted or blank, the current article is used (not an expensive call)
If lang is omitted, it uses the local wiki language, otherwise it uses the provided ISO-639 language code
ISO-639: https://docs.oracle.com/cd/E13214_01/wli/docs92/xref/xqisocodes.html#wp1252447
Ranks are: 'preferred' > 'normal'
This returns the label from the first image with 'preferred' rank
Or the label from the first image with 'normal' rank if preferred returns nothing
Ranks: https://www.mediawiki.org/wiki/Extension:Wikibase_Client/Lua
]]
p.getImageLegend = function(frame)
-- look for named parameter id; if it's blank make it nil
local id = frame.args.id
if id and (#id == 0) then
id = nil
end
-- look for named parameter lang
-- it should contain a two-character ISO-639 language code
-- if it's blank fetch the language of the local wiki
local lang = frame.args.lang
if (not lang) or (#lang < 2) then
lang = mw.language.getContentLanguage().code
end
-- first unnamed parameter is the local parameter, if supplied
local input_parm = mw.text.trim(frame.args[1] or "")
if input_parm == "FETCH_WIKIDATA" then
local ent = mw.wikibase.getEntityObject(id)
local imgs
if ent and ent.claims then
imgs = ent.claims.P18
end
local imglbl
if imgs then
-- look for an image with 'preferred' rank
for k1, v1 in pairs(imgs) do
if v1.rank == "preferred" and v1.qualifiers and v1.qualifiers.P2096 then
local imglbls = v1.qualifiers.P2096
for k2, v2 in pairs(imglbls) do
if v2.datavalue.value.language == lang then
imglbl = v2.datavalue.value.text
break
end
end
end
end
-- if we don't find one, look for an image with 'normal' rank
if (not imglbl) then
for k1, v1 in pairs(imgs) do
if v1.rank == "normal" and v1.qualifiers and v1.qualifiers.P2096 then
local imglbls = v1.qualifiers.P2096
for k2, v2 in pairs(imglbls) do
if v2.datavalue.value.language == lang then
imglbl = v2.datavalue.value.text
break
end
end
end
end
end
end
return imglbl
else
return input_parm
end
end
-- This is used to get the QIDs of all of the values of a property, as a comma separated list if multiple values exist
-- Usage: {{#invoke:Wikidata |getPropertyIDs |<PropertyID> |FETCH_WIKIDATA}}
-- Usage: {{#invoke:Wikidata |getPropertyIDs |<PropertyID> |<InputParameter> |qid=<QID>}}
p.getPropertyIDs = function(frame)
local propertyID = mw.text.trim(frame.args[1] or "")
local input_parm = mw.text.trim(frame.args[2] or "")
-- can take a named parameter |qid which is the Wikidata ID for the article. This will not normally be used.
local qid = frame.args.qid
if qid and (#qid == 0) then qid = nil end
if input_parm == "FETCH_WIKIDATA" then
local entity = mw.wikibase.getEntityObject(qid)
local propclaims
if entity and entity.claims then
propclaims = entity.claims[propertyID]
end
if propclaims then
-- if wiki-linked value collect the QID in a table
if (propclaims[1] and propclaims[1].mainsnak.snaktype == "value" and propclaims[1].mainsnak.datavalue.type == "wikibase-entityid") then
local out = {}
for k, v in pairs(propclaims) do
out[#out + 1] = "Q" .. v.mainsnak.datavalue.value["numeric-id"]
end
return table.concat(out, ", ")
else
-- not a wikibase-entityid, so return empty
return ""
end
else
-- no claim, so return empty
return ""
end
else
return input_parm
end
end
-- returns the page id (Q...) of the current page or nothing of the page is not connected to Wikidata
function p.pageId(frame)
local entity = mw.wikibase.getEntityObject()
if not entity then return nil else return entity.id end
end
function p.claim(frame)
local property = frame.args[1] or ""
local id = frame.args["id"] -- "id" must be nil, as access to other Wikidata objects is disabled in Mediawiki configuration
local qualifierId = frame.args["qualifier"]
local parameter = frame.args["parameter"]
local list = frame.args["list"]
local references = frame.args["references"]
local showerrors = frame.args["showerrors"]
local default = frame.args["default"]
if default then showerrors = nil end
-- get wikidata entity
local entity = mw.wikibase.getEntityObject(id)
if not entity then
if showerrors then return printError("entity-not-found") else return default end
end
-- fetch the first claim of satisfying the given property
local claims = findClaims(entity, property)
if not claims or not claims[1] then
if showerrors then return printError("property-not-found") else return default end
end
-- get initial sort indices
local sortindices = {}
for idx in pairs(claims) do
sortindices[#sortindices + 1] = idx
end
-- sort by claim rank
local comparator = function(a, b)
local rankmap = { deprecated = 2, normal = 1, preferred = 0 }
local ranka = rankmap[claims[a].rank or "normal"] .. string.format("%08d", a)
local rankb = rankmap[claims[b].rank or "normal"] .. string.format("%08d", b)
return ranka < rankb
end
table.sort(sortindices, comparator)
local result
local error
if list then
local value
-- iterate over all elements and return their value (if existing)
result = {}
for idx in pairs(claims) do
local claim = claims[sortindices[idx]]
value, error = getValueOfClaim(claim, qualifierId, parameter)
if not value and showerrors then value = error end
if value and references then value = value .. getReferences(frame, claim) end
result[#result + 1] = value
end
result = table.concat(result, list)
else
-- return first element
local claim = claims[sortindices[1]]
result, error = getValueOfClaim(claim, qualifierId, parameter)
if result and references then result = result .. getReferences(frame, claim) end
end
if result then return result else
if showerrors then return error else return default end
end
end
-- look into entity object
function p.ViewSomething(frame)
local f = (frame.args[1] or frame.args.id) and frame or frame:getParent()
local id = f.args.id
if id and (#id == 0) then
id = nil
end
local data = mw.wikibase.getEntityObject(id)
if not data then
return nil
end
local i = 1
while true do
local index = f.args[i]
if not index then
if type(data) == "table" then
return mw.text.jsonEncode(data, mw.text.JSON_PRESERVE_KEYS + mw.text.JSON_PRETTY)
else
return tostring(data)
end
end
data = data[index] or data[tonumber(index)]
if not data then
return
end
i = i + 1
end
end
-- getting sitelink of a given wiki
function p.getSiteLink(frame)
local qid = frame.args.qid
if qid == "" then qid = nil end
local f = mw.text.trim( frame.args[1] or "")
local entity = mw.wikibase.getEntity(qid)
if not entity then
return
end
local link = entity:getSitelink( f )
if not link then
return
end
return link
end
function p.Dump(frame)
local f = (frame.args[1] or frame.args.id) and frame or frame:getParent()
local data = mw.wikibase.getEntityObject(f.args.id)
if not data then
return i18n.warnDump
end
local i = 1
while true do
local index = f.args[i]
if not index then
return "<pre>"..mw.dumpObject(data).."</pre>".. i18n.warnDump
end
data = data[index] or data[tonumber(index)]
if not data then
return i18n.warnDump
end
i = i + 1
end
end
return p
a0guxki5v4fi2dud851etbq4kl2o26e
Module:Calendar
828
23706
183886
157698
2022-08-04T14:43:56Z
Xiplus
4323
已保护“[[Module:Calendar]]”:高風險模板:875引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
Scribunto
text/plain
--[[
__ __ _ _ ____ _ _
| \/ | ___ __| |_ _| | ___ _ / ___|__ _| | ___ _ __ __| | __ _ _ __
| |\/| |/ _ \ / _` | | | | |/ _ (_) | / _` | |/ _ \ '_ \ / _` |/ _` | '__|
| | | | (_) | (_| | |_| | | __/_| |__| (_| | | __/ | | | (_| | (_| | |
|_| |_|\___/ \__,_|\__,_|_|\___(_)\____\__,_|_|\___|_| |_|\__,_|\__,_|_|
Maintainers:
* Jarekt
]]
local p = {}
-- Convert "Julian day number" (jdn) to a calendar date
-- "gregorian" is a 1 for gregorian calendar and 0 for Julian
-- based on https://en.wikipedia.org/wiki/Julian_day#Converting_Julian_or_Gregorian_calendar_date_to_Julian_day_number
function p._jdn2date(jdn, gregorian)
local f, e, g, h, year, month, day
f = jdn + 1401
if gregorian>0 then
f = f + math.floor((math.floor((4*jdn + 274277) / 146097) * 3) / 4) - 38
end
e = 4*f + 3
g = math.floor(math.fmod(e, 1461) / 4)
h = 5*g + 2
day = math.floor(math.fmod (h,153) / 5) + 1
month = math.fmod (math.floor(h/153) + 2, 12) + 1
year = math.floor(e/1461) - 4716 + math.floor((14 - month) / 12)
-- If year is less than 1, subtract one to convert from a zero based date system to the
-- common era system in which the year -1 (1 B.C.E) is followed by year 1 (1 C.E.).
if year < 1 then
year = year - 1
end
return string.format('%04i-%02i-%02i', year, month, day)
end
-- Convert calendar date to "Julian day number" (jdn)
-- "gregorian" is a 1 for gregorian calendar and 0 for Julian
-- based on https://en.wikipedia.org/wiki/Julian_day#Converting_Julian_or_Gregorian_calendar_date_to_Julian_day_number
-- explanation based on http://www.cs.utsa.edu/~cs1063/projects/Spring2011/Project1/project1.html
function p._date2jdn(ISOdate, gregorian)
local year, month, day = ISOdate:match( "(-?%d%d%d%d)-(%d%d)-(%d%d)" )
if not year then
return nil
elseif tonumber(year) < 0 then
-- If year is less than 0, add one to convert from the common era system in which
-- the year -1 (1 B.C.E) is followed by year 1 (1 C.E.) to a zero based date system
year = year + 1
end
local a, b, c, d, y, m
a = math.floor((14-month) / 12) -- will be 1 for January and February, and 0 for other months.
y = year + 4800 - a -- years since year –4800
m = month + 12*a - 3 -- month number where 10 for January, 11 for February, 0 for March, 1 for April
c = math.floor((153*m + 2)/5) -- number of days since March 1
if gregorian>0 then
b = math.floor(y/4) - math.floor(y/100) + math.floor(y/400) -- number of leap years since y==0 (year –4800)
d = 32045 -- offset so the result will be 0 for January 1, 4713 BCE
else
b = math.floor(y/4) -- number of leap years since y==0 (year –4800)
d = 32083 -- offset so the result will be 0 for January 1, 4713 BCE
end
return day + c + 365*y + b - d
end
-- Convert a date from Gregorian to Julian calendar
function p.Gregorian2Julian(frame)
local JDN = p._date2jdn(frame.args[1], 1)
if JDN then
return p._jdn2date(JDN, 0)
else
return "Error parsing input date: " .. frame.args[1]
end
end
-- Convert a date from Julian to Gregorian calendar
function p.Julian2Gregorian(frame)
local JDN = p._date2jdn(frame.args[1], 0)
if JDN then
return p._jdn2date(JDN, 1)
else
return "Error parsing input date: " .. frame.args[1]
end
end
-- Return day of week based on gregorian date. Mon->1, Tue->2, ..., Sun->7
function p.DayOfWeek(frame)
local JDN = p._date2jdn(frame.args[1], 1)
local day = math.fmod(JDN, 7) + 1
if day then
local LUT = { "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" }
return LUT[day]
else
return "Error parsing input date: " .. frame.args[1]
end
end
-- Convert calendar date to "Julian day number" (jdn)
function p.date2jdn(frame)
return p._date2jdn(frame.args[1] or os.date('%F'), frame.args[2] or 1)
end
return p
bsl2o34pcufr1n8bqsp1faqns4m5t17
Module:Complex date
828
23707
183892
157703
2022-08-04T14:44:56Z
Xiplus
4323
已保护“[[Module:Complex date]]”:高風險模板:874引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
Scribunto
text/plain
--[[
__ __ _ _ ____ _ _ _
| \/ | ___ __| |_ _| | ___ _ / ___|___ _ __ ___ _ __ | | _____ __ __| | __ _| |_ ___
| |\/| |/ _ \ / _` | | | | |/ _ (_) | / _ \| '_ ` _ \| '_ \| |/ _ \ \/ / / _` |/ _` | __/ _ \
| | | | (_) | (_| | |_| | | __/_| |__| (_) | | | | | | |_) | | __/> < | (_| | (_| | || __/
|_| |_|\___/ \__,_|\__,_|_|\___(_)\____\___/|_| |_| |_| .__/|_|\___/_/\_\ \__,_|\__,_|\__\___|
|_|
This module is intended for creation of complex date phrases in variety of languages.
Once deployed, please do not modify this code without applying the changes first at Module:Complex date/sandbox and testing
at Module:Complex date/sandbox/testcases.
Authors and maintainers:
* User:Sn1per - first draft of the original version
* User:Jarekt - corrections and expansion of the original version
]]
-- List of external modules and functions
local p = {Error = nil}
local i18n = require('Module:i18n/complex date') -- used for translations of date related phrases
local ISOdate = require('Module:ISOdate')._ISOdate -- used for parsing dates in YYYY-MM-DD and related formats
local formatnum = require('Module:Formatnum').formatNum -- used for translation into other alphabets
local Calendar = require('Module:Calendar') -- used for conversions between Julian and Gregorian calendar dates
-- ==================================================
-- === Internal functions ===========================
-- ==================================================
local function langSwitch(list,lang)
local langList = mw.language.getFallbacksFor(lang)
table.insert(langList,1,lang)
table.insert(langList,math.max(#langList,2),'default')
for i,language in ipairs(langList) do
if list[language] then
return list[language]
end
end
end
local function formatnum1(numStr, lang)
-- mostly require('Module:Formatnum').formatNum function used to translate a number to use different numeral characters,
-- except that it it does not call that function unless the language is on the list "LList"
local LList = {bn=1,bpy=1,kn=1,hi=1,mr=1,new=1,pa=1,gu=1,fa=1,glk=1,mzn=1,ur=1,ar=1,ckb=1,ks=1,lo=1,['or']=1,bo=1,['ml-old']=1,mn=1,te=1,th=1}
if LList[lang] then -- call only when the language is on the list
numStr = formatnum(numStr, lang, 1)
end
return numStr
end
local function getISODate(datestr, datetype, lang, num, case)
-- translate dates in the format YYYY, YYYY-MM, and YYYY-MM-DD
if not case and i18n.Translations[datetype] then
-- look up the grammatical case needed and call ISOdate module
local rec = langSwitch(i18n.Translations[datetype], lang)
if type(rec)=='table' then
case = rec.case[num]
end
end
return ISOdate(datestr, lang, case, '', 1)
end
local function translatePhrase(date1, date2, operation, lang, state)
-- use tables in Module:i18n/complex date to translate a phrase
if not i18n.Translations[operation] then
p.Error = string.format('<span style="background-color:red;">Error in [[Module:Complex date]]: input parameter "%s" is not recognized.</span>', operation or 'nil')
return ''
end
local dateStr = langSwitch(i18n.Translations[operation], lang)
if type(dateStr)=='table' then
dateStr = dateStr[1]
end
if type(dateStr)=='function' then
local success
local nDates = i18n.Translations[operation]['nDates']
if nDates==2 then -- 2 date phrase
success, dateStr = pcall(dateStr, date1, date2, state)
else -- 1 date phrase
success, dateStr = pcall(dateStr, date1, state)
end
end
if type(dateStr)=='string' then
-- replace parts of the string '$date1' and '$date2' with date1 and date2 strings
dateStr = mw.ustring.gsub(dateStr, '$date1', date1)
dateStr = mw.ustring.gsub(dateStr, '$date2', date2)
else
-- Special case of more complex phrases that can be build out of simple phrases
-- If complex case is not translated to "lang" than build it out of simpler ones
local x = dateStr
dateStr = p._complex_date(x.conj, x.adj1, date1, x.units1, x.era1, x.adj2, date2, x.units2, x.era2, lang, 2)
end
return dateStr
end
local function oneDatePhrase(dateStr, adj, era, units, lang, num, case, state)
-- translate a single date phrase
if num==2 then
state.adj, state.era, state.units, state.precision = state.adj2, state.era2, state.units2, state.precision2
end
-- dateStr can have many forms: ISO date, year or a number for
-- decade, century or millennium
if units == '' then -- unit is "year", "month", "day"
dateStr = getISODate(dateStr, adj, lang, num, case)
else -- units is "decade", "century", "millennium''
dateStr = translatePhrase(dateStr, '', units, lang, state)
end
-- add adjective ("early", "mid", etc.) or preposition ("before", "after",
-- "circa", etc.) to the date
if adj ~= '' then
dateStr = translatePhrase(dateStr, '', adj, lang, state)
else -- only era?
dateStr = formatnum1(dateStr, lang)
end
-- add era
if era ~= '' then
dateStr = translatePhrase(dateStr, '', era, lang, state)
end
return dateStr
end
local function twoDatePhrase(date1, date2, state, lang)
-- translate a double date phrase
local dateStr, case
local era=''
if state.era1 == state.era2 then
-- if both eras are the same than add it only once
era = state.era1
state.era1 = ''
state.era2 = ''
end
case = {nil, nil}
if i18n.Translations[state.conj] then
local rec = langSwitch(i18n.Translations[state.conj], lang)
if type(rec)=='table' then
case = rec.case
end
end
date1 = oneDatePhrase(date1, state.adj1, state.era1, state.units1, lang, 1, case[1], state)
date2 = oneDatePhrase(date2, state.adj2, state.era2, state.units2, lang, 2, case[2], state)
dateStr = translatePhrase(date1, date2, state.conj, lang, state)
if era ~= '' then
dateStr = translatePhrase(dateStr, '', era, lang, state)
end
return dateStr
end
local function otherPhrases(date1, date2, operation, era, lang, state)
-- translate specialized phrases
local dateStr = ''
if operation == 'islamic' then
if date2=='' then date2 = mw.getCurrentFrame():callParserFunction('#time', 'xmY', date1) end
date1 = getISODate(date1, operation, lang, 1, nil)
date2 = getISODate(date2, operation, lang, 2, nil)
if era == '' then era = 'ad' end
dateStr = translatePhrase(date1, '', era, lang, state) .. ' (' .. translatePhrase(date2, '', 'ah', lang, state) .. ')'
era = ''
elseif operation == 'julian' then
if not date2 and date1 then -- Convert from Julian to Gregorian calendar date
local JDN = Calendar._date2jdn(date1, 0)
if JDN then
date2 = date1 -- first date is assumed to be Julian
date1 = Calendar._jdn2date(JDN, 1)
end
end
date1 = getISODate(date1, operation, lang, 1, nil)
date2 = getISODate(date2, operation, lang, 2, nil)
dateStr = translatePhrase(date1, date2, operation, lang, state)
dateStr = mw.ustring.gsub(mw.ustring.gsub(dateStr, '%( ', '('), ' %)', ')') -- in case date2 is empty
elseif operation == 'turn of the year' or operation == 'turn of the decade' or operation == 'turn of the century' then
if operation == 'turn of the decade' then dt=10 else dt=1 end
if not date2 or date2=='' then date2=tostring(tonumber(date1)-dt) end
if era~='bp' and era~='bc' then date1, date2 = date2, date1 end
if operation == 'turn of the year' then
date1 = ISOdate(date1, lang, '', '', 1)
date2 = ISOdate(date2, lang, '', '', 1)
else
date1 = formatnum1(date1, lang)
date2 = formatnum1(date2, lang)
end
dateStr = translatePhrase(date1, date2, operation, lang, state)
elseif operation == 'year unknown' then
dateStr = translatePhrase('', '', operation, lang, state) .. '<div style="display: none;">Unknown date</div>'
elseif operation == 'unknown' then
dateStr = tostring(mw.message.new( "exif-unknowndate" ):inLanguage( lang )) .. '<div style="display: none;">Unknown date</div>'
end
-- add era
if era ~= '' then
dateStr = translatePhrase(dateStr, '', era, lang, state)
end
return dateStr
end
local function checkAliases(str1, str2, sType)
-- some inputs have many aliases - reconcile them and ensure string is playing a proper role
local out = ''
if str1 and str1~='' then
local a = i18n.Synonyms[str1] -- look up synonyms of "str1"
if a then
out = a[1]
else
p.Error = string.format('<span style="background-color:red;">Error in [[Module:Complex date]]: %s is not recognized.</span>', str1)
end
elseif str2 and str2~='' then -- if "str1" of type "sType" is empty than maybe ...
local a = i18n.Synonyms[str2] -- ..."str2" is of the same type and is not empty
if a and a[2]==sType then
out = a[1]
str2 = ''
end
end
return out, str2
end
local function datePrecision(dateStr, units)
-- "in this module "Units" is a string like millennium, century, or decade
-- "precision" is wikibase compatible date precision number: 6=millennium, 7=century, 8=decade, 9=year, 10=month, 11=day
-- based on string or numeric input calculate "Units" and "precision"
local precision
local dateNum = tonumber(dateStr);
if type(units)=='number' then
precision = units
if precision>11 then precision=11 end -- clip the range of precision values
if precision==6 then units='millennium'
elseif precision==7 then units='century'
elseif precision==8 then units='decade'
else units = ''
end
elseif type(units)=='string' then
units = string.lower(units);
if units=='millennium' then precision=6
elseif units=='century' then precision=7
elseif units=='decade' then precision=8
else precision=9
end
end
if units=='' or precision==9 then
local sLen = mw.ustring.len(dateStr)
if sLen<= 4 then precision=9
elseif sLen== 7 then precision=10
elseif sLen>=10 then precision=11
end
units=''
end
if precision==6 and dateStr.match( dateStr, '%d000' )~=nil then
dateStr = tostring(math.floor(tonumber(dateStr)/1000) +1)
elseif precision==7 and mw.ustring.match( dateStr, '%d%d00' )~=nil then
dateStr = tostring(math.floor(tonumber(dateStr)/100) +1)
end
return dateStr, units, precision
end
local function isodate2timestamp(dateStr, precision, era)
-- convert date string to timestamps used by Quick Statements
local tStamp = nil
if era == 'ah' or precision<6 then
return nil
elseif era ~= '' then
local eraLUT = {ad='+', bc='-', bp='-' }
era = eraLUT[era]
else
era='+'
end
-- convert isodate to timestamp used by quick statements
if precision>=9 then
if string.match(dateStr,"^%d%d%d%d$") then -- if YYYY format
tStamp = era .. dateStr .. '-00-00T00:00:00Z/9'
elseif string.match(dateStr,"^%d%d%d%d%-%d%d$") then -- if YYYY-MM format
tStamp = era .. dateStr .. '-00T00:00:00Z/10'
elseif string.match(dateStr,"^%d%d%d%d%-%d%d%-%d%d$") then -- if YYYY-MM-DD format
tStamp = era .. dateStr .. 'T00:00:00Z/11'
end
elseif precision==8 then -- decade
tStamp = era .. dateStr .. '-00-00T00:00:00Z/8'
elseif precision==7 then -- century
local d = tostring(tonumber(dateStr)-1)
tStamp = era .. d .. '50-00-00T00:00:00Z/7'
elseif precision==6 then
local d = tostring(tonumber(dateStr)-1)
tStamp = era .. d .. '500-00-00T00:00:00Z/6'
end
return tStamp
end
local function oneDateQScode(dateStr, adj, era, precision)
-- create QuickStatements string for "one date" dates
local outputStr = ''
local d = isodate2timestamp(dateStr, precision, era)
if not d then
return ''
end
local rLUT = { early='Q40719727' , mid='Q40719748', late='Q40719766',
['1quarter']='Q40690303' , ['2quarter']='Q40719649' , ['3quarter']='Q40719662', ['4quarter']='Q40719674',
spring='Q40720559' , summer='Q40720564' , autumn='Q40720568' , winter='Q40720553',
firsthalf='Q40719687', secondhalf='Q40719707' }
local qLUT = {['from']='P580', ['until']='P582', ['after']='P1319', ['before']='P1326', ['by']='P1326'}
local refine = rLUT[adj]
local qualitier = qLUT[adj]
if adj=='' then
outputStr = d
elseif adj=='circa' then
outputStr = d..",P1480,Q5727902"
elseif refine then
outputStr = d..",P4241,"..refine
elseif precision>7 and qualitier then
local century = string.gsub(d, 'Z%/%d+', 'Z/7')
outputStr = century ..",".. qualitier ..","..d
end
return outputStr
end
local function twoDateQScode(date1, date2, state)
-- create QuickStatements string for "two date" dates
if state.adj1~='' or state.adj2~='' or state.era1~=state.era2 then
return '' -- QuickStatements string are not generated for two date phrases with adjectives
end
local outputStr = ''
local d1 = isodate2timestamp(date1, state.precision1, state.era1)
local d2 = isodate2timestamp(date2, state.precision2, state.era2)
if (not d1) or (not d2) then
return ''
end
-- find date with lower precision in common to both dates
local cd
local year1 = tonumber(string.sub(d1,2,5))
local year2 = tonumber(string.sub(d2,2,5))
local k = 0
for i = 1,10,1 do
if string.sub(d1,1,i)==string.sub(d2,1,i) then
k = i -- find last matching letter
end
end
if k>=9 then -- same month, since "+YYYY-MM-" is in common
cd = isodate2timestamp(string.sub(d1,2,8), 10, state.era1)
elseif k>=6 and k<9 then -- same year, since "+YYYY-" is in common
cd = isodate2timestamp(tostring(year1), 9, state.era1)
elseif k==4 then -- same decade(k=4, precision=8), since "+YYY" is in common
cd = isodate2timestamp(tostring(year1), 8, state.era1)
elseif k==3 then -- same century(k=3, precision=7) since "+YY" is in common
local d = tostring(math.floor(year1/100) +1) -- convert 1999 -> 20
cd = isodate2timestamp( d, 7, state.era1)
elseif k==2 then -- same millennium (k=2, precision=6), since "+Y" is in common
local d = tostring(math.floor(year1/1000) +1) -- convert 1999 -> 2
cd = isodate2timestamp( d, 6, state.era1)
end
if not cd then
return ''
end
--if not cd then
-- return ' <br/>error: ' .. d1.." / " .. d2.." / ".. (cd or '') .." / ".. string.sub(d1,2,5).." / " .. string.sub(d2,2,5).." / " .. tostring(k)
--end
--
if (state.conj=='from-until') or (state.conj=='and' and year1==year2-1) then
outputStr = cd ..",P580,".. d1 ..",P582,".. d2
elseif (state.conj=='between') or (state.conj=='or' and year1==year2-1) then
outputStr = cd ..",P1319,".. d1 ..",P1326,".. d2
elseif state.conj=='circa2' then
outputStr = cd ..",P1319,".. d1 ..",P1326,".. d2 ..",P1480,Q5727902"
end
return outputStr
end
-- ==================================================
-- === External functions ===========================
-- ==================================================
function p.Era(frame)
-- process inputs
local dateStr
local args = frame.args
if not (args.lang and mw.language.isSupportedLanguage(args.lang)) then
args.lang = frame:callParserFunction( "int", "lang" ) -- get user's chosen language
end
local lang = args['lang']
local dateStr = args['date'] or ''
local eraType = string.lower(args['era'] or '')
dateStr = ISOdate(dateStr, lang, '', '', 1)
if eraType then
eraType = checkAliases(eraType ,'','e')
dateStr = translatePhrase(dateStr, '', eraType, lang, {})
end
return dateStr
end
function p._complex_date(conj, adj1, date1, units1, era1, adj2, date2, units2, era2, lang, passNr)
local Output=''
-- process inputs and save date in state array
local state = {}
state.conj = string.lower(conj or '')
state.adj1 = string.lower(adj1 or '')
state.adj2 = string.lower(adj2 or '')
state.era1 = string.lower(era1 or '')
state.era2 = string.lower(era2 or '')
state.units1 = string.lower(units1 or '')
state.units2 = string.lower(units2 or '')
-- if date 1 is missing but date 2 is provided than swap them
if date1 == '' and date2 ~= '' then
date1 = date2
date2 = ''
state = {adj1 = state.adj2, era1 = state.era2, units1 = state.units2,
adj2 = '', era2 = '', units2 = '', conj=state.conj, num=1}
end
if date2 ~= '' then state.nDates = 2
elseif date1 ~= '' then state.nDates = 1
else state.nDates = 0
end
-- reconcile alternative names for text inputs
local conj = checkAliases(state.conj ,'' ,'j')
state.adj1 ,conj = checkAliases(state.adj1 ,conj,'a')
state.units1,conj = checkAliases(state.units1,conj,'p')
state.era1 ,conj = checkAliases(state.era1 ,conj,'e')
state.special,conj = checkAliases('',conj,'c')
state.adj2 = checkAliases(state.adj2 ,'','a')
state.units2 = checkAliases(state.units2,'','p')
state.era2 = checkAliases(state.era2 ,'','e')
state.conj = conj
state.lang = lang
if p.Error~=nil then
return nil
end
-- calculate date precision value
date1, state.units1, state.precision1 = datePrecision(date1, state.units1)
date2, state.units2, state.precision2 = datePrecision(date2, state.units2)
-- Handle special cases
-- Some complex phrases can be created out of simpler ones. Therefore on pass # 1 we try to create
-- the phrase using complex phrase and if that is not found than on the second pass we try to build
-- the phrase out of the simpler ones
if passNr==1 then
if state.adj1=='circa' and state.nDates == 2 then
state.conj = 'circa2'
state.adj1 = ''
state.adj2 = ''
end
if state.nDates == 2 and state.adj1=='late' and state.adj2=='early' and state.conj=='and'
and state.units1==state.units2 and state.era1==state.era2 then
if state.units1=='century' then
state.conj='turn of the century'
elseif state.units1=='decade' then
state.conj='turn of the decade'
elseif state.units1=='' then
state.conj='turn of the year'
end
state.adj1 = ''
state.adj2 = ''
state.units1 = ''
state.units2 = ''
end
end
local errorStr = string.format(
'\n*conj=%s, adj1=%s, era1=%s, unit1=%s, prec1=%i, adj2=%s, era2=%s, unit2=%s, prec2=%i, special=%s',
state.conj, state.adj1, state.era1, state.units1, state.precision1,
state.adj2, state.era2, state.units2, state.precision2, state.special)
state.adj, state.era, state.units, state.precision = state.adj1, state.era1, state.units1, state.precision1
-- call specialized functions
local QScode = ''
if state.special~='' then
Output = otherPhrases(date1, date2, state.special, state.era1, lang, state)
elseif state.conj~='' then
QScode = twoDateQScode(date1, date2, state)
Output = twoDatePhrase(date1, date2, state, lang)
elseif state.adj1~='' or state.era1~='' or state.units1~='' then
Output = oneDatePhrase(date1, state.adj1, state.era1, state.units1, lang, 1, nil, state)
QScode = oneDateQScode(date1, state.adj1, state.era1, state.precision1)
elseif date1~='' then
Output = ISOdate(date1, lang, '', 'dtstart', '100-999')
end
if p.Error~=nil then
return errorStr
end
-- if there is any wikicode in the string than execute it
if mw.ustring.find(Output, '{') then
Output = mw.getCurrentFrame():preprocess(Output)
end
if QScode and #QScode>0 then
QScode = ' <div style="display: none;">date QS:P,' .. QScode .. '</div>'
end
return Output .. QScode
end
function p._complex_date_cer(conj, adj1, date1, units1, era1, adj2, date2, units2, era2, certainty, lang)
-- same as p._complex_date but with extra parameter for certainty: probably, possibly, presumably, etc.
local dateStr = p._complex_date(conj, adj1, date1, units1, era1, adj2, date2, units2, era2, lang, 1)
certainty = checkAliases(certainty, conj, 'r')
local LUT = {probably='Q56644435', presumably='Q18122778', possibly='Q30230067', circa='Q5727902' }
if certainty and LUT[certainty] then
dateStr = translatePhrase(dateStr, '', certainty, lang, {})
dateStr = string.gsub(dateStr, '(%<div style="display: none;"%>date QS:P,[^%<]+)(%</div%>)', '%1,P1480,' .. LUT[certainty] .. '%2' )
-- if str1 and str2
-- dateStr = str1 .. ',P1480,' .. LUT[certainty] .. str2
-- end
end
return dateStr
end
function p.complex_date(frame)
-- process inputs
local dateStr, Error
local args = frame.args
if not (args.lang and mw.language.isSupportedLanguage(args.lang)) then
args.lang = frame:callParserFunction( "int", "lang" ) -- get user's chosen language
end
local date1 = args['date1'] or args['2'] or args['date'] or ''
local date2 = args['date2'] or args['3'] or ''
local conj = args['conj'] or args['1'] or ''
local adj1 = args['adj1'] or args['adj'] or ''
local adj2 = args['adj2'] or ''
local units1 = args['precision1'] or args['precision'] or ''
local units2 = args['precision2'] or args['precision'] or ''
local era1 = args['era1'] or args['era'] or ''
local era2 = args['era2'] or args['era'] or ''
local certainty = args['certainty']
local lang = args['lang']
dateStr = p._complex_date_cer(conj, adj1, date1, units1, era1, adj2, date2, units2, era2, certainty, lang)
if p.Error~=nil then
dateStr = p.Error .. '[[Category:Pages using Complex date template with incorrect parameter]]'
end
return dateStr
end
return p
b6665hhh3lfo38xrtgmurmivvojtkon
Module:Date
828
23708
183893
157708
2022-08-04T14:45:06Z
Xiplus
4323
已保护“[[Module:Date]]”:高風險模板:876引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
Scribunto
text/plain
--[[
This module is intended for processing of date strings.
Please do not modify this code without applying the changes first at Module:Date/sandbox and testing
at Module:Date/sandbox/testcases and Module talk:Date/sandbox/testcases.
Authors and maintainers:
* User:Parent5446 - original version of the function mimicking template:ISOdate
* User:Jarekt - original version of the functions mimicking template:Date and template:ISOyear
]]
local p = {}
-- =======================================
-- === Dependencies ======================
-- =======================================
local i18n = require('Module:I18n/date') -- get localized translations of date formats
local yesno = require('Module:Yesno')
local function langSwitch(list,lang)
local langList = mw.language.getFallbacksFor(lang)
table.insert(langList,1,lang)
for i,language in ipairs(langList) do
if list[language] then
return list[language]
end
end
end
--[[
Date
This function is the core part of the ISOdate template.
Usage:
{{#invoke:Date|Date|year=|month=|day=|hour=|minute=|second=|tzhour=|tzmin=|lang=en}}
Parameters:
year,month,day,hour,minute,second: broken down date-time component strings
tzhour, tzmin: timezone offset from UTC, hours and minutes
lang: The language to display it in
case: Language format (genitive, etc.) for some languages
class: CSS class for the <time> node, use "" for no metadata at all
Error Handling:
]]
function p.Date(frame)
local args = frame.args
if not (args.lang and mw.language.isSupportedLanguage(args.lang)) then
args.lang = frame:callParserFunction( "int", "lang" ) -- get user's chosen language
end
return p._Date(
{
args.year or '',
args.month or '',
args.day or '',
args.hour or '',
args.minute or '',
args.second or '',
args.tzhour or '',
args.tzmin or ''
},
args.lang, -- language
args.case or '', -- allows to specify grammatical case for the month for languages that use them
args.class or 'dtstart', -- allows to set the html class of the time node where the date is included. This is useful for microformats.
args.trim_year or '100-999' -- by default pad one and 2 digit years to be 4 digit long, while keeping 3 digit years as is
)
end
function p._Date(datevec, lang, case, class, trim_year)
-- make sure inputs are in the right format
for i = #datevec + 1, 8 do
datevec[i] = ''
end
if not case then case = '' end
if not class then class = '' end
if not trim_year then trim_year = '100-999' end
-- if language is not provided than look up users language
-- WARNING: This step should be done by the template as it does not seem to work as well here (cache issues?)
if not lang or not mw.language.isValidCode( lang ) then
lang = 'en'
end
-- Just in case someone broke the internationalization code than fix the english defaults
if i18n.DateLang['en'] == nil then
i18n.DateLang['en'] = 'en-form'
end
if i18n.DateFormat['en-form'] == nil then
i18n.DateFormat['en-form'] = {YMDHMS='j F Y, H:i:s', YMDHM='j F Y, H:i', YMD='j F Y', YM='F Y', MD='j F', Y='Y'}
end
-- create datecode based on which variables are provided and check for out of bound values
local maxval = {9999, 12, 31, 23, 59, 60, 23, 59} -- max values for year, month, ...
local c = {'Y', 'M', 'D', 'H', 'M', 'S', '', ''}
local datecode = '' -- a string signifying which combination of variables was provided
local datenum = {} -- date-time encoded as a vector = [year, month, ... , second]
for i, v in ipairs( datevec ) do
if v~=nil and v~='' then
datecode = datecode .. c[i]
datenum[i] = tonumber(v)
if datenum[i]==nil and i==2 then
-- month is not a number -> check if it is a month name in English
v = mw.language.new('en'):formatDate( "n", v)
datenum[i] = tonumber(v)
end
if datenum[i]==nil or datenum[i]>maxval[i] then
-- Some numbers are out of range -> abort and return the empty string
return ''
end
end
end
-- create time stamp string (for example 2000-02-20 02:20:20) based on which variables were provided
local timeStamp
if datecode == 'YMDHMS' then
timeStamp = string.format('%04i-%02i-%02i %02i:%02i:%02i', datenum[1], datenum[2], datenum[3], datenum[4], datenum[5], datenum[6] )
elseif datecode == 'YMDHM' then
timeStamp = string.format('%04i-%02i-%02i %02i:%02i', datenum[1], datenum[2], datenum[3], datenum[4], datenum[5] )
elseif datecode:sub(1,3)=='YMD' then
timeStamp = string.format('%04i-%02i-%02i', datenum[1], datenum[2], datenum[3] )
datecode = 'YMD' -- 'YMD', 'YMDHMS' and 'YMDHM' are the only supported format starting with 'YMD'. All others will be converted to 'YMD'
elseif datecode == 'YM' then
timeStamp = string.format('%04i-%02i', datenum[1], datenum[2] )
elseif datecode:sub(1,1)=='Y' then
timeStamp = string.format('%04i', datenum[1] )
datecode = 'Y'
elseif datecode == 'M' then
timeStamp = string.format('%04i-%02i-%02i', 2000, datenum[2], 1 )
class = '' -- date not complete -> no html formating or micro-tagging of date string
elseif datecode == 'MD' then
timeStamp = string.format('%04i-%02i-%02i', 2000, datenum[2], datenum[3] )
class = '' -- date not complete -> no html formating or micro-tagging of date string
else
return '' -- format not supported
end
-- ==========================================================
-- === Create Date String using in chosen language
-- ==========================================================
-- which form should the date take?
-- Use langSwitch to pick formating for each language
local langDateForm = langSwitch(i18n.DateLang, lang)
-- special case of French and Gallic dates, which require different date format for the 1st day of the month
if datenum[3]==1 and (langDateForm=='fr-form' or langDateForm=='ga-form' or langDateForm=='ca-form') then
langDateForm = langDateForm .. '1' -- ordinal form for the first day of the month
end
-- special case of Basque dates, which require different date format for the 1st, 11th, 21st and 31st day of the month
if langDateForm=='eu-form' then
if (datenum[3]==1 or datenum[3]==21) then
langDateForm = 'eu-form01'
elseif (datenum[3]==11 or datenum[3]==31) then
langDateForm = 'eu-form11'
end
end
-- Look up country specific format input to {{#time}} function
local dFormat = i18n.DateFormat[langDateForm][datecode]
-- overwrite default grammatical case of the month (applies mostly to Slavic languages)
if (case=='gen') then
-- CAUTION: at the moment i18n.DateFormat uses "F" only as month name, but this might change and this operation does not check if 'F' is in "" brackets or not, so if some language starts using 'F' in "" than this will not work for that language
dFormat = dFormat:gsub("F", "xg");
end
if (case=='nom') then
-- CAUTION: at the moment i18n.DateFormat uses "xg" only as month name, but this might change and this operation does not check if 'xg' is in "" brackets or not, so if some language starts using 'xg' in "" than this will not work for that language
dFormat = dFormat:gsub("xg", "F");
end
if ((lang=='ru' or lang=='pl' or lang=='cs' or lang=='sl' or lang=='sk') and (case=='loc' or case=='ins')) or
(lang=='fi' and (case=='ptv' or case=='ine'or case=='ela'or case=='ill') ) then
local monthEn = mw.language.new('en'):formatDate( "F", timeStamp) -- month name in English
-- month name using proper case and language. It relies on messages stored in MediaWiki namespace for some cases and languages
-- That is why this IF statement uses "lang" not "langDateForm" variable to decide
local monthMsg = mw.message.new( string.format('%s-%s', monthEn, case ) ):inLanguage( lang )
if not monthMsg:isDisabled() then -- make sure it exists
local month=monthMsg:plain()
dFormat = dFormat:gsub('F', '"'..month..'"'); -- replace default month with month name we already looked up
dFormat = dFormat:gsub('xg', '"'..month..'"');
end
end
-- Special case related to Quechua and Kichwa languages
-- see https://commons.wikimedia.org/wiki/Template_talk:Date#Quechua from 2014
if (lang=='qu' or lang=='qug') and case=='nom' then
dFormat = dFormat:gsub('F"pi"', 'F');
end
-- Lua only date formating using {{#time}} parser function (new)
-- prefered call which gives "Lua error: too many language codes requested." on the [[Module talk:Date/sandbox/testcases]] page
--local datestr = mw.language.new(lang):formatDate( dFormat, timeStamp)
local datestr = mw.getCurrentFrame():callParserFunction( "#time", { dFormat, timeStamp, lang } )
-- Another special case related to Thai solar calendar
if lang=='th' and datenum[1]~= nil and datenum[1]<=1940 then
-- As of 2014 {{#time}} parser function did not resolve those cases properly
-- See https://en.wikipedia.org/wiki/Thai_solar_calendar#New_year for reference
-- Disable once https://bugzilla.wikimedia.org/show_bug.cgi?id=66648 is fixed
if datecode=='Y' then -- date is ambiguous
datestr = string.format('%04i หรือ %04i', datenum[1]+542, datenum[1]+543 )
elseif datenum[2]<=3 then -- year is wrong (one too many)
datestr = datestr:gsub( string.format('%04i', datenum[1]+543), string.format('%04i', datenum[1]+542 ) )
end
end
-- If year<1000 than either keep it padded to the length of 4 digits or trim it
-- decide if the year will stay padded with zeros (for years in 0-999 range)
if datenum[1]~= nil and datenum[1]<1000 then
local trim = yesno(trim_year,nil)
if trim == nil then
local YMin, YMax = trim_year:match( '(%d+)-(%d+)' )
trim = (YMin~=nil and datenum[1]>=tonumber(YMin) and datenum[1]<=tonumber(YMax))
end
-- If the date form isn't the Thai solar calendar, don't zero pad years in the range of 100-999.
-- If at some point support for Islamic/Hebrew/Japanese years is added, they may need to be skipped as well.
if trim then
--local yearStr1 = mw.language.new(lang):formatDate( 'Y', timeStamp)
local yearStr1 = mw.getCurrentFrame():callParserFunction( "#time", { 'Y', timeStamp, lang } )
--local yearStr1 = datestr:match( '%d%d%d%d' ) -- 4 digits in a row (in any language) - that must be a year
local yearStr2 = yearStr1
local zeroStr = mw.ustring.sub(yearStr1,1,1)
for i=1,3 do -- trim leading zeros
if mw.ustring.sub(yearStr2,1,1)==zeroStr then
yearStr2 = mw.ustring.sub(yearStr2, 2, 5-i)
else
break
end
end
datestr = datestr:gsub( yearStr1, yearStr2 )
--datestr = string.format('%s (%s, %s)', datestr, yearStr1, yearStr2 )
end
end
-- append timezone if present
if datevec[7] ~= '' and (datecode == 'YMDHMS' or datecode == 'YMDHM') then
local tzstr, tzhournum = '', tonumber(datevec[7])
if tzhournum < 0 then tzstr = '−' else tzstr = '+' end
tzstr = tzstr..string.format("%02d", math.abs(tzhournum))..':'
if datevec[8] ~= '' then tzstr = tzstr..datevec[8] else tzstr = tzstr..'00' end
datestr = datestr..' '..tzstr
end
-- html formating and tagging of date string
if class ~= '' then
local DateHtmlTags = '<span style="white-space:nowrap"><time class="%s" datetime="%s">%s</time></span>'
datestr = DateHtmlTags:format(class, timeStamp, datestr)
end
return datestr
end
return p
n2fu3b16bq7r4kqhe08ddyc1nwz1tq8
Module:Formatnum
828
23709
183897
157723
2022-08-04T14:45:46Z
Xiplus
4323
已保护“[[Module:Formatnum]]”:高風險模板:877引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
Scribunto
text/plain
-- This module is intended to replace the functionality of Template:Formatnum and related templates.
local p = {}
function p.main(frame)
local args = frame:getParent().args
local prec = args.prec or ''
local sep = args.sep or ''
local number = args[1] or args.number or ''
local lang = args[2] or args.lang or ''
-- validate the language parameter within MediaWiki's caller frame
if lang == "arabic-indic" then -- only for back-compatibility ("arabic-indic" is not a SupportedLanguage)
lang = "fa" -- better support than "ks"
elseif lang == '' or not mw.language.isSupportedLanguage(lang) then
-- Note that 'SupportedLanguages' are not necessarily 'BuiltinValidCodes', and so they are not necessarily
-- 'KnownLanguages' (with a language name defined at least in the default localisation of the local wiki).
-- But they all are ValidLanguageCodes (suitable as Wiki subpages or identifiers: no slash, colon, HTML tags, or entities)
-- In addition, they do not contain any capital letter in order to be unique in page titles (restriction inexistant in BCP47),
-- but they may violate the standard format of BCP47 language tags for specific needs in MediaWiki.
-- Empty/unspecified and unsupported languages are treated here in Commons using the user's language,
-- instead of the local 'ContentLanguage' of the Wiki.
lang = frame:callParserFunction( "int", "lang" ) -- get user's chosen language
end
return p.formatNum(number, lang, prec, sep ~= '')
end
local digit = { -- substitution of decimal digits for languages not supported by mw.language:formatNum() in core Lua libraries for MediaWiki
["ml-old"] = { '൦', '൧', '൨', '൩', '൪', '൫', '൬', '൭', '൮', '൯' },
["mn"] = { '᠐', '᠑', '᠒', '᠓', '᠔', '᠕', '᠖', '᠗', '᠘', '᠙'},
["ta"] = { '௦', '௧', '௨', '௩', '௪', '௫', '௬', '௭', '௮', '௯'},
["te"] = { '౦', '౧', '౨', '౩', '౪', '౫', '౬', '౭', '౮', '౯'},
["th"] = { '๐', '๑', '๒', '๓', '๔', '๕', '๖', '๗', '๘', '๙'}
}
function p.formatNum(number, lang, prec, compact)
-- Do not alter the specified value when it is not a valid number, return it as is
local value = tonumber(number)
if value == nil then
return number
end
-- Basic ASCII-only formatting (without paddings)
number = tostring(value)
-- Check the presence of an exponent (incorrectly managed in mw.language:FormatNum() and even forgotten due to an internal bug, e.g. in Hindi)
local exponent
local pos = string.find(number, '[Ee]')
if pos ~= nil then
exponent = string.sub(number, pos + 1, string.len(number))
number = string.sub(number, 1, pos - 1)
else
exponent = ''
end
-- Check the minimum precision requested
prec = tonumber(prec) -- nil if not specified as a true number
if prec ~= nil then
prec = math.floor(prec)
if prec < 0 then
prec = nil -- discard an incorrect precision (not a positive integer)
elseif prec > 14 then
prec = 14 -- maximum precision supported by tostring(number)
end
end
-- Preprocess the minimum precision in the ASCII string
local dot
if (prec or 0) > 0 then
pos = string.find(number, '.', 1, true) -- plain search, no regexp
if pos ~= nil then
prec = pos + prec - string.len(number) -- effective number of trailing decimals to add or remove
dot = '' -- already present
else
dot = '.' -- must be added
end
else
dot = '' -- don't add dot
prec = 0 -- don't alter the precision
end
if lang ~= nil and mw.language.isKnownLanguageTag(lang) == true then
-- Convert number to localized digits, decimal separator, and group separators
local language = mw.getLanguage(lang)
if compact then
number = language:formatNum(tonumber(number), { noCommafy = 'y' }) -- caveat: can load localized resources for up to 20 languages
else
number = language:formatNum(tonumber(number)) -- caveat: can load localized resources for up to 20 languages
end
-- Postprocessing the precision
if prec > 0 then
local zero = language:formatNum(0)
number = number .. dot .. mw.ustring.rep(zero, prec)
elseif prec < 0 then
-- TODO: rounding of last decimal; here only truncate decimals in excess
number = mw.ustring.sub(number, 1, mw.ustring.len(number) + prec)
end
-- Append the localized base-10 exponent without grouping separators (there's no reliable way to detect a localized leading symbol 'E')
if exponent ~= '' then
number = number .. 'E' .. language:formatNum(tonumber(exponent),{noCommafy=true})
end
else -- not localized, ASCII only
-- Postprocessing the precision
if prec > 0 then
number = number .. dot .. mw.string.rep('0', prec)
elseif prec < 0 then
-- TODO: rounding of last decimal; here only truncate decimals in excess
number = mw.string.sub(number, 1, mw.string.len(number) + prec)
end
-- Append the base-10 exponent
if exponent ~= '' then
number = number .. 'E' .. exponent
end
end
-- Special cases for substitution of ASCII digits (missing support in Lua core libraries for some languages)
if digit[lang] then
for i, v in ipairs(digit[lang]) do
number = mw.ustring.gsub(number, tostring(i - 1), v)
end
end
return number
end
return p
ea5lmau3n3g443z268nz79espe8b4sj
Module:I18n/complex date
828
23710
183900
157734
2022-08-04T14:46:16Z
Xiplus
4323
已保护“[[Module:I18n/complex date]]”:高風險模板:875引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
Scribunto
text/plain
--[[
__ __ _ _ ___ _ ___ __ _ _ _
| \/ | ___ __| |_ _| | ___ _|_ _/ |( _ ) _ __ / /__ ___ _ __ ___ _ __ | | _____ __ __| | __ _| |_ ___
| |\/| |/ _ \ / _` | | | | |/ _ (_)| || |/ _ \| '_ \ / / __/ _ \| '_ ` _ \| '_ \| |/ _ \ \/ / / _` |/ _` | __/ _ \
| | | | (_) | (_| | |_| | | __/_ | || | (_) | | | |/ / (_| (_) | | | | | | |_) | | __/> < | (_| | (_| | || __/
|_| |_|\___/ \__,_|\__,_|_|\___(_)___|_|\___/|_| |_/_/ \___\___/|_| |_| |_| .__/|_|\___/_/\_\ \__,_|\__,_|\__\___|
|_|
This code was copied from Commons please request changes there.
Maintainers:
*Jarekt
]]
local Ordinal = require('Module:Ordinal')._Ordinal
local Roman = require('Module:Roman')._Numeral
local linguistic = require('Module:Linguistic')
-- ==========================================================================
-- === Local Helper functions ==============================================
-- ==========================================================================
-- form of French "of" based on "precision", which is wikibase compatible date precision format:
-- 6=millennium, 7=century, 8=decade, 9=year, 10=month, 11=day
-- 1 2 3 4 5 mill cent deca year month day
local frOf = {'du','du','du','du','du', 'du', 'du', 'de', 'de', 'de', 'du'}
local function decYear(state,lang,case)
--Declension of word "year" in several languages
if state.precision == 9 then
yearCase = {
fi={xxx='vuosien', gen='vuoden', ill='vuoteen', ptv='vuotta', ela='vuodesta', ine='vuonna'},
sl={insP='letoma', ins='letom', gen='leta', loc='letu'},
hsb={insP='lětami', ins='lětom', gen='lěta', loc='lěće'}
}
return yearCase[lang][case] .. ' '
else
return ''
end
end
local function decCentury(lang,case)
--Declension of word "century" in several languages
centuryCase = {
pl={nom='wiek', gen='wieku', ins='wiekiem', loc='wieku', default = 'wiek'},
hsb={nom='lětstotk', gen='lětstotka', ins='lětstotkom', loc='lětstotku', default = 'lětstotk'}
}
return centuryCase[lang][case] or centuryCase[lang]['default']
end
local function decMillennium(lang,case)
--Declension of word "century" in several languages
millenniumCase = {
pl={nom='tysiąclecie', gen='tysiąclecia', ins='tysiącleciem', loc='tysiącleciu', default = 'tysiąclecie'},
hsb={nom='lěttysac', gen='lěttysaca', ins='lěttysacom', loc='lěttysacu', default = 'lěttysac'}
}
return millenniumCase[lang][case] or millenniumCase[lang]['default']
end
-- ==========================================================================
-- === Output data structure ===============================================
-- ==========================================================================
local p = {}
--[[
Multiple formats are possible:
1) string with key words "$date1" and "$date2" which will be replaced later by the date strings
2) function which can be used to create output string
* Function INPUTS:
- date1 and date2 string with date strings. "$date1" and "$date2" can also be used which will be replaced latter
- state is a table with full description of the phrase we are trying to construct. It includes state.precision1 (and 2)
which is wikibase compatible date precision format: 6=millennium, 7=century, 8=decade, 9=year, 10=month, 11=day
3) table with following fields:
* table[1] is either string or a function
* table.case is a 2 element table with Grammatical cases used by given language to alter
month name or other adjective related to date # 1 and 2
]]
p.Translations = {
-- ==========================================
-- === Two date phrases =====================
-- ==========================================
['from-until'] = {
nDates = 2,
ar='من $date1 إلى $date2',
['be-tarask']={'з $date1 да $date2', case={'gen','gen'}},
bn='$date1 থেকে $date2 পর্যন্ত',
ca='$date1 fins $date2',
cs='$date1 až $date2',
da='fra $date1 til $date2',
de='$date1 bis $date2',
el='από $date1 έως $date2',
en='from $date1 until $date2',
['en-gb']='from $date1 until $date2',
['en-ca']='from $date1 until $date2',
eo='de $date1 al $date2',
es='de $date1 a $date2',
et='$date1 kuni $date2',
fa='از $date1 تا $date2',
fi='$date1–$date2', -- välisenä aikana
fr=function(date1, date2, state) -- could actually be better should be "d'octobre à mars 2013' not "de octore 2013 à mars 2013"
if state.precision > 10 then -- precision > month
return 'du $date1 au $date2'
else -- "DE septebmbre" / "D'octobre"
return linguistic.of(date1, 'fr') .. " à $date2"
end
end,
gl='de $date1 a $date2', --Template:From until used 'desde $date1 ata $date2'
he='מ- $date1 עד $date2',
hr='od $date1 do $date2',
hsb={'wot $date1 do $date2', case={'gen','gen'}},
hu='$date1 – $date2',
it='dal $date1 al $date2',
ja='$date1から$date2まで',
mk='од $date1 до $date2',
ml='$date1 മുതൽ $date2 വരെ',
nb='fra $date1 til $date2',
nds='$date1 bet $date2',
nn='fra $date1 til $date2',
nl='$date1 tot $date2',
no='fra $date1 til $date2',
pl={'od $date1 do $date2', case={'gen','gen'}},
ro='din $date1 până în $date2',
pt='de $date1 a $date2',
qu="$date1 p'unchawmanta $date2 p\'unchawkama",
ru={'с $date1 по $date2', case={'gen','gen'}},
sk={'od $date1 do $date2', case={'gen','gen'}},
sl={'od $date1 do $date2', case={'gen','gen'}},
sv='från $date1 till $date2',
uk={'з $date1 до $date2', case={'gen','gen'}},
ur='از $date1 تا $date2',
vi='từ $date1 đến $date2',
['zh-hans']='从$date1到$date2',
['zh-hant']='從$date1到$date2',
default='<span style="color:red">$date1 - $date2</span>',
},
['between']={
nDates = 2,
ar='بين $date1 و $date2',
['be-tarask']={'між $date1 і $date2', case={'ins','ins'}},
bn='$date1 এবং $date2-এর মাঝামাঝি',
ca='entre $date1 i $date2',
cs={'mezi $date1 a $date2', case={'ins','ins'}},
da='mellem $date1 og $date2',
de='zwischen $date1 und $date2',
el='μεταξύ $date1 και $date2',
en='between $date1 and $date2',
['en-gb']='between $date1 and $date2',
['en-ca']='between $date1 and $date2',
eo='inter $date1 kaj $date2',
es='entre $date1 y $date2',
et='$date1 ja $date2 vahel',
fa='بین $date1 و $date2',
fi={function(date1, date2, state) return decYear(state,'fi','xxx') .. '$date1 ja $date2 välisenä aikana' end, case={'gen','gen'}},
fr='entre $date1 et $date2',
gl='entre $date1 e $date2',
he='בין $date1 ו- $date2',
hr='između $date1 i $date2',
hsb={'mjez $date1 a $date2', case={'ins','ins'}},
hu='$date1 és $date2 között',
hi='$date1 और $date2 के बीच',
it='tra il $date1 e il $date2',
ja='$date1と$date2の間',
mk='помеѓу $date1 и $date2',
ml='$date1, $date2 എന്നിവയ്ക്കിടയ്ക്ക്',
nb='mellom $date1 og $date2',
nds='twischen $date1 un $date2',
nn='mellom $date1 og $date2',
nl='tussen $date1 en $date2',
no='mellom $date1 og $date2',
pl={'między $date1 a $date2', case={'ins','ins'}},
ro='între $date1 și $date2',
pt='entre $date1 e $date2',
qu="$date1 p'unchawpa $date2 p'unchawpapas chawpin",
ru={'между $date1 и $date2', case={'ins','ins'}},
sk={'medzi $date1 a $date2', case={'ins','ins'}},
sl={function(date1, date2, state) return 'med ' .. decYear(state,'sl','insP') .. '$date1 in $date2' end, case={'ins','ins'}},
sv='mellan $date1 och $date2',
uk={'між $date1 та $date2', case={'ins','ins'}},
ur='بین $date1 و $date2',
vec='tra el $date1 e el $date2',
vi='giữa $date1 và $date2',
['zh-hans']='在$date1到$date2之间',
['zh-hant']='在$date1到$date2之間',
default='<span style="color:red">$date1 - $date2</span>',
},
['or'] = {
nDates = 2,
ar='$date1 أو $date2',
['be-tarask']='$date1 ці $date2',
bn='$date1 অথবা $date2',
ca='$date1 o $date2',
cs='$date1 nebo $date2',
da='$date1 eller $date2',
de='$date1 oder $date2',
el='$date1 ή $date2',
en='$date1 or $date2',
['en-gb']='$date1 or $date2',
['en-ca']='$date1 or $date2',
eo='$date1 aŭ $date2',
es='$date1 o $date2',
et='$date1 või $date2',
fa='$date1 یا $date2',
fi='$date1 tai $date2',
fr='$date1 ou $date2',
gl='$date1 ou $date2',
he='$date1 או $date2',
hr='$date1 ili $date2',
hsb='$date1 abo $date2',
hu='$date1 vagy $date2',
it='$date1 o $date2',
ja='$date1または$date2',
mk='$date1 или $date2',
ml='$date1 അഥവാ $date2',
nb='$date1 eller $date2',
nn='$date1 eller $date2',
nds='$date1 oder $date2',
nl='$date1 of $date2',
no='$date1 eller $date2',
pl='$date1 lub $date2',
pt='$date1 ou $date2',
qu='$date1 icha $date2',
ro='$date1 sau $date2',
ru='$date1 или $date2',
sk='$date1 alebo $date2',
sl='$date1 ali $date2',
sv='$date1 eller $date2',
uk='$date1 або $date2',
ur='$date1 یا $date2',
th='$date1 หรือ $date2',
vi='$date1 hoặc $date2',
['zh-hans']='$date1或$date2',
['zh-hant']='$date1或$date2',
default=function(date1, date2, state) return linguistic.conj({date1, date2}, state.lang, 'or') end,
},
['and'] = {
nDates = 2,
ar='$date1 و $date2',
['be-tarask']='$date1 і $date2',
bn='$date1 এবং $date2',
ca='$date1 i $date2',
cs='$date1 a $date2',
da='$date1 og $date2',
de='$date1 und $date2',
el='$date1 και $date2',
en='$date1 and $date2',
['en-gb']='$date1 and $date2',
['en-ca']='$date1 and $date2',
eo='$date1 kaj $date2',
es='$date1 y $date2',
et='$date1 ja $date2',
fa='$date1 و $date2',
fi='$date1 ja $date2',
fr='$date1 et $date2',
gl='$date1 e $date2',
he='$date1 ו- $date2',
hu='$date1 és $date2',
hsb='$date1 a $date2',
it='$date1 e $date2',
ja='$date1および$date2',
mk='$date1 и $date2',
ml='$date1 ഒപ്പം $date2',
nb='$date1 og $date2',
nn='$date1 og $date2',
nds='$date1 un $date2',
nl='$date1 en $date2',
no='$date1 og $date2',
pl='$date1 i $date2',
pt='$date1 e $date2',
qu='$date1wan $date2pas',
ro='$date1 și $date2',
ru='$date1 и $date2',
sk='$date1 a $date2',
sl='$date1 in $date2',
sv='$date1 och $date2',
uk='$date1 та $date2',
ur='$date1 و $date2',
vi='$date1 và $date2',
['zh-hans']='$date1和$date2',
['zh-hant']='$date1和$date2',
default=function(date1, date2, state) return linguistic.conj({date1, date2}, state.lang, 'and') end,
},
-- ==========================================
-- === Prepositions =========================
-- ==========================================
['by'] = {
nDates = 1,
ar='حوالي $date1',
['be-tarask']={'да $date1', case={'gen',''}},
bn='$date1 কর্তৃক',
ca='vers $date1',
cs={'kolem $date1', case={'gen',''}},
da='mod $date1',
de='spätestens $date1',
el='έως $date1',
en='by $date1',
['en-gb']='by $date1',
['en-ca']='by $date1',
eo='ne post $date1',
es='para $date1',
et='hiljemalt $date1',
fa='توسط $date1',
fi={function(date1, state) return decYear(state,'fi','ill') .. '$date1 mennessä' end, case={'ill',''}},
fr='$date1 (au plus tard)',
gl='cara a $date1',
he='עד $date1',
hr='do $date1',
hsb={'do $date1', case={'gen',''}},
it='entro il $date1',
ja='$date1まで',
mk='кон $date1',
ml='$date1-ൽ',
nb='innen $date1',
nn='innan $date1',
nds='$date1 oder vördem al',
nl='tegen $date1',
no='innen $date1',
pl={'przed $date1', case={'ins',''}},
pt='por $date1',
qu="$date1 p'unchawkama",
ro='de $date1',
ru={'к $date1', case={'dat',''}},
sk={'okolo $date1', case={'gen',''}},
sl={function(date1, state) return 'najpozneje ' .. decYear(state,'sl','gen') .. ' $date1' end, case={'gen',''}},
sv='senast $date1',
uk={'до $date1', case={'dat',''}},
ur='توسط $date1',
vi='vào $date1', -- need to insert "đã" somewhere later in the sentence -->
['zh-hans']='$date1前后',
['zh-hant']='$date1前后',
default='<span style="color:red">by $date1</span>',
},
['before'] = {
nDates = 1,
ar='قبل $date1',
['be-tarask']={'перад $date1', case={'ins',''}},
bn='$date1-এর আগে',
bg='Преди $date1',
ca='abans $date1',
cs={'před $date1', case={'ins',''}},
da='før $date1',
de='vor $date1',
el='πριν από $date1',
en='before $date1',
['en-gb']='before $date1',
['en-ca']='before $date1',
eo='antaŭ $date1',
es='antes de $date1',
et='enne $date1',
fa='پیش از $date1',
fi={function(date1, state) return 'ennen ' .. decYear(state,'fi','ptv') .. '$date1' end, case={'ptv',''}},
fr='avant $date1',
gl='antes do $date1',
he='לפני $date1',
hr='prije $date1',
hsb={'do $date1', case={'gen',''}},
hu='$date1 előtt',
it='prima del $date1',
ja='$date1より前',
mk='пред $date1',
ml='$date1-നു മുമ്പ്',
nb='før $date1',
nn='før $date1',
nds='vör $date1',
nl='voor $date1',
no='før $date1',
pl={'przed $date1', case={'ins',''}},
pt='antes de $date1',
qu="$date1 p'unchaw ñawpan",
ro='înainte de $date1',
ru={'ранее $date1', case={'gen',''}},
sk={'pred $date1', case={'ins',''}},
sl={function(date1, state) return 'pred ' .. decYear(state,'sl','ins') .. ' $date1' end, case={'ins',''}},
sv='före $date1',
uk={'до $date1', case={'gen',''}},
ur='قبل $date1',
vi='trước $date1',
['zh-hans']='在$date1之前',
['zh-hant']='在$date1之前',
default='<span style="color:red">before $date1</span>',
},
['from'] = {
nDates = 1,
ar='من $date1',
['be-tarask']={'з $date1', case={'gen',''}},
bn='$date1 থেকে',
cs={'od $date1', case={'gen',''}},
de='Seit $date1',
el='από $date1',
en='from $date1',
['en-gb']='from $date1',
['en-ca']='from $date1',
eo='ekde $date1',
es='desde $date1',
et='alates $date1',
fa='از $date1',
fi={function(date1, state) return decYear(state,'fi','ela') .. '$date1 alkaen' end, case={'ela',''}},
fr= function(date1, state) return 'à partir '.. frOf[state.precision] ..' $date1' end,
gl='desde o $date1',
he='מ- $date1',
hr='od $date1',
hsb={'wot $date1', case={'gen',''}},
it='dal $date1',
ja='$date1から',
nds='vonaf $date1',
mk='од $date1',
nb='fra $date1',
nn='frå $date1',
ml='$date1 മുതൽ',
nl='vanaf $date1',
no='fra $date1',
pl={'od $date1', case={'gen',''}},
qu="$date1 p'unchawmanta",
ro='din $date1',
ru={'С $date1', case={'gen',''}},
sk={'od $date1', case={'gen',''}},
sl={function(date1, state) return 'od ' .. decYear(state,'sl','gen') .. ' $date1' end, case={'gen',''}},
sv='från $date1',
uk={'з $date1', case={'gen',''}},
ur='از $date1',
vi='từ $date1',
['zh-hans']='自$date1',
['zh-hant']='自$date1',
default='<span style="color:red">from $date1</span>',
},
['until'] = {
nDates = 1,
['be-tarask']={'усутыч да $date1', case={'gen',''}},
bn='$date1 পর্যন্ত',
cs={'do $date1', case={'gen', ''}},
de='bis $date1',
en='until $date1',
['en-gb']='until $date1',
['en-ca']='until $date1',
eo='ĝis $date1',
es='hasta $date1',
fr=function(date1, state)
if state.precision > 10 then -- precision > month
return "jusqu'au $date1"
else
return "jusqu'à $date1"
end
end,
hr='do $date1',
hsb={'do $date1', case={'gen',''}},
it='al $date1',
nb='til $date1',
nl='tot $date1',
nn='til $date1',
ml='$date1 വരെ',
pl={'do $date1', case={'gen',''}},
ru={'вплоть до $date1', case={'gen',''}},
sk={'do $date1', case={'gen', ''}},
uk={'аж до $date1', case={'gen',''}},
ur='تک $date1',
['zh-hans']='直到$date1',
['zh-hant']='直到$date1',
default='<span style="color:red">until $date1</span>',
},
['after'] = {
nDates = 1,
ar='بعد $date1',
['be-tarask']={'пасьля $date1', case={'gen',''}},
bn='$date1-এর পরে',
ca='desprès $date1',
cs={'po $date1', case={'loc',''}},
de='nach $date1',
da='efter $date1',
el='μετά από $date1',
en='after $date1',
['en-gb']='after $date1',
['en-ca']='after $date1',
eo='post $date1',
es='después de $date1',
et='pärast $date1',
fa='پس از $date1',
fi={function(date1, state) return decYear(state,'fi','gen') .. '$date1 jälkeen' end, case={'gen',''}},
fr='après $date1',
gl='despois do $date1',
he='לאחר $date1',
hr='nakon $date1',
hu='$date1 után',
hsb={'po $date1', case={'loc',''}},
it='dopo il $date1',
ja='$date1より後',
mk='по $date1',
ml='$date1-നു ശേഷം',
nb='etter $date1',
nn='etter $date1',
nds='na $date1',
nl='na $date1',
no='etter $date1',
pl={'po $date1', case={'loc',''}},
pt='após $date1',
qu="$date1 p'unchaw qhipan",
ro='după $date1',
ru={'после $date1', case={'gen',''}},
sk={'po $date1', case={'loc',''}},
sl={function(date1, state) return 'po ' .. decYear(state,'sl','loc') .. ' $date1' end, case={'loc',''}},
sv='efter $date1',
uk={'після $date1', case={'gen',''}},
ur='بعد $date1',
vi='sau $date1',
['zh-hans']='在$date1之后',
['zh-hant']='在$date1之後',
default='<span style="color:red">after $date1</span>',
},
-- ==========================================
-- === Adjectives ===========================
-- ==========================================
['early'] = {
nDates = 1,
ar='بداية $date1',
['be-tarask']={'пачатак $date1', case={'gen',''}},
bn='$date1-এর শুরুতে',
ca='al principi de $date1',
cs={'začátek $date1', case={'gen',''}},
da='tidlig $date1',
de='Anfang $date1',
el='αρχές του $date1',
en='early $date1',
['en-gb']='early $date1',
['en-ca']='early $date1',
eo='komence de $date1',
es='a principios de $date1',
et='$date1 algus',
fa='اوایل $date1',
fi={function(date1, state) return decYear(state,'fi','gen') .. '$date1 alku' end, case={'gen',''}},
fr='début $date1',
gl='a principios de $date1',
he='תחילת $date1',
hr='početak $date1',
hsb={'spočatk $date1', case={'gen',''}},
hu='$date1 elején',
it='inizio del $date1',
ja='$date1初頭',
mk='почеток на $date1',
ml='$date1 ആദ്യപാദം',
nb='tidlig $date1',
nn='tidleg $date1',
nds='Anfang $date1',
nl='begin $date1',
no='tidlig $date1',
pl={'początek $date1', case={'gen',''}},
pt='a princípios de $date1',
qu="$date1 ñawpaq p'unchawkunapi",
ro='începând cu $date1',
ru={'начало $date1', case={'gen',''}},
sk={'začiatok $date1', case={'gen',''}},
sl=function(date1, state)-- could actually be better should be "d'octobre à mars 2013' not "de octore 2013 à mars 2013"
if state.precision == 9 then -- precision > month
return 'zgodnje leto $date1'
else -- "DE septebmbre" / "D'octobre"
return 'zgodnji $date1'
end
end,
sv='början av $date1',
uk={'початок $date1', case={'gen',''}},
ur='ابتدا $date1',
vi='đầu năm $date1',
['zh-hans']='$date1早期',
['zh-hant']='$date1早期',
default='<span style="color:red">early $date1</span>',
},
['mid'] = {
nDates = 1,
ar='منتصف $date1',
['be-tarask']={'сярэдзіна $date1', case={'gen',''}},
bn='$date1-এর মাঝামাঝি',
ca='a mitjan $date1',
cs={'polovina $date1', case={'gen',''}},
da='midten af $date1',
de='Mitte $date1',
el='μέσα του $date1',
en='mid $date1',
['en-gb']='mid $date1',
['en-ca']='mid $date1',
eo='meze de $date1',
es='a mediados de $date1',
et='$date1 keskel',
fa='اواسط $date1',
fi={function(date1, state) return decYear(state,'fi','gen') .. '$date1 puoliväli' end, case={'gen',''}},
fr='mi $date1',
gl='a mediados de $date1',
he='אמצע $date1',
hr='sredina $date1',
hsb={'srjedź $date1', case={'gen',''}},
hu='$date1 közepén',
it='metà del $date1',
ja='$date1半ば',
mk='средина на $date1',
ml='$date1 മദ്ധ്യം',
nb='midten av $date1',
nn='midten av $date1',
nds='Midd $date1',
nl='midden $date1',
no='midten av $date1',
pl={'środek $date1', case={'gen',''}},
pt='meados de $date1',
qu="$date1 chawpin p'unchawkunapi",
ro='mijlocul lui $date1',
ru={'середина $date1', case={'gen',''}},
sk={'polovica $date1', case={'gen',''}},
sl={function(date1, state) return 'sredina ' .. decYear(state,'sl','gen') .. ' $date1' end, case={'gen',''}},
sv='mitten av $date1',
uk={'середина $date1', case={'gen',''}},
ur='وسط $date1',
vi='giữa năm $date1',
['zh-hans']='$date1中期',
['zh-hant']='$date1中期',
default='<span style="color:red">mid $date1</span>',
},
['late'] = {
nDates = 1,
ar='نهاية $date1',
bn='$date1-এর শেষে',
['be-tarask']={'канец $date1', case={'gen',''}},
ca='al final de $date1',
cs='konec $date1',
da='sen $date1',
de='Ende $date1',
el='τέλη του $date1',
en='late $date1',
['en-gb']='late $date1',
['en-ca']='late $date1',
eo='fine de $date1',
es='a fines de $date1',
et='$date1 lõpp',
fa='اواخر $date1',
fi={function(date1, state) return decYear(state,'fi','gen') .. '$date1 loppu' end, case={'gen',''}},
fr='fin $date1',
gl='a finais de $date1',
he='סוף $date1',
hr='kraj $date1',
hsb={'kónc $date1', case={'gen',''}},
hu='$date1 végén',
it='fine del $date1',
ja='$date1末',
mk='крајот на $date1',
ml='$date1 അന്ത്യപാദം',
nb='sent $date1',
no='seint $date1',
nds='Enn $date1',
nl='eind $date1',
no='sent $date1',
pl={'koniec $date1', case={'gen',''}},
pt='ao final de $date1',
qu="$date1 qhipaq p'unchawkunapi",
ro='sfârșitul lui $date1',
ru={'конец $date1', case={'gen',''}},
sk={'koniec $date1', case={'gen',''}},
sl={function(date1, state) return 'pozno ' .. decYear(state,'sl','gen') .. ' $date1' end, case={'gen',''}},
sv='slutet av $date1',
uk={'кінець $date1', case={'gen',''}},
ur='اخیر $date1',
vi='cuối năm $date1',
['zh-hans']='$date1晚期',
['zh-hant']='$date1晚期',
default='<span style="color:red">late $date1</span>',
},
['circa'] = {
nDates = 1,
ar='حوالي $date1',
['be-tarask']={'каля $date1', case={'gen',''}},
bn='প্রায় $date1',
ca='cap a $date1',
cs='cca $date1',
da='ca. $date1',
de='etwa $date1',
el='περ. $date1',
en='circa $date1',
['en-gb']='circa $date1',
['en-ca']='circa $date1',
eo='ĉirkaŭ $date1',
es='hacia $date1', -- suggestion use "hacia"/"hacia el" or leave the latin circa or ca.
et='ca. $date1',
fa='حوالی $date1', -- template:Circa used 'حدود $date1'
fi={function(date1, state) return 'suunnilleen ' .. decYear(state,'fi','ine') .. '$date1' end, case={'ine',''}}, -- template:Circa used 'noin $date1'
fr=function(date1, state)
if state.precision >= 11 then -- precision >= day
return 'vers le $date1'
else
return 'vers $date1'
end
end,
gl='entre $date1', -- template:Circa used 'cara a $date1'
he='בסביבות $date1',
hr='oko $date1',
hsb={'wokoło $date1', case={'gen',''}},
hu='$date1 körül',
it='$date1 circa',
ja='$date1頃',
ko='$date1경',
mk='~ $date1', -- template:Circa used 'o. $date1'
ml= 'ഉദ്ദേശം $date1',
nb='ca. $date1',
nn='ca. $date1',
nds='üm un bi $date1',
nl='ca. $date1',
no='ca. $date1',
pl={'około $date1', case={'gen',''}},
pt='cerca de $date1',
qu='$date1chá',
ro='circa $date1',
ru={'около $date1', case={'gen',''}},
sk='cca $date1',
sl={function(date1, state) return 'ok. ' .. decYear(state,'sl','gen') .. ' $date1' end, case={'gen',''}},
sv='c:a $date1', -- template:Circa used 'ca $date1'
uk={'близько $date1', case={'gen', ''}},
ur='قریباً $date1',
vi='vào khoảng $date1',
['zh-hans']='约$date1',
['zh-hant']='約$date1',
default='<span style="color:red">circa $date1</span>',
},
['uncertain'] = {
nDates = 1,
['zh-hans']='$date1(?)',
['zh-hant']='$date1(?)',
default='$date1 (?)',
},
probably = { -- see Q56644435
nDates = 1,
ast = 'probablemente $date1',
bn = 'সম্ভবত $date1',
ca = 'probablement $date1',
cs = 'pravděpodobně $date1',
de = 'wahrscheinlich $date1',
el = 'πιθανόν $date1',
en = 'probably $date1',
['en-gb']='probably $date1',
['en-ca']='probably $date1',
eo = 'probable $date1',
es = 'probable $date1',
fa = 'احتمالاً $date1',
fr = 'probablement $date1',
he = 'כפי הנראה $date1',
hu = 'feltehetőleg $date1',
it = 'probabile $date1',
mk = 'веројатно $date1',
ml = 'ഒരുപക്ഷേ $date1',
nl = 'waarschijnlijk $date1',
pl = 'prawdopodobnie $date1',
pt = 'provavelmente $date1',
ru = 'вероятно $date1',
sv = 'antagligen $date1',
default='<span style="color:red">probably $date1</span>',
},
possibly = { -- see Q30230067
nDates = 1,
ast = 'posiblemente $date1',
bn = 'যথাসম্ভব $date1',
cs = 'možná $date1',
de = 'möglicherweise $date1',
en = 'possibly $date1',
['en-gb']='possibly $date1',
['en-ca']='possibly $date1',
eo = 'eble $date1',
el = 'πιθανόν $date1',
fa = 'احتمالاً $date1',
fr = 'peut-être $date1',
hu = 'talán $date1',
mk = 'можеби $date1',
ml = 'മിക്കവാറും $date1',
nl = 'mogelijk $date1',
pl = 'być może $date1',
pt = 'possivelmente $date1',
ro = 'poate $date1',
ru = 'возможно $date1',
sv = 'möjligen $date1',
default='<span style="color:red">possibly $date1</span>',
},
presumably = { -- see Q18122778
nDates = 1,
ast = 'presumiblemente $date1',
de = 'vermutlich $date1',
en = 'presumably $date1',
['en-gb']='presumably $date1',
['en-ca']='presumably $date1',
fr = 'présumé $date1',
it = 'presumibilmente $date1',
ml = 'ഊഹപ്രകാരം $date1',
ru = 'предположительно $date1',
pl = 'przypuszczalnie $date1',
default='<span style="color:red">presumably $date1</span>',
},
['year unknown']= {
nDates = 0,
ca='Any desconegut',
['be-tarask']='Год невядомы',
bn='অজানা বছর',
cs='neznámý rok',
de='Jahr unbekannt',
el='άγνωστο έτος',
en='year unknown',
['en-gb']='year unknown',
['en-ca']='year unknown',
eo='jaro nesciata',
es='Año desconocido',
fa='سال نامعلوم',
fi='tuntematon vuosi',
fr='Année inconnue',
he='שנה לא ידועה',
hsb='lěto njeznate',
hr='nepoznata godina',
it='anno sconosciuto',
ja='年代不明',
la='Sine anno',
ml='വർഷം ലഭ്യമല്ല',
mk='непозната година',
nb='ukjent år',
nn='ukjent år',
nl='zonder jaar',
no='ukjent år',
pl='rok nieznany',
qu='Mana riqsisqa wata',
ru='Год неизвестен',
sk='neznámy rok',
sl='neznano leto',
sv='Okänt år',
uk='рік невідомий',
ur='سال نامعلوم',
vi='không rõ năm',
['zh-hans']='年份未知',
['zh-hant']='年份未知',
default='<span style="color:red">year unknown</span>',
},
-- ==========================================
-- === Parts of a whole =====================
-- ==========================================
['firsthalf'] = {
nDates = 1,
ar='النصف الأول من $date1',
['be-tarask']={'першая палова $date1', case={'gen',''}},
bn='$date1-এর প্রথমার্ধ',
ca='1a meitat de $date1',
cs={'1. polovina $date1', case={'gen',''}},
da='1. halvdel af $date1',
de='1. Hälfte $date1',
el='πρώτο μισό του $date1',
en='first half of $date1',
['en-gb']='first half of $date1',
['en-ca']='first half of $date1',
eo='unua duono de $date1',
es='primera mitad de $date1',
et='$date1 esimene pool',
fa='نیمهٔ نخست $date1',
fi={function(date1, state) return decYear(state,'fi','gen') .. '$date1 alkupuolisko' end, case={'gen',''}},
fr='1<sup>re</sup> moitié de $date1',
gl='primeira metade de $date1',
he='במחצית הראשונה של $date1',
hsb={'prěnja połojca $date1', case={'gen',''}},
hu='$date1 első felében',
hr='prva polovina $date1',
it='prima metà del $date1',
ja='$date1上半期',
mk='прва половина на $date1',
ml='$date1 ആദ്യപകുതി',
nb='første halvdel av $date1',
nn='fyrste halvdelen av $date1',
nds='1. Helft $date1',
nl='eerste helft $date1',
no='første halvdel av $date1',
pl={'pierwsza połowa $date1', case={'gen',''}},
pt='primeira metade de $date1',
qu='$date1 ñawpaq kuskanpi',
ro='prima jumătate a lui $date1',
ru={'первая половина $date1', case={'gen',''}},
sk={'1. polovica $date1', case={'gen',''}},
sl={function(date1, state) return 'prva polovica ' .. decYear(state,'sl','gen') .. ' $date1' end, case={'gen',''}},
sv='första halvan av $date1',
uk={'перша половина $date1', case={'gen',''}},
ur='نصف اول $date1',
vi='nửa đầu năm $date1',
['zh-hans']='$date1上半期',
['zh-hant']='$date1上半期',
default='<span style="color:red">first half of $date1</span>',
},
['secondhalf'] = {
nDates = 1,
ar='النصف الثاني من $date1',
['be-tarask']={'другая палова $date1', case={'gen',''}},
bn='$date1-এর দ্বিতীয়ার্ধ',
ca='2a meitat de $date1',
cs={'2. polovina $date1', case={'gen',''}},
da='2. halvdel af $date1',
de='2. Hälfte $date1',
el='δεύτερο μισό του $date1',
en='second half of $date1',
['en-gb']='second half of $date1',
['en-ca']='second half of $date1',
eo='dua duono de $date1',
es='segunda mitad de $date1',
et='$date1 teine pool',
fa='نیمهٔ دوم $date1',
fi={function(date1, state) return decYear(state,'fi','gen') .. '$date1 loppupuolisko' end, case={'gen',''}},
fr='2<sup>e</sup> moitié de $date1',
gl='segunda metade de $date1',
he='במחצית השנייה של $date1',
hsb={'druha połojca $date1', case={'gen',''}},
hr='druga polovina $date1',
hu='$date1 második felében',
it='seconda metà del $date1',
ja='$date1下半期',
mk='втора половина на $date1',
ml='$date1 രണ്ടാം പകുതി',
nb='andre halvdel av $date1',
nn='andre halvdelen av $date1',
nds='2. Helft vun $date1',
nl='tweede helft $date1',
no='andre halvdel av $date1',
pl={'druga połowa $date1', case={'gen',''}},
pt='segunda metade de $date1',
qu='$date1 qhipaq kuskanpi',
ro='a doua jumătate a lui $date1',
ru={'вторая половина $date1', case={'gen',''}},
sk={'2. polovica $date1', case={'gen',''}},
sl={'druga polovica {{IfNum | $date0 | leta}} $date1', case={'gen',''}},
sv='andra halvan av $date1',
uk={'друга половина $date1', case={'gen',''}},
ur='نصف آخر $date1',
vi='nửa cuối năm $date1',
['zh-hans']='$date1下半期',
['zh-hant']='$date1下半期',
default='<span style="color:red">second half of $date1</span>',
},
['1quarter']= {
nDates = 1,
bn='$date1-এর প্রথম ত্রৈমাসিক',
['be-tarask']={'першая чвэрць $date1', case={'gen',''}},
cs={'1. čtvrtina $date1', case={'gen',''}},
de='erstes Viertel $date1',
en='first quarter of $date1',
['en-gb']='first quarter of $date1',
['en-ca']='first quarter of $date1',
eo='unua kvarono de $date1',
es='primer cuarto del $date1',
fa='ربع نخست $date1',
fi={function(date1, state) return decYear(state,'fi','gen') .. '$date1 ensimmäinen neljännes' end, case={'gen',''}},
fr= function(date1, state) return 'premier quart '.. frOf[state.precision] ..' $date1' end,
he='רבעון ראשון של $date1',
hsb={'prěnja štwórćina $date1', case={'gen',''}},
hr='prva četvrtina $date1',
it='primo quarto del $date1',
ja='$date1第1四半期',
ml='$date1 ഒന്നാം ത്രൈമാസം',
nb='første kvartal av $date1',
nl='eerste kwart $date1',
nn='fyrste kvartalet av $date1',
no='første kvartal av $date1',
pl={'pierwsza ćwiartka $date1', case={'gen',''}},
qu='$date1 ñawpaq ñiqin tawa phatmanpi',
ru={'первая четверть $date1', case={'gen',''}},
sk={'1. štvrtina $date1', case={'gen',''}},
sl={'prva četrtina {{IfNum | $date0 | leta}} $date1', case={'gen',''}},
sl={function(date1, state) return 'prva četrtina ' .. decYear(state,'sl','gen') .. ' $date1' end, case={'gen',''}},
sv='första kvartalet av $date1',
uk={'1-ша чверть $date1', case={'gen',''}},
ur='پہلی سہ ماہی $date1',
vi='quý 1 năm $date1',
['zh-hans']='$date1第一季度',
['zh-hant']='$date1第一季度',
default='<span style="color:red">first quarter of $date1</span>',
},
['2quarter']= {
nDates = 1,
['be-tarask']={'другая чвэрць $date1', case={'gen',''}},
bn='$date1-এর দ্বিতীয় ত্রৈমাসিক',
cs={'2. čtvrtina $date1', case={'gen',''}},
de='zweites Viertel $date1',
en='second quarter of $date1',
['en-gb']='second quarter of $date1',
['en-ca']='second quarter of $date1',
eo='dua kvarono de $date1',
es='segundo cuarto del $date1',
fa='ربع دوم $date1',
fi={function(date1, state) return decYear(state,'fi','gen') .. '$date1 toinen neljännes' end, case={'gen',''}},
fr= function(date1, state) return 'deuxième quart '.. frOf[state.precision] ..' $date1' end,
he='רבעון שני של $date1',
hsb={'druha štwórćina $date1', case={'gen',''}},
hr='druga četvrtina $date1',
it='secondo quarto del $date1',
ja='$date1第2四半期',
ml='$date1 രണ്ടാം ത്രൈമാസം',
nb='andre kvartal av $date1',
nl='tweede kwart $date1',
nn='andre kvartalet av $date1',
no='andre kvartal av $date1',
pl={'druga ćwiartka $date1', case={'gen',''}},
qu='$date1 iskay ñiqin tawa phatmanpi',
ru={'вторая четверть $date1', case={'gen',''}},
sk={'2. štvrtina $date1', case={'gen',''}},
sl={function(date1, state) return 'druga četrtina ' .. decYear(state,'sl','gen') .. ' $date1' end, case={'gen',''}},
sv='andra kvartalet av $date1',
uk={'2-га чверть $date1', case={'gen',''}},
ur='دوسری سہ ماہی $date1',
vi='quý 2 năm $date1',
['zh-hans']='$date1第二季度',
['zh-hant']='$date1第二季度',
default='<span style="color:red">second quarter of $date1</span>',
},
['3quarter']= {
nDates = 1,
['be-tarask']={'трэцяя чвэрць $date1', case={'gen',''}},
bn='$date1-এর তৃতীয় ত্রৈমাসিক',
cs={'3. čtvrtina $date1', case={'gen',''}},
de='drittes Viertel $date1',
en='third quarter of $date1',
['en-gb']='third quarter of $date1',
['en-ca']='third quarter of $date1',
eo='tria kvarono de $date1',
es='tercer cuarto del $date1',
fa='ربع سوم $date1',
fi={function(date1, state) return decYear(state,'fi','gen') .. '$date1 kolmas neljännes' end, case={'gen',''}},
fr= function(date1, state) return 'troisième quart '.. frOf[state.precision] ..' $date1' end,
he='רבעון שלישי של $date1',
hsb={'třeća štwórćina $date1', case={'gen',''}},
hr='treća četvrtina $date1',
it='terzo quarto del $date1',
ja='$date1第3四半期',
ml='$date1 മൂന്നാം ത്രൈമാസം',
nb='tredje kvartal av $date1',
nl='derde kwart $date1',
nn='tredje kvartalet av $date1',
no='tredje kvartal av $date1',
pl={'trzecia ćwiartka $date1', case={'gen',''}},
qu='$date1 kimsa ñiqin tawa phatmanpi',
sk={'3. štvrtina $date1', case={'gen',''}},
sl={function(date1, state) return 'tretja četrtina ' .. decYear(state,'sl','gen') .. ' $date1' end, case={'gen',''}},
ru={'третья четверть $date1', case={'gen',''}},
sv='tredje kvartalet av $date1',
uk={'3-тя чверть $date1', case={'gen',''}},
ur='تیسری سہ ماہی $date1',
vi='quý 3 năm $date1',
['zh-hans']='$date1第三季度',
['zh-hant']='$date1第三季度',
default='<span style="color:red">third quarter of $date1</span>',
},
['4quarter']= {
nDates = 1,
['be-tarask']={'чацьвёртая чвэрць $date1', case={'gen',''}},
bn='$date1-এর চতুর্থ ত্রৈমাসিক',
cs={'4. čtvrtina $date1', case={'gen',''}},
de='letztes Viertel $date1',
en='fourth quarter of $date1',
['en-gb']='fourth quarter of $date1',
['en-ca']='fourth quarter of $date1',
eo='kvara kvarono de $date1',
es='último cuarto del $date1',
fa='ربع چهارم $date1',
fi={function(date1, state) return decYear(state,'fi','gen') .. '$date1 viimeinen neljännes' end, case={'gen',''}},
fr= function(date1, state) return 'quatrième quart '.. frOf[state.precision] ..' $date1' end,
he='רבעון רביעי של $date1',
hsb={'poslednja štwórćina $date1', case={'gen',''}},
hr='četvrta četvrtina $date1',
it='quarto quarto del $date1',
ja='$date1第4四半期',
ml='$date1 നാലാം ത്രൈമാസം',
nb='fjerde kvartal av $date1',
nl='vierde kwart $date1',
nn='tredje kvartalet av $date1',
no='fjerde kvartal av $date1',
pl={'czwarta ćwiartka $date1', case={'gen',''}},
qu='$date1 qhipaq ñiqin tawa phatmanpi',
ru={'последняя четверть $date1', case={'gen',''}},
sk={'4. štvrtina $date1', case={'gen',''}},
sl={function(date1, state) return 'zadnja četrtina ' .. decYear(state,'sl','gen') .. ' $date1' end, case={'gen',''}},
sv='fjärde kvartalet av $date1',
uk={'4-та чверть $date1', case={'gen',''}},
ur='چوتھی سہ ماہی $date1',
vi='quý 4 năm $date1',
['zh-hans']='$date1第四季度',
['zh-hant']='$date1第四季度',
default='<span style="color:red">forth quarter of $date1</span>',
},
-- ==========================================
-- === Seasons ==============================
-- ==========================================
['spring'] = {
nDates = 1,
ar='ربيع $date1',
['be-tarask']='вясна $date1',
bn='বসন্তকাল $date1',
ca='primavera $date1',
cs={'jaro $date1', case={'gen', ''}},
da='Forår $date1',
de='Frühling $date1',
en='Spring $date1',
['en-gb']='Spring $date1',
['en-ca']='Spring $date1',
eo='printempo $date1',
es='primavera de $date1',
et='$date1 kevad',
fa='بهار $date1',
fi='Kevät $date1',
fr='printemps $date1',
gl='primavera $date1',
he='אביב $date1',
hr='proljeće $date1',
hsb='nalěćo $date1',
hu='$date1 tavasza',
it='primavera $date1',
ja='{{#if:$date1|$date1年}}春',
mk='пролет $date1',
ml='$date1 വസന്തം',
nb='våren $date1',
nds='Vörjohr $date1',
nn='våren $date1',
nl='voorjaar $date1',
no='våren $date1',
pl='wiosna $date1',
pt='primavera de $date1',
ro='primăvara lui $date1',
ru='весна $date1',
sk={'jar $date1', case={'gen', ''}},
sl='pomlad $date1',
sv='våren $date1',
uk='весна $date1',
ur='بہار $date1',
vi='mùa đông năm $date1',
['zh-hans']='{{#if:$date1|$date1年}}春季',
['zh-hant']='{{#if:$date1|$date1年}}春季',
default='<span style="color:red">Spring $date1</span>',
},
['summer'] = {
nDates = 1,
ar='صيف $date1',
['be-tarask']='лета $date1',
bn='গ্রীষ্মকাল $date1',
ca='estiu $date1',
cs={'léto $date1', case={'gen', ''}},
da='Sommer $date1',
de='Sommer $date1',
en='Summer $date1',
['en-gb']='Summer $date1',
['en-ca']='Summer $date1',
eo='somero $date1',
es='verano de $date1',
et='$date1 suvi',
fa='تابستان $date1',
fi='Kesä $date1',
fr='été $date1',
gl='verán $date1',
he='קיץ $date1',
hr='ljeto $date1',
hsb='lěćo $date1',
hu='$date1 nyara',
it='estate $date1',
ja='{{#if:$date1|$date1年}}夏',
mk='лето $date1',
ml='$date1 വേനൽ',
nb='sommeren $date1',
nds='Sommer $date1',
nn='sumaren $date1',
nl='zomer $date1',
no='sommeren $date1',
pl='lato $date1',
pt='verão de $date1',
ro='vara lui $date1',
ru='лето $date1',
sk={'leto $date1', case={'gen', ''}},
sl='poletje $date1',
sv='sommaren $date1',
uk='літо $date1',
ur='گرما $date1',
vi='mùa hè năm $date1',
['zh-hans']='{{#if:$date1|$date1年}}夏季',
['zh-hant']='{{#if:$date1|$date1年}}夏季',
default='<span style="color:red">Summer $date1</span>',
},
['autumn'] = {
nDates = 1,
ar='خريف $date1',
['be-tarask']='восень $date1',
bn='শরত্কাল $date1',
ca='tardor $date1',
cs={'podzim $date1', case={'gen', ''}},
da='Efterår $date1',
de='Herbst $date1',
en='Autumn $date1',
['en-gb']='Autumn $date1',
['en-ca']='Autumn $date1',
eo='aŭtuno $date1',
es='otoño de $date1',
et='$date1 sügis',
fa='پاییز $date1',
fi='Syksy $date1',
fr='automne $date1',
gl='outono $date1',
he='סתיו $date1',
hr='jesen $date1',
hsb='nazyma $date1',
hu='$date1 ősze',
it='autunno $date1',
ja='{{#if:$date1|$date1年}}秋',
mk='есен $date1',
ml='$date1 ശരത്കാലം',
nb='høsten $date1',
nds='Harvst $date1',
nn='hausten $date1',
nl='herfst $date1',
no='høsten $date1',
pl='jesień $date1',
pt='outono de $date1',
ro='toamna lui $date1',
ru='осень $date1',
sk={'jeseň $date1', case={'gen', ''}},
sl='jesen $date1',
sv='hösten $date1',
uk='осінь $date1',
ur='خزاں $date1',
vi='mùa thu năm $date1',
['zh-hans']='{{#if:$date1|$date1年}}秋季',
['zh-hant']='{{#if:$date1|$date1年}}秋季',
default='<span style="color:red">Autumn $date1</span>',
},
['winter'] = {
nDates = 1,
ar='شتاء $date1',
['be-tarask']='зіма $date1',
bn='শীতকাল $date1',
ca='hivern $date1',
cs={'zima $date1', case={'gen', ''}},
da='Vinter $date1',
de='Winter $date1',
en='Winter $date1',
['en-gb']='Winter $date1',
['en-ca']='Winter $date1',
eo='vintro $date1',
es='invierno de $date1',
et='$date1 talv',
fa='زمستان $date1',
fi='Talvi $date1',
fr='hiver $date1',
gl='inverno $date1',
he='חורף $date1',
hr='zima $date1',
hsb='zyma $date1',
hu='$date1 tele',
it='inverno $date1',
ja='{{#if:$date1|$date1年}}冬',
mk='зима $date1',
ml='$date1 ശൈത്യകാലം',
nds='Winter $date1',
nl='winter $date1',
nb='vinteren $date1',
nn='vinteren $date1',
no='vinteren $date1',
pl='zima $date1',
pt='inverno de $date1',
ro='iarna lui $date1',
ru='зима $date1',
sk={'zima $date1', case={'gen', ''}},
sl='zima $date1',
sv='vintern $date1',
uk='зима $date1',
ur='سرما $date1',
vi='mùa đông năm $date1',
['zh-hans']='{{#if:$date1|$date1年}}冬季',
['zh-hant']='{{#if:$date1|$date1年}}冬季',
default='<span style="color:red">Winter $date1</span>',
},
-- ==========================================
-- === Decade/Century/Millennium ============
-- ==========================================
['decade'] = {
nDates = 1,
ar='أعوام $date1',
['be-tarask']='$date1-я гады',
bn='$date1-এর দশক',
ca='dècada del $date1',
cs=function(date1, state) return ((date1 % 100 == 0) and 'první dekáda' or ((date1 % 100) .. '. léta')) .. ' ' .. (math.floor(date1 / 100) + 1) .. '. století' end,
da="$date1'erne",
de='$date1er-Jahre',
el='δεκαετία του $date1',
en='$date1s',
['en-gb']='$date1s',
['en-ca']='$date1s',
eo='$date1-aj jaroj',
es='años $date1',
et='$date1ndad',
fa='دههٔ $date1',
fi='$date1-luvulla',
fr='années $date1',
gl='anos $date1',
he='שנות ה-$date1',
hr='$date1-ih',
hsb='$date1te lěta',
hu='$date1-s évek',
it="{{#ifexpr: $date1 mod 100 = 0 | primo decennio del {{Roman|{{#expr: ($date1 / 100) + 1}}}} sec. | anni '{{#expr: $date1 mod 100 }} del {{Roman|{{#expr: floor($date1 / 100) + 1}}}} sec.}}",
ja='$date1年代',
mk='$date1-ти',
ml='ദശകം $date1-ൽ',
nb='$date1-årene',
nn='$date1-åra',
nds='Johren $date1',
nl='jaren $date1',
no='$date1-årene',
pl=function(date1, state)
local str = 'lata '..(date1 % 100)..'. '
if (date1 % 100 == 0) then
str = 'pierwsza dekada '
elseif (date1 % 100 == 10) then
str = 'druga dekada '
end
return str .. Roman(math.floor(date1 / 100) + 1) .. ' wieku'
end,
pt='década de $date1',
qu='$date1 watakuna',
ro='anii $date1',
ru='$date1-е годы',
sk=function(date1, state) return ((date1 % 100 == 0) and 'prvé desaťročie' or ((date1 % 100) .. '. roky')) .. ' ' .. (math.floor(date1 / 100) + 1) .. '. storočia' end,
sl='$date1-ta leta',
sv='$date1-talet{{#switch:$date1|1300|1400|1500|1600|1700|1800|1900|2000|2100= (decennium)}}',
uk='$date1-ті роки',
ur='دہائی $date1',
vi='thập niên $date1',
['zh-hans']='$date1年代',
['zh-hant']='$date1年代',
default='<span style="color:red">$date1s</span>',
},
['century'] = {
nDates = 1,
ar='القرن $date1',
['be-tarask']=function(date1, state) return Ordinal(date1, 'be-tarask') .. ' стагодзьдзе' end,
bn=function(date1, state) return Ordinal(date1, 'bn') .. ' শতাব্দী' end,
ca='segle {{small-caps|{{lc:{{Roman year|$date1}}}}}}',
cs='$date1. století',
da='$date1. århundrede',
de='$date1. Jahrhundert',
el='$date1ος αιώνας',
en=function(date1, state) return Ordinal(date1, 'en') .. ' century' end,
['en-gb']=function(date1, state) return Ordinal(date1, 'en-gb') .. ' century' end,
['en-ca']=function(date1, state) return Ordinal(date1, 'en-ca') .. ' century' end,
eo='$date1-a jarcento',
es=function(date1, state) return 'siglo ' .. Roman(date1) end,
et='$date1. sajand',
fa='سدهٔ $date1',
fi='{{#expr: ($date1 - 1) * 100}}-luvulla',
fr=function(date1, state) return Ordinal(date1, 'fr', 'roman', 'm') .. ' siècle' end,
gl=function(date1, state) return 'século ' .. Roman(date1) end,
he='המאה ה-$date1',
hr='$date1. stoljeće',
hsb='$date1. lětstotk',
hu='$date1. évszázad',
it=function(date1, state) return Roman(date1) .. ' sec.' end,
ja='$date1世紀',
la='saeculum $date1',
mk=function(date1, state) return Roman(date1) .. ' век' end,
ml='$date1-ആം നൂറ്റാണ്ട്',
nb=function(date1, state) return Ordinal(date1, 'nb') .. ' århundre' end,
nn=function(date1, state) return 'det ' .. Ordinal(date1, 'no') .. ' århundre' end,
nds='$date1. Johrhunnert',
nl='$date1e eeuw',
no=function(date1, state) return Ordinal(date1, 'no') .. ' århundre' end,
pl=function(date1, state) return Roman(date1) .. ' ' .. decCentury('pl',state.case) end,
pt=function(date1, state) return 'século ' .. Roman(date1) end,
qu='$date1 ñiqin pachakwata',
ro='secolul al $date1-lea',
ru=function(date1, state) return Roman(date1) .. ' век' end,
sk='$date1. storočie',
sl=function(date1, state) return Ordinal(date1, 'sl') .. '. stoletje' end,
sv='{{#expr:$date1 - 1}}00-talet',
tt=function(date1, state) return Roman(date1) .. ' гасыр' end,
uk=function(date1, state) return Roman(date1) .. ' ст.' end,
ur='صدی $date1',
vi='thế kỷ $date1',
['zh-hans']='$date1世纪',
['zh-hant']='$date1世紀',
default='<span style="color:red">$date1 century</span>',
},
['millennium'] = {
nDates = 1,
['be-tarask']=function(date1, state) return Ordinal(date1, 'be-tarask') .. ' тысячагодзьдзе' end,
bn=function(date1, state) return Ordinal(date1, 'bn') .. ' সহস্রাব্দ' end,
cs='$date1. tisíciletí',
de='$date1. Jahrtausend',
en=function(date1, state) return Ordinal(date1, 'en') .. ' millennium' end,
['en-gb']=function(date1, state) return Ordinal(date1, 'en-gb') .. ' millennium' end,
['en-ca']=function(date1, state) return Ordinal(date1, 'en-ca') .. ' millennium' end,
eo='$date1-a jarmilo',
es=function(date1, state) return Roman(date1) .. ' milenio' end,
fa=function(date1, state) return 'هزارهٔ ' .. Ordinal(date1, 'fa') end,
fr=function(date1, state) return Ordinal(date1, 'fr', 'roman', 'm') .. ' millénaire' end,
hr='$date1. tisućljeće',
hsb='$date1. lěttysac',
it=function(date1, state) return Roman(date1) .. ' millennio' end,
ja='$date1千年紀',
la='millennium $date1',
ml='$date1-മത്തെ സഹസ്രാബ്ദം',
nb=function(date1, state) return Ordinal(date1, 'nb') .. ' årtusen' end,
nn=function(date1, state) return Ordinal(date1, 'no') .. ' tusenår' end,
nl='$date1e millennium',
no=function(date1, state) return Ordinal(date1, 'no') .. ' årtusen' end,
pl=function(date1, state) return Roman(date1) .. ' ' .. decMillennium('pl',state.case) end,
pt=function(date1, state) return Roman(date1) .. ' milénio' end,
qu='$date1 ñiqin waranqawata',
ru=function(date1, state) return Roman(date1) .. ' тысячелетие' end,
sk='$date1. tisícročie',
sl=function(date1, state) return Ordinal(date1, 'sl') .. '. tisočletje' end,
sv=function(date1, state) return Ordinal(date1, 'sv') .. ' årtusendet' end,
uk=function(date1, state) return Roman(date1) .. ' тис.' end,
ur=function(date1, state) return 'ہزارہ ' .. Ordinal(date1, 'ur') end,
vi='thiên niên kỷ $date1',
['zh-hans']=function(date1, state) return Ordinal(date1, 'zh-hans') .. '千年' end,
['zh-hant']=function(date1, state) return Ordinal(date1, 'zh-hant') .. '千年' end,
--default='{{Please translate|$date1 millennium|Module:I18n/complex date}}',
default='<span style="color:red">$date1 millennium</span>',
},
['million'] = {
de = '$date1 Millionen Jahre',
en = '$date1 million years',
['en-gb'] = '$date1 million years',
['en-ca'] = '$date1 million years',
eo = '$date1 milionoj da jaroj',
es = '$date1 millones de años',
nl = '$date1e miljoen jaar',
fr = '$date1 millions d’années',
it = '$date1 milioni di anni',
ml = function(date1, state)
if date1 >= 10 then
return (date1 / 10) .. ' കോടി വർഷങ്ങൾ' -- 100 lakh = 1 crore
else
return (date1 * 10) .. ' ലക്ഷം വർഷങ്ങൾ'
end
end,
nb = '$date1 millioner år',
nl = '$date1 miljoen jaar',
nn = '$date1 millionar år',
pl = '$date1 milionów lat',
pt = '$date1 milhões de anos',
ru = '$date1 миллиона лет',
uk = '$date1 мільйони років',
ur = '$date1 ملین سال',
['zh-hans'] = '$date1百万年',
['zh-hant'] = '$date1百万年',
default='<span style="color:red">$date1 million years</span>',
nDates = 1,
},
['billion'] = {
de = '$date1 Milliarden Jahre',
en = '$date1 billion years',
['en-gb'] = '$date1 billion years',
['en-ca'] = '$date1 billion years',
es = '$date1 mil millones de años',
nl = '$date1e miljard jaar',
fr = '$date1 milliard d’années',
it = '$date1 miliardi di anni',
ml = function(date1, state) return (date1 * 10) .. ' കോടി വർഷങ്ങൾ' end,
nb = '$date1 milliarder år',
nl = '$date1 miljard jaar',
nn = '$date1 milliardar år',
pl = '$date1 miliardów lat',
pt = '$date1 mil milhões de anos',
ru = '$date1 миллиардов лет',
uk = '$date1 мільярдів років',
ur = '$date1 بلین سال',
['zh-hans'] = '$date1十亿年',
['zh-hant'] = '$date1十億年',
default='<span style="color:red$date1 billion years</span>',
nDates = 1,
},
-- ==========================================
-- === Complex phrases ======================
-- ==========================================
-- Phrases which for some languages can be build out of simpler phrases
-- Their "default" state, used when no translation in the requested language was found, returns a "state" like
-- table which is used to call the function again and built the phrase out of simple phrases
-- $date1 - original date - 1
-- $date2 - original date
-- if era is BC than $date1 and $date2 are swapped
['turn of the century'] = {
nDates = 2,
['be-tarask']=function(date1, date2, state) return 'канец ' .. Roman(date1) ..' — пачатак ' .. Roman(date2) ..' стагодзьдзя' end,
bn=function(date1, date2, state) return '$date1/' .. Ordinal(date2, 'bn') .. ' শতাব্দীর পালাবদলে' end,
cs='přelom $date1. a $date2. století',
de=function(date1, date2, state) return 'Jahrhundertwende $date1/' .. Ordinal(date2, 'de') end,
en=function(date1, date2, state) return 'turn of the $date1/' .. Ordinal(date2, 'en') .. ' century' end,
['en-gb']=function(date1, date2, state) return 'turn of the $date1/' .. Ordinal(date2, 'en-gb') .. ' century' end,
['en-ca']=function(date1, date2, state) return 'turn of the $date1/' .. Ordinal(date2, 'en-ca') .. ' century' end,
eo='ŝanĝo de la $date1-a al la $date2-a jarcentoj',
es=function(date1, date2, state) return 'hacia finales del siglo ' .. Roman(date1) .. ' y principios del siglo ' .. Roman(date2) .. '' end,
fi='{{#expr: $date1 * 100-100}}-luvun loppu ja {{#expr: $date2 * 100-100}}-luvun alku',
fr=function(date1, date2, state) return 'fin du ' .. Ordinal(date1, 'fr', 'roman', 'm') .. ' siècle / début du ' .. Ordinal(date2, 'fr', 'roman', 'm') end,
hr='kraj $date1. i početak $date2. stoljeća',
hsb=function(date1, date2, state) return 'přechod ' .. Roman(date1) ..' do ' .. Roman(date2) ..' lětstotka' end,
it=function(date1, date2, state) return 'fine del ' .. Roman(date1) .. ' sec. e inizio del ' .. Roman(date2) .. ' sec.' end,
ja='$date1世紀から$date2世紀への変わり目',
ml='$date1 നൂറ്റാണ്ട് അവസാനവും $date2 നൂറ്റാണ്ട് ആദ്യവും',
nb=function(date1, date2, state) return 'slutten av det ' .. Ordinal(date1, 'nb') .. ' århundre/begynnelsen av det ' .. Ordinal(date2, 'nb') .. ' århundre' end,
nl=function(date1, date2, state) return 'eind $date1e/begin $date2e eeuw' end,
nn=function(date1, date2, state) return 'slutten av det ' .. Ordinal(date1, 'nn') .. ' hundreåret/byrjinga av det ' .. Ordinal(date2, 'nn') .. ' hundreåret' end,
pl=function(date1, date2, state) return 'przełom ' .. Roman(date1) ..' i ' .. Roman(date2) ..' wieku' end,
qu="$date1 ñiqin waranqawatamanta $date2 ñiqin waranqawataman t'ikrasqanpi",
ru=function(date1, date2, state) return 'конец ' .. Roman(date1) ..' — начало ' .. Roman(date2) ..' века' end,
sk='prelom $date1. a $date2. storočia',
sl=function(date1, date2, state) return 'pozno ' .. Ordinal(date1, 'sl') .. '. in zgodnje ' .. Ordinal(date2, 'sl') .. '. stoletje' end,
sv=function(date1, date2, state) return '$date1/' .. Ordinal(date2, 'sv') .. ' årtusendets sekelskifte' end,
uk=function(date1, date2, state) return 'кін. ' .. Roman(date1) ..' ст. — поч. ' .. Roman(date2) ..' ст.' end,
vi='bước sang thế kỷ $date2',
['zh-hans']=function(date1, date2, state) return '$date1世纪末' .. Ordinal(date2, 'zh-hans') .. '世纪初' end,
['zh-hant']=function(date1, date2, state) return '$date1世紀末' .. Ordinal(date2, 'zh-hant') .. '世紀初' end,
default=function(date1, date2, state) return {conj='and', adj1 = 'late', unit1='century', era1=state.era1, adj2 = 'early', unit2='century', era2=state.era2} end,
},
-- $date1 - original date - 10
-- $date2 - original date
-- if era is BC than $date1 and $date2 are swapped
['turn of the decade']={
nDates = 2,
['be-tarask']='канец $date1-х — пачатак $date2-х гг.',
bn='$date1-এর দশকের শেষে এবং $date2-এর দশকের শুরুতে',
cs=function(date1, date2, state)
local decade1 = math.floor((date1 % 100) / 10)
local decade2 = math.floor((date2 % 100) / 10)
local century1 = math.floor( date1 / 100) + 1
local century2 = math.floor( date2 / 100) + 1
if decade1 == 0 and date1 < date2 then
return "přelom 1. a 2. dekády " .. century1 .. ". století"
elseif decade2 == 0 and date2 < date1 then
return "přelom 9. a 10. dekády " .. century1 .. ". století"
elseif (decade1 == 9 and date1 < date2) or (decade2 == 9 and date2 < date1) then
return "přelom " .. century1 .. ". a " .. century2 .. ". století"
else
return "přelom " .. decade1 .. "0. a " .. decade2 .. "0. let " .. century1 .. ". století"
end
end,
de='späte $date1er und frühe $date2er',
en='late $date1s and early $date2s',
['en-gb']='late $date1s and early $date2s',
['en-ca']='late $date1s and early $date2s',
eo='ŝanĝo de la $date1-a al la $date2-a jardekoj',
es='finales de los años $date1 y principios de los años $date2',
fa='اواخر دههٔ $date1 و اوایل دههٔ $date2',
fi='$date1-luvun loppu ja $date2-luvun alku',
fr='fin des années $date1 / début des années $date2',
hr='kraj $date1-ih i početak $date2-ih',
hsb='pózdnje $date1te a zažne $date2te lěta',
it='fine degli anni $date1 / inizio degli anni $date2',
ja='$date1年代末から$date2年代初頭',
ml='$date1കൾ അവസാനവും $date2കൾ ആദ്യവും',
nb = 'sent på $date1-tallet og tidlig på $date2-tallet',
nl = 'eind $date1e/begin $date2e decennium',
nn = 'seint på $date1-talet og tidleg på $date2-talet',
pl=function(date1, date2, state)
local decade1 = math.floor(date1 % 100)
local decade2 = math.floor(date2 % 100)
local century1 = Roman(math.floor( date1 / 100) + 1)
local century2 = Roman(math.floor( date2 / 100) + 1)
if decade1 == 0 and date1 < date2 then
return "przełom pierwszej i drugiej dekady " .. century1 .. " wieku"
elseif decade1 == 10 and date1 < date2 then
return "przełom drugiej dekady i lat 20. " .. century1 .. " wieku"
elseif decade1 == 90 and decade2 == 0 then
return "przełom ostatniej dekady " .. century1 .. " i pierwszej dekady " .. century2 .. " wieku"
else
return "przełom lat " .. decade1 .. ". i " .. decade2 .. ". " .. century1 .. " wieku"
end
end,
qu='qhipaq $date1 watakuna ñawpaq $date2 watakunapas',
ru='конец $date1-х — начало $date2-х гг.',
sv='sena $date1-talet och tidiga $date2-talet',
sk=function(date1, date2, state)
local decade1 = math.floor((date1 % 100) / 10)
local decade2 = math.floor((date2 % 100) / 10)
local century1 = math.floor( date1 / 100) + 1
local century2 = math.floor( date2 / 100) + 1
if decade1 == 0 and date1 < date2 then
return "prelom 1. a 2. desaťročia " .. century1 .. ". storočia"
elseif decade2 == 0 and date2 < date1 then
return "prelom 9. a 10. desaťročia " .. century1 .. ". storočia"
elseif (decade1 == 9 and date1 < date2) or (decade2 == 9 and date2 < date1) then
return "prelom " .. century1 .. ". a " .. century2 .. ". storočia"
else
return "prelom " .. decade1 .. "0. a " .. decade2 .. "0. rokov " .. century1 .. ". storočia"
end
end,
sl='pozna $date1-ta in zgodnja $date2-ta leta',
uk='кінець $date1-х — початок $date2-х рр.',
ur='اخیر دہائی $date1 و ابتدا دہائی $date2',
vi='bước sang thập niên $date2',
['zh-hans']='$date1年代末$date2年代初',
['zh-hant']='$date1年代末$date2年代初',
default=function(date1, date2, state) return {conj='and', adj1 = 'late', unit1='decade', era1=state.era1, adj2 = 'early', unit2='decade', era2=state.era2} end,
},
-- $date1 - original date - 1
-- $date2 - original date
-- if era is BC than $date1 and $date2 are swapped
['turn of the year']={
nDates = 2,
['be-tarask']='канец $date1 — пачатак $date2 г.',
bn='$date1-এর শেষে এবং $date2-এর শুরুতে',
cs='přelom roku $date1/$date2',
de='Jahreswechsel $date1/$date2',
en='late $date1 and early $date2',
['en-gb']='late $date1 and early $date2',
['en-ca']='late $date1 and early $date2',
eo='jarŝanĝo $date1 / $date2',
es='finales de $date1 y principios de $date2',
fa='اواخر $date1 و اوایل $date2',
fi='vuoden $date1 loppu ja vuoden $date2 alku',
fr='fin $date1 / début $date2',
hsb='kónc $date1/spočatk $date2',
ja='$date1年末から$date2年初め',
ml='$date1 അവസാനവും $date2 ആദ്യവും',
nb='årsskiftet $date1/$date2',
nl='eind $date1 en begin $date2',
nn='årsskiftet $date1/$date2',
pl='koniec $date1 i początek $date2 roku',
qu="$date1 qhipaq p'unchawkuna $date2 ñawpaq p'unchawkunapas",
ru='конец $date1 — начало $date2 г.',
sk='prelom rokov $date1/$date2',
sl='konec leta $date1 in začetek $date2',
sv='sena $date1 och tidiga $date2',
uk='кінець $date1 — початок $date2 р.',
ur='اخیر $date1 و ابتدا $date2',
vi='bước sang năm $date2',
['zh-hans']='$date1年末$date2年初',
['zh-hant']='$date1年末$date2年初',
default=function(date1, date2, state) return {conj='and', adj1 = 'late', unit1='year', era1=state.era1, adj2 = 'early', unit2='year', era2=state.era2} end,
},
['circa2'] = {
nDates = 2,
ar='حوالي $date1 – $date2',
['be-tarask']={'прыкладна з $date1 да прыкладна $date2', case={'gen','gen'}},
bn='প্রায় $date1 এবং প্রায় $date2-এর মাঝামাঝি',
ca='cap a $date1 o $date2',
cs='cca $date1 až $date2',
da='ca. mellem $date1 og $date2',
de='etwa $date1 bis $date2',
el='περίπου μεταξύ $date1 και $date2',
en='between circa $date1 and circa $date2',
['en-gb']='between circa $date1 and circa $date2',
['en-ca']='between circa $date1 and circa $date2',
eo='proksimume de $date1 ĝis $date2',
es='hacia $date1 o $date2',
et='ca. $date1 ja $date2 vahel',
fa='حدوداً بین $date1 و $date2',
fi={function(date1, date2, state) return 'suunnilleen ' .. decYear(state,'fi','xxx') .. '$date1 ja $date2 välisenä aikana' end, case={'gen','gen'}},
fr='vers $date1-$date2',
gl='entre $date1 e $date2',
he='בסביבות ה- $date1 עד $date2',
hr='oko između $date1 i $date2',
hsb={'wot něhdźe $date1 do něhdźe $date2', case={'gen','gen'}},
hu='$date1 és $date2 között',
it='tra il $date1 e il $date2 circa',
ja='$date1頃と$date2頃の間',
mk='~ помеѓу $date1 и $date2',
ml='ഉദ്ദേശം $date1-നും ഉദ്ദേശം $date2-നും ഇടയ്ക്ക്',
nb='ca. mellom $date1 og $date2',
nn='ca. mellom $date1 og $date2',
nds='üm un bi $date1 bet $date2',
nl='ca. $date1 tot $date2',
no='ca. mellom $date1 og $date2',
pl={'od około $date1 do około $date2', case={'gen','gen'}},
pt='cerca de $date1 a $date2',
qu="$date1 p'unchawmantachá $date2 p'unchawkamachá",
ro='circa $date1 – $date2',
ru={'с около $date1 до, примерно, $date2', case={'gen','gen'}},
sk='cca $date1 až $date2',
sl={function(date1, date2, state) return 'ok. ' .. decYear(state,'sl','gen') .. ' $date1 do $date2' end, case={'gen','gen'}},
sv='c:a $date1 till $date2',
uk={'з близько $date1 до, приблизно, $date2', case={'gen','gen'}},
ur='قریباً بین $date1 و $date2',
vi='giữa vào khoảng $date1 và vào khoảng $date2',
['zh-hans']='约$date1~$date2间',
['zh-hant']='約$date1~$date2間',
default=function(date1, date2, state) return {conj='between', adj1 = 'circa', unit1=state.unit1, era1=state.era1, adj2 = 'circa', unit2=state.unit2, era2=state.era2} end,
},
-- ==========================================
-- === Eras and calendars ===================
-- ==========================================
['julian'] = {
nDates = 2,
ar='$date1 ($date2 حسب [[w:ar:التقويم اليولياني|تقويم يولياني]])',
['be-tarask']='$date1 ($date2 паводле [[w:be-tarask:Юліянскі каляндар|ст. ст.]]',
bn='$date1 (জুলিয়ান ক্যালেন্ডারে $date2)',
ca='$date1 ($date2 segons el [[w:ca:Calendari julià|calendari julià]])',
cs='$date1 ($date2 podle [[w:cs:Juliánský kalendář|juliánského kalendáře]])',
da='$date1 ($date2 [[w:da:Julianske kalender|Julianske kalender]])',
de='$date1 ($date2 [[w:de:Julianischer Kalender|Julianischer Kalender]])',
el='$date1 ($date2 με το [[w:el:Ιουλιανό ημερολόγιο|Ιουλιανό ημερολόγιο]])',
en='$date1 ($date2 in [[w:Old Style and New Style dates|Julian calendar]])',
['en-gb']='$date1 ($date2 in [[w:Old Style and New Style dates|Julian calendar]])',
['en-ca']='$date1 ($date2 in [[w:Old Style and New Style dates|Julian calendar]])',
fa='$date1 ($date2 در [[w:fa:Old Style and New Style dates|تقویم جولیان]])',
eo='$date1 ($date2 laŭ la [[w:eo:Julia kalendaro|Julia Kalendaro]])',
es='$date1 ($date2 según el [[w:es:Calendario juliano|calendario juliano]])',
et='$date1 ($date2 [[w:et:Juliuse kalender|Juliuse kalendris]])',
fi='$date1 ($date2 [[w:fi:juliaaninen kalenteri|juliaanisen kalenterin]] mukaan)',
fr='$date1 ($date2 dans le [[w:fr:calendrier julien|calendrier julien]])',
gl='$date1 ($date2 segundo o [[w:gl:Calendario xuliano|calendario xuliano]])',
hu='$date1 ($date2 a [[w:hu:Julianus-naptár|Julián naptárban]])',
hr='$date1 ($date2 prema [[w:hr:Julijanski kalendar|julijanskom kalendaru]])',
he='$date1 ($date2 ב[[w:he:לוח היוליאני|הלוח היוליאני]])',
hsb='$date1 ($date2 po julianiskej protyce)',
it='$date1 ($date2 secondo il [[w:it:Calendario giuliano|calendario giuliano]])',
ja='$date1([[w:ja:ユリウス暦|ユリウス暦]] $date2)',
mk='$date1 ($date2 по [[w:mk:Јулијански календар|Јулијанскиот календар]])',
ml='$date1 ([[w:ml:ജൂലിയൻ കാലഗണനാരീതി|ജൂലിയൻ വർഷത്തിൽ]] $date2)',
ml='$date1 ([[w:Old Style and New Style dates|ജൂലിയൻ കാലഗണനാരീതിയിൽ]] $date2)',
nds='$date1 ($date2 na’n [[w:nds:Juliaansch Klenner|Juliaanschen Klenner]])',
nb='$date1 ($date2 etter [[w:no:Juliansk kalender|den julianske kalenderen]])',
nn='$date1 ($date2 etter [[w:no:Juliansk kalender|den julianske kalenderen]])',
nl='$date1 ($date2 volgens de [[w:nl:Juliaanse kalender|Juliaanse kalender]])',
no='$date1 ($date2 etter [[w:no:Juliansk kalender|den julianske kalender]])',
pl='$date1 ($date2 wedle [[w:pl:Daty nowego i starego porządku|kalendarza juliańskiego]])',
pt='$date1 ($date2 no [[w:pt:Mudança para o calendário gregoriano|calendário juliano]])',
qu='$date1 ($date2 [[w:qu:Hulyanu kalindaryu|Hulyanu kalindaryupi]])',
ro='$date1 ($date2 în [[w:ro:calendarul iulian|calendarul iulian]])',
ru='$date1 ($date2 [[w:ru:Юлианский календарь|по ст. ст.]])',
sk='$date1 ($date2 podľa [[w:sk:Juliánsky kalendár|juliánskeho kalendára]])',
sl='$date1 ($date2 po [[w:sl:Julijanski koledar|julijanskem koledarju]])',
sv='$date1 ($date2 [[w:sv:Gamla stilen|gamla stilen]])',
uk='$date1 ($date2 [[w:uk:Юліанський календар|Юліанський календар]])',
ur='$date1 ($date2 حسب [[w:ur:نئے اور پانے انداز کی تاریخ|جولین تقویم]])',
vi='$date1 ($date2 trong [[w:vi:Lịch Julius|lịch Juliêng]])',
['zh-hans']='$date1([[w:Old Style and New Style dates|格里历]]$date2)',
['zh-hant']='$date1([[w:Old Style and New Style dates|格里曆]]$date2)',
default='<span style="color:red">$date1 ($date2 in [[w:Old Style and New Style dates|Julian calendar]])</span>',
},
['ad'] = {
nDates = 1,
['be-tarask']='$date1 [[w:be-tarask:ад Нараджэньня Хрыста|пасьля Н. Х.]]',
bn ='$date1 খ্রিস্টাব্দ',
ca ='$date1 dC',
cs ='$date1 n. l.',
de ='$date1 n. Chr.',
el ='$date1 μ.Χ.',
en ='$date1 [[w:en:Anno Domini|AD]]',
['en-gb'] ='$date1 [[w:en:Anno Domini|AD]]',
['en-ca'] ='$date1 [[w:en:Anno Domini|AD]]',
eo ='$date1 pK',
es ='$date1 [[w:es:Anno Dómini|d. C.]]',
fa ='$date1 م.',
fi ='$date1 jaa.',
fr ='$date1 ap. J.-C.',
gl ='$date1 d.C.',
he ='$date1 לספירה',
hu ='i. sz. $date1',
hr ='$date1 p. Kr.',
hsb='$date1 po Chr.',
it ='$date1 d.C.',
ja ='西暦$date1',
mk ='$date1 н.е.',
ml ='ക്രി.വ. $date1',
nb ='$date1 e.Kr.',
nl ='$date1 n.Chr.',
nn ='$date1 e.Kr.',
no ='$date1 e.Kr.',
pl ='$date1 [[w:pl:naszej ery|n.e.]]',
ro ='$date1 d.Hr.',
ru ='$date1 н. э.',
sk ='$date1 po Kr.',
sl ='$date1 n. št.',
sv ='$date1 [[w:sv:Efter Kristus|e.Kr.]]',
uk ='$date1 н. е.',
ur ='$date1 ء',
vi ='$date1 [[w:vi:Công Nguyên|CN]]',
['zh-hans'] ='[[w:zh:基督纪年|公元]]$date1',
['zh-hant'] ='[[w:zh:基督纪年|公元]]$date1',
default='<span style="color:red">$date1 [[w:en:Anno Domini|AD]]</span>',
},
['ah'] = {
nDates = 1,
['be-tarask']='$date1 [[w:be-tarask:Ісламскі каляндар|хіджры]]',
bn ='$date1 [[w:bn:ইসলামি বর্ষপঞ্জি|হিজরী]]',
cs ='$date1 [[w:cs:Anno Hegirae|AH]]',
en ='$date1 [[w:en:Hijri year|AH]]',
['en-gb'] ='$date1 [[w:en:Hijri year|AH]]',
['en-ca'] ='$date1 [[w:en:Hijri year|AH]]',
eo ='$date1 post la [[w:eo:Heĝiro|Heĝiro]]',
fa ='$date1 ه.ق.',
fr ='$date1 [[w:fr:Calendrier musulman|A.H.]]',
he ="$date1 [[w:he:הלוח המוסלמי|להג'רה]]",
hr ='$date1 god. hidžre',
ja ='[[w:ja:ヒジュラ暦|ヒジュラ暦]]$date1',
ml ='$date1 [[w:ml:ഇസ്ലാമിക കലണ്ടർ|ഹിജ്റ]]',
nb ='$date1 [[w:no:Den muslimske kalenderen|A.H.]]',
nn ='$date1 [[w:nn:Den muslimske kalenderen|A.H.]]',
pl ='$date1 [[w:pl:Kalendarz muzułmański|A.H.]]',
ru ='$date1 [[w:ru:Исламский календарь|хиджры]]',
sk ='$date1 [[w:sk:A. H.|A. H.]]',
sv ='$date1 [[w:sv:Muslimska kalendern|A.H.]]',
uk ='$date1 [[w:uk:Мусульманський календар|хіджри]]',
ur ='$date1 ھ',
vi ='$date1 [[w:vi:Lịch Hồi giáo|AH]]',
['zh-hans'] ='[[w:en:Hijri year|Hijri历]]$date1',
['zh-hant'] ='[[w:en:Hijri year|Hijri曆]]$date1',
default='<span style="color:red">$date1 [[w:en:Hijri year|AH]]</span>',
},
['bc'] = {
nDates = 1,
ar ='$date1 ق.م.',
['be-tarask']='$date1 [[w:be-tarask:да Нараджэньня Хрыста|да Н. Х.]]',
bn ='খ্রিস্টপূর্ব $date1',
ca ='$date1 [[w:ca:Abans de Crist|aC]]',
cs ='$date1 [[w:cs:Př. n. l.|př. n. l.]]',
de ='$date1 [[w:de:v. Chr.|v. Chr.]]',
el ='$date1 π.Χ.',
en ='$date1 [[w:en:Ante Christum Natum|BC]]',
['en-gb'] ='$date1 [[w:en:Ante Christum Natum|BC]]',
['en-ca'] ='$date1 [[w:en:Ante Christum Natum|BC]]',
eo ='$date1 aK',
es ='$date1 [[w:es:Antes de Cristo|a. C.]]',
fa ='$date1 پ.م.',
fi ='$date1 eaa.',
fr ='$date1 av. J.-C.',
gl ='$date1 [[w:gl:Antes de Cristo|a.C.]]',
he ='$date1 לפני הספירה',
hr ='$date1 [[w:hr:Pr. Kr.|pr. Kr.]]',
hsb='$date1 do Chr.',
hu ='i. e. $date1',
it ='$date1 [[w:it:Avanti Cristo|a.C.]]',
ja ='[[w:ja:紀元前|紀元前]]$date1',
mk ='$date1 п.н.е.',
ml ='ക്രി.മു. $date1',
nds='$date1 vör uns Tied',
nb ='$date1 f.Kr.',
nl ='$date1 v.Chr.',
nn ='$date1 f.Kr.',
no ='$date1 f.Kr.',
pl ='$date1 [[w:pl:przed naszą erą|p.n.e.]]',
ro ='$date1 î.Hr.',
ru ='$date1 до н. э.',
sk ='$date1 [[w:sk:Pred Kristom|pred Kr.]]',
sl ='$date1 pr. n. št.',
sv ='$date1 [[w:sv:Före Kristus|f.Kr.]]',
uk ='$date1 до н. е.',
ur ='$date1 ق م',
vi ='$date1 [[w:vi:Trước Công Nguyên|TCN]]',
['zh-hans'] ='[[w:zh:基督纪年|公元前]]$date1',
['zh-hant'] ='[[w:zh:基督纪年|公元前]]$date1',
default='<span style="color:red">$date1 [[w:en:Ante Christum Natum|BC]]</span>',
},
['bp'] = {
nDates = 1,
ar ='$date1 [[w:ar:قبل الحاضر|قبل الحاضر]]',
be ='$date1 [[w:be-tarask:Да нашых дзён|Да нашых дзён]]',
['be-tarask']='$date1 [[w:be-tarask:Да нашых дзён|Да нашых дзён]]',
bn ='বর্তমানের আগে $date1',
ca ='$date1 [[w:ca:BP (unitat de temps)|BP]]',
cs ='$date1 [[w:cs:B. P.|B. P.]]',
de ='$date1 [[w:de:Before Present|BP]]',
el ='$date1 [[w:en:Before Present|BP]]',
en ='$date1 [[w:en:Before Present|BP]]',
['en-gb'] ='$date1 [[w:en:Before Present|BP]]',
['en-ca'] ='$date1 [[w:en:Before Present|BP]]',
eo='$date1 [[w:eo:Before Present|BP]]',
es ='$date1 [[w:es:Before Present|BP]]',
et ='$date1 [[w:et:Before Present|BP]]',
fa ='$date1 پیش از اکنون',
fi ='$date1 [[w:fi:BP (ajanlasku)|BP]]',
fr ='$date1 [[w:fr:Avant le présent|avant le présent]]',
hr ='$date1 [[w:hr:BP|prije današnjice]]',
it ='$date1 [[w:it:Before Present|BP]]',
ja ='$date1 [[w:ja:BP (年代測定)|BP]]',
lv ='$date1 [[w:lv:Pirms mūsdienām|Pirms mūsdienām]]',
mk ='$date1 [[w:mk:Пред сегашноста|п.с.]]',
ml ='[[w:en:Before Present|ഇന്നത്തെ കാലത്തിനു മുമ്പ്]] $date1',
nb ='$date1 [[w:no:Before Present|BP]]',
nn ='$date1 [[w:nn:Before Present|BP]]',
nl ='$date1 [[w:nl:Before Present|BP]]',
no ='$date1 [[w:no:Before Present|BP]]',
pl ='$date1 [[w:pl:Before Present|BP]]',
pt ='$date1 [[w:pt:Antes do Presente|Antes do Presente]]',
ru ='$date1 [[w:ru:До настоящего времени|до н. в.]]',
sk ='$date1 [[w:sk:BP (čas)|BP]]',
sl ='$date1 [[w:sl:pred sedanjostjo|p. s.]]',
sr ='$date1 [[w:sr:Прије садашњости|Прије садашњости]]',
sv ='$date1 [[w:sv:B.P.|B.P.]]',
uk ='$date1 [[w:uk:Років тому|Років тому]]',
ur ='$date1 قبل حاضر',
vi ='$date1 [[w:en:Before Present|trước ngày nay]]',
['zh-hans'] ='[[w:zh:距今|距今]]$date1',
['zh-hant'] ='[[w:zh:距今|距今]]$date1',
default='<span style="color:red">$date1 [[w:en:Before Present|BP]]</span>',
},
}
-- List of possible string inputs to "adj", "junction", "era", and "precision" fields
-- Each term is matched to its synonym and the role: a - adjective, e - era
-- p - precision, c - calendar and combos, r - certainty and j - conjunction
p.Synonyms = {
-- adjectives and prepositions
['quarter1']={'1quarter','a'},
['1stquarter']={'1quarter','a'},
['1st quarter']={'1quarter','a'},
['first quarter']={'1quarter','a'},
['1quarter']={'1quarter','a'},
['quarter2']={'2quarter','a'},
['2ndquarter']={'2quarter','a'},
['2nd quarter']={'2quarter','a'},
['second quarter']={'2quarter','a'},
['2quarter']={'2quarter','a'},
['quarter3']={'3quarter','a'},
['3rdquarter']={'3quarter','a'},
['3rd quarter']={'3quarter','a'},
['third quarter']={'3quarter','a'},
['3quarter']={'3quarter','a'},
['quarter4']={'4quarter','a'},
['4thquarter']={'4quarter','a'},
['4th quarter']={'4quarter','a'},
['fourth quarter']={'4quarter','a'},
['4quarter']={'4quarter','a'},
['spring']={'spring','a'},
['summer']={'summer','a'},
['fall']={'autumn','a'},
['autumn']={'autumn','a'},
['winter']={'winter','a'},
['beginning']={'early','a'},
['early']={'early','a'},
['1half']={'firsthalf','a'},
['1sthalf']={'firsthalf','a'},
['1st half']={'firsthalf','a'},
['firsthalf']={'firsthalf','a'},
['first half']={'firsthalf','a'},
['end']={'late','a'},
['late']={'late','a'},
['middle']={'mid','a'},
['mid']={'mid','a'},
['2half']={'secondhalf','a'},
['2ndhalf']={'secondhalf','a'},
['2nd half']={'secondhalf','a'},
['secondhalf']={'secondhalf','a'},
['second half']={'secondhalf','a'},
['<']={'before','a'},
['b']={'before','a'},
['before']={'before','a'},
['>']={'after','a'},
['a']={'after','a'},
['after']={'after','a'},
['~']={'circa','a'},
['c']={'circa','a'},
['ca']={'circa','a'},
['circa']={'circa','a'},
['by']={'by','a'},
['from']={'from','a'},
['until']={'until','a'},
['uncertain']={'uncertain','r'},
['possibly']={'possibly','r'},
['probably']={'probably','r'},
['presumably']={'presumably','r'},
-- eras
['bc']={'bc','e'},
['bce']={'bc','e'},
['before present']={'bp','e'},
['bp']={'bp','e'},
['ce']={'ad','e'},
['ad']={'ad','e'},
['ah']={'ah','e'},
-- conjunctions
['&']={'and','j'},
['and']={'and','j'},
['or']={'or','j'},
['-']={'from-until','j'},
['–']={'from-until','j'},
['from-until']={'from-until','j'},
['between']={'between','j'},
['circa2']={'circa2','a'},
-- precision
['day']={'day','p'},
['month']={'month','p'},
['year']={'year','p'},
['s']={'decade','p'},
['decade']={'decade','p'},
['century']={'century','p'},
['millennium']={'millennium','p'},
['million']={'million','p'},
['billion']={'billion','p'},
-- calendar
['julian']={'julian','c'},
['islamic']={'islamic','c'},
['hijri']={'islamic','c'},
-- "Turn of the ..." options are a combos which will be handled in similar way as calendars
['turn of the century']={'turn of the century','c'},
['century turn']={'turn of the century','c'},
['turn of the decade']={'turn of the decade','c'},
['decade turn']={'turn of the decade','c'},
['turn of the year']={'turn of the year','c'},
['year turn']={'turn of the year','c'},
-- other dates which will be handled in similar way as calendars
['?']={'unknown','c'},
['unknown']={'unknown','c'},
['unknown year']={'year unknown','c'},
['year unknown']={'year unknown','c'},
}
return p
eo5gntcrofku6hlrc6x1kktv4wkkxvc
Module:I18n/date
828
23711
183901
157736
2022-08-04T14:46:26Z
Xiplus
4323
已保护“[[Module:I18n/date]]”:高風險模板:877引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
Scribunto
text/plain
--[[
__ __ _ _ ___ _ ___ __ _ _
| \/ | ___ __| |_ _| | ___ _|_ _/ |( _ ) _ __ / /_| | __ _| |_ ___
| |\/| |/ _ \ / _` | | | | |/ _ (_)| || |/ _ \| '_ \ / / _` |/ _` | __/ _ \
| | | | (_) | (_| | |_| | | __/_ | || | (_) | | | |/ / (_| | (_| | || __/
|_| |_|\___/ \__,_|\__,_|_|\___(_)___|_|\___/|_| |_/_/ \__,_|\__,_|\__\___|
This Module handles per language customization of dates
Authors and Maintainers:
* Jarekt
]]
local p = {}
--[[ Different languages use different date formats, and many formats are shared among whole families of languages.
"DateLang" picks a cluster of languages associated with a single date format, based on the language to be used.
All unlisted languages default to English form. Languages like "de-formal" follows regular language fallback chain
and would default to German, and only if that does not exist then to English.
]]
p.DateLang = {
['be'] = 'ru-form', -- Belarusian
['be-tarsk'] = 'ru-form', -- Belarusian (Tara۫ievica)
['bn'] = 'en-form', -- Bengali
['bpy'] = 'bpy-form', -- Bishnupuriya Manipuri
['ca'] = 'ca-form', -- Catalan
['ce'] = 'ce-form', -- Chechen
['cs'] = 'cs-form', -- Czech
['da'] = 'de-form', -- Danish
['de'] = 'de-form', -- German
['el'] = 'ru-form', -- Greek
['en'] = 'en-form', -- English
['eo'] = 'eo-form', -- Esperanto
['es'] = 'es-form', -- Spanish
['et'] = 'de-form', -- Estonian
['eu'] = 'eu-form', -- Basque
['fa'] = 'he-form', -- Persian
['fi'] = 'fi-form', -- Finnish
['fr'] = 'fr-form', -- French
['ga'] = 'ga-form', -- Gallic
['gl'] = 'es-form', -- Galician based on https://translatewiki.net/wiki/MediaWiki:Pagetriage-info-timestamp-date-format/gl
['hi'] = 'en-form', -- Hindi
['he'] = 'he-form', -- Hebrew
['hr'] = 'hr-form', -- Croatian
['hu'] = 'hu-form', -- Hungarian
['hsb'] = 'cs-form', -- Upper Sorbian
['ia'] = 'ia-form', -- Interlingua
['is'] = 'de-form', -- Icelandic
['ja'] = 'zh-form', -- Japanese
['kn'] = 'kn-form', -- Kannada
['ko'] = 'ko-form', -- Korean
['lt'] = 'lt-form', -- Lithuanian
['lv'] = 'lv-form', -- Latvian
['mk'] = 'en-form', -- Macedonian
['ml'] = 'ml-form', -- Malayalam
['mr'] = 'mr-form', -- Marathi
['new'] = 'new-form', -- Newari
['nn'] = 'de-form', -- Norwegian Nynorsk
['no'] = 'de-form', -- Norwegian (bokm欩
['oc'] = 'oc-form', -- Occitan
['pa'] = 'en-form', -- Punjabi
['pl'] = 'ru-form', -- Polish
['pt'] = 'es-form', -- Portuguese
['qu'] = 'qu-form', -- Quechua based on https://translatewiki.net/wiki/MediaWiki:Pagetriage-info-timestamp-date-format/qu
['qug'] = 'qug-form', -- Kichwa based on Template_talk:Date#Kichwa_.5Bqug.5D
['ru'] = 'ru-form', -- Russian
['sk'] = 'cs-form', -- Slovakian
['sl'] = 'sl-form', -- Slovene
['sr'] = 'hr-form', -- Serbian
['th'] = 'th-form', -- Thai solar calendar
['uk'] = 'ru-form', -- Ukrainian
['vi'] = 'vi-form', -- Vietnamese
['zh-hans'] = 'zh-form', -- Chinese
}
--[[ Date format parameter which will be passed to {{#time:}} parser function.
It depends on the language and which parts of the date need to be displayed.
Different forms are:
* YMDHMS = stands for YYYY:MM:DD, HH:MM:SS format or equivalent
* YMDHM = stands for YYYY:MM:DD, HH:MM format or equivalent
* YMD = stands for YYYY:MM:DD format or equivalent
* YM = stands for YYYY:MM (year-month) format or equivalent
* MD = stands for MM:DD (month-day) format or equivalent
* Y = stands for YYYY (year only) format or equivalent
* M = stands for month name only
The left hand side follows encoding used by {{#time}} parser function ,
see https://www.mediawiki.org/wiki/Help:Extension:ParserFunctions#.23time for documentation.
To summerize:
* Y - 4-digit year, like "2017"
* y - 2-digit year, like "17"
* M - An abbreviation of the month name, in the site language, like "Mar"
* F - The full month name in the site language, like "March"
* xg - Output the full month name in the genitive form for site languages that distinguish
between genitive and nominative forms. This option is useful for many Slavic languages
like Polish, Russian, Belarusian, Czech, Slovak, Slovene, Ukrainian, etc.
* j - Day of the month, not zero-padded, like "1"
* d - Day of the month, zero-padded, like "01"
* a - "am" during the morning (00:00:00 → 11:59:59), "pm" otherwise (12:00:00 → 23:59:59).
* A - Uppercase version of a above.
* g - Hour in 12-hour format, not zero-padded.
* h - Hour in 12-hour format, zero-padded.
* G - Hour in 24-hour format, not zero-padded.
* H - Hour in 24-hour format, zero-padded.
* i - Minutes past the hour, zero-padded.
* s - Seconds past the minute, zero-padded.
Original set was developed to match the output of the pre-Lua {{date}} template, preserved as {{date/old}}
]]
p.DateFormat = {
-- day/month/year languages
['ca-form'] = {
YMDHMS='j xg "de" Y, H:i:s',
YMDHM ='j xg "de" Y, H:i',
YMD ='j xg "de" Y',
YM ='F "de" Y',
MD ='j xg',
Y ='Y',
M ='F'
},
['en-form'] = {
YMDHMS='j F Y, H:i:s',
YMDHM ='j F Y, H:i',
YMD ='j F Y',
YM ='F Y',
MD ='j F',
Y ='Y',
M ='F'
},
['de-form'] = {
YMDHMS='j. F Y, H:i:s',
YMDHM ='j. F Y, H:i',
YMD ='j. F Y',
YM ='F Y',
MD ='j. F',
Y ='Y',
M ='F'
},
['hr-form'] = {
YMDHMS='j. F Y., H:i:s',
YMDHM ='j. F Y., H:i',
YMD ='j. F Y.',
YM ='F Y.',
MD ='j. F',
Y ='Y.',
M ='F'
},
['ml-form'] = {
YMDHMS='j F Y, H:i:s',
YMDHM ='j F Y, H:i',
YMD ='j F Y',
YM ='F Y',
MD ='F j',
Y ='Y',
M ='F'
},
['th-form'] = {
YMDHMS='j F "พ.ศ." xkY, H:i:s',
YMDHM ='j F "พ.ศ." xkY, H:i',
YMD ='j F "พ.ศ." xkY',
YM ='F "พ.ศ." xkY',
MD ='j F',
Y ='"พ.ศ." xkY',
M ='F'
},
['fi-form'] = {
YMDHMS='j. F"ta" Y, H:i:s',
YMDHM ='j. F"ta" Y, H:i',
YMD ='j. F"ta" Y',
YM ='F Y',
MD ='j. F"ta"',
Y ='Y',
M ='F'
},
['es-form'] = {
YMDHMS='j "de" F "de" Y, H:i:s',
YMDHM ='j "de" F "de" Y, H:i',
YMD ='j "de" F "de" Y',
YM ='F "de" Y',
MD ='j "de" F',
Y ='Y',
M ='F'
},
['oc-form'] = {
YMDHMS='j F "de" Y, H:i:s',
YMDHM ='j F "de" Y, H:i',
YMD ='j F "de" Y',
YM ='F "de" Y',
MD ='j F',
Y ='Y',
M ='F'
},
['ia-form'] = {
YMDHMS='j "de" F Y, H:i:s',
YMDHM ='j "de" F Y, H:i',
YMD ='j "de" F Y',
YM ='F Y',
MD ='j "de" F',
Y ='Y',
M ='F'
},
['eo-form'] = {
YMDHMS='"la" j"-a de" F Y, H:i:s',
YMDHM ='"la" j"-a de" F Y, H:i',
YMD ='"la" j"-a de" F Y',
YM ='F Y',
MD ='"la" j"-a de" F',
Y ='Y',
M ='F'
},
['vi-form'] = {
YMDHMS='j F "năm" Y "lúc" H:i:s',
YMDHM ='j F "năm" Y "lúc" H:i',
YMD ='j F "năm" Y',
YM ='F "năm" Y',
MD ='j F',
Y ='Y',
M ='F'
},
['qu-form'] = {
YMDHMS='j "ñiqin" F"pi" Y "watapi", H:i:s',
YMDHM ='j "ñiqin" F"pi" Y "watapi", H:i',
YMD ='j "ñiqin" F"pi" Y "watapi"',
YM ='F"pi" Y "watapi"',
MD ='j "ñiqin" F"pi"',
Y ='Y',
M ='F'
},
['qug-form'] = {
YMDHMS='j "niki" F"pi" Y "watapi", H:i:s',
YMDHM ='j "niki" F"pi" Y "watapi", H:i',
YMD ='j "niki" F"pi" Y "watapi"',
YM ='F"pi" Y "watapi"',
MD ='j "niki" F"pi"',
Y ='Y',
M ='F'
},
['he-form'] = {
YMDHMS='"<span dir=rtl>"j xg Y"</span>", H:i:s',
YMDHM ='"<span dir=rtl>"j xg Y"</span>", H:i',
YMD ='"<span dir=rtl>"j xg Y"</span>"',
YM ='"<span dir=rtl>"F Y"</span>"',
MD ='"<span dir=rtl>"j xg"</span>"',
Y ='Y',
M ='"<span dir=rtl>"F"</span>"'
},
-- French and Gallic languages require different form for first day of the month and
-- different for the other days
['fr-form'] = {
YMDHMS='j F Y, H:i:s',
YMDHM ='j F Y, H:i',
YMD ='j F Y',
YM ='F Y',
MD ='j F',
Y ='Y',
M ='F'
},
['ga-form'] = {
YMDHMS='j F Y, H:i:s',
YMDHM ='j F Y, H:i',
YMD ='j F Y',
YM ='F Y',
MD ='j F',
Y ='Y',
M ='F'
},
['ca-form1'] = { -- 1st of the month form
YMDHMS='j"r" xg "de" Y, H:i:s',
YMDHM ='j"r" xg "de" Y, H:i',
YMD ='j"r" xg "de" Y',
YM ='F "de" Y',
MD ='j"r" xg',
Y ='Y',
M ='F'
},
['fr-form1'] = { -- 1st of the month form
YMDHMS='j"<sup>er</sup>" F Y, H:i:s',
YMDHM ='j"<sup>er</sup>" F Y, H:i',
YMD ='j"<sup>er</sup>" F Y',
YM ='F Y',
MD ='j"<sup>er</sup>" F',
Y ='Y',
M ='F'
},
['ga-form1'] = { -- 1st of the month form
YMDHMS='j"<sup>ú</sup>" F Y, H:i:s',
YMDHM ='j"<sup>ú</sup>" F Y, H:i',
YMD ='j"<sup>ú</sup>" F Y',
YM ='F Y',
MD ='j"<sup>ú</sup>" F',
Y ='Y',
M ='F'
},
-- day/month/year Slavic languages
['ru-form'] = {
YMDHMS='j xg Y, H:i:s',
YMDHM ='j xg Y, H:i',
YMD ='j xg Y',
YM ='F Y',
MD ='j xg',
Y ='Y',
M ='F'
},
['cs-form'] = {
YMDHMS='j. xg Y, H:i:s',
YMDHM ='j. xg Y, H:i',
YMD ='j. xg Y',
YM ='F Y',
MD ='j. xg',
Y ='Y',
M ='F'
},
['sl-form'] = {
YMDHMS='j. xg Y "ob" H:i:s',
YMDHM ='j. xg Y "ob" H:i',
YMD ='j. xg Y',
YM ='F Y',
MD ='j. xg',
Y ='Y',
M ='F'
},
-- year/month/day languages
['zh-form'] = {
YMDHMS='Y年Fj日, H:i:s',
YMDHM ='Y年Fj日, H:i',
YMD ='Y年Fj日',
YM ='Y年F',
MD ='Fj日',
Y ='Y年',
M ='F'
},
['ko-form'] = {
YMDHMS='Y년 F j일, H:i:s',
YMDHM ='Y년 F j일, H:i',
YMD ='Y년 F j일',
YM ='Y년 F',
MD ='F j일',
Y ='Y년',
M ='F'
},
['hu-form'] = {
YMDHMS='Y. F j., H:i:s',
YMDHM ='Y. F j., H:i',
YMD ='Y. F j.',
YM ='Y. F',
MD ='F j.',
Y ='Y',
M ='F'
},
['lt-form'] = {
YMDHMS='Y "m". F j "d"., H:i:s',
YMDHM ='Y "m". F j "d"., H:i',
YMD ='Y "m". F j "d".',
YM ='Y "m". F',
MD ='F j "d".',
Y ='Y "m".',
M ='F'
},
['eu-form'] = {
YMDHMS='Y"ko" F"ren" j"a", H:i:s',
YMDHM ='Y"ko" F"ren" j"a", H:i',
YMD ='Y"ko" F"ren" j"a"',
YM ='Y"ko" F',
MD ='F"ren" j"a"',
Y ='Y',
M ='F'
},
['eu-form01'] = { -- 1st and 21st of the month uses different form
YMDHMS='Y"ko" F"ren" j"ea", H:i:s',
YMDHM ='Y"ko" F"ren" j"ea", H:i',
YMD ='Y"ko" F"ren" j"ea"',
YM ='Y"ko" F',
MD ='F"ren" j"ea"',
Y ='Y',
M ='F'
},
['eu-form11'] = { -- 11th and 31st of the month uses different form
YMDHMS='Y"ko" F"ren" j, H:i:s',
YMDHM ='Y"ko" F"ren" j, H:i',
YMD ='Y"ko" F"ren" j',
YM ='Y"ko" F',
MD ='F"ren" j',
Y ='Y',
M ='F'
},
['ce-form'] = {
YMDHMS='Y "шаран" j F, H:i:s',
YMDHM ='Y "шаран" j F, H:i',
YMD ='Y "шаран" j F',
YM ='Y "шаран" F',
MD ='j F',
Y ='Y "шо"',
M ='F'
},
-- year/day/month languages
['lv-form'] = {
YMDHMS='Y". gada" j. F, H:i:s',
YMDHM ='Y". gada" j. F, H:i',
YMD ='Y". gada" j. F',
YM ='Y". gada" F',
MD ='j. F',
Y ='Y". gada"',
M ='F'
},
-- month/day/year languages
['kn-form'] = {
YMDHMS='F j, Y, H:i:s',
YMDHM ='F j, Y, H:i',
YMD ='F j, Y',
YM ='F, Y',
MD ='F j',
Y ='Y',
M ='F'
},
['bpy-form']= {
YMDHMS='F j, মারি Y, H:i:s',
YMDHM ='F j, মারি Y, H:i',
YMD ='F j, মারি Y',
YM ='F, মারি Y',
MD ='F j',
Y ='মারি Y',
M ='F'
},
['mr-form'] = {
YMDHMS='F j, इ.स. Y, H:i:s',
YMDHM ='F j, इ.स. Y, H:i',
YMD ='F j, इ.स. Y',
YM ='F, इ.स. Y',
MD ='F j',
Y ='इ.स. Y',
M ='F'
},
['new-form']= {
YMDHMS='F j, ई सं Y, H:i:s',
YMDHM ='F j, ई सं Y, H:i',
YMD ='F j, ई सं Y',
YM ='F, ई सं Y',
MD ='F j',
Y ='ई सं Y',
M ='F'
},
}
return p
h3nl2o5p10d2zgftkzbo2mvv6vlm41f
Module:I18n/ordinal
828
23712
183902
157738
2022-08-04T14:46:36Z
Xiplus
4323
已保护“[[Module:I18n/ordinal]]”:高風險模板:877引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
Scribunto
text/plain
local p = {}
--[[ Different languages use different schemes for ordinals, and some of these schemes are shared between languages.
"SchemeFromLang" picks an ordinal scheme based on a specified language.
All unlisted languages default to the "period-scheme", i.e. "104." is the ordinal for the value "104".
Languages will follow the regular language fallback chain. For example, "de-formal" would fallback to scheme for "de",
and only if that does not exist would the "period-scheme" be used.
]]
p.SchemeFromLang = {
['ast'] = 'ast-scheme', -- Asturian
['bn'] = 'bn-scheme', -- Bengali
['br'] = 'br-scheme', -- Breton
['ca'] = 'ca-scheme', -- Catalan
['cs'] = 'period-scheme', -- Czech
['da'] = 'period-scheme', -- Danish
['de'] = 'period-scheme', -- German
['el'] = 'el-scheme', -- Greek
['en-gb'] = 'en-scheme', -- British English
['en-ca'] = 'en-scheme', -- Canadian English
['en'] = 'en-scheme', -- English
['eo'] = 'eo-scheme', -- Esperanto
['es'] = 'es-scheme', -- Spanish
['et'] = 'period-scheme', -- Estonian
['eu'] = 'roman-scheme', -- Basque
['fa'] = 'fa-scheme', -- Persian
['fi'] = 'period-scheme', -- Finnish
['fr'] = 'fr-scheme', -- French
['hr'] = 'period-scheme', -- Croatian
['hu'] = 'period-scheme', -- Hungarian
['hy'] = 'hy-scheme', -- Armenian
['ia'] = 'ia-scheme', -- Interlingua
['it'] = 'romance-scheme', -- Italian
['ja'] = 'ja-scheme', -- Japanese
['km'] = 'km-scheme', -- Khmer
['ko'] = 'ko-scheme', -- Korean
['la'] = 'la-scheme', -- Latin
['lo'] = 'lo-scheme', -- Laothian
['mk'] = 'mk-scheme', -- Macedonian
['ml'] = 'ml-scheme', -- Malayalam
['ms'] = 'ms-scheme', -- Malay
['nds'] = 'period-scheme', -- Low German
['nb'] = 'period-scheme', -- Norwegian Bokmål
['nl'] = 'nl-scheme', -- Dutch
['nn'] = 'period-scheme', -- Norwegian Nynorsk
['no'] = 'period-scheme', -- Norwegian
['pl'] = 'pl-scheme', -- Polish
['pt'] = 'romance-scheme', -- Portuguese
['ru'] = 'ru-scheme', -- Russian
['sk'] = 'period-scheme', -- Slovak
['sl'] = 'period-scheme', -- Slovene
['sv'] = 'sv-scheme', -- Swedish
['ta'] = 'ta-scheme', -- Tamil
['th'] = 'th-scheme', -- Thai
['uk'] = 'uk-scheme', -- Ukrainian
['vi'] = 'vi-scheme', -- Vietnamese
['zh-hans'] = 'zh-scheme', -- Simplified Chinese
['zh-hant'] = 'zh-scheme', -- Traditional Chinese
}
--[[ Text used to internationalize the various schemes.
Styles are supported by suffixing "/style" to key.
Styles that are superscripted set "superscript" to true (this style can be disabled, e.g. in category and page names not supporting HTML styling tags).
Scheme set was developed to match the output of the pre-Lua {{Ordinal}} template, preserved as {{Ordinal/old}}
]]
p.Scheme = {
-- the null scheme, i.e. just the number (normally not used except in technical contexts expecting only numbers)
['null-scheme'] = {
},
-- the period scheme, i.e. "<value>." used for at least: cs, de, fi, hu
['period-scheme'] = {
rules = 'suffix',
suffix = '.'
},
-- Roman (Basque, Galician, Italian, and Classical Latin)
['roman-scheme'] = {
period = false,
superscript = false,
formatlang = 'roman'
},
-- Romance (Italian, Portuguese)
['romance-scheme'] = {
rules = 'gendered-suffix',
superscript = true,
period = false,
suffix = 'o',
suffix_m = 'o',
suffix_f = 'a',
suffix_n = 'o',
},
-- Asturian
['ast-scheme'] = {
rules = 'gendered-suffix',
superscript = true,
period = false,
suffix = 'u',
suffix_m = 'u',
suffix_f = 'a',
suffix_n = 'o',
},
-- Bengali (reference: https://www.bissoy.com/701365/)
['bn-scheme'] = {
rules = 'suffix',
suffix = 'তম',
suffix_0 = 'ম',
suffix_1 = 'ম',
suffix_2 = 'য়',
suffix_3 = 'য়',
suffix_4 = 'র্থ়',
suffix_5 = 'ম',
suffix_6 = 'ষ্ঠ',
suffix_7 = 'ম',
suffix_8 = 'ম',
suffix_9 = 'ম',
},
-- Breton
['br-scheme'] = {
-- non-breaking hyphen ("‑", U+2011) is used below
rules = 'suffix',
suffix = '‑vet',
formatlang = 'eo' -- pre-Lua {{Ordinal}} template used "eo" number formatting for "br" ordinals (???FIXME???)
},
-- Catalan
['ca-scheme'] = {
rules = 'gendered-suffix-n',
superscript = false,
period = false,
suffix = 'è',
suffix_f = 'a',
suffix_1 = 'r',
suffix_1_f = 'a',
suffix_2 = 'n',
suffix_2_f = 'a',
suffix_3 = 'r',
suffix_3_f = 'a',
suffix_4 = 't',
suffix_4_f = 'a'
},
-- Greek
['el-scheme'] = {
rules = 'gendered-suffix',
suffix = 'ος',
suffix_m = 'ος',
suffix_f = 'η',
suffix_n = 'ο',
},
-- the English scheme, i.e. "1st", "2nd", "3rd", "4th".
['en-scheme'] = {
rules = 'skip-tens',
superscript = true,
suffix = 'th',
suffix_1 = 'st',
suffix_2 = 'nd',
suffix_3 = 'rd',
},
-- the English scheme using the "d" style, i.e. "23d".
['en-scheme/d'] = {
rules = 'suffix',
suffix = 'd'
},
-- Esperanto
['eo-scheme'] = {
rules = 'suffix',
-- non-breaking hyphen ("‑", U+2011) is used below
suffix = '‑a',
},
-- Spanish (period plus Romance)
['es-scheme'] = {
rules = 'gendered-suffix',
superscript = true,
period = true,
suffix = 'o',
suffix_m = 'o',
suffix_f = 'a',
suffix_n = 'o',
},
-- Persian
['fa-scheme'] = {
rules = 'suffix',
suffix = 'م',
},
-- French
['fr-scheme'] = {
rules = 'gendered-suffix-one',
superscript = true,
suffix = 'e',
suffix_1 = 'e', -- there's NO neutral gender in French (this is only for unspecified gender)
suffix_1_m = 'er',
suffix_1_f = 're',
},
-- French alternate specific style for 2nd (used only when the 2nd is also the *last* one in a pair, including World Wars)
['fr-scheme/pair'] = {
rules = 'gendered-suffix-n',
superscript = true,
suffix = 'e',
suffix_1 = 'e',
suffix_1_m = 'er',
suffix_1_f = 're',
suffix_2 = 'e',
suffix_2_m = 'nd',
suffix_2_f = 'de',
},
-- the French scheme using the "roman" style ("roman year" is a supported alias for "roman")
['fr-scheme/roman'] = {
rules = 'gendered-suffix-one',
superscript = true,
suffix = 'e',
suffix_1 = 'e',
suffix_1_m = 'er',
suffix_1_f = 're',
formatlang = 'roman' -- styled normally in small capitals (except milleniums using big capitals)
},
-- French specific roman ordinal style after names of personal titles (kings/queens/popes…) and of book chapters (suffixed only for 1st)
['fr-scheme/roman-title'] = {
rules = 'gendered-suffix-one',
superscript = true,
suffix = '', -- no suffix except for 1st
suffix_1 = 'e',
suffix_1_m = 'er',
suffix_1_f = 're',
suffix_1_n = 'е',
formatlang = 'roman' -- style using only big capitals
},
-- Armenian
['hy-scheme'] = {
rules = 'suffix-one',
-- non-breaking hyphens ("‑", U+2011) are used below
suffix = '‑րդ',
suffix_1 = '‑ին',
},
-- Interlingua
['ia-scheme'] = {
rules = 'mod10-suffix',
superscript = true,
suffix_0 = 'te',
suffix_1 = 'me',
suffix_2 = 'nde',
suffix_3 = 'tie',
suffix_4 = 'te',
suffix_5 = 'te',
suffix_6 = 'te',
suffix_7 = 'me',
suffix_8 = 've',
suffix_9 = 'ne',
},
-- Japanese
-- this is for the adjective in undetermined order before noun; otherwise Japanese use: <cardinal number><noun>目
['ja-scheme'] = {
rules = 'prefix',
prefix = '第',
},
-- Khmer
['km-scheme'] = {
rules = 'prefix',
prefix = 'ទ',
},
-- Korean
['ko-scheme'] = {
rules = 'suffix',
suffix = '째',
},
-- Latin
['la-scheme'] = {
rules = 'suffix',
superscript = true,
suffix = 'o',
formatlang = 'roman'
},
-- Laothian
['lo-scheme'] = {
rules = 'prefix',
prefix = 'ທີ່',
},
-- Macedonian
['mk-scheme'] = {
rules = 'mod10-suffix',
-- non-breaking hyphens ("‑", U+2011) are used below
suffix_0 = '‑тиот',
suffix_1 = '‑виот',
suffix_2 = '‑риот',
suffix_3 = '‑иот',
suffix_4 = '‑иот',
suffix_5 = '‑тиот',
suffix_6 = '‑иот',
suffix_7 = '‑миот',
suffix_8 = '‑миот',
suffix_9 = '‑тиот',
},
-- Malayalam
['ml-scheme'] = {
rules = 'suffix',
-- non-breaking hyphen ("‑", U+2011) is used below
suffix = '‑മത്തെ',
},
-- Malay
['ms-scheme'] = {
rules = 'prefix',
-- non-breaking hyphen ("‑", U+2011) is used below
prefix = 'ke‑',
},
-- Dutch
['nl-scheme'] = {
rules = 'suffix',
suffix = 'e',
},
-- Polish
['pl-scheme'] = {
rules = 'mod10-gendered-suffix-skip-tens',
-- non-breaking hyphens ("‑", U+2011) are used below
suffix = '‑ty',
suffix_f = '‑ta',
suffix_n = '‑te',
suffix_1 = '‑szy',
suffix_1_f = '‑sza',
suffix_1_n = '‑sze',
suffix_2 = '‑gi',
suffix_2_f = '‑ga',
suffix_2_n = '‑gie',
suffix_3 = '‑ci',
suffix_3_f = '‑cia',
suffix_3_n = '‑cie',
suffix_7 = '‑my',
suffix_7_f = '‑ma',
suffix_7_n = '‑me',
suffix_8 = '‑my',
suffix_8_f = '‑ma',
suffix_8_n = '‑me',
},
-- Russian
['ru-scheme'] = {
rules = 'gendered-suffix',
-- non-breaking hyphens ("‑", U+2011) are used below
suffix = '‑й',
suffix_m = '‑й',
suffix_f = '‑я',
suffix_n = '‑е',
},
-- Swedish
['sv-scheme'] = {
rules = 'skip-tens',
suffix = ':e',
suffix_1 = ':a',
suffix_2 = ':a',
},
-- Thai
['th-scheme'] = {
rules = 'prefix',
prefix = 'ที่',
},
-- Modern Tamil (using European digits for all numbers, with a hyphen before the suffix)
['ta-scheme'] = {
rules = 'suffix',
-- non-breaking hyphen ("‑", U+2011) is used below
suffix = '‑ஆம்',
formatlang = 'en',
},
-- Traditional Tamil (using Tamil digits without any hyphen before the suffix, but a distinct prefix and suffix for 1st)
['ta-scheme/trad'] = {
rules = 'suffix-one',
suffix = 'ஆம்',
prefix_1 = 'மு',
suffix_1 = 'லாம்',
},
-- Ukrainian: see [[:uk:Вікіпедія:Стиль/Нарощення порядкових числівників#Нарощення]] and [[:uk:Шаблон:-й]]
-- FIXME: 0?
['uk-scheme'] = {
rules = 'uk-rules',
-- non-breaking hyphens ("‑", U+2011) are used below
suffix = '‑й',
suffix_f = '‑та',
suffix_n = '‑те',
suffix_1_f = '‑ша',
suffix_1_n = '‑ше',
suffix_2_f = '‑га',
suffix_2_n = '‑ге',
suffix_3_f = '‑тя',
suffix_3_n = '‑тє',
suffix_7_f = '‑ма',
suffix_7_n = '‑ме',
suffix_8_f = '‑ма',
suffix_8_n = '‑ме',
suffix_40_f = '‑ва',
suffix_40_n = '‑ве',
suffix_1000_f = '‑на',
suffix_1000_n = '‑не',
},
-- Vietnamese
['vi-scheme'] = {
rules = 'prefix',
prefix = 'thứ ',
},
-- Chinese
['zh-scheme'] = {
rules = 'prefix',
prefix = '第',
},
}
return p
hp9srvnekndp7rb84n8a7t3a81gr9w7
Module:ISOdate
828
23713
183903
157740
2022-08-04T14:46:46Z
Xiplus
4323
已保护“[[Module:ISOdate]]”:高風險模板:875引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
Scribunto
text/plain
--[[
This module is intended for processing of date strings.
Please do not modify this code without applying the changes first at Module:ISOdate/sandbox and testing
at Module:ISOdate/sandbox/testcases and Module talk:ISOdate/sandbox/testcases.
Authors and maintainers:
* User:Parent5446 - original version of the function mimicking template:ISOdate
* User:Jarekt - original version of the functions mimicking template:Date and template:ISOyear
]]
local p = {}
-- =======================================
-- === Dependencies ======================
-- =======================================
local D = require('Module:Date')
--[[
ISOyear
This function returns year part of date string.
Usage:
{{#invoke:ISOdate|ISOyear|target_string}}
Parameters
1: The date string
Error Handling:
If the string does not look like it contain the year than the function will not return anything.
That is the preferred treatment for the template:Creator which is the main (only?) template calling it.
]]
function p.ISOyear( frame )
return p._ISOyear( frame.args[1] )
end
function p._ISOyear( input )
if not input then
return ''
end
input = mw.text.trim( input )
-- if empty string then return it
if input == "" then
return input
end
-- if number then return it
if tonumber( input ) then
return mw.ustring.format( '%04i', input )
end
-- otherwise use regular expression match
input = mw.ustring.match( input, '^+?(-?%d%d?%d?%d?)-' )
if input and tonumber( input ) then
return mw.ustring.format( '%04i', input )
else
return ''
end
end
--[[
ISOdate
This function is the core part of the ISOdate template.
Usage:
{{#invoke:ISOdate|ISOdate|target_string|lang=}}
Parameters:
1: The date string
lang: The language to display it in
form: Language format (genitive, etc.) for some languages
class: CSS class for the <time> node
Error Handling:
If the string does not look like it contain the proper ISO date than the function will return the original string.
That is the preferred treatment for the template:Information (and similar templates) which calling it.
]]
function p.ISOdate(frame)
local datestr, succeded
local args = frame.args
if not (args.lang and mw.language.isSupportedLanguage(args.lang)) then
args.lang = frame:callParserFunction( "int", "lang" ) -- get user's chosen language
end
datestr, succeded = p._ISOdate(
mw.text.trim(args[1]),
args.lang, -- language
args.case or '', -- allows to specify grammatical case for the month for languages that use them
args.class or 'dtstart', -- allows to set the html class of the time node where the date is included.
args.trim_year or '100-999' -- by default pad one and 2 digit years to be 4 digit long, while keeping 3 digit years as is
)
return datestr
end
function p._ISOdate(datestr, lang, case, class, trim_year)
-- pattern: regexp - regular expresion to test; dlen - number of date elements; tail = which element is a "tail" if any
-- regexp hints:
-- 1) Strings starting with "^" and ending with "$" indicate whole string match
-- 2) optional tail part copied as-is and following the main parsed part of the date have to be separated from the date by a whitespace, so "(\s.+)?"
local patterns = {
-- strings starting with YYYY-MM-DD HH:MM:SS. Year 4 digits (if we know seconds than it was within the last 100 years), the rest 1-2
-- date and time can be separated by space or "T" and there could be a "Z" on the end indicating "Zulu" time zone
{dlen=6, tail=7, regexp="^+?(%d%d%d%d)-(%d%d?)-(%d%d?)[ T](%d%d?):(%d%d?):(%d%d?)Z?(%s.*)"},
{dlen=6, tail=0, regexp="^+?(%d%d%d%d)-(%d%d?)-(%d%d?)[ T](%d%d?):(%d%d?):(%d%d?)Z?$"},
-- strings starting with YYYY-MM-DD HH:MM. Year 4 digits, the rest 1-2
-- (if one knows hour and minute than it was probably after a year 1000)
{dlen=5, tail=6, regexp="^+?(%d%d%d%d)-(%d%d?)-(%d%d?)[ T](%d%d?):(%d%d?)(%s.+)"},
{dlen=5, tail=0, regexp="^+?(%d%d%d%d)-(%d%d?)-(%d%d?)[ T](%d%d?):(%d%d?)$"},
-- strings starting with YYYY-MM-DD. Year 1-4 digits, the rest 1-2
{dlen=3, tail=4, regexp="^+?(%d%d?%d?%d?)-(%d%d?)-(%d%d?)(%s.+)"},
{dlen=3, tail=0, regexp="^+?(%d%d?%d?%d?)-(%d%d?)-(%d%d?)$"},
-- strings starting with YYYY-MM. Year 3-4 digits, month 2 digits
-- (want to avoit converting to dates strings like 10-5 = 5
{dlen=2, tail=3, regexp="^+?(%d%d%d%d?)-(%d%d)(%s.+)"},
-- if whole string is in YYYY-MM form: If Year 1-4 digits, month 1-2 digits
{dlen=2, tail=0, regexp="^+?(%d%d?%d?%d?)-(%d%d?)$"},
-- string starts with a number -> it has to be 3 or 4 digit long to be a year
{dlen=1, tail=2, regexp="^+?(%d%d%d%d?)(%s.+)"},
-- if whole string is a number (1-4 digit long) than it will be interpreted as a year
{dlen=1, tail=0, regexp="^+?(%d%d?%d?%d?)$"},
}
-- create datevec based on which variables are provided
local datevec, tail, formatNum
datevec, tail, formatNum = p.test_date_formats(datestr or '', patterns)
if datevec[1]=='' or datevec[1]==nil then
-- quickly return if datestr does not look like date (it could be a template)
return datestr, false
end
-- call p._Date function to format date string
local succeded, datestr2
succeded, datestr2 = pcall( D._Date, datevec, lang, case, class, trim_year)
if succeded and datestr2~='' then
return mw.text.trim( datestr2 .. tail), true
else -- in case of errors return the original string
return datestr, false
end
end
function p.ISOdate_extended(frame)
-- pattern: regexp - regular expresion to test; dlen - number of date elements; tail = which element is a "tail" if any
-- regexp hints:
-- 1) Strings starting with "^" and ending with "$" indicate whole string match
-- 2) optional tail part copied as-is and following the main parsed part of the date have to be separated from the date by a whitespace, so "(\s.+)?"
local datestr, succeded
local args = frame.args
if not (args.lang and mw.language.isSupportedLanguage(args.lang)) then
args.lang = frame:callParserFunction( "int", "lang" ) -- get user's chosen language
end
datestr, succeded = p._ISOdate(
mw.text.trim(args[1]),
args.lang, -- language
args.case or '', -- allows to specify grammatical case for the month for languages that use them
args.class or 'dtstart', -- allows to set the html class of the time node where the date is included.
args.trim_year or '100-999' -- by default pad one and 2 digit years to be 4 digit long, while keeping 3 digit years as is
)
if succeded then
return datestr
end
local patterns = {
-- Exended set of recognized formats: like MM/DD/YYYY
{dlen=3, tail=4, regexp="^(%d%d?)[-./](%d%d?)[-./](%d%d%d%d)(%s.+)"},
{dlen=3, tail=0, regexp="^(%d%d?)[-./](%d%d?)[-./](%d%d%d%d)$"},
{dlen=3, tail=0, regexp="^(%d%d?)%s(%w+)%s(%d%d%d%d)$"},
{dlen=3, tail=0, regexp="^(%w+)%s(%d%d?),%s(%d%d%d%d)$"},
}
local datevec, tail, formatNum, category = ''
datevec, tail, formatNum = p.test_date_formats(frame.args[1], patterns)
if formatNum==1 or formatNum==2 then
vec = datevec;
if tonumber(datevec[1])>12 then
frame.args[1] = string.format('%04i-%02i-%02i', datevec[3], datevec[2], datevec[1] )
category = '[[Category:Date in DD/MM/YYYY format]]'
return mw.text.trim( p.ISOdate(frame) .. tail);
elseif tonumber(datevec[2])>12 then
frame.args[1] = string.format('%04i-%02i-%02i', datevec[3], datevec[1], datevec[2] )
category = '[[Category:Date in MM/DD/YYYY format]]'
return mw.text.trim( p.ISOdate(frame) .. tail);
end
elseif (formatNum==3 or formatNum==4) and (datevec[3]=='' or datevec[3]~=nil) then
local str = mw.getCurrentFrame():callParserFunction( "#time", { 'Y-m-d', datestr} )
local vec = {str:match( "^(%d%d?%d?%d?)-(%d%d?)-(%d%d?)$" )}
if vec and vec[1]~=nil then
frame.args[1] = string.format('%04i-%02i-%02i', vec[1], vec[2], vec[3] )
category = '[[Category:Date in word format]]'
return p.ISOdate(frame);
end
end
return datestr
end
function p.test_date_formats(datestr, patterns)
-- pattern: regexp - regular expresion to test; dlen - number of date elements; tail = which element is a "tail" if any
local datevec = {'','','','','',''}
local tail = ''
local vec, pat
local formatNum = 0
for i, pat in ipairs( patterns ) do
vec = {datestr:match( pat.regexp )}
if vec and vec[1]~=nil then
for j=1,pat.dlen do
datevec[j] = vec[j]
end
if pat.tail>0 and vec[pat.tail]~=nil then
tail = mw.ustring.gsub(' ' .. vec[pat.tail], ' +', ' ')
end
formatNum = i
break
end
end
return datevec, tail, formatNum
end
return p
71ire9x1tjwymnar0r3keb0qjd4vlft
Module:LangSwitch
828
23714
183907
157743
2022-08-04T14:47:26Z
Xiplus
4323
已保护“[[Module:LangSwitch]]”:高風險模板:877引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
Scribunto
text/plain
--[[
__ __ _ _ _ ____ _ _ _
| \/ | ___ __| |_ _| | ___ _| | __ _ _ __ __ _/ ___|_ _(_) |_ ___| |__
| |\/| |/ _ \ / _` | | | | |/ _ (_) | / _` | '_ \ / _` \___ \ \ /\ / / | __/ __| '_ \
| | | | (_) | (_| | |_| | | __/_| |__| (_| | | | | (_| |___) \ V V /| | || (__| | | |
|_| |_|\___/ \__,_|\__,_|_|\___(_)_____\__,_|_| |_|\__, |____/ \_/\_/ |_|\__\___|_| |_|
|___/
Authors and maintainers:
* User:Zolo - original version in Module:Fallback
* User:Jarekt
]]
local p = {}
--[[
_langSwitch
This function is the core part of the LangSwitch template.
Example usage from Lua:
text = _langSwitch({en='text in english', pl='tekst po polsku'}, lang)
Parameters:
args - table with translations by language
lang - desired language (often user's native language)
Error Handling:
]]
local function defaultCheck(args)
if not args.en and not args.default then
local err = '<b class="error">LangSwitch Error: no default</b>'
if args.nocat == '1' then
return err
else
return err .. '[[Category:LangSwitch template without default version]]'
end
end
return false
end
local function quickSwitch(args, arg)
local err = defaultCheck(args)
if err then
return err
end
if arg == '~' then
arg = ''
end
return arg
end
function p._langSwitch(args, lang) -- args: table of translations
-- Return error if there is not default and no english version
local err = defaultCheck(args)
if err then
return err
end
-- get the list of accepetable language (lang + those in lang's fallback chain) and check their content
assert(lang, 'LangSwitch Error: no lang')
--local langList = {lang}
--if not args[lang] then
local langList = mw.language.getFallbacksFor(lang)
table.insert(langList, 1, lang)
table.insert(langList, math.max(#langList, 2), 'default')
--end
for _, language in ipairs(langList) do
lang = args[language]
if lang == '~' then
return ''
elseif lang and lang ~= '' then
return lang
end
end
end
--[[
langSwitch
This function is the core part of the LangSwitch template.
Example Usage from a template:
{{#invoke:fallback|langSwitch|en=text in english|pl=tekst po polsku|lang={{int:lang}} }}
Parameters:
frame.args - table with translations by language
frame.args.lang - desired language (often user's native language)
Error Handling:
]]
function p.langSwitch(frame) -- version to be used from wikitext
local args = frame.args
-- if no expected args provided than check parent template/module args
if args.en == nil and args.default == nil and args.nocat == nil then
args = mw.getCurrentFrame():getParent().args
end
local lang = args.lang
if not lang or not mw.language.isSupportedLanguage(lang) then
lang = frame:callParserFunction("int", "lang") -- get user's chosen language
end
-- Try quick switch
local args1 = args[lang]
if args1 and args1 ~= '' then
return quickSwitch(args, args1)
end
-- Allow input in format: {{LangSwitch|de=Grün|es/it/pt=Verde|fr=Vert|en=Green |lang=en}}
-- with multiple languages mapping to a single value
args1 = {}
for name, value in pairs(args) do
if value ~= '' and type(name) == 'string' then
-- split multi keys
for str in string.gmatch(name, "([^/]+)") do
args1[str] = value
end
end
end
return p._langSwitch(args1, lang)
end
return p
cbl1gr8owddhmo7g1l58186tg4nrv38
Module:Linguistic
828
23715
183908
157750
2022-08-04T14:47:36Z
Xiplus
4323
已保护“[[Module:Linguistic]]”:高風險模板:876引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
Scribunto
text/plain
--[[
__ __ _ _ _ _ _ _ _
| \/ | ___ __| |_ _| | ___ _| | (_)_ __ __ _ _ _(_)___| |_(_) ___
| |\/| |/ _ \ / _` | | | | |/ _ (_) | | | '_ \ / _` | | | | / __| __| |/ __|
| | | | (_) | (_| | |_| | | __/_| |___| | | | | (_| | |_| | \__ \ |_| | (__
|_| |_|\___/ \__,_|\__,_|_|\___(_)_____|_|_| |_|\__, |\__,_|_|___/\__|_|\___|
|___/
Simple internationalization functions that can be called by other modules.
This Module was copied from Wikimedia Commons, so please request changes there.
Maintainers:
* Zolo - original version
* Jarekt
Dependencies:
* Module:I18n/or
* Module:Delink
* Module:Yesno
]]
-- ==================================================
-- === Internal functions ===========================
-- ==================================================
local function langSwitch(list,lang)
local langList = mw.language.getFallbacksFor(lang)
table.insert(langList,1,lang)
for i,language in ipairs(langList) do
if list[language] then
return list[language]
end
end
return nil
end
-- ==================================================
-- === External functions ===========================
-- ==================================================
local p = {}
function p.vowelfirst (str)
if str then
local vowels = 'aeiouyąăẵằẳặȃắâẫấầẩậãäǟāáàȁǎảẚåǻḁạǡæǣǽĕȇêễếềểệḙẽḛëēḕéḗèȅěẻẹęȩḝǝĭȋîĩḭïḯīíìȉǐỉịįıŏȏôỗốồổộõṏṍöōṑóṓòȍǒỏọǫǭơỡớờởợøǿŭȗûṷũṻṹṵüǖǘǜǚṳūúùȕǔủůụųưữứừửựŷỹÿȳýỳỷẙỵ'
str = mw.ustring.lower(mw.ustring.sub(str,1,1))
return mw.ustring.find(vowels, str, 1, true )
end
end
function p.inparentheses(str)
if (not str) or (str == "") then
return nil
end
return "(".. str .. ")" -- same in all languages ?
end
function p.of(word, lang, raw, gender, number, determiner) -- rough translation of "of" in various languages
-- note that the cases when on "of" is employed varies a lot among languages, so it is more prudent to call this from lang specific function only
if not raw or mw.text.trim(raw) == "" then
local args = {}
local Delink = require('Module:Delink')._delink
args[1] = word
raw = mw.ustring.lower(Delink(args))
end
-- raw is the string without the Wikiformatting so that it correctly analyses the string that is [[:fr:Italie|Italie]] -> 'italie'
-- any way to automate this ?
if lang == 'fr' then
local yesno = require('Module:Yesno')
determiner = yesno(determiner,false)
if determiner then
if string.sub(number or '',1,1)=='p' then -- number == 'plural'
return 'des ' .. word
elseif p.vowelfirst(raw) then
return 'de l’' .. word
elseif string.sub(gender or '',1,1)=='f' then -- gender == 'feminine'
return 'de la ' .. word
else
return 'du ' .. word
end
else
if p.vowelfirst(raw) then
return 'd’' .. word
else
return 'de ' .. word
end
end
elseif lang == 'ca' then
-- implement [[Template:Of/ca]] or https://ca.wikipedia.org/wiki/Plantilla:Deod%27/base for case where "{{{context}}}" is "en" (default on Commons)
if ( p.vowelfirst(raw) and not mw.ustring.find( 'ia|ià|ie|io|iu|ua|ue|ui|uí|uï|uo|ya|ye|yi|yo|yu|', mw.ustring.sub(raw,1,2) .. '|')) then
return 'd\'' .. word
else
return 'de ' .. word
end
end
end
function p.offromwiki(frame)
args = frame.args
return p.of(args.word, args.lang, args.raw, args.gender, args.number, args.determiner)
end
function p.noungroup(noun, adj, lang)
if not noun or noun == '' then
return nil -- not '' so that it is not counted as a string by mw.listToText
end
if not adj or adj == ''
then return noun
end
local wordsep = mw.message.new( "Word-separator" ):inLanguage(lang):plain()
local LUT = { de=1, en=1, pl=1, zh=1, fr=2, es=2, it=2}
local case = langSwitch(LUT, lang)
if case==1 then -- adjective before the noun
return adj .. wordsep .. noun
elseif case==2 then -- adjective after the noun
return noun .. wordsep .. adj
else -- order unknown
return noun ' (' .. adj .. ')'
end
end
function p.conj(args, lang, conjtype)
local comma = mw.message.new( "comma-separator"):inLanguage(lang):plain()
local wordsep = mw.message.new( "Word-separator" ):inLanguage(lang):plain()
local andtable = { ar=' و', he=' ו', ja='および', pl=' i '} -- languages with a problem with the MediaWiki:And
if conjtype == 'comma' then
return mw.text.listToText(args, comma, comma)
elseif conjtype == 'or' then
local wordor = langSwitch(require('Module:I18n/or'), lang)
return mw.text.listToText(args, comma, wordor .. wordsep)
elseif conjtype == 'explicit or' then -- adds "or" betwen all words when the context can be confusing
local wordor = langSwitch(require('Module:I18n/or'), lang)
return mw.text.listToText(args, wordor .. wordsep, wordor .. wordsep)
elseif conjtype and conjtype ~= 'and' and conjtype ~= '' then
return mw.text.listToText(args, conjtype, conjtype)
elseif andtable[lang] then
return mw.text.listToText(args, comma, andtable[lang])
else
local wordand = mw.message.new( "and" ):inLanguage(lang):plain()
return mw.text.listToText(args, comma, wordand .. wordsep)
end
end
function p.conjfromWiki(frame)
args = frame.args
if not args or not args[1] then
args = frame:getParent().args
end
local lang = args.lang
if not lang or mw.text.trim(lang) == '' then
lang = frame:callParserFunction( "int", "lang" )
end
newargs = {} -- transform args metatable into a table so it can be concetenated
for i, j in pairs(args) do
if type(i) == 'number' then
j = mw.text.trim(j)
if j ~= '' then
table.insert(newargs, j)
end
else
if i ~= 'type' and i ~= 'lang' then
return 'error: bad parameter in template:Conj: ' .. i .. '[[Category:Pages with incorrect template usage/Conj|A]]'
end
end
end
return p.conj(newargs, lang, args.type)
end
return p
py1v708qaw1nqeslcdc1wbabq5e4gwp
Module:Ordinal
828
23716
183917
157787
2022-08-04T15:09:25Z
Xiplus
4323
已保护“[[Module:Ordinal]]”:高風險模板:876引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
Scribunto
text/plain
--[[
This template will add the appropriate ordinal suffix to a given integer.
Please do not modify this code without applying the changes first at Module:Ordinal/sandbox and testing
at Module:Ordinal/sandbox/testcases and Module talk:Ordinal/sandbox/testcases.
Authors and maintainers:
* User:RP88
]]
-- =======================================
-- === Dependencies ======================
-- =======================================
local i18n = require('Module:I18n/ordinal') -- get localized translations of ordinals
local LangSwitch = require('Module:LangSwitch') -- get LangSwitch function
local yesno = require('Module:Yesno') -- boolean value interpretation
local formatnum = require('Module:Formatnum') -- number formatting
local roman = require('Module:Roman') -- roman numeral conversion (primarily for French)
-- =======================================
-- === Private Functions =================
-- =======================================
--[[
Helper function to generate superscripted content
]]
local function Superscript( str, superscript, nosup, period )
if superscript and (not nosup) and (str ~= '') then
return period .. '<sup>' .. str .. '</sup>'
else
return str
end
end
--[[
Helper function to call Formatnum.
]]
local function FormatNum( value, lang )
if lang == 'roman' then
return roman._Numeral(value)
else
return formatnum.formatNum(value, lang)
end
end
--[[
Helper function to add append a category to a message.
]]
local function output_cat( message, category )
return message .. '[[Category:' .. category .. ']]'
end
--[[
Helper function to handle error messages.
]]
local function output_error( error_str, value )
error_str = '<strong class="error"><span title="Error: ' .. error_str .. '">' .. value .. '</span></strong>'
return output_cat(error_str, 'Errors reported by Module Ordinal');
end
--[[
This function is the core functionality for adding the appropriate ordinal suffix to a given integer.
]]
local function OrdinalCore( value, lang, style, gender, nosup )
-- Just in case someone breaks the internationalization code, fix the english scheme
if i18n.SchemeFromLang['en'] == nil then
i18n.SchemeFromLang['en'] = 'en-scheme'
end
if i18n.Scheme['en-scheme'] == nil then
i18n.Scheme['en-scheme'] = {rules = 'skip-tens', superscript = true, suffix = 'th', suffix_1 = 'st', suffix_2 = 'nd', suffix_3 = 'rd'}
end
-- Add the default scheme (i.e. "<value>.")
if i18n.SchemeFromLang['default'] == nil then
i18n.SchemeFromLang['default'] = 'period-scheme'
end
if i18n.Scheme['period-scheme'] == nil then
i18n.Scheme['period-scheme'] = {rules = 'suffix', suffix = '.'}
end
-- which scheme should we use to format the ordinal value?
-- Use Fallback module to handle languages groups that map to a supported language
local schemeSpecifier = LangSwitch._langSwitch(i18n.SchemeFromLang, lang)
-- Look up scheme based on scheme specifier (and possibly style)
local scheme = i18n.Scheme[schemeSpecifier .. '/' .. style] or i18n.Scheme[schemeSpecifier]
-- process scheme by applying rules identified by Scheme
local output = ''
local period = (scheme.period and '.') or ''
local rules = scheme.rules
if rules == 'skip-tens' then
local suffix
local mod100 = math.floor(math.abs(value)) % 100
if (mod100 >= 10) and (mod100 <= 19) then
suffix = scheme.suffix or ''
else
local mod10 = math.floor(math.abs(value)) % 10
suffix = scheme['suffix_'..mod10] or scheme.suffix or ''
end
output = FormatNum(value, scheme.formatlang or lang) .. Superscript( suffix, scheme.superscript, nosup, period)
elseif rules == 'suffix' then
output = FormatNum(value, scheme.formatlang or lang) .. Superscript( scheme.suffix or '', scheme.superscript, nosup, period)
elseif rules == 'prefix' then
output = (scheme.prefix or '') .. FormatNum(value, scheme.formatlang or lang)
elseif rules == 'mod10-suffix' then
local index = math.floor(math.abs(value)) % 10
local suffix = scheme['suffix_'..index] or scheme.suffix or ''
output = FormatNum(value, scheme.formatlang or lang) .. Superscript( suffix, scheme.superscript, nosup, period)
elseif rules == 'gendered-suffix' then
local suffix = scheme['suffix_'..gender] or scheme.suffix or ''
output = FormatNum(value, scheme.formatlang or lang) .. Superscript( suffix, scheme.superscript, nosup, period)
elseif rules == 'gendered-suffix-one' then
local suffix
if value == 1 then
suffix = scheme['suffix_1_'..gender] or scheme['suffix_1'] or scheme.suffix or ''
else
suffix = scheme['suffix_'..gender] or scheme.suffix or ''
end
output = FormatNum(value, scheme.formatlang or lang) .. Superscript( suffix, scheme.superscript, nosup, period)
elseif rules == 'gendered-suffix-n' then
local suffix
if value <= 9 then
suffix = scheme['suffix_'..value..'_'..gender] or scheme['suffix_'..value] or scheme['suffix_'..gender] or scheme.suffix or ''
else
suffix = scheme['suffix_'..gender] or scheme.suffix or ''
end
output = FormatNum(value, scheme.formatlang or lang) .. Superscript( suffix, scheme.superscript, nosup, period)
elseif rules == 'suffix-one' then
local prefix, suffix
if value == 1 then
prefix = scheme['prefix_1'] or scheme.prefix or ''
suffix = scheme['suffix_1'] or scheme.suffix or ''
else
prefix = scheme.prefix or ''
suffix = scheme.suffix or ''
end
output = prefix .. FormatNum(value, scheme.formatlang or lang) .. Superscript( suffix, scheme.superscript, nosup, period)
elseif rules == 'mod10-gendered-suffix-skip-tens' then
local suffix
local mod100 = math.floor(math.abs(value)) % 100
if (mod100 >= 10) and (mod100 <= 19) then
suffix = scheme['suffix_'..gender] or scheme.suffix or ''
else
local mod10 = math.floor(math.abs(value)) % 10
suffix = scheme['suffix_'..mod10..'_'..gender] or scheme['suffix_'..mod10] or scheme['suffix_'..gender] or scheme.suffix or ''
end
output = FormatNum(value, scheme.formatlang or lang) .. Superscript( suffix, scheme.superscript, nosup, period)
elseif rules == 'uk-rules' then
local suffix
local mod100 = math.floor(math.abs(value)) % 100
local mod1000 = math.floor(math.abs(value)) % 1000
if (mod1000 == 0) then
suffix = scheme['suffix_1000_'..gender] or scheme.suffix or ''
elseif (mod100 == 40) then
suffix = scheme['suffix_40_'..gender] or scheme.suffix or ''
elseif (mod100 >= 10) and (mod100 <= 19) then
suffix = scheme['suffix_'..gender] or scheme.suffix or ''
else
local mod10 = math.floor(math.abs(value)) % 10
suffix = scheme['suffix_'..mod10..'_'..gender] or scheme['suffix_'..mod10] or scheme['suffix_'..gender] or scheme.suffix or ''
end
output = FormatNum(value, scheme.formatlang or lang) .. Superscript( suffix, scheme.superscript, nosup, period)
else
output = FormatNum(value, lang)
end
return output
end
-- =======================================
-- === Public Functions ==================
-- =======================================
local p = {}
--[[
Ordinal
This function converts an integer value into a numeral followed by ordinal indicator. The output string might
contain HTML tags unless you set nosup=y.
Usage:
{{#invoke:Ordinal|Ordinal|1=|lang=|style=|gender=|nosup=|debug=}}
{{#invoke:Ordinal|Ordinal}} - uses the caller's parameters
Parameters
1: Positive integer number.
lang: language
style: Presentation style. Different options for different languages. In English there is "style=d" adding -d suffixes to all numbers.
gender: Gender is used in French and Polish language versions. Genders: m for male, f for female and n for neuter.
nosup: Set nosup=y to display the ordinals without superscript.
debug: Set debug=y to output error messages.
Error Handling:
Unless debug=y, any error results in parameter 1 being echoed to the output. This reproduces the behavior of the original Ordinal template.
]]
function p.Ordinal( frame )
-- if no argument provided than check parent template/module args
local args = frame.args
if args[1]==nil then
args = frame:getParent().args
end
-- if we don't have a specified language, attempt to use the user's language
local lang = args.lang
if not lang or lang == '' or not mw.language.isValidCode( lang ) then
lang = frame:preprocess('{{int:lang}}')
end
local nosup = yesno(args["nosup"] or '', false) -- nosup can be true or false
local debugging = yesno(args["debug"], false) -- debugging can be nil, true, or false
-- also enable debugging if debug is unspecified, and "nosup" is false
debugging = debugging or ((debugging == nil) and not nosup)
local output = p._Ordinal(
args[1], -- positive integer number
lang, -- language
args["style"], -- allows to set presentation style
args["gender"], -- allows to specify gender (m, f, or n)
nosup, -- set nosup to "y" to suppress superscripts
debugging -- Set debug=y to output error messages
)
-- Add maintenance category
if (i18n.SchemeFromLang[lang] == nil) and debugging then
output = output_cat(output, 'Pages with calls to Module Ordinal using an unsupported language')
end
return output
end
--[[
This function will add the appropriate ordinal suffix to a given integer.
Parameters
input: Numeral as a positive integer or string.
lang: Language code as a string (e.g. 'en', 'de', etc.).
style: Presentation style as a string (e.g. 'd', 'roman', etc.).
gender: Gender as a string ('m', 'f', 'n'). Use empty string '' to leave gender unspecified.
nosup: Boolean, set to true to force the ordinals to display without superscript.
debug: Boolean, set to true to output error messages.
Error Handling:
Unless debug is true, any error results in value being echoed to the output.
]]
function p._Ordinal( input, lang, style, gender, nosup, debugging )
local output = input
if input then
local value = tonumber(input)
if value and (value > 0) then
-- Normalize style, the style 'roman year' is an alias for 'roman'
style = string.lower(style or '')
if style == 'roman year' then
style = 'roman'
end
-- Normalize gender parameter
gender = string.lower(gender or '')
if (gender ~= 'm') and (gender ~= 'f') and (gender ~= 'n') then
gender = ''
end
-- if no language is specified, default to english (caller might want to get user's language)
if not lang or lang == '' then
lang = 'en';
end
output = OrdinalCore( value, lang, style, gender, nosup )
else
if debugging then
output = output_error( "not a number", input )
end
end
else
if debugging then
output = output_error( "not a number", '' )
end
end
return output
end
return p
lls99fi3seg9p0uo6uxyrby2516t37s
Module:Roman
828
23717
183918
157789
2022-08-04T15:09:35Z
Xiplus
4323
已保护“[[Module:Roman]]”:高風險模板:877引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
Scribunto
text/plain
--[[
This module converts Arabic numerals into Roman numerals.
It currently works for any non-negative integer below 5 billions (up to 4 999 999 999).
Zero is represented as "N" (from Classical Latin adverbs "nec" or "non"), like in standard CLDR data.
For numbers starting at 4 thousands, this version no longer generates any HTML+CSS, but only plain-text:
standard Unicode combining diacritics are used for overlines (U+0305 for the first level,
then U+0304 for the second level, but both are treated equivalently when parsing Roman numbers).
For numbers starting at 4 billions, it still uses 4 letters M with double overlines because
triple overlines are not supported in plain-text (this is acceptable, just like "MMMM" is also
acceptable for representing 4000 but this version chooses the shorter "IV" with a single overline).
The Roman number parser will accept all valid notations (except apostrophic/Claudian/lunate notations
using reversed C), more than what it generates, and will correctly convert them to Arabic numbers.
Please do not modify this code without applying the changes first at Module:Roman/sandbox and testing
at Module:Roman/sandbox/testcases and Module talk:Roman/sandbox/testcases.
Authors and maintainers:
* User:RP88, User:Verdy_p
]]
local p = {}
--[============[
Private data
--]============]
-- See CLDR data /common/rbnf/root.xml for "roman-upper" rules. However we still don't
-- use the rarely supported Roman extension digits after 'M' (in U+2160..2188), but use
-- the more common notation with diacritical overlines ('ↁ'='V̅', 'ↂ'='X̅', etc.).
-- Please avoid using HTML with "text-decoration:overline" style, but use plain-text
-- combining characters (U+0304 and/or U+0305).
local decimalRomans = {
d0 = { [0] = '', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX' },
d1 = { [0] = '', 'X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC' },
d2 = { [0] = '', 'C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM' },
d3 = { [0] = '', 'M', 'MM', 'MMM', 'I̅V̅', 'V̅', 'V̅I̅', 'V̅I̅I̅', 'V̅I̅I̅I̅', 'I̅X̅' },
d4 = { [0] = '', 'X̅', 'X̅X̅', 'X̅X̅X̅', 'X̅L̅', 'L̅', 'L̅X̅', 'L̅X̅X̅', 'L̅X̅X̅X̅', 'X̅C̅' },
d5 = { [0] = '', 'C̅', 'C̅C̅', 'C̅C̅C̅', 'C̅D̅', 'D̅', 'D̅C̅', 'D̅C̅C̅', 'D̅C̅C̅C̅', 'C̅M̅' },
d6 = { [0] = '', 'M̅', 'M̅M̅', 'M̅M̅M̅', 'I̿V̿', 'V̿', 'V̿I̿', 'V̿I̿I̿', 'V̿I̿I̿I̿', 'I̿X̿' },
d7 = { [0] = '', 'X̿', 'X̿X̿', 'X̿X̿X̿', 'X̿L̿', 'L̿', 'L̿X̿', 'L̿X̿X̿', 'L̿X̿X̿X̿', 'X̿C̿' },
d8 = { [0] = '', 'C̿', 'C̿C̿', 'C̿C̿C̿', 'C̿D̿', 'D̿', 'D̿C̿', 'D̿C̿C̿', 'D̿C̿C̿C̿', 'C̿M̿' },
d9 = { [0] = '', 'M̿', 'M̿M̿', 'M̿M̿M̿', 'M̿M̿M̿M̿' },
}
local romanDecimals = {
-- Basic Latin capital letters
N = 0, -- abbreviated "nec" or "non" adverb in Classical Latin
I = 1, V = 5, X = 10, L = 50, C = 100,
D = 500,-- TODO: add Medieval "apostrophic/Claudian/lunate" notations like "IƆ"
M = 1000,
-- Basic Latin small letters (not used in Classical Latin, but added in Medieval Latin)
n = 0, -- abbreviated "nec" or "non" adverb in Classical Latin
i = 1, v = 5, x = 10, l = 50, c = 100,
d = 500,-- TODO: add Medieval "apostrophic/Claudian/lunate" notations like "IƆ"
m = 1000,
-- U+0304 .. U+0305 : COMBINING (MACRON|OVERLINE)
['\204\132'] = -1000, -- (0xCC,0x84 in UTF-8) multiplier (thousand)
['\204\133'] = -1000, -- (0xCC,0x85 in UTF-8) multiplier (thousand), considered equivalent here
-- U+033F : COMBINING DOUBLE OVERLINE
['\204\191'] = -1000000, -- (0xCC,0xBF in UTF-8) multiplier (million)
-- U+012A
['Ī'] = 1000, ['ī'] = 1000, -- LATIN LETTER WITH COMBINING MACRON, canonically equivalent to 'I' and U+0304
-- U+2160 .. U+216F : Roman capital digit symbols (compatibility, monospaced in CJK fonts)
['Ⅰ'] = 1, ['Ⅱ'] = 2, ['Ⅲ'] = 3, ['Ⅳ'] = 4, ['Ⅴ'] = 5, ['Ⅵ'] = 6,
['Ⅶ'] = 7, ['Ⅷ'] = 8, ['Ⅸ'] = 9, ['Ⅹ'] = 10, ['Ⅺ'] = 11, ['Ⅻ'] = 12,
['Ⅼ'] = 50, ['Ⅽ'] = 100, ['Ⅾ'] = 500, ['Ⅿ'] = 1000,
-- U+2170 .. U+217F : Roman lowercase digit symbols (compatibility, monospaced in CJK fonts)
['ⅰ'] = 1, ['ⅱ'] = 2, ['ⅲ'] = 3, ['ⅳ'] = 4, ['ⅴ'] = 5, ['ⅵ'] = 6,
['ⅶ'] = 7, ['ⅷ'] = 8, ['ⅸ'] = 9, ['ⅹ'] = 10, ['ⅺ'] = 11, ['ⅻ'] = 12,
['ⅼ'] = 50, ['ⅽ'] = 100, ['ⅾ'] = 500, ['ⅿ'] = 1000,
-- U+2180 .. U+2182 : Old Roman symbols (these have no case pairs)
['ↀ'] = 1000, -- = 'I̅' = 'M'. TODO: add Medieval "apostrophic/Claudian/lunate" notations like "CIƆ"; do not confuse it with "CD" (400)
['ↁ'] = 5000, -- = 'V̅'. TODO: add Medieval "apostrophic/Claudian/lunate" notations like "DƆ" and "IƆƆ"
['ↂ'] = 10000, -- = 'X̅'. TODO: add Medieval "apostrophic/Claudian/lunate" notations like "CCIƆƆ"
-- U+2183..U+2184 : ROMAN DIGIT (CAPITAL|LOWER) REVERSED C. TODO: add for "apostrophic/Claudian/lunate" notations (and support "Ɔ" OPEN O as aliases)
-- The reversed "C" is a trailing multiplier by 10 but if it is not paired by a leading "C", the surrounded value will be divided by 2:
-- * "I" = 1, but if followed by followed by "Ɔ", it takes the value 100:
-- * when followed by a first "Ɔ" it multiplies it by 10 giving 1000 (assuming "CIƆ"), but if not prefixed by a pairing "C", gives 500 for "IƆ" = "D".
-- * when followed by a second "Ɔ" it multiplies it by 10 giving 1000 (assuming "CCIƆƆ"), but if not prefixed by a pairing "C", gives 5000 for "IƆƆ" = "DƆ".
-- * for higher multiples, using overlines is highly preferred for noting multipliers by 1000.
-- U+2185: ROMAN NUMERAL SIX LATE FORM
['ↅ'] = 6, -- = 'VI' (overstriked letters)
-- U+2186: ROMAN NUMERAL FIFTY EARLY FORM (Borrowed in Latin in capital form, from Greek Final sigma, similar to "C" with a leg meaning "half")
['ↆ'] = 50, -- = 'L'
-- U+2187 .. U+2188: ROMAN NUMERAL (ONE HUNDRED|FIFTY) THOUSAND (Archaic, rarely supported in fonts)
['ↇ'] = 50000, -- = 'L̅'. TODO: add Medieval "apostrophic/Claudian/lunate" notations like "DƆƆ" and "IƆƆƆ"
['ↈ'] = 100000, -- = 'C̅'. TODO: add Medieval "apostrophic/Claudian/lunate" notations like "CCCDƆƆ" and "CCCIƆƆƆ"
}
--[=================[
Private functions
--]=================]
--[==[
This function returns a string containing the input value formatted as a Roman numeral.
It works for non-negative integers lower than 5 billions (up to 4 999 999 999: this covers
all unsigned 32-bit integers), otherwise it returns the number formatted using Latin
digits. The result string will be an UTF-8-encoded plain-text alphabetic string.
]==]--
local function convertArabicToRoman(value)
if value >= 1 and value <= 4999999999 and value == math.floor(value) then
local d0, d1, d2, d3, d4, d5, d6, d7, d8
d0, value = value % 10, math.floor(value / 10)
d1, value = value % 10, math.floor(value / 10)
d2, value = value % 10, math.floor(value / 10)
d3, value = value % 10, math.floor(value / 10)
d4, value = value % 10, math.floor(value / 10)
d5, value = value % 10, math.floor(value / 10)
d6, value = value % 10, math.floor(value / 10)
d7, value = value % 10, math.floor(value / 10)
d8, value = value % 10, math.floor(value / 10)
return table.concat({
decimalRomans.d9[value],
decimalRomans.d8[d8],
decimalRomans.d7[d7],
decimalRomans.d6[d6],
decimalRomans.d5[d5],
decimalRomans.d4[d4],
decimalRomans.d3[d3],
decimalRomans.d2[d2],
decimalRomans.d1[d1],
decimalRomans.d0[d0],
})
elseif value == 0 then
return 'N' -- for adverbs "nec" or "non" in Classical Latin (which had no zero)
end
return tostring(value)
end
--[==[
This function converts a plain-text string containing a Roman numeral to an integer.
It works for values between 0 (N) and 4 999 999 999 (M̿M̿M̿M̿C̿M̿X̿C̿I̿X̿C̅M̅X̅C̅I̅X̅CMXCIX).
]==]--
local function convertRomanToArabic(roman)
if roman == '' then return nil end
local result, prevRomanDecimal, multiplier = 0, 0, 1
for i = mw.ustring.len(roman), 1, -1 do
local currentRomanDecimal = romanDecimals[mw.ustring.sub(roman, i, i)]
if currentRomanDecimal == nil then
return nil
elseif currentRomanDecimal < 0 then
multiplier = multiplier * -currentRomanDecimal
else
currentRomanDecimal, multiplier = currentRomanDecimal * multiplier, 1
if currentRomanDecimal < prevRomanDecimal then
result = result - currentRomanDecimal
else
result = result + currentRomanDecimal
prevRomanDecimal = currentRomanDecimal
end
end
end
return result
end
--[==[
This function converts a string containing a Roman numeral to an integer.
It works for values between 0 and 4999999999.
The input string may contain HTML tags using style="text-decoration:overline" (not recommended).
]==]--
local function convertRomanHTMLToArabic(roman)
local result = convertRomanToArabic(roman)
if result == nil then
result = tonumber(roman)
end
return result
[==[ DISABLED FOR NOW, NOT REALLY NEEDED AND NOT CORRECTLY TESTED
local result = 0
local overline_start_len = mw.ustring.len(overline_start)
if mw.ustring.sub(roman, 1, overline_start_len) == overline_start then
local end_tag_start, end_tag_end = mw.ustring.find(roman, overline_end, overline_start_len, true)
if end_tag_start ~= nil then
local roman_high = mw.ustring.sub(roman, overline_start_len + 1, end_tag_start - 1)
local roman_low = mw.ustring.sub(roman, end_tag_end + 1, mw.ustring.len(roman)) or ''
if (mw.ustring.find(roman_high, "^[mdclxvi]+$") ~= nil) and (mw.ustring.find(roman_low, "^[mdclxvi]*$") ~= nil) then
result = convertRomanToArabic(roman_high) * 1000 + convertRomanToArabic(roman_low)
end
end
end
return result
]==]
end
--[==[
Helper function to handle error messages.
]==]--
local function outputError(message)
return table.concat({
'<strong class="error">Roman Module Error: ', message,
'</strong>[[Category:Errors reported by Module Roman]]'
})
end
--[================[
Public functions
--]================]
--[==[
isRoman
Tests if the trimmed input is a valid Roman numeral. Returns true if so, false if not.
For the purposes of this function, the empty string (after trimming whitespaces) is not a Roman numeral.
Parameters
s: string to test if it is a valid Roman numeral
Error Handling:
If the input is not a valid Roman numeral this function returns false.
]==]--
function p.isRoman(s)
return type(s) == 'string' and convertRomanToArabic(mw.text.trim(s)) ~= nil
end
--[==[
toArabic
This function converts a Roman numeral into an Arabic numeral.
It works for values between 0 and 4999999999.
'N' is converted to 0 and the empty string is converted to nil.
Parameters
roman: string containing value to convert into an Arabic numeral
Error Handling:
If the input is not a valid Roman numeral this function returns nil.
]==]--
function p.toArabic(roman)
if type(roman) == 'string' then
roman = mw.text.trim(roman)
local result = convertRomanToArabic(roman)
if result == nil then
result = tonumber(roman)
end
return result
elseif type(roman) == 'number' then
return roman
else
return nil
end
end
--[==[
_Numeral
This function returns a string containing the input value formatted as a Roman numeral.
It works for values between 0 and 4999999999.
Parameters
value: integer or string containing value to convert into a Roman numeral
Error Handling:
If the input does not look like it contains a number or the number is outside of the
supported range an error message is returned.
]==]--
function p._Numeral(value)
if value == nil then
return outputError('missing value')
end
if type(value) == 'string' then
value = tonumber(value)
elseif type(value) ~= 'number' then
return outputError('unsupported value')
end
return convertArabicToRoman(value)
end
--[==[
Numeral
This function for MediaWiki converts an Arabic numeral into a Roman numeral.
It works for values between 0 and 4999999999 (includes the whole range of unsigned 32-bit integers).
Arabic numeral zero is output as 'N' (for Latin negation adverbs "nec" or "non").
Usage:
{{#invoke:Roman|Numeral|<value>}}
{{#invoke:Roman|Numeral}} - uses the caller's parameters
Parameters
1: Value to convert into a Roman numeral. Must be at least 0 and less than 5,000,000.
Error Handling:
If the input does not look like it contains a number or the number is outside of the
supported range an error message is returned.
]==]--
function p.Numeral(frame)
-- if no argument provided than check parent template/module args
local args = frame.args
if args[1] == nil then
args = frame:getParent().args
end
return p._Numeral(args[1])
end
return p
acpyuzp8gc0fjs3p0yrt4wa52wf2e2p
Module:WikidataIB
828
23718
183924
157810
2022-08-04T15:10:36Z
Xiplus
4323
已保护“[[Module:WikidataIB]]”:高風險模板:873引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
Scribunto
text/plain
-- Module to implement use of a blacklist and whitelist for infobox fields
-- Can take a named parameter |qid which is the Wikidata ID for the article
-- if not supplied, it will use the Wikidata ID associated with the current page.
-- Fields in blacklist are never to be displayed, i.e. module must return nil in all circumstances
-- Fields in whitelist return local value if it exists or the Wikidata value otherwise
-- The name of the field that this function is called from is passed in named parameter |name
-- The name is compulsory when blacklist or whitelist is used,
-- so the module returns nil if it is not supplied.
-- blacklist is passed in named parameter |suppressfields (or |spf)
-- whitelist is passed in named parameter |fetchwikidata (or |fwd)
local p = {}
local cdate = require("Module:Complex date")._complex_date
-- [[Module:Complex date]] has the following dependencies:
-- Module:I18n/complex date, Module:ISOdate, Module:DateI18n (alternative for Module:Date),
-- Module:Formatnum, Module:I18n/date, Module:Yesno, Module:Linguistic, Module:Calendar
-- The following, taken from https://www.mediawiki.org/wiki/Wikibase/DataModel#Dates_and_times,
-- is needed to use Module:Complex date which seemingly requires date precision as a string.
-- It would work better if only the authors of the mediawiki page could spell 'millennium'.
local dp = {
[6] = "millennium",
[7] = "century",
[8] = "decade",
[9] = "year",
[10] = "month",
[11] = "day",
}
local i18n =
{
["errors"] =
{
["property-not-found"] = "Property not found.",
["No property supplied"] = "No property supplied",
["entity-not-found"] = "Wikidata entity not found.",
["unknown-claim-type"] = "Unknown claim type.",
["unknown-entity-type"] = "Unknown entity type.",
["qualifier-not-found"] = "Qualifier not found.",
["site-not-found"] = "Wikimedia project not found.",
["labels-not-found"] = "No labels found.",
["descriptions-not-found"] = "No descriptions found.",
["aliases-not-found"] = "No aliases found.",
["unknown-datetime-format"] = "Unknown datetime format.",
["local-article-not-found"] = "Article is available on Wikidata, but not on Wikipedia",
["dab-page"] = " (dab)",
},
["months"] =
{
"January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"
},
["century"] = "century",
["BC"] = "BC",
["BCE"] = "BCE",
["ordinal"] =
{
[1] = "st",
[2] = "nd",
[3] = "rd",
["default"] = "th"
},
["filespace"] = "File",
["Unknown"] = "Unknown",
["NaN"] = "Not a number",
-- set the following to the name of a tracking category,
-- e.g. "[[Category:Articles with missing Wikidata information]]", or "" to disable:
["missinginfocat"] = "[[Category:Articles with missing Wikidata information]]",
["editonwikidata"] = "Edit this on Wikidata",
["latestdatequalifier"] = function (date) return "before " .. date end,
-- some languages, e.g. Bosnian use a period as a suffix after each number in a date
["datenumbersuffix"] = "",
["list separator"] = ", ",
["multipliers"] = {
[0] = "",
[3] = " thousand",
[6] = " million",
[9] = " billion",
[12] = " trillion",
}
}
-- This allows a internationisation module to override the above table
if 'en' ~= mw.getContentLanguage():getCode() then
require("Module:i18n").loadI18n("Module:WikidataIB/i18n", i18n)
end
-- This piece of html implements a collapsible container. Check the classes exist on your wiki.
local collapsediv = '<div class="mw-collapsible mw-collapsed" style="width:100%; overflow:auto;" data-expandtext="{{int:show}}" data-collapsetext="{{int:hide}}">'
-- Some items should not be linked.
-- Each wiki can create a list of those in Module:WikidataIB/nolinks
-- It should return a table called itemsindex, containing true for each item not to be linked
local donotlink = {}
local nolinks_exists, nolinks = pcall(mw.loadData, "Module:WikidataIB/nolinks")
if nolinks_exists then
donotlink = nolinks.itemsindex
end
-------------------------------------------------------------------------------
-- Private functions
-------------------------------------------------------------------------------
--
-------------------------------------------------------------------------------
-- makeOrdinal needs to be internationalised along with the above:
-- takes cardinal numer as a numeric and returns the ordinal as a string
-- we need three exceptions in English for 1st, 2nd, 3rd, 21st, .. 31st, etc.
-------------------------------------------------------------------------------
-- Dependencies: none
-------------------------------------------------------------------------------
local makeOrdinal = function(cardinal)
local ordsuffix = i18n.ordinal.default
if cardinal % 10 == 1 then
ordsuffix = i18n.ordinal[1]
elseif cardinal % 10 == 2 then
ordsuffix = i18n.ordinal[2]
elseif cardinal % 10 == 3 then
ordsuffix = i18n.ordinal[3]
end
-- In English, 1, 21, 31, etc. use 'st', but 11, 111, etc. use 'th'
-- similarly for 12 and 13, etc.
if (cardinal % 100 == 11) or (cardinal % 100 == 12) or (cardinal % 100 == 13) then
ordsuffix = i18n.ordinal.default
end
return tostring(cardinal) .. ordsuffix
end
-------------------------------------------------------------------------------
-- findLang takes a "langcode" parameter if if supplied and valid
-- otherwise it tries to create it from the user's set language ({{int:lang}})
-- failing that it uses the wiki's content language.
-- It returns a language object
-------------------------------------------------------------------------------
-- Dependencies: none
-------------------------------------------------------------------------------
local findLang = function(langcode)
local langobj
langcode = mw.text.trim(langcode or "")
if mw.language.isKnownLanguageTag(langcode) then
langobj = mw.language.new( langcode )
else
langcode = mw.getCurrentFrame():preprocess( '{{int:lang}}' )
if mw.language.isKnownLanguageTag(langcode) then
langobj = mw.language.new( langcode )
else
langobj = mw.language.getContentLanguage()
end
end
return langobj
end
-------------------------------------------------------------------------------
-- roundto takes a number (x)
-- and returns it rounded to (sf) significant figures
-------------------------------------------------------------------------------
-- Dependencies: none
-------------------------------------------------------------------------------
local roundto = function(x, sf)
if x == 0 then return 0 end
local s = 1
if x < 0 then
x = -x
s = -1
end
if sf < 1 then sf = 1 end
local p = 10 ^ (math.floor(math.log10(x)) - sf + 1)
x = math.floor(x / p + 0.5) * p * s
-- if it's integral, cast to an integer:
if x == math.floor(x) then x = math.floor(x) end
return x
end
-------------------------------------------------------------------------------
-- decimalToDMS takes a decimal degrees (x) with precision (p)
-- and returns degrees/minutes/seconds according to the precision
-------------------------------------------------------------------------------
-- Dependencies: none
-------------------------------------------------------------------------------
local decimalToDMS = function(x, p)
-- if p is not supplied, use a precision around 0.1 seconds
if not tonumber(p) then p = 1e-4 end
local d = math.floor(x)
local ms = (x - d) * 60
if p > 0.5 then -- precision is > 1/2 a degree
if ms > 30 then d = d + 1 end
ms = 0
end
local m = math.floor(ms)
local s = (ms - m) * 60
if p > 0.008 then -- precision is > 1/2 a minute
if s > 30 then m = m +1 end
s = 0
elseif p > 0.00014 then -- precision is > 1/2 a second
s = math.floor(s + 0.5)
elseif p > 0.000014 then -- precision is > 1/20 second
s = math.floor(10 * s + 0.5) / 10
elseif p > 0.0000014 then -- precision is > 1/200 second
s = math.floor(100 * s + 0.5) / 100
else -- cap it at 3 dec places for now
s = math.floor(1000 * s + 0.5) / 1000
end
return d, m, s
end
-------------------------------------------------------------------------------
-- decimalPrecision takes a decimal (x) with precision (p)
-- and returns x rounded approximately to the given precision
-- precision should be between 1 and 1e-6, preferably a power of 10.
-------------------------------------------------------------------------------
-- Dependencies: none
-------------------------------------------------------------------------------
local decimalPrecision = function(x, p)
local s = 1
if x < 0 then
x = -x
s = -1
end
-- if p is not supplied, pick an arbitrary precision
if not tonumber(p) then p = 1e-4
elseif p > 1 then p = 1
elseif p < 1e-6 then p = 1e-6
else p = 10 ^ math.floor(math.log10(p))
end
x = math.floor(x / p + 0.5) * p * s
-- if it's integral, cast to an integer:
if x == math.floor(x) then x = math.floor(x) end
-- if it's less than 1e-4, it will be in exponent form, so return a string with 6dp
-- 9e-5 becomes 0.000090
if math.abs(x) < 1e-4 then x = string.format("%f", x) end
return x
end
-------------------------------------------------------------------------------
-- formatDate takes a datetime of the usual format from mw.wikibase.entity:formatPropertyValues
-- like "1 August 30 BCE" as parameter 1
-- and formats it according to the df (date format) and bc parameters
-- df = ["dmy" / "mdy" / "y"] default will be "dmy"
-- bc = ["BC" / "BCE"] default will be "BCE"
-------------------------------------------------------------------------------
-- Dependencies: none
-------------------------------------------------------------------------------
local format_Date = function(datetime, dateformat, bc)
local datetime = datetime or "1 August 30 BCE" -- in case of nil value
-- chop off multiple vales and/or any hours, mins, etc.
-- keep anything before punctuation - we just want a single date:
local dateval = string.match( datetime, "[%w ]+")
local dateformat = string.lower(dateformat or "dmy") -- default to dmy
local bc = string.upper(bc or "") -- can't use nil for bc
-- we only want to accept two possibilities: BC or default to BCE
if bc == "BC" then
bc = " " .. i18n["BC"] -- prepend a non-breaking space.
else
bc = " " .. i18n["BCE"]
end
local postchrist = true -- start by assuming no BCE
local dateparts = {}
for word in string.gmatch(dateval, "%w+") do
if word == "BCE" or word == "BC" then -- *** internationalise later ***
postchrist = false
else
-- we'll keep the parts that are not 'BCE' in a table
dateparts[#dateparts + 1] = word
end
end
if postchrist then bc = "" end -- set AD dates to no suffix *** internationalise later ***
local sep = " " -- separator is nbsp
local fdate = table.concat(dateparts, sep) -- set formatted date to same order as input
-- if we have day month year, check dateformat
if #dateparts == 3 then
if dateformat == "y" then
fdate = dateparts[3]
elseif dateformat == "mdy" then
fdate = dateparts[2] .. sep .. dateparts[1] .. "," .. sep .. dateparts[3]
end
elseif #dateparts == 2 and dateformat == "y" then
fdate = dateparts[2]
end
return fdate .. bc
end
-------------------------------------------------------------------------------
-- dateFormat is the handler for properties that are of type "time"
-- It takes timestamp, precision (6 to 11 per mediawiki), dateformat (y/dmy/mdy), BC format (BC/BCE),
-- a plaindate switch (yes/no/adj) to en/disable "sourcing cirumstances"/use adjectival form,
-- any qualifiers for the property, the language, and any adjective to use like 'before'.
-- It passes the date through the "complex date" function
-- and returns a string with the internatonalised date formatted according to preferences.
-------------------------------------------------------------------------------
-- Dependencies: findLang(); cdate(); dp[]
-------------------------------------------------------------------------------
local dateFormat = function(timestamp, dprec, df, bcf, pd, qualifiers, lang, adj)
-- A year can be stored like this: "+1872-00-00T00:00:00Z",
-- which is processed here as if it were the day before "+1872-01-01T00:00:00Z",
-- and that's the last day of 1871, so the year is wrong.
-- So fix the month 0, day 0 timestamp to become 1 January instead:
timestamp = timestamp:gsub("%-00%-00T", "-01-01T")
-- output formatting according to preferences (y/dmy/mdy)
df = (df or ""):lower()
-- just in case date precision is missing
dprec = dprec or 11
-- override more precise dates if required dateformat is year alone:
if df == "y" and dprec > 9 then dprec = 9 end
-- complex date only deals with precisions from 6 to 11, so clip range
dprec = dprec>11 and 11 or dprec
dprec = dprec<6 and 6 or dprec
-- BC format is "BC" or "BCE"
bcf = (bcf or ""):upper()
-- plaindate only needs the first letter (y/n/a)
pd = (pd or ""):sub(1,1):lower()
if pd == "" or pd == "n" or pd == "f" or pd == "0" then pd = false end
-- in case language isn't passed
lang = lang or findLang().code
-- set adj as empty if nil
adj = adj or ""
-- extract the day, month, year from the timestamp
local bc = timestamp:sub(1, 1)=="-" and "BC" or ""
local year, month, day = timestamp:match("[+-](%d*)-(%d*)-(%d*)T")
local iso = tonumber(year) -- if year is missing, let it throw an error
-- this will adjust the date format to be compatible with cdate
-- possible formats are Y, YY, YYY0, YYYY, YYYY-MM, YYYY-MM-DD
if dprec == 6 then iso = math.floor( (iso - 1) / 1000 ) + 1 end
if dprec == 7 then iso = math.floor( (iso - 1) / 100 ) + 1 end
if dprec == 8 then iso = math.floor( iso / 10 ) .. "0" end
if dprec == 10 then iso = year .. "-" .. month end
if dprec == 11 then iso = year .. "-" .. month .. "-" .. day end
-- add "circa" (Q5727902) from "sourcing circumstances" (P1480)
local sc = not pd and qualifiers and qualifiers.P1480
if sc then
for k1, v1 in pairs(sc) do
if v1.datavalue and v1.datavalue.value.id == "Q5727902" then
adj = "circa"
break
end
end
end
local fdate = cdate("", adj, tostring(iso), dp[dprec], bc, "", "", "", "", lang, 1)
-- this may have QuickStatements info appended to it in a div, so remove that
fdate = fdate:gsub(' <div style="display: none;">[^<]*</div>', '')
-- it may also be returned wrapped in a microformat, so remove that
fdate = fdate:gsub("<[^>]*>", "")
-- if 'circa', use the abbreviated form *** internationalise later ***
fdate = fdate:gsub('circa ', '<abbr title="circa">c.</abbr> ')
-- deal with BC/BCE
if bcf == "BCE" then
fdate = fdate:gsub('BC', 'BCE')
end
-- deal with mdy format
if df == "mdy" then
fdate = fdate:gsub("(%d+) (%w+) (%d+)", "%2 %1, %3")
end
-- deal with adjectival form *** internationalise later ***
if pd == "a" then
fdate = fdate:gsub(' century', '-century')
end
return fdate
end
-------------------------------------------------------------------------------
-- parseParam takes a (string) parameter, e.g. from the list of frame arguments,
-- and makes "false", "no", and "0" into the (boolean) false
-- it makes the empty string and nil into the (boolean) value passed as default
-- allowing the parameter to be true or false by default.
-------------------------------------------------------------------------------
-- Dependencies: none
-------------------------------------------------------------------------------
local parseParam = function(param, default)
if param and param ~= "" then
param = param:lower()
if (param == "false") or (param:sub(1,1) == "n") or (param == "0") then
return false
else
return true
end
else
return default
end
end
-------------------------------------------------------------------------------
-- _getSitelink takes the qid of a Wikidata entity passed as |qid=
-- It takes an optional parameter |wiki= to determine which wiki is to be checked for a sitelink
-- If the parameter is blank, then it uses the local wiki.
-- If there is a sitelink to an article available, it returns the plain text link to the article
-- If there is no sitelink, it returns nil.
-------------------------------------------------------------------------------
-- Dependencies: none
-------------------------------------------------------------------------------
local _getSitelink = function(qid, wiki)
qid = (qid or ""):upper()
if qid == "" then return nil end
wiki = wiki or ""
local sitelink
if wiki == "" then
sitelink = mw.wikibase.sitelink(qid)
else
sitelink = mw.wikibase.sitelink(qid, wiki)
end
return sitelink
end
-------------------------------------------------------------------------------
-- _getCommonslink takes an optional qid of a Wikidata entity passed as |qid=
-- It returns one of the following in order of preference:
-- the Commons sitelink of the linked Wikidata item;
-- the Commons sitelink of the topic's main category of the linked Wikidata item;
-- the Commons category.
-- If the optional parameter onlycat is true/yes/1 then only categories are returned
-- defaults to false.
-------------------------------------------------------------------------------
-- Dependencies: _getSitelink(); parseParam()
-------------------------------------------------------------------------------
local _getCommonslink = function(qid, onlycat, fallback)
qid = (qid or ""):upper()
if qid == "" then qid = mw.wikibase.getEntityIdForCurrentPage() end
if not qid then return nil end
onlycat = parseParam(onlycat, false)
local sitelink = _getSitelink(qid, "commonswiki")
if onlycat and sitelink and sitelink:sub(1,9) ~= "Category:" then sitelink = nil end
if not sitelink then
-- check for topic's main category
local prop910 = mw.wikibase.getBestStatements(qid, "P910")[1]
if prop910 then
local tmcid = prop910.mainsnak.datavalue.value.id
sitelink = _getSitelink(tmcid, "commonswiki")
end
end
if not sitelink and fallback then
-- check for Commons category (string value)
local prop373 = mw.wikibase.getBestStatements(qid, "P373")[1]
if prop373 then
sitelink = prop373.mainsnak.datavalue.value
if sitelink then sitelink = "Category:" .. sitelink end
end
end
return sitelink
end
-------------------------------------------------------------------------------
-- The label in a Wikidata item is subject to vulnerabilities
-- that an attacker might try to exploit.
-- It needs to be 'sanitised' by removing any wikitext before use.
-- If it doesn't exist, return the id for the item
-- a second (boolean) value is also returned, value is true when the label exists
-------------------------------------------------------------------------------
-- Dependencies: none
-------------------------------------------------------------------------------
local labelOrId = function(id)
local label = mw.wikibase.label(id)
if label then
return mw.text.nowiki(label), true
else
return id, false
end
end
-------------------------------------------------------------------------------
-- linkedItem takes an entity-id and returns a string, linked if possible.
-- This is the handler for "wikibase-item". Preferences:
-- 1. Display linked disambiguated sitelink if it exists
-- 2. Display linked label if it is a redirect
-- 3. TBA: Display an inter-language link for the label if it exists other than in default language
-- 4. Display unlinked label if it exists
-- 5. Display entity-id for now to indicate a label could be provided
-------------------------------------------------------------------------------
-- Dependencies: labelOrId()
-------------------------------------------------------------------------------
local linkedItem = function(id, lprefix, lpostfix, prefix, postfix, dtxt)
lprefix = lprefix or "" -- toughen against nil values passed
lpostfix = lpostfix or ""
prefix = prefix or ""
postfix = postfix or ""
local disp
local sitelink = mw.wikibase.sitelink(id)
local label, islabel
if dtxt then
label, islabel = dtxt, true
else
label, islabel = labelOrId(id)
end
if mw.site.siteName ~= "Wikimedia Commons" then
if sitelink then
if not dtxt then
-- strip any namespace or dab from the sitelink and use that as label
local pos = sitelink:find(":") or 0
label = sitelink:sub(pos+1):gsub("%s%(.+%)$", ""):gsub(",.+$", "")
end
if donotlink[label] then
disp = prefix .. label .. postfix
else
disp = "[[" .. lprefix .. sitelink .. lpostfix .. "|" .. prefix .. label .. postfix .. "]]"
end
elseif islabel then
-- no sitelink, label exists, so check if a redirect with that title exists
local artitle = mw.title.new(label, 0)
if artitle and artitle.redirectTarget and not donotlink[label] then
-- there's a redirect with the same title as the label, so let's link to that
disp = "[[".. lprefix .. label .. lpostfix .. "|" .. prefix .. label .. postfix .. "]]"
else
-- no sitelink, label exists, not redirect (or donotlink) so output plain label
disp = prefix .. label .. postfix
end -- test if article title exists as redirect on current Wiki
else
-- no sitelink and no label, so return whatever was returned from labelOrId for now
-- add tracking category [[Category:Articles with missing Wikidata information]]
disp = prefix .. label .. postfix .. i18n.missinginfocat
end
else
local ccat = mw.wikibase.getBestStatements(id, "P373")[1]
if ccat then
ccat = ccat.mainsnak.datavalue.value
disp = "[[" .. lprefix .. "Category:" .. ccat .. lpostfix .. "|" .. prefix .. label .. postfix .. "]]"
elseif sitelink then
-- this asumes that if a sitelink exists, then a label also exists
disp = "[[" .. lprefix .. sitelink .. lpostfix .. "|" .. prefix .. label .. postfix .. "]]"
else
-- no sitelink and no Commons cat, so return label from labelOrId for now
disp = prefix .. label .. postfix
end
end
return disp
end
-------------------------------------------------------------------------------
-- sourced takes a table representing a statement that may or may not have references
-- it counts how many references are sourced to something not containing the word "wikipedia"
-- it returns a boolean = true if there are any sourced references.
-------------------------------------------------------------------------------
-- Dependencies: none
-------------------------------------------------------------------------------
local sourced = function(claim)
if claim.references then
for kr, vr in pairs(claim.references) do
local ref = mw.wikibase.renderSnaks(vr.snaks)
if not ref:find("Wikipedia") then
return true
end
end
end
end
-------------------------------------------------------------------------------
-- setRanks takes a flag (parameter passed) that requests the values to return
-- "b[est]" returns preferred if available, otherwise normal
-- "p[referred]" returns preferred
-- "n[ormal]" returns normal
-- "d[eprecated]" returns deprecated
-- multiple values are allowed, e.g. "preferred normal" (which is the default)
-- "best" will override the other flags, and set p and n
-------------------------------------------------------------------------------
-- Dependencies: none
-------------------------------------------------------------------------------
local setRanks = function(rank)
rank = (rank or ""):lower()
-- if nothing passed, return preferred and normal
-- if rank == "" then rank = "p n" end
local ranks = {}
for w in string.gmatch(rank, "%a+") do
w = w:sub(1,1)
if w == "b" or w == "p" or w == "n" or w == "d" then
ranks[w] = true
end
end
-- check if "best" is requested or no ranks requested; and if so, set preferred and normal
if ranks.b or not next(ranks) then
ranks.p = true
ranks.n = true
end
return ranks
end
-------------------------------------------------------------------------------
-- parseInput processes the Q-id , the blacklist and the whitelist
-- if an input parameter is supplied, it returns that and ends the call.
-- it returns (1) either the qid or nil indicating whether or not the call should continue
-- and (2) a table containing all of the statements for the propertyID and relevant Qid
-- if "best" ranks are requested, it returns those instead of all non-deprecated ranks
-------------------------------------------------------------------------------
-- Dependencies: none
-------------------------------------------------------------------------------
local parseInput = function(frame, input_parm, property_id)
-- There may be a local parameter supplied, if it's blank, set it to nil
input_parm = mw.text.trim(input_parm or "")
if input_parm == "" then input_parm = nil end
local args = frame.args
-- can take a named parameter |qid which is the Wikidata ID for the article.
-- if it's not supplied, use the id for the current page
local qid = args.qid or ""
if qid == "" then qid = mw.wikibase.getEntityIdForCurrentPage() end
-- if there's no Wikidata item for the current page return nil
if not qid then return false, input_parm end
-- The blacklist is passed in named parameter |suppressfields
local blacklist = args.suppressfields or args.spf
-- The whitelist is passed in named parameter |fetchwikidata
local whitelist = args.fetchwikidata or args.fwd
if not whitelist or whitelist == "" then whitelist = "NONE" end
-- The name of the field that this function is called from is passed in named parameter |name
local fieldname = args.name or ""
if blacklist then
-- The name is compulsory when blacklist is used, so return nil if it is not supplied
if not fieldname or fieldname == "" then return false, nil end
-- If this field is on the blacklist, then return nil
if blacklist:find(fieldname) then return false, nil end
end
-- If we got this far then we're not on the blacklist
-- The blacklist overrides any locally supplied parameter as well
-- If a non-blank input parameter was supplied return it
if input_parm then return false, input_parm end
-- We can filter out non-valid properties
if property_id:sub(1,1):upper() ~="P" or property_id == "P0" then return false, nil end
-- Otherwise see if this field is on the whitelist:
-- needs a bit more logic because find will return its second value = 0 if fieldname is ""
-- but nil if fieldname not found on whitelist
local _, found = whitelist:find(fieldname)
found = ((found or 0) > 0)
if whitelist ~= 'ALL' and (whitelist:upper() == "NONE" or not found) then
return false, nil
end
-- See what's on Wikidata (the call always returns a table, but it may be empty):
local props = {}
if args.reqranks.b then
props = mw.wikibase.getBestStatements(qid, property_id)
else
props = mw.wikibase.getAllStatements(qid, property_id)
end
if props[1] then
return qid, props
end
-- no property on Wikidata
return false, nil
end
-------------------------------------------------------------------------------
-- createicon assembles the "Edit at Wikidata" pen icon.
-- It returns a wikitext string.
-------------------------------------------------------------------------------
-- Dependencies: i18n[];
-------------------------------------------------------------------------------
local createicon = function(langcode, entityID, propertyID)
local icon = " [[" .. i18n["filespace"]
icon = icon .. ":Blue pencil.svg |frameless |text-top |10px |alt="
icon = icon .. i18n["editonwikidata"]
icon = icon .. "|link=https://www.wikidata.org/wiki/" .. entityID
icon = icon .. "?uselang=" .. langcode
if propertyID then icon = icon .. "#" .. propertyID end
icon = icon .. "|" .. i18n["editonwikidata"] .. "]]"
return icon
end
-------------------------------------------------------------------------------
-- assembleoutput takes the sequence table containing the property values
-- and formats it according to switches given. It returns a string or nil.
-- It needs the entityID and propertyID to create a link in the pen icon.
-------------------------------------------------------------------------------
-- Dependencies: parseParam();
-------------------------------------------------------------------------------
local assembleoutput = function(out, args, entityID, propertyID)
-- sorted is a boolean passed to enable sorting of the values returned
-- if nothing or an empty string is passed set it false
-- if "false" or "no" or "0" is passed set it false
local sorted = parseParam(args.sorted, false)
-- noicon is a boolean passed to suppress the trailing "edit at Wikidata" icon
-- for use when the value is processed further by the infobox
-- if nothing or an empty string is passed set it false
-- if "false" or "no" or "0" is passed set it false
local noic = parseParam(args.noicon, false)
-- list is the name of a template that a list of multiple values is passed through
-- examples include "hlist" and "ubl"
-- setting it to "prose" produces something like "1, 2, 3, and 4"
local list = args.list or ""
-- sep is a string that is used to separate multiple returned values
-- if nothing or an empty string is passed set it to the default
-- any double-quotes " are stripped out, so that spaces may be passed
-- e.g. |sep=" - "
local sepdefault = i18n["list separator"]
local separator = args.sep or ""
separator = string.gsub(separator, '"', '')
if separator == "" then
separator = sepdefault
end
-- collapse is a number that determines the maximum number of returned values
-- before the output is collapsed.
-- Zero or not a number result in no collapsing (default becomes 0).
local collapse = tonumber(args.collapse) or 0
-- if there's anything to return, then return a list
-- comma-separated by default, but may be specified by the sep parameter
-- optionally specify a hlist or ubl or a prose list, etc.
local strout
if #out > 0 then
if sorted then table.sort(out) end
-- if a pen icon is wanted add it the end of the last value
if not noic then
out[#out] = out[#out] .. createicon(args.langobj.code, entityID, propertyID)
end
if list == "" then
strout = table.concat(out, separator)
elseif list:lower() == "prose" then
strout = mw.text.listToText( out )
else
strout = mw.getCurrentFrame():expandTemplate{title = list, args = out}
end
if collapse >0 and #out > collapse then
strout = collapsediv .. strout .. "</div>"
end
else
strout = nil -- no items had valid reference
end
return strout
end
-------------------------------------------------------------------------------
-- rendersnak takes a table (propval) containing the information stored on one property value
-- and returns the value as a string and its language if monolingual text.
-- It handles data of type:
-- wikibase-item
-- time
-- string, url, commonsMedia, external-id
-- quantity
-- globe-coordinate
-- monolingualtext
-- It also requires linked, the link/pre/postfixes, uabbr, and the arguments passed from frame.
-- The optional filter parameter allows quantities to be be filtered by unit Qid.
-------------------------------------------------------------------------------
-- Dependencies: parseParam(); labelOrId(); i18n[]; dateFormat();
-- roundto(); decimalPrecision(); decimalToDMS(); linkedItem();
-------------------------------------------------------------------------------
local rendersnak = function(propval, args, linked, lpre, lpost, pre, post, uabbr, filter)
lpre = lpre or ""
lpost = lpost or ""
pre = pre or ""
post = post or ""
local dtxt = args.displaytext or args.dt
if dtxt == "" then dtxt = nil end
local snak = propval.mainsnak or propval
local dv = snak.datavalue
local dtype = propval.datatype or propval.mainsnak.datatype
dv = dv and dv.value
-- value and monolingual text language code returned
local val, mlt
if propval.rank and not args.reqranks[propval.rank:sub(1, 1)] then
-- val is nil: value has a rank that isn't requested
------------------------------------
elseif snak.snaktype == "somevalue" then -- value is unknown
val = i18n["Unknown"]
------------------------------------
elseif snak.snaktype == "novalue" then -- value is none
-- val = "No value" -- don't return anything
------------------------------------
elseif dtype == "wikibase-item" then -- data type is a wikibase item:
-- it's wiki-linked value, so output as link if enabled and possible
local qnumber = dv.id
if linked then
val = linkedItem(qnumber, lpre, lpost, pre, post, dtxt)
else -- no link wanted so check for display-text, otherwise test for lang code
local label, islabel
if dtxt then
label = dtxt
else
label, islabel = labelOrId(qnumber)
local langlabel = mw.wikibase.getLabelByLang(qnumber, args.lang)
if langlabel then
label = mw.text.nowiki( langlabel )
end
end
val = pre .. label .. post
end -- test for link required
------------------------------------
elseif dtype == "time" then -- data type is time:
-- time is in timestamp format
-- date precision is integer per mediawiki
-- output formatting according to preferences (y/dmy/mdy)
-- BC format as BC or BCE
-- plaindate is passed to disable looking for "sourcing cirumstances"
-- or to set the adjectival form
-- qualifiers (if any) is a nested table or nil
-- lang is given, or user language, or site language
val = dateFormat(dv.time, dv.precision, args.df, args.bc, args.pd, propval.qualifiers, args.lang)
------------------------------------
-- data types which are strings:
elseif dtype == "commonsMedia" or dtype == "external-id" or dtype == "string" or dtype == "url" then
-- commonsMedia or external-id or string or url
-- all have mainsnak.datavalue.value as string
if (lpre == "" or lpre == ":") and lpost == "" then
-- don't link if no linkpre/postfix or linkprefix is just ":"
val = pre .. dv .. post
else
val = "[[" .. lpre .. dv .. lpost .. "|" .. pre .. dv .. post .. "]]"
end -- check for link requested (i.e. either linkprefix or linkpostfix exists)
------------------------------------
-- data types which are quantities:
elseif dtype == "quantity" then
-- quantities have mainsnak.datavalue.value.amount and mainsnak.datavalue.value.unit
-- the unit is of the form http://www.wikidata.org/entity/Q829073
--
-- implement a switch to turn on/off numerical formatting later
local fnum = true
--
-- a switch to turn on/off conversions - only for en-wiki
local conv = parseParam(args.conv or args.convert, false)
-- if we have conversions, we won't have formatted numbers or scales
if conv then
fnum = false
args.scale = "0"
end
--
-- a switch to turn on/off showing units, default is true
local showunits = parseParam(args.su or args.showunits, true)
--
-- convert amount to a number
local amount = tonumber(dv.amount) or i18n["NaN"]
--
-- scale factor for millions, billions, etc.
local sc = tostring(args.scale or ""):sub(1,1):lower()
local scale
if sc == "a" then
-- automatic scaling
if amount > 1e15 then
scale = 12
elseif amount > 1e12 then
scale = 9
elseif amount > 1e9 then
scale = 6
elseif amount > 1e6 then
scale = 3
else
scale = 0
end
else
scale = tonumber(args.scale) or 0
if scale < 0 or scale > 12 then scale = 0 end
scale = math.floor(scale/3) * 3
end
local factor = 10^scale
amount = amount / factor
-- ranges:
local range = ""
-- check if upper and/or lower bounds are given and significant
local upb = tonumber(dv.upperBound)
local lowb = tonumber(dv.lowerBound)
if upb and lowb then
-- differences rounded to 2 sig fig:
local posdif = roundto(upb - amount, 2) / factor
local negdif = roundto(amount - lowb, 2) / factor
upb, lowb = amount + posdif, amount - negdif
-- round scaled numbers to integers or 4 sig fig
if (scale > 0 or sc == "a") then
if amount < 1e4 then
amount = roundto(amount, 4)
else
amount = math.floor(amount + 0.5)
end
end
if fnum then amount = args.langobj:formatNum( amount ) end
if posdif ~= negdif then
-- non-symmetrical
range = " +" .. posdif .. " -" .. negdif
elseif posdif ~= 0 then
-- symmetrical and non-zero
range = " ±" .. posdif
else
-- otherwise range is zero, so leave it as ""
end
else
-- round scaled numbers to integers or 4 sig fig
if (scale > 0 or sc == "a") then
if amount < 1e4 then
amount = roundto(amount, 4)
else
amount = math.floor(amount + 0.5)
end
end
if fnum then amount = args.langobj:formatNum( amount ) end
end
-- unit names and symbols:
-- extract the qid in the form 'Qnnn' from the value.unit url
-- and then fetch the label from that - or symbol if unitabbr is true
local unit = ""
local usep = ""
local usym = ""
local unitqid = string.match( dv.unit, "(Q%d+)" )
if filter and unitqid ~= filter then return nil end
if unitqid and showunits then
local uname = mw.wikibase.getLabelByLang(unitqid, args.lang) or ""
if uname ~= "" then usep, unit = " ", uname end
if uabbr then
-- see if there's a unit symbol (P5061)
local unitsymbols = mw.wikibase.getAllStatements(unitqid, "P5061")
-- construct fallback table
local fbtbl = mw.language.getFallbacksFor( args.lang )
table.insert( fbtbl, 1, args.lang )
local found = false
for idx1, us in ipairs(unitsymbols) do
for idx2, fblang in ipairs(fbtbl) do
if us.mainsnak.datavalue.value.language == fblang then
usym = us.mainsnak.datavalue.value.text
found = true
break
end
if found then break end
end -- loop through fallback table
end -- loop through values of P5061
if found then usep, unit = " ", usym end
end
end
-- format display:
if conv and usym ~= "" then
if range == "" then
val = mw.getCurrentFrame():expandTemplate{title = "cvt", args = {amount, usym}}
else
val = mw.getCurrentFrame():expandTemplate{title = "cvt", args = {lowb, "to", upb, usym}}
end
elseif unit == "$" or unit == "£" then
val = unit .. amount .. range .. i18n.multipliers[scale]
else
val = amount .. range .. i18n.multipliers[scale] .. usep .. unit
end
------------------------------------
-- datatypes which are global coordinates:
elseif dtype == "globe-coordinate" then
-- 'display' parameter defaults to "inline, title" *** unused for now ***
-- local disp = args.display or ""
-- if disp == "" then disp = "inline, title" end
--
-- format parameter switches from deg/min/sec to decimal degrees
-- default is deg/min/sec -- decimal degrees needs |format = dec
local form = (args.format or ""):lower():sub(1,3)
if form ~= "dec" then form = "dms" end
--
-- show parameter allows just the latitude or longitude to be shown
local show = (args.show or ""):lower()
if show ~= "longlat" then show = show:sub(1,3) end
--
local lat, long, prec = dv.latitude, dv.longitude, dv.precision
if show == "lat" then
val = decimalPrecision(lat, prec)
elseif show == "lon" then
val = decimalPrecision(long, prec)
elseif show == "longlat" then
val = decimalPrecision(long, prec) .. ", " .. decimalPrecision(lat, prec)
else
local ns = "N"
local ew = "E"
if lat < 0 then
ns = "S"
lat = - lat
end
if long < 0 then
ew = "W"
long = - long
end
if form == "dec" then
lat = decimalPrecision(lat, prec)
long = decimalPrecision(long, prec)
val = lat .. "°" .. ns .. " " .. long .. "°" .. ew
else
local latdeg, latmin, latsec = decimalToDMS(lat, prec)
local longdeg, longmin, longsec = decimalToDMS(long, prec)
if latsec == 0 and longsec == 0 then
if latmin == 0 and longmin == 0 then
val = latdeg .. "°" .. ns .. " " .. longdeg .. "°" .. ew
else
val = latdeg .. "°" .. latmin .. "′" .. ns .. " "
val = val .. longdeg .. "°".. longmin .. "′" .. ew
end
else
val = latdeg .. "°" .. latmin .. "′" .. latsec .. "″" .. ns .. " "
val = val .. longdeg .. "°" .. longmin .. "′" .. longsec .. "″" .. ew
end
end
end
------------------------------------
elseif dtype == "monolingualtext" then -- data type is Monolingual text:
-- has mainsnak.datavalue.value as a table containing language/text pairs
-- collect all the values in 'out' and languages in 'mlt' and process them later
val = pre .. dv.text .. post
mlt = dv.language
------------------------------------
else
-- some other data type so write a specific handler
val = "unknown data type: " .. dtype
end -- of datatype/unknown value/sourced check
return val, mlt
end
-------------------------------------------------------------------------------
-- propertyvalueandquals takes a property object, the arguments passed from frame,
-- and a qualifier propertyID.
-- It returns a sequence (table) of values representing the values of that property
-- and qualifiers that match the qualifierID if supplied.
-------------------------------------------------------------------------------
-- Dependencies: parseParam(); sourced(); labelOrId(); i18n.latestdatequalifier(); format_Date();
-- makeOrdinal(); roundto(); decimalPrecision(); decimalToDMS(); assembleoutput();
-------------------------------------------------------------------------------
local function propertyvalueandquals(objproperty, args, qualID)
-- needs this style of declaration because it's re-entrant
-- onlysourced is a boolean passed to return only values sourced to other than Wikipedia
-- if nothing or an empty string is passed set it true
local onlysrc = parseParam(args.onlysourced or args.osd, true)
-- linked is a a boolean that enables the link to a local page via sitelink
-- if nothing or an empty string is passed set it true
local linked = parseParam(args.linked, true)
-- prefix is a string that may be nil, empty (""), or a string of characters
-- this is prefixed to each value
-- useful when when multiple values are returned
-- any double-quotes " are stripped out, so that spaces may be passed
local prefix = (args.prefix or ""):gsub('"', '')
-- postfix is a string that may be nil, empty (""), or a string of characters
-- this is postfixed to each value
-- useful when when multiple values are returned
-- any double-quotes " are stripped out, so that spaces may be passed
local postfix = (args.postfix or ""):gsub('"', '')
-- linkprefix is a string that may be nil, empty (""), or a string of characters
-- this creates a link and is then prefixed to each value
-- useful when when multiple values are returned and indirect links are needed
-- any double-quotes " are stripped out, so that spaces may be passed
local lprefix = (args.linkprefix or args.lp or ""):gsub('"', '')
-- linkpostfix is a string that may be nil, empty (""), or a string of characters
-- this is postfixed to each value when linking is enabled with lprefix
-- useful when when multiple values are returned
-- any double-quotes " are stripped out, so that spaces may be passed
local lpostfix = (args.linkpostfix or ""):gsub('"', '')
-- wdlinks is a boolean passed to enable links to Wikidata when no article exists
-- if nothing or an empty string is passed set it false
local wdl = parseParam(args.wdlinks or args.wdl, false)
-- unitabbr is a boolean passed to enable unit abbreviations for common units
-- if nothing or an empty string is passed set it false
local uabbr = parseParam(args.unitabbr or args.uabbr, false)
-- qualsonly is a boolean passed to return just the qualifiers
-- if nothing or an empty string is passed set it false
local qualsonly = parseParam(args.qualsonly or args.qo, false)
-- maxvals is a string that may be nil, empty (""), or a number
-- this determines how many items may be returned when multiple values are available
-- setting it = 1 is useful where the returned string is used within another call, e.g. image
local maxvals = tonumber(args.maxvals) or 0
-- pd (plain date) is a string: yes/true/1 | no/false/0 | adj
-- to disable/enable "sourcing cirumstances" or use adjectival form for the plain date
local pd = args.plaindate or args.pd or "no"
args.pd = pd
local lang = args.lang
-- all proper values of a Wikidata property will be the same type as the first
-- qualifiers don't have a mainsnak, properties do
local datatype = objproperty[1].datatype or objproperty[1].mainsnak.datatype
-- out holds the values for this property
-- mlt holds the language code if the datatype is monolingual text
local out = {}
local mlt = {}
for k, v in ipairs(objproperty) do
local hasvalue = true
if (onlysrc and not sourced(v)) then
-- no value: it isn't sourced when onlysourced=true
hasvalue = false
elseif qualsonly and qualID then
-- no value: it isn't sourced when only qualifiers are requested
else
out[#out+1], mlt[#out+1] = rendersnak(v, args, linked, lprefix, lpostfix, prefix, postfix, uabbr)
end
-- See if qualifiers are to be returned:
local snak = v.mainsnak or v
if hasvalue and v.qualifiers and qualID and snak.snaktype=="value" then
local qsep = (args.qsep or ""):gsub('"', '')
local qargs = {
["osd"] = "false",
["linked"] = tostring(linked),
["prefix"] = args.qprefix,
["postfix"] = args.qpostfix,
["linkprefix"] = args.qlinkprefix or args.qlp,
["linkpostfix"] = args.qlinkpostfix,
["wdl"] = "false",
["unitabbr"] = tostring(uabbr),
["maxvals"] = 0,
["sorted"] = args.qsorted,
["noicon"] = "true",
["list"] = args.qlist,
["sep"] = qsep,
["langobj"] = args.langobj,
["lang"] = args.langobj.code,
}
local qlist = {}
local t1, t2 = "", ""
-- see if we want all qualifiers
if qualID == "ALL" then
if v["qualifiers-order"] then
-- the values in the order table are the keys for the qualifiers table:
for k1, v1 in ipairs(v["qualifiers-order"]) do
if v1 == "P1326" then
local ts = v.qualifiers[v1][1].datavalue.value.time
local dp = v.qualifiers[v1][1].datavalue.value.precision
qlist[#qlist + 1] = dateFormat(ts, dp, args.df, args.bc, pd, "", lang, "before")
else
qlist[#qlist + 1] = assembleoutput(propertyvalueandquals(v.qualifiers[v1], qargs), qargs)
end
end
else
local ql = propertyvalueandquals(v.qualifiers, qargs)
for k1, v1 in ipairs(ql) do
if k1 == "P1326" then
local ts = v1[1].datavalue.value.time
local dp = v1[1].datavalue.value.precision
qlist[#qlist + 1] = dateFormat(ts, dp, args.df, args.bc, pd, "", lang, "before")
else
qlist[#qlist + 1] = v1
end
end
end
-- see if we want date/range
elseif qualID == "DATES" then
qargs.maxvals = 1
for k1, v1 in pairs(v.qualifiers) do
if k1 == "P580" then -- P580 is "start time"
t1 = propertyvalueandquals(v1, qargs)[1] or ""
elseif k1 == "P582" then -- P582 is "end time"
t2 = propertyvalueandquals(v1, qargs)[1] or ""
end
end
-- otherwise process qualID as a list of qualifiers
else
for q in mw.text.gsplit(qualID, "%p") do -- split at punctuation and iterate
q = mw.text.trim(q):upper() -- remove whitespace and capitalise
if q == "P1326" then
-- latest date, so supply 'before' as well. Assume one date value.
for k1, v1 in pairs(v.qualifiers) do
if k1 == "P1326" then
local ts = v1[1].datavalue.value.time
local dp = v1[1].datavalue.value.precision
qlist[#qlist + 1] = dateFormat(ts, dp, args.df, args.bc, pd, "", lang, "before")
end
end
else
for k1, v1 in pairs(v.qualifiers) do
if k1 == q then
local ql = propertyvalueandquals(v1, qargs)
for k2, v2 in ipairs(ql) do
qlist[#qlist + 1] = v2
end
end
end
end
end -- of loop through list of qualifiers in qualID
end -- of testing for what qualID is
local t = t1 .. t2
-- *** internationalise date separators later ***
local dsep = "–"
if t:find("%s") or t:find(" ") then dsep = " – " end
if #qlist > 0 then
local qstr = assembleoutput(qlist, qargs)
if qualsonly then
out[#out+1] = qstr
else
out[#out] = out[#out] .. " (" .. qstr .. ")"
end
elseif t > "" then
if qualsonly then
out[#out+1] = t1 .. dsep .. t2
else
out[#out] = out[#out] .. " (" .. t1 .. dsep .. t2 .. ")"
end
end
end -- of test for qualifiers wanted
if maxvals > 0 and #out >= maxvals then break end
end -- of for each value loop
-- we need to pick one value to return if the datatype was "monolingualtext"
-- if there's only one value, use that
-- otherwise look through the fallback languages for a match
if datatype == "monolingualtext" and #out >1 then
local langcode = args.langobj.code
langcode = mw.text.split( langcode, '-', true )[1]
local fbtbl = mw.language.getFallbacksFor( langcode )
table.insert( fbtbl, 1, langcode )
local bestval = ""
local found = false
for idx1, lang1 in ipairs(fbtbl) do
for idx2, lang2 in ipairs(mlt) do
if (lang1 == lang2) and not found then
bestval = out[idx2]
found = true
break
end
end -- loop through values of property
end -- loop through fallback languages
if found then
-- replace output table with a table containing the best value
out = { bestval }
else
-- more than one value and none of them on the list of fallback languages
-- sod it, just give them the first one
out = { out[1] }
end
end
return out
end
-------------------------------------------------------------------------------
-- Common code for p.getValueByQual and p.getValueByLang
-------------------------------------------------------------------------------
-- Dependencies: parseParam; setRanks; parseInput; sourced; assembleoutput;
-------------------------------------------------------------------------------
local _getvaluebyqual = function(frame, qualID, checkvalue)
-- The property ID that will have a qualifier is the first unnamed parameter
local propertyID = mw.text.trim(frame.args[1] or "")
if propertyID == "" then return "no property supplied" end
if qualID == "" then return "no qualifier supplied" end
-- onlysourced is a boolean passed to return property values
-- only when property values are sourced to something other than Wikipedia
-- if nothing or an empty string is passed set it true
-- if "false" or "no" or 0 is passed set it false
local onlysrc = parseParam(frame.args.onlysourced or frame.args.osd, true)
-- set the requested ranks flags
frame.args.reqranks = setRanks(frame.args.rank)
-- set a language object and code in the frame.args table
frame.args.langobj = findLang(frame.args.lang)
frame.args.lang = frame.args.langobj.code
local args = frame.args
-- check for locally supplied parameter in second unnamed parameter
-- success means no local parameter and the property exists
local qid, props = parseInput(frame, args[2], propertyID)
local linked = parseParam(args.linked, true)
local lpre = (args.linkprefix or args.lp or ""):gsub('"', '')
local lpost = (args.linkpostfix or ""):gsub('"', '')
local pre = (args.prefix or ""):gsub('"', '')
local post = (args.postfix or ""):gsub('"', '')
local uabbr = parseParam(args.unitabbr or args.uabbr, false)
local filter = (args.unit or ""):upper()
if filter == "" then filter = nil end
if qid then
local out = {}
-- Scan through the values of the property
-- we want something like property is "pronunciation audio (P443)" in propertyID
-- with a qualifier like "language of work or name (P407)" in qualID
-- whose value has the required ID, like "British English (Q7979)", in qval
for k1, v1 in ipairs(props) do
if v1.mainsnak.snaktype == "value" then
-- check if it has the right qualifier
local v1q = v1.qualifiers
if v1q and v1q[qualID] then
if onlysrc == false or sourced(v1) then
-- if we've got this far, we have a (sourced) claim with qualifiers
-- so see if matches the required value
-- We'll only deal with wikibase-items for now
if v1q[qualID][1].datatype == "wikibase-item" then
if checkvalue(v1q[qualID][1].datavalue.value.id) then
out[#out + 1] = rendersnak(v1, args, linked, lpre, lpost, pre, post, uabbr, filter)
end
end
end -- of check for sourced
end -- of check for matching required value and has qualifiers
else
return nil
end -- of check for string
end -- of loop through values of propertyID
return assembleoutput(out, frame.args, qid, propertyID)
else
return props -- either local parameter or nothing
end -- of test for success
return nil
end
-------------------------------------------------------------------------------
-- _location takes Q-id and follows P131 (located in the administrative territorial entity)
-- or P276 (location) or P706 (located on terrain feature)
-- from the initial item to higher level territories/locations until it reaches the highest.
-- An optional boolean, 'first', determines whether the first item is returned (default: false).
-- An optional boolean 'skip' toggles the display to skip to the last item (default: false).
-- It returns a table containing the locations - linked where possible, except for the highest.
-------------------------------------------------------------------------------
-- Dependencies: findLang(); labelOrId(); linkedItem
-------------------------------------------------------------------------------
local _location = function(qid, first, skip)
first = parseParam(first, false)
skip = parseParam(skip, false)
local out = {}
local langcode = findLang():getCode()
local finished = false
local count = 0
repeat
local prop = mw.wikibase.getBestStatements(qid, "P131")[1] or mw.wikibase.getBestStatements(qid, "P276")[1] or mw.wikibase.getBestStatements(qid, "P706")[1]
-- check if it's an instance of (P31) a country (Q6256) and terminate the chain if it is
local inst = mw.wikibase.getAllStatements(qid, "P31")
if #inst > 0 then
for k, v in ipairs(inst) do
local instid = v.mainsnak.datavalue.value.id
-- stop if it's a country (or a country within the United Kingdom if skip is true)
if instid == "Q6256" or (skip and instid == "Q3336843") then
prop = nil -- this will ensure this is treated as top-level location
break
end
end
end
if prop and prop.mainsnak.datavalue then
if not skip or count == 0 then
out[#out+1] = linkedItem(qid, ":", "", "", "") -- get a linked value if we can
end
qid = prop.mainsnak.datavalue.value.id
else
-- This is top-level location, so get short name except when this is the first item
-- Use full label if there's no short name or this is the first item
local prop1813 = mw.wikibase.getAllStatements(qid, "P1813")
-- if there's a short name and this isn't the only item
if prop1813[1] and (#out > 0)then
local shortname
-- short name is monolingual text, so look for match to the local language
-- choose the shortest 'short name' in that language
for k, v in pairs(prop1813) do
if v.mainsnak.datavalue.value.language == langcode then
local name = v.mainsnak.datavalue.value.text
if (not shortname) or (#name < #shortname) then
shortname = name
end
end
end
-- add the shortname if one is found, fallback to the label
-- but skip it if it's "USA"
if shortname ~= "USA" then
out[#out+1] = shortname or labelOrId(qid)
else
if skip then out[#out+1] = "US" end
end
else
-- no shortname, so just add the label
local loc = labelOrId(qid)
-- exceptions go here:
if loc == "United States of America" then
out[#out+1] = "United States"
else
out[#out+1] = loc
end
end
finished = true
end
count = count + 1
until finished or count >= 10 -- limit to 10 levels to avoid infinite loops
if not first then table.remove(out, 1) end
return out
end
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
-- Public functions
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
-- getValue is used to get the value(s) of a property
-- The property ID is passed as the first unnamed parameter and is required.
-- A locally supplied parameter may optionaly be supplied as the second unnamed parameter.
-- The function will now also return qualifiers if parameter qual is supplied
-------------------------------------------------------------------------------
-- Dependencies: setRanks; parseInput; propertyvalueandquals; assembleoutput; parseParam; sourced;
-- labelOrId; i18n.latestdatequalifier; format_Date; makeOrdinal; roundto; decimalPrecision; decimalToDMS;
-------------------------------------------------------------------------------
p.getValue = function(frame)
if not frame.args[1] then
frame.args = frame:getParent().args
if not frame.args[1] then return i18n.errors["No property supplied"] end
end
-- parameter sets for commonly used groups of parameters
local paraset = tonumber(frame.args.ps or frame.args.parameterset or 0)
if paraset == 1 then
frame.args.rank = "best"
frame.args.fetchwikidata = "ALL"
frame.args.onlysourced = "no"
frame.args.noicon = "true"
elseif paraset == 2 then
-- second set goes here
end
local propertyID = mw.text.trim(frame.args[1] or "")
frame.args.reqranks = setRanks(frame.args.rank)
local entityid, props = parseInput(frame, frame.args[2], propertyID)
if not entityid then
return props -- either the input parameter or nothing
end
-- qual is a string containing the property ID of the qualifier(s) to be returned
-- if qual == "ALL" then all qualifiers returned
-- if qual == "DATES" then qualifiers P580 (start time) and P582 (end time) returned
-- if nothing or an empty string is passed set it nil -> no qualifiers returned
local qualID = mw.text.trim(frame.args.qual or ""):upper()
if qualID == "" then qualID = nil end
-- set a language object and code in the frame.args table
frame.args.langobj = findLang(frame.args.lang)
frame.args.lang = frame.args.langobj.code
-- table 'out' stores the return value(s):
local out = propertyvalueandquals(props, frame.args, qualID)
-- format the table of values and return it as a string:
return assembleoutput(out, frame.args, entityid, propertyID)
end
-------------------------------------------------------------------------------
-- getPreferredValue is used to get a value,
-- (or a comma separated list of them if multiple values exist).
-- If preferred ranks are set, it will return those values, otherwise values with normal ranks
-- now redundant to getValue with |rank=best
-------------------------------------------------------------------------------
-- Dependencies: p.getValue; setRanks; parseInput; propertyvalueandquals; assembleoutput;
-- parseParam; sourced; labelOrId; i18n.latestdatequalifier; format_Date;
-- makeOrdinal; roundto; decimalPrecision; decimalToDMS;
-------------------------------------------------------------------------------
p.getPreferredValue = function(frame)
frame.args.rank = "best"
return p.getValue(frame)
end
-------------------------------------------------------------------------------
-- getCoords is used to get coordinates for display in an infobox
-- whitelist and blacklist are implemented
-- optional 'display' parameter is allowed, defaults to "inline, title"
-------------------------------------------------------------------------------
-- Dependencies: setRanks(); parseInput(); decimalPrecision();
-------------------------------------------------------------------------------
p.getCoords = function(frame)
local propertyID = "P625"
-- if there is a 'display' parameter supplied, use it
-- otherwise default to "inline, title"
local disp = frame.args.display or ""
if disp == "" then
disp = "inline, title"
end
-- there may be a format parameter to switch from deg/min/sec to decimal degrees
-- default is deg/min/sec
-- decimal degrees needs |format = dec
local form = (frame.args.format or ""):lower():sub(1,3)
if form ~= "dec" then
form = "dms"
end
-- just deal with best values
frame.args.reqranks = setRanks("best")
local qid, props = parseInput(frame, frame.args[1], propertyID)
if not qid then
return props -- either local parameter or nothing
else
local dv = props[1].mainsnak.datavalue.value
local lat, long, prec = dv.latitude, dv.longitude, dv.precision
lat = decimalPrecision(lat, prec)
long = decimalPrecision(long, prec)
local lat_long = { lat, long }
lat_long["display"] = disp
lat_long["format"] = form
-- invoke template Coord with the values stored in the table
return frame:expandTemplate{title = 'coord', args = lat_long}
end
end
-------------------------------------------------------------------------------
-- getQualifierValue is used to get a formatted value of a qualifier
--
-- The call needs: a property (the unnamed parameter or 1=)
-- a target value for that property (pval=)
-- a qualifier for that target value (qual=)
-- The usual whitelisting and blacklisting of the property is implemented
-- The boolean onlysourced= parameter can be set to return nothing
-- when the property is unsourced (or only sourced to Wikipedia)
-------------------------------------------------------------------------------
-- Dependencies: parseParam(); setRanks(); parseInput(); sourced();
-- propertyvalueandquals(); assembleoutput();
-- labelOrId(); i18n.latestdatequalifier(); format_Date();
-- findLang(); makeOrdinal(); roundto(); decimalPrecision(); decimalToDMS();
-------------------------------------------------------------------------------
p.getQualifierValue = function(frame)
-- The property ID that will have a qualifier is the first unnamed parameter
local propertyID = mw.text.trim(frame.args[1] or "")
-- The value of the property we want to match whose qualifier value is to be returned
-- is passed in named parameter |pval=
local propvalue = frame.args.pval
-- The property ID of the qualifier
-- whose value is to be returned is passed in named parameter |qual=
local qualifierID = frame.args.qual
-- onlysourced is a boolean passed to return qualifiers
-- only when property values are sourced to something other than Wikipedia
-- if nothing or an empty string is passed set it true
-- if "false" or "no" or 0 is passed set it false
local onlysrc = parseParam(frame.args.onlysourced or frame.args.osd, true)
-- set a language object in the frame.args table
frame.args.langobj = findLang(frame.args.lang)
-- set the requested ranks flags
frame.args.reqranks = setRanks(frame.args.rank)
-- check for locally supplied parameter in second unnamed parameter
-- success means no local parameter and the property exists
local qid, props = parseInput(frame, frame.args[2], propertyID)
if qid then
local out = {}
-- Scan through the values of the property
-- we want something like property is P793, significant event (in propertyID)
-- whose value is something like Q385378, construction (in propvalue)
-- then we can return the value(s) of a qualifier such as P580, start time (in qualifierID)
for k1, v1 in pairs(props) do
if v1.mainsnak.snaktype == "value" and v1.mainsnak.datavalue.type == "wikibase-entityid" then
-- It's a wiki-linked value, so check if it's the target (in propvalue)
-- and if it has qualifiers
if v1.mainsnak.datavalue.value.id == propvalue and v1.qualifiers then
if onlysrc == false or sourced(v1) then
-- if we've got this far, we have a (sourced) claim with qualifiers
-- which matches the target, so find the value(s) of the qualifier we want
local quals = v1.qualifiers[qualifierID]
if quals then
-- can't reference qualifer, so set onlysourced = "no" (not boolean)
local qargs = frame.args
qargs.onlysourced = "no"
local vals = propertyvalueandquals(quals, qargs, qid)
for k, v in ipairs(vals) do
out[#out + 1] = v
end
end
end -- of check for sourced
end -- of check for matching required value and has qualifiers
end -- of check for wikibase entity
end -- of loop through values of propertyID
return assembleoutput(out, frame.args, qid, propertyID)
else
return props -- either local parameter or nothing
end -- of test for success
return nil
end
-------------------------------------------------------------------------------
-- getValueByQual gets the value of a property which has a qualifier with a given entity value
-- The call needs:
-- a property ID (the unnamed parameter or 1=Pxxx)
-- the ID of a qualifier for that property (qualID=Pyyy)
-- the Wikibase-entity ID of a value for that qualifier (qvalue=Qzzz)
-- The usual whitelisting, blacklisting, onlysourced, etc. are implemented
-------------------------------------------------------------------------------
-- Dependencies: _getvaluebyqual; parseParam; setRanks; parseInput; sourced;
-- assembleoutput;
-------------------------------------------------------------------------------
p.getValueByQual = function(frame)
local qualID = frame.args.qualID
-- The Q-id of the value for the qualifier we want to match is in named parameter |qvalue=
local qval = frame.args.qvalue or ""
if qval == "" then return "no qualifier value supplied" end
local function checkQID(id)
return id == qval
end
return _getvaluebyqual(frame, qualID, checkQID)
end
-------------------------------------------------------------------------------
-- getValueByLang gets the value of a property which has a qualifier P407
-- ("language of work or name") whose value has the given language code
-- The call needs:
-- a property ID (the unnamed parameter or 1=Pxxx)
-- the MediaWiki language code to match the language (lang=xx[-yy])
-- (if no code is supplied, it uses the default language)
-- The usual whitelisting, blacklisting, onlysourced, etc. are implemented
-------------------------------------------------------------------------------
-- Dependencies: _getvaluebyqual; parseParam; setRanks; parseInput; sourced; assembleoutput;
-------------------------------------------------------------------------------
p.getValueByLang = function(frame)
-- The language code for the qualifier we want to match is in named parameter |lang=
local langcode = frame.args.lang or ""
if langcode == "" then
langcode = frame:callParserFunction{ name = "int", args = "lang" }
end
local function checkLanguage(id)
-- id should represent a language like "British English (Q7979)"
-- it should have string property "Wikimedia language code (P424)"
-- qlcode will be a table:
local qlcode = mw.wikibase.getBestStatements(id, "P424")
if (#qlcode > 0) and (qlcode[1].mainsnak.datavalue.value == langcode) then
return true
end
end
return _getvaluebyqual(frame, "P407", checkLanguage)
end
-------------------------------------------------------------------------------
-- getValueByRefSource gets the value of a property which has a reference "stated in" (P248)
-- whose value has the given entity code.
-- The call needs:
-- a property ID (the unnamed parameter or 1=Pxxx)
-- the entity ID of a value to match where the reference is stated in (match=Qzzz)
-- The usual whitelisting, blacklisting, onlysourced, etc. are implemented
-------------------------------------------------------------------------------
-- Dependencies: parseParam; setRanks; parseInput; sourced; propertyvalueandquals assembleoutput;
-------------------------------------------------------------------------------
p.getValueByRefSource = function(frame)
-- The property ID that we want to check is the first unnamed parameter
local propertyID = mw.text.trim(frame.args[1] or ""):upper()
if propertyID == "" then return "no property supplied" end
-- The Q-id of the value we want to match is in named parameter |qvalue=
local qval = (frame.args.match or ""):upper()
if qval == "" then qval = "Q21540096" end
local unit = (frame.args.unit or ""):upper()
if unit == "" then unit = "Q4917" end
local onlysrc = parseParam(frame.args.onlysourced or frame.args.osd, true)
-- set the requested ranks flags
frame.args.reqranks = setRanks(frame.args.rank)
-- set a language object and code in the frame.args table
frame.args.langobj = findLang(frame.args.lang)
frame.args.lang = frame.args.langobj.code
local linked = parseParam(frame.args.linked, true)
local uabbr = parseParam(frame.args.uabbr or frame.args.unitabbr, false)
-- qid not nil means no local parameter and the property exists
local qid, props = parseInput(frame, frame.args[2], propertyID)
if qid then
local out = {}
local mlt= {}
for k1, v1 in ipairs(props) do
if onlysrc == false or sourced(v1) then
if v1.references then
for k2, v2 in ipairs(v1.references) do
if v2.snaks.P248 then
for k3, v3 in ipairs(v2.snaks.P248) do
if v3.datavalue.value.id == qval then
out[#out+1], mlt[#out+1] = rendersnak(v1, frame.args, linked, "", "", "", "", uabbr, unit)
if not mlt[#out] then
-- we only need one match per property value
-- unless datatype was monolingual text
break
end
end -- of test for match
end -- of loop through values "stated in"
end -- of test that "stated in" exists
end -- of loop through references
end -- of test that references exist
end -- of test for sourced
end -- of loop through values of propertyID
if #mlt > 0 then
local langcode = frame.args.lang
langcode = mw.text.split( langcode, '-', true )[1]
local fbtbl = mw.language.getFallbacksFor( langcode )
table.insert( fbtbl, 1, langcode )
local bestval = ""
local found = false
for idx1, lang1 in ipairs(fbtbl) do
for idx2, lang2 in ipairs(mlt) do
if (lang1 == lang2) and not found then
bestval = out[idx2]
found = true
break
end
end -- loop through values of property
end -- loop through fallback languages
if found then
-- replace output table with a table containing the best value
out = { bestval }
else
-- more than one value and none of them on the list of fallback languages
-- sod it, just give them the first one
out = { out[1] }
end
end
return assembleoutput(out, frame.args, qid, propertyID)
else
return props -- no property or local parameter supplied
end -- of test for success
end
-------------------------------------------------------------------------------
-- getPropOfProp takes two propertyIDs: prop1 and prop2 (as well as the usual parameters)
-- If the value(s) of prop1 are of type "wikibase-item" then it returns the value(s) of prop2
-- of each of those wikibase-items.
-- The usual whitelisting, blacklisting, onlysourced, etc. are implemented
-------------------------------------------------------------------------------
-- Dependencies: parseParam; setRanks; parseInput; sourced; propertyvalueandquals assembleoutput;
-------------------------------------------------------------------------------
p.getPropOfProp = function(frame)
frame.args.reqranks = setRanks(frame.args.rank)
frame.args.langobj = findLang(frame.args.lang)
frame.args.lang = frame.args.langobj.code
local args = frame.args
local pid1 = args.prop1 or args.pid1 or ""
local pid2 = args.prop2 or args.pid2 or ""
local localval = mw.text.trim(args[1] or "")
if pid1 == "" or pid2 == "" then return nil end
local qid1, statements1 = parseInput(frame, localval, pid1)
if not qid1 then return localval end
local onlysrc = parseParam(args.onlysourced or args.osd, true)
local maxvals = tonumber(args.maxvals) or 0
local qualID = mw.text.trim(args.qual or ""):upper()
if qualID == "" then qualID = nil end
local out = {}
for k, v in ipairs(statements1) do
if not onlysrc or sourced(v) then
local snak = v.mainsnak
if snak.datatype == "wikibase-item" and snak.snaktype == "value" then
local qid2 = snak.datavalue.value.id
local statements2 = {}
if args.reqranks.b then
statements2 = mw.wikibase.getBestStatements(qid2, pid2)
else
statements2 = mw.wikibase.getAllStatements(qid2, pid2)
end
if statements2[1] then
local out2 = propertyvalueandquals(statements2, args, qualID)
out[#out+1] = assembleoutput(out2, args, qid2, pid2)
end
end -- of test for valid property1 value
end -- of test for sourced
if maxvals > 0 and #out >= maxvals then break end
end -- of loop through values of property1
return assembleoutput(out, args, qid1, pid1)
end
-------------------------------------------------------------------------------
-- getAwardCat takes most of the usual parameters. If the item has values of P166 (award received),
-- then it examines each of those awards for P2517 (category for recipients of this award).
-- If it exists, it returns the corresponding category,
-- with the item's P734 (family name) as sort key, or no sort key if there is no family name.
-- The sort key may be overridden by the parameter |sortkey (alias |sk).
-- The usual whitelisting, blacklisting, onlysourced, etc. are implemented
-------------------------------------------------------------------------------
-- Dependencies: parseParam; setRanks; parseInput; sourced; propertyvalueandquals assembleoutput;
-------------------------------------------------------------------------------
p.getAwardCat = function(frame)
frame.args.reqranks = setRanks(frame.args.rank)
frame.args.langobj = findLang(frame.args.lang)
frame.args.lang = frame.args.langobj.code
local args = frame.args
args.sep = " "
local pid1 = args.prop1 or "P166"
local pid2 = args.prop2 or "P2517"
if pid1 == "" or pid2 == "" then return nil end
-- locally supplied value:
local localval = mw.text.trim(args[1] or "")
local qid1, statements1 = parseInput(frame, localval, pid1)
if not qid1 then return localval end
-- linkprefix (strip quotes)
local lp = (args.linkprefix or args.lp or ""):gsub('"', '')
-- sort key (strip quotes, hyphens and periods):
local sk = (args.sortkey or args.sk or ""):gsub('["-.]', '')
-- family name:
local famname = ""
if sk == "" then
local p734 = mw.wikibase.getBestStatements(qid1, "P734")[1]
local p734id = p734 and p734.mainsnak.snaktype == "value" and p734.mainsnak.datavalue.value.id or ""
famname = mw.wikibase.sitelink(p734id) or ""
-- strip namespace and disambigation
local pos = famname:find(":") or 0
famname = famname:sub(pos+1):gsub("%s%(.+%)$", "")
if famname == "" then
local lbl = mw.wikibase.label(p734id)
famname = lbl and mw.text.nowiki(lbl) or ""
end
end
local onlysrc = parseParam(args.onlysourced or args.osd, true)
local maxvals = tonumber(args.maxvals) or 0
local qualID = mw.text.trim(args.qual or ""):upper()
if qualID == "" then qualID = nil end
local out = {}
for k, v in ipairs(statements1) do
if not onlysrc or sourced(v) then
local snak = v.mainsnak
if snak.datatype == "wikibase-item" and snak.snaktype == "value" then
local qid2 = snak.datavalue.value.id
local statements2 = {}
if args.reqranks.b then
statements2 = mw.wikibase.getBestStatements(qid2, pid2)
else
statements2 = mw.wikibase.getAllStatements(qid2, pid2)
end
if statements2[1] and statements2[1].mainsnak.snaktype == "value" then
local qid3 = statements2[1].mainsnak.datavalue.value.id
local sitelink = mw.wikibase.sitelink(qid3)
sitelink = sitelink or mw.wikibase.label(qid3)
if sitelink then
if sk ~= "" then
out[#out+1] = "[[" .. lp .. sitelink .. "|" .. sk .. "]]"
elseif famname ~= "" then
out[#out+1] = "[[" .. lp .. sitelink .. "|" .. famname .. "]]"
else
out[#out+1] = "[[" .. lp .. sitelink .. "]]"
end -- of check for sort keys
end -- of test for sitelink
end -- of test for category
end -- of test for wikibase item has a value
end -- of test for sourced
if maxvals > 0 and #out >= maxvals then break end
end -- of loop through values of property1
return assembleoutput(out, args, qid1, pid1)
end
-------------------------------------------------------------------------------
-- getGlobe takes an optional qid of a Wikidata entity passed as |qid=
-- otherwise it uses the linked item for the current page.
-- If returns the Qid of the globe used in P625 (coordinate location),
-- or nil if there isn't one.
-------------------------------------------------------------------------------
-- Dependencies: none
-------------------------------------------------------------------------------
p.getGlobe = function(frame)
local qid = frame.args.qid or frame.args[1] or ""
if qid == "" then qid = mw.wikibase.getEntityIdForCurrentPage() end
local coords = mw.wikibase.getBestStatements(qid, "P625")[1]
local globeid
if coords and coords.mainsnak.snaktype == "value" then
globeid = coords.mainsnak.datavalue.value.globe:match("(Q%d+)")
end
return globeid
end
-------------------------------------------------------------------------------
-- getCommonsLink takes an optional qid of a Wikidata entity passed as |qid=
-- It returns one of the following in order of preference:
-- the Commons sitelink of the linked Wikidata item;
-- the Commons sitelink of the topic's main category of the linked Wikidata item;
-------------------------------------------------------------------------------
-- Dependencies: _getCommonslink(); _getSitelink(); parseParam()
-------------------------------------------------------------------------------
p.getCommonsLink = function(frame)
local oc = frame.args.onlycat or frame.args.onlycategories
local fb = parseParam(frame.args.fallback or frame.args.fb, true)
return _getCommonslink(frame.args.qid, oc, fb)
end
-------------------------------------------------------------------------------
-- getSitelink takes the qid of a Wikidata entity passed as |qid=
-- It takes an optional parameter |wiki= to determine which wiki is to be checked for a sitelink
-- If the parameter is blank, then it uses the local wiki.
-- If there is a sitelink to an article available, it returns the plain text link to the article
-- If there is no sitelink, it returns nil.
-------------------------------------------------------------------------------
-- Dependencies: none
-------------------------------------------------------------------------------
p.getSiteLink = function(frame)
return _getSitelink(frame.args.qid, frame.args.wiki or mw.text.trim(frame.args[1] or ""))
end
-------------------------------------------------------------------------------
-- getLink has the qid of a Wikidata entity passed as the first unnamed parameter or as |qid=
-- If there is a sitelink to an article on the local Wiki, it returns a link to the article
-- with the Wikidata label as the displayed text.
-- If there is no sitelink, it returns the label as plain text.
-- If there is no label in the local language, it displays the qid instead.
-------------------------------------------------------------------------------
-- Dependencies: none
-------------------------------------------------------------------------------
p.getLink = function(frame)
local itemID = mw.text.trim(frame.args[1] or frame.args.qid or "")
if itemID == "" then return end
local sitelink = mw.wikibase.sitelink(itemID)
local label = labelOrId(itemID)
if sitelink then
return "[[:" .. sitelink .. "|" .. label .. "]]"
else
return label
end
end
-------------------------------------------------------------------------------
-- getLabel has the qid of a Wikidata entity passed as the first unnamed parameter or as |qid=
-- It returns the Wikidata label for the local language as plain text.
-- If there is no label in the local language, it displays the qid instead.
-------------------------------------------------------------------------------
-- Dependencies: none
-------------------------------------------------------------------------------
p.getLabel = function(frame)
local itemID = mw.text.trim(frame.args[1] or frame.args.qid or "")
if itemID == "" then return end
local label = labelOrId(itemID)
return label
end
-------------------------------------------------------------------------------
-- getAT has the qid of a Wikidata entity passed as the first unnamed parameter or as |qid=
-- If there is a sitelink to an article on the local Wiki, it returns the sitelink as plain text.
-- If there is no sitelink, it returns nothing.
-------------------------------------------------------------------------------
-- Dependencies: none
-------------------------------------------------------------------------------
p.getAT = function(frame)
local itemID = mw.text.trim(frame.args[1] or frame.args.qid or "")
if itemID == "" then return end
return mw.wikibase.sitelink(itemID)
end
-------------------------------------------------------------------------------
-- getDescription has the qid of a Wikidata entity passed as |qid=
-- (it defaults to the associated qid of the current article if omitted)
-- and a local parameter passed as the first unnamed parameter.
-- Any local parameter passed (other than "Wikidata" or "none") becomes the return value.
-- It returns the article description for the Wikidata entity if the local parameter is "Wikidata".
-- Nothing is returned if the description doesn't exist or "none" is passed as the local parameter.
-------------------------------------------------------------------------------
-- Dependencies: none
-------------------------------------------------------------------------------
p.getDescription = function(frame)
local desc = mw.text.trim(frame.args[1] or "")
local itemID = mw.text.trim(frame.args.qid or "")
if itemID == "" then itemID = nil end
if desc:lower() == 'wikidata' then
return mw.wikibase.description(itemID)
elseif desc:lower() == 'none' then
return nil
else
return desc
end
end
-------------------------------------------------------------------------------
-- getAliases has the qid of a Wikidata entity passed as |qid=
-- (it defaults to the associated qid of the current article if omitted)
-- and a local parameter passed as the first unnamed parameter.
-- It implements blacklisting and whitelisting with a field name of "alias" by default.
-- Any local parameter passed becomes the return value.
-- Otherwise it returns the aliases for the Wikidata entity with the usual list options.
-- Nothing is returned if the aliases do not exist.
-------------------------------------------------------------------------------
-- Dependencies: findLang(); assembleoutput()
-------------------------------------------------------------------------------
p.getAliases = function(frame)
local args = frame.args
local fieldname = args.name or ""
if fieldname == "" then fieldname = "alias" end
local blacklist = args.suppressfields or args.spf or ""
if blacklist:find(fieldname) then return nil end
local localval = mw.text.trim(args[1] or "")
if localval ~= "" then return localval end
local whitelist = args.fetchwikidata or args.fwd or ""
if whitelist == "" then whitelist = "NONE" end
if not (whitelist == 'ALL' or whitelist:find(fieldname)) then return nil end
local qid = mw.text.trim(args.qid or "")
if qid == "" then qid = nil end
local entity = mw.wikibase.getEntity(qid)
if not entity then return nil end
local aliases = entity.aliases
if not aliases then return nil end
if not qid then qid= mw.wikibase.getEntityIdForCurrentPage() end
args.langobj = findLang(args.lang)
local langcode = args.langobj.code
args.lang = langcode
local out = {}
for k1, v1 in pairs(aliases) do
if v1[1].language == langcode then
for k1, v2 in ipairs(v1) do
out[#out+1] = v2.value
end
break
end
end
return assembleoutput(out, args, qid)
end
-------------------------------------------------------------------------------
-- pageId returns the page id (entity ID, Qnnn) of the current page
-- returns nothing if the page is not connected to Wikidata
-------------------------------------------------------------------------------
-- Dependencies: none
-------------------------------------------------------------------------------
p.pageId = function(frame)
return mw.wikibase.getEntityIdForCurrentPage()
end
-------------------------------------------------------------------------------
-- formatDate is a wrapper to export the private function format_Date
-------------------------------------------------------------------------------
-- Dependencies: format_Date();
-------------------------------------------------------------------------------
p.formatDate = function(frame)
return format_Date(frame.args[1], frame.args.df, frame.args.bc)
end
-------------------------------------------------------------------------------
-- location is a wrapper to export the private function _location
-- it takes the entity-id as qid or the first unnamed parameter
-- optional boolean parameter first toggles the display of the first item
-- optional boolean parameter skip toggles the display to skip to the last item
-------------------------------------------------------------------------------
-- Dependencies: _location();
-------------------------------------------------------------------------------
p.location = function(frame)
local qid = mw.text.trim(frame.args.qid or frame.args[1] or ""):upper()
if qid == "" then return "No id supplied" end
local first = mw.text.trim(frame.args.first or "")
local skip = mw.text.trim(frame.args.skip or "")
return table.concat( _location(qid, first, skip), ", " )
end
-------------------------------------------------------------------------------
-- checkBlacklist implements a test to check whether a named field is allowed
-- returns true if the field is not blacklisted (i.e. allowed)
-- returns false if the field is blacklisted (i.e. disallowed)
-- {{#if:{{#invoke:WikidataIB |checkBlacklist |name=Joe |suppressfields=Dave; Joe; Fred}} | not blacklisted | blacklisted}}
-- displays "blacklisted"
-- {{#if:{{#invoke:WikidataIB |checkBlacklist |name=Jim |suppressfields=Dave; Joe; Fred}} | not blacklisted | blacklisted}}
-- displays "not blacklisted"
-------------------------------------------------------------------------------
-- Dependencies: none
-------------------------------------------------------------------------------
p.checkBlacklist = function(frame)
local blacklist = frame.args.suppressfields or frame.args.spf or ""
local fieldname = frame.args.name or ""
if blacklist ~= "" and fieldname ~= "" then
if blacklist:find(fieldname) then
return false
else
return true
end
else
-- one of the fields is missing: let's call that "not on the list"
return true
end
end
-------------------------------------------------------------------------------
-- emptyor returns nil if its first unnamed argument is just punctuation, whitespace or html tags
-- otherwise it returns the argument unchanged (including leading/trailing space).
-- If the argument may contain "=", then it must be called explicitly:
-- |1=arg
-- (In that case, leading and trailing spaces are trimmed)
-- It finds use in infoboxes where it can replace tests like:
-- {{#if: {{#invoke:WikidatIB |getvalue |P99 |fwd=ALL}} | <span class="xxx">{{#invoke:WikidatIB |getvalue |P99 |fwd=ALL}}</span> | }}
-- with a form that uses just a single call to Wikidata:
-- {{#invoke |WikidataIB |emptyor |1= <span class="xxx">{{#invoke:WikidataIB |getvalue |P99 |fwd=ALL}}</span> }}
-------------------------------------------------------------------------------
-- Dependencies: none
-------------------------------------------------------------------------------
p.emptyor = function(frame)
local s = frame.args[1] or ""
if s == "" then return nil end
local sx = s:gsub("%s", ""):gsub("<[^>]*>", ""):gsub("%p", "")
if sx == "" then
return nil
else
return s
end
end
-------------------------------------------------------------------------------
-- labelorid is a public function to expose the output of labelOrId()
-- Pass the Q-number as |qid= or as an unnamed parameter.
-- It returns the Wikidata label for that entity or the qid if no label exists.
-------------------------------------------------------------------------------
-- Dependencies: labelOrId
-------------------------------------------------------------------------------
p.labelorid = function(frame)
local label = labelOrId( frame.args.qid or frame.args[1] )
return label
end
-------------------------------------------------------------------------------
-- getLang returns the MediaWiki language code of the current content.
-- If optional parameter |style=full, it returns the language name.
-------------------------------------------------------------------------------
-- Dependencies: none
-------------------------------------------------------------------------------
p.getLang = function(frame)
local style = (frame.args.style or ""):lower()
local langcode = mw.language.getContentLanguage().code
if style == "full" then
return mw.language.fetchLanguageName( langcode )
end
return langcode
end
-------------------------------------------------------------------------------
-- findLanguage exports the local findLang() function
-- It takes an optional language code and returns, in order of preference:
-- the code if a known language;
-- the user's language, if set;
-- the server's content language.
-------------------------------------------------------------------------------
-- Dependencies: findLang
-------------------------------------------------------------------------------
p.findLanguage = function(frame)
return findLang(frame.args.lang or frame.args[1]).code
end
-------------------------------------------------------------------------------
-- getQid returns the qid, if supplied
-- failing that, the Wikidata entity ID of the "category's main topic (P301)", if it exists
-- failing that, the Wikidata entity ID asociated with the curent page, if it exists
-- otherwise, nothing
-------------------------------------------------------------------------------
-- Dependencies: none
-------------------------------------------------------------------------------
p.getQid = function(frame)
local qid = (frame.args.qid or ""):upper()
-- check if a qid was passed; if so, return it:
if qid ~= "" then return qid end
-- check if there's a "category's main topic (P301)":
qid = mw.wikibase.getEntityIdForCurrentPage()
if qid then
local prop301 = mw.wikibase.getBestStatements(qid, "P301")
if prop301[1] then
local mctid = prop301[1].mainsnak.datavalue.value.id
if mctid then return mctid end
end
end
-- otherwise return the page qid (if any)
return qid
end
-------------------------------------------------------------------------------
-- followQid takes two optional parameters: qid and props
-- If qid is not given, it uses the qid for the connected page
-- or returns nil if there isn't one.
-- props is a list of properties, separated by punctuation.
-- If props is given, the Wikidata item for the qid is examined for each property in turn.
-- If that property contains a value that is another Wikibase-item, that item's qid is returned,
-- and the search terminates.
-- If props is not given, the qid is returned.
-------------------------------------------------------------------------------
-- Dependencies: none
-------------------------------------------------------------------------------
p.followQid = function(frame)
local qid = (frame.args.qid or ""):upper()
if qid == "" then
qid = mw.wikibase.getEntityIdForCurrentPage()
end
if not qid then return nil end
local props = (frame.args.props or ""):upper()
if props ~= "" then
for p in mw.text.gsplit(props, "%p") do -- split at punctuation and iterate
p = mw.text.trim(p)
for i, v in ipairs( mw.wikibase.getBestStatements(qid, p) ) do
local linkedid = v.mainsnak.datavalue and v.mainsnak.datavalue.value.id
if linkedid then
return linkedid
end
end -- loop through values of property to follow
end -- loop through list of properties to follow
end
return qid
end
-------------------------------------------------------------------------------
-- siteID returns the root of the globalSiteID
-- e.g. "en" for "enwiki", "enwikisource", etc.
-- treats "en-gb" as "en", etc.
-------------------------------------------------------------------------------
-- Dependencies: none
-------------------------------------------------------------------------------
p.siteID = function(frame)
local txtlang = frame:preprocess( "{{int:lang}}" ) or ""
-- This deals with specific exceptions: be-tarask -> be-x-old
if txtlang == "be-tarask" then
return "be_x_old"
end
local pos = txtlang:find("-")
local ret = ""
if pos then
ret = txtlang:sub(1, pos-1)
else
ret = txtlang
end
return ret
end
-------------------------------------------------------------------------------
-- projID returns the code used to link to the reader's language's project
-- e.g "en" for [[:en:WikidataIB]]
-- treats "en-gb" as "en", etc.
-------------------------------------------------------------------------------
-- Dependencies: none
-------------------------------------------------------------------------------
p.projID = function(frame)
local txtlang = frame:preprocess( "{{int:lang}}" ) or ""
-- This deals with specific exceptions: be-tarask -> be-x-old
if txtlang == "be-tarask" then
return "be-x-old"
end
local pos = txtlang:find("-")
local ret = ""
if pos then
ret = txtlang:sub(1, pos-1)
else
ret = txtlang
end
return ret
end
-------------------------------------------------------------------------------
-- formatNumber formats a number according to the the supplied language code ("|lang=")
-- or the default language if not supplied.
-- The number is the first unnamed parameter or "|num="
-------------------------------------------------------------------------------
-- Dependencies: findLang()
-------------------------------------------------------------------------------
p.formatNumber = function(frame)
local lang
local num = tonumber(frame.args[1] or frame.args.num) or 0
lang = findLang(frame.args.lang)
return lang:formatNum( num )
end
-------------------------------------------------------------------------------
-- examine dumps the property (the unnamed parameter or pid)
-- from the item given by the parameter 'qid' (or the other unnamed parameter)
-- or from the item corresponding to the current page if qid is not supplied.
-- e.g. {{#invoke:WikidataIB |examine |pid=P26 |qid=Q42}}
-- or {{#invoke:WikidataIB |examine |P26 |Q42}} or any combination of these
-- or {{#invoke:WikidataIB |examine |P26}} for the current page.
-------------------------------------------------------------------------------
-- Dependencies: none
-------------------------------------------------------------------------------
p.examine = function( frame )
local args
if frame.args[1] or frame.args.pid or frame.args.qid then
args = frame.args
else
args = frame:getParent().args
end
local par = {}
local pid = (args.pid or ""):upper()
local qid = (args.qid or ""):upper()
par[1] = mw.text.trim( args[1] or "" ):upper()
par[2] = mw.text.trim( args[2] or "" ):upper()
table.sort(par)
if par[2]:sub(1,1) == "P" then par[1], par[2] = par[2], par[1] end
if pid == "" then pid = par[1] end
if qid == "" then qid = par[2] end
if pid:sub(1,1) ~= "P" then return "No property supplied" end
if qid:sub(1,1) ~= "Q" then qid = mw.wikibase.getEntityIdForCurrentPage() end
if not qid then return "No item for this page" end
return "<pre>" .. mw.dumpObject( mw.wikibase.getAllStatements( qid, pid ) ) .. "</pre>"
end
-------------------------------------------------------------------------------
-- checkvalue looks for 'val' as a wikibase-item value of a property (the unnamed parameter or pid)
-- from the item given by the parameter 'qid'
-- or from the Wikidata item associated with the current page if qid is not supplied.
-- If property is not supplied, then P31 (instance of) is assumed.
-- It returns val if found or nothing if not found.
-- e.g. {{#invoke:WikidataIB |checkvalue |val=Q5 |pid=P31 |qid=Q42}}
-- or {{#invoke:WikidataIB |checkvalue |val=Q5 |P31 |qid=Q42}}
-- or {{#invoke:WikidataIB |checkvalue |val=Q5 |qid=Q42}}
-- or {{#invoke:WikidataIB |checkvalue |val=Q5 |P31}} for the current page.
-------------------------------------------------------------------------------
-- Dependencies: none
-------------------------------------------------------------------------------
p.checkvalue = function( frame )
local args
if frame.args.val then
args = frame.args
else
args = frame:getParent().args
end
local val = args.val
if not val then return nil end
local pid = mw.text.trim(args.pid or args[1] or "P31"):upper()
local qid = (args.qid or ""):upper()
if pid:sub(1,1) ~= "P" then return nil end
if qid:sub(1,1) ~= "Q" then qid = mw.wikibase.getEntityIdForCurrentPage() end
if not qid then return nil end
local stats = mw.wikibase.getAllStatements( qid, pid )
if not stats[1] then return nil end
if stats[1].mainsnak.datatype == "wikibase-item" then
for k, v in pairs( stats ) do
if v.mainsnak.snaktype == "value" and v.mainsnak.datavalue.value.id == val then
return val
end
end
end
return nil
end
-------------------------------------------------------------------------------
-- url2 takes a parameter url= that is a proper url and formats it for use in an infobox.
-- If no parameter is supplied, it returns nothing.
-- This is the equivalent of Template:URL
-- but it keeps the "edit at Wikidata" pen icon out of the microformat.
-- Usually it will take its url parameter directly from a Wikidata call:
-- e.g. {{#invoke:WikidataIB |url2 |url={{wdib |P856 |qid=Q23317 |fwd=ALL |osd=no}}
-------------------------------------------------------------------------------
-- Dependencies: none
-------------------------------------------------------------------------------
p.url2 = function(frame)
local txt = frame.args.url or ""
if txt == "" then return nil end
local url, icon = txt:match("(.+) (.+)")
url = url or txt
icon = icon or ""
local prot, addr = url:match("(http[s]*://)(.+)")
prot = prot or url
addr = addr or ""
local disp, n = addr:gsub("%.", "<wbr/>%.")
return '<span class="url">[' .. prot .. addr .. " " .. disp .. "]</span> " .. icon
end
-------------------------------------------------------------------------------
-- getWebsite fetches the Official website (P856) and formats it for use in an infobox.
-- This is similar to Template:Official website but with a url displayed,
-- and it adds the "edit at Wikidata" pen icon beyond the microformat if enabled.
-- A local value will override the Wikidata value. "NONE" returns nothing.
-- e.g. {{#invoke:WikidataIB |getWebsite |qid= |noicon= |lang= |url= }}
-------------------------------------------------------------------------------
-- Dependencies: findLang(); parseParam();
-------------------------------------------------------------------------------
p.getWebsite = function(frame)
local url = frame.args.url or ""
if url:upper() == "NONE" then return nil end
local qid = frame.args.qid or ""
if qid == "" then qid = mw.wikibase.getEntityIdForCurrentPage() end
if not qid then return nil end
local urls = {}
local quals = {}
if url == "" then
local prop856 = mw.wikibase.getBestStatements(qid, "P856")
for k, v in pairs(prop856) do
if v.mainsnak.snaktype == "value" then
urls[#urls+1] = v.mainsnak.datavalue.value
if v.qualifiers and v.qualifiers["P1065"] then
-- just take the first archive url (P1065)
local au = v.qualifiers["P1065"][1]
if au.snaktype == "value" then
quals[#urls] = au.datavalue.value
end -- test for archive url having a value
end -- test for qualifers
end -- test for website having a value
end -- loop through website(s)
else
urls[1] = url
end
if #urls == 0 then return nil end
local out = {}
for i, u in ipairs(urls) do
local link = quals[i] or u
local prot, addr = u:match("(http[s]*://)(.+)")
addr = addr or u
local disp, n = addr:gsub("%.", "<wbr/>%.")
out[#out+1] = '<span class="url">[' .. link .. " " .. disp .. "]</span>"
end
local langcode = findLang(frame.args.lang).code
local noicon = parseParam(frame.args.noicon, false)
if url == "" and not noicon then
out[#out] = out[#out] .. createicon(langcode, qid, "P856")
end
local ret = ""
if #out > 1 then
ret = mw.getCurrentFrame():expandTemplate{title = "ubl", args = out}
else
ret = out[1]
end
return ret
end
-------------------------------------------------------------------------------
-- getAllLabels fetches the set of labels and formats it for display as wikitext.
-- It takes a parameter 'qid' for arbitrary access, otherwise it uses the current page.
-------------------------------------------------------------------------------
-- Dependencies: none
-------------------------------------------------------------------------------
p.getAllLabels = function(frame)
local args = frame.args or frame:getParent().args or {}
local qid = args.qid
if qid == "" then qid = nil end
local entity = mw.wikibase.getEntity(qid)
if not entity then return i18n["entity-not-found"] end
local labels = entity.labels
if not labels then return i18n["labels-not-found"] end
local out = {}
for k, v in pairs(labels) do
out[#out+1] = v.value .. " (" .. v.language .. ")"
end
return table.concat(out, "; ")
end
-------------------------------------------------------------------------------
-- getAllDescriptions fetches the set of descriptions and formats it for display as wikitext.
-- It takes a parameter 'qid' for arbitrary access, otherwise it uses the current page.
-------------------------------------------------------------------------------
-- Dependencies: none
-------------------------------------------------------------------------------
p.getAllDescriptions = function(frame)
local args = frame.args or frame:getParent().args or {}
local qid = args.qid
if qid == "" then qid = nil end
local entity = mw.wikibase.getEntity(qid)
if not entity then return i18n["entity-not-found"] end
local descriptions = entity.descriptions
if not descriptions then return i18n["descriptions-not-found"] end
local out = {}
for k, v in pairs(descriptions) do
out[#out+1] = v.value .. " (" .. v.language .. ")"
end
return table.concat(out, "; ")
end
-------------------------------------------------------------------------------
-- getAllAliases fetches the set of aliases and formats it for display as wikitext.
-- It takes a parameter 'qid' for arbitrary access, otherwise it uses the current page.
-------------------------------------------------------------------------------
-- Dependencies: none
-------------------------------------------------------------------------------
p.getAllAliases = function(frame)
local args = frame.args or frame:getParent().args or {}
local qid = args.qid
if qid == "" then qid = nil end
local entity = mw.wikibase.getEntity(qid)
if not entity then return i18n["entity-not-found"] end
local aliases = entity.aliases
if not aliases then return i18n["aliases-not-found"] end
local out = {}
for k1, v1 in pairs(aliases) do
local lang = v1[1].language
local val = {}
for k1, v2 in ipairs(v1) do
val[#val+1] = v2.value
end
out[#out+1] = table.concat(val, ", ") .. " (" .. lang .. ")"
end
return table.concat(out, "; ")
end
-------------------------------------------------------------------------------
-- showNoLinks displays the article titles that should not be linked.
-------------------------------------------------------------------------------
-- Dependencies: none
-------------------------------------------------------------------------------
p.showNoLinks = function(frame)
local out = {}
for k, v in pairs(donotlink) do
out[#out+1] = k
end
table.sort( out )
return table.concat(out, "; ")
end
return p
-------------------------------------------------------------------------------
-- List of exported functions
-------------------------------------------------------------------------------
-- getValue
-- getPreferredValue
-- getCoords
-- getQualifierValue
-- getValueByQual
-- getValueByLang
-- getLink
-- getLabel
-- getAT
-- getDescription
-- getAliases
-- pageId
-- formatDate
-- location
-- checkBlacklist
-- emptyor
-- labelorid
-- getLang
-- findLanguage
-- getQID
-- followQid
-- siteID
-- projID
-- formatNumber
-- examine
-- checkvalue
-- url2
-- getWebsite
-- getAllLabels
-- getAllDescriptions
-- getAllAliases
-------------------------------------------------------------------------------
5emgdj3p3bas9yll8d55mhsk63aoo3y
Module:Arguments
828
23724
183885
171637
2022-08-04T14:43:46Z
Xiplus
4323
已保护“[[Module:Arguments]]”:高風險模板:4763引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
Scribunto
text/plain
-- This module provides easy processing of arguments passed to Scribunto from
-- #invoke. It is intended for use by other Lua modules, and should not be
-- called from #invoke directly.
local libraryUtil = require('libraryUtil')
local checkType = libraryUtil.checkType
local arguments = {}
-- Generate four different tidyVal functions, so that we don't have to check the
-- options every time we call it.
local function tidyValDefault(key, val)
if type(val) == 'string' then
val = val:match('^%s*(.-)%s*$')
if val == '' then
return nil
else
return val
end
else
return val
end
end
local function tidyValTrimOnly(key, val)
if type(val) == 'string' then
return val:match('^%s*(.-)%s*$')
else
return val
end
end
local function tidyValRemoveBlanksOnly(key, val)
if type(val) == 'string' then
if val:find('%S') then
return val
else
return nil
end
else
return val
end
end
local function tidyValNoChange(key, val)
return val
end
function arguments.getArgs(frame, options)
checkType('getArgs', 1, frame, 'table', true)
checkType('getArgs', 2, options, 'table', true)
frame = frame or {}
options = options or {}
--[[
-- Get the argument tables. If we were passed a valid frame object, get the
-- frame arguments (fargs) and the parent frame arguments (pargs), depending
-- on the options set and on the parent frame's availability. If we weren't
-- passed a valid frame object, we are being called from another Lua module
-- or from the debug console, so assume that we were passed a table of args
-- directly, and assign it to a new variable (luaArgs).
--]]
local fargs, pargs, luaArgs
if type(frame.args) == 'table' and type(frame.getParent) == 'function' then
if options.wrappers then
--[[
-- The wrappers option makes Module:Arguments look up arguments in
-- either the frame argument table or the parent argument table, but
-- not both. This means that users can use either the #invoke syntax
-- or a wrapper template without the loss of performance associated
-- with looking arguments up in both the frame and the parent frame.
-- Module:Arguments will look up arguments in the parent frame
-- if it finds the parent frame's title in options.wrapper;
-- otherwise it will look up arguments in the frame object passed
-- to getArgs.
--]]
local parent = frame:getParent()
if not parent then
fargs = frame.args
else
local title = parent:getTitle():gsub('/sandbox$', '')
local found = false
if type(options.wrappers) == 'table' then
for _,v in pairs(options.wrappers) do
if v == title then
found = true
break
end
end
elseif options.wrappers == title then
found = true
end
-- We test for false specifically here so that nil (the default) acts like true.
if found or options.frameOnly == false then
pargs = parent.args
end
if not found or options.parentOnly == false then
fargs = frame.args
end
end
else
-- options.wrapper isn't set, so check the other options.
if not options.parentOnly then
fargs = frame.args
end
if not options.frameOnly then
local parent = frame:getParent()
pargs = parent and parent.args or nil
end
end
if options.parentFirst then
fargs, pargs = pargs, fargs
end
else
luaArgs = frame
end
-- Set the order of precedence of the argument tables. If the variables are
-- nil, nothing will be added to the table, which is how we avoid clashes
-- between the frame/parent args and the Lua args.
local argTables = {fargs}
argTables[#argTables + 1] = pargs
argTables[#argTables + 1] = luaArgs
--[[
-- Generate the tidyVal function. If it has been specified by the user, we
-- use that; if not, we choose one of four functions depending on the
-- options chosen. This is so that we don't have to call the options table
-- every time the function is called.
--]]
local tidyVal = options.valueFunc
if tidyVal then
if type(tidyVal) ~= 'function' then
error(
"bad value assigned to option 'valueFunc'"
.. '(function expected, got '
.. type(tidyVal)
.. ')',
2
)
end
elseif options.trim ~= false then
if options.removeBlanks ~= false then
tidyVal = tidyValDefault
else
tidyVal = tidyValTrimOnly
end
else
if options.removeBlanks ~= false then
tidyVal = tidyValRemoveBlanksOnly
else
tidyVal = tidyValNoChange
end
end
--[[
-- Set up the args, metaArgs and nilArgs tables. args will be the one
-- accessed from functions, and metaArgs will hold the actual arguments. Nil
-- arguments are memoized in nilArgs, and the metatable connects all of them
-- together.
--]]
local args, metaArgs, nilArgs, metatable = {}, {}, {}, {}
setmetatable(args, metatable)
local function mergeArgs(iterator, tables)
--[[
-- Accepts multiple tables as input and merges their keys and values
-- into one table using the specified iterator. If a value is already
-- present it is not overwritten; tables listed earlier have precedence.
-- We are also memoizing nil values, but those values can be
-- overwritten.
--]]
for _, t in ipairs(tables) do
for key, val in iterator(t) do
if metaArgs[key] == nil then
local tidiedVal = tidyVal(key, val)
if tidiedVal == nil then
nilArgs[key] = true
else
metaArgs[key] = tidiedVal
end
end
end
end
end
--[[
-- Define metatable behaviour. Arguments are memoized in the metaArgs table,
-- and are only fetched from the argument tables once. Fetching arguments
-- from the argument tables is the most resource-intensive step in this
-- module, so we try and avoid it where possible. For this reason, nil
-- arguments are also memoized, in the nilArgs table. Also, we keep a record
-- in the metatable of when pairs and ipairs have been called, so we do not
-- run pairs and ipairs on the argument tables more than once. We also do
-- not run ipairs on fargs and pargs if pairs has already been run, as all
-- the arguments will already have been copied over.
--]]
metatable.__index = function (t, key)
--[[
-- Fetches an argument when the args table is indexed. First we check
-- to see if the value is memoized, and if not we try and fetch it from
-- the argument tables. When we check memoization, we need to check
-- metaArgs before nilArgs, as both can be non-nil at the same time.
-- If the argument is not present in metaArgs, we also check whether
-- pairs has been run yet. If pairs has already been run, we return nil.
-- This is because all the arguments will have already been copied into
-- metaArgs by the mergeArgs function, meaning that any other arguments
-- must be nil.
--]]
local val = metaArgs[key]
if val ~= nil then
return val
elseif metatable.donePairs or nilArgs[key] then
return nil
end
for _, argTable in ipairs(argTables) do
local argTableVal = tidyVal(key, argTable[key])
if argTableVal == nil then
nilArgs[key] = true
else
metaArgs[key] = argTableVal
return argTableVal
end
end
return nil
end
metatable.__newindex = function (t, key, val)
-- This function is called when a module tries to add a new value to the
-- args table, or tries to change an existing value.
if options.readOnly then
error(
'could not write to argument table key "'
.. tostring(key)
.. '"; the table is read-only',
2
)
elseif options.noOverwrite and args[key] ~= nil then
error(
'could not write to argument table key "'
.. tostring(key)
.. '"; overwriting existing arguments is not permitted',
2
)
elseif val == nil then
--[[
-- If the argument is to be overwritten with nil, we need to erase
-- the value in metaArgs, so that __index, __pairs and __ipairs do
-- not use a previous existing value, if present; and we also need
-- to memoize the nil in nilArgs, so that the value isn't looked
-- up in the argument tables if it is accessed again.
--]]
metaArgs[key] = nil
nilArgs[key] = true
else
metaArgs[key] = val
end
end
metatable.__pairs = function ()
-- Called when pairs is run on the args table.
if not metatable.donePairs then
mergeArgs(pairs, argTables)
metatable.donePairs = true
metatable.doneIpairs = true
end
return pairs(metaArgs)
end
metatable.__ipairs = function ()
-- Called when ipairs is run on the args table.
if not metatable.doneIpairs then
mergeArgs(ipairs, argTables)
metatable.doneIpairs = true
end
return ipairs(metaArgs)
end
return args
end
return arguments
m9ddo769dkkvlkz48buir34035j4qhc
Module:I18n
828
23815
183899
159980
2022-08-04T14:46:06Z
Xiplus
4323
已保护“[[Module:I18n]]”:高風險模板:874引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
Scribunto
text/plain
local p = {}
-- Credit to http://stackoverflow.com/a/1283608/2644759
-- cc-by-sa 3.0
local function tableMerge(t1, t2, overwrite)
for k,v in pairs(t2) do
if type(v) == "table" and type(t1[k]) == "table" then
-- since type(t1[k]) == type(v) == "table", so t1[k] and v is true
tableMerge(t1[k], v, overwrite) -- t2[k] == v
else
if overwrite or t1[k] == nil then t1[k] = v end
end
end
return t1
end
function p.loadI18n(name, i18n_arg)
local exist, res = pcall(require, name)
if exist and next(res) ~= nil then
if i18n_arg then
tableMerge(i18n_arg, res.i18n, true)
elseif type(i18n) == "table" then
-- merge to global i18n
tableMerge(i18n, res.i18n, true)
end
end
end
function p.loadI18nFrame(frame, i18n_arg)
p.loadI18n(frame:getTitle().."/i18n", i18n_arg)
end
return p
pggbb6d78fzqixjoboirtmh9ljkxsuq
User:TKsdik8900/zh-hant.css
2
24777
183929
181221
2022-08-05T00:02:00Z
TKsdik8900
12598
css
text/css
div#content h1, div#content h2, div#content #firstHeading, h1#firstHeading {
font-family: 'Georgia', 'Times', 'Noto Serif TC', 'Source Han Serif TC', serif;
font-weight: 500;
}
div.mw-category-generated, div.mwe-popups-container {
font-family: 'PingFang TC', 'Noto Sans TC', 'Source Han Sans TC', sans-serif;
}
#p-logo a:lang(zh-hant), #p-logo a:lang(zh-hk), #p-logo a:lang(zh-mo), #p-logo a:lang(zh-tw) {
background-image: url(https://upload.wikimedia.org/wikipedia/commons/b/b9/Wikivoyage-Logo-v3-zh-hant.svg) !important;
background-size: 152px auto;
}
5phimnszebx3lwq8xs73z4ffs79flka
User:TKsdik8900/zh-hans.css
2
24778
183928
181220
2022-08-05T00:01:47Z
TKsdik8900
12598
css
text/css
div#content h1, div#content h2, div#content #firstHeading, h1#firstHeading {
font-family: 'Georgia', 'Times', 'Noto Serif SC', 'Source Han Serif SC', serif;
font-weight: 500;
}
div.mw-category-generated, div.mwe-popups-container {
font-family: 'PingFang SC', 'Noto Sans SC', 'Source Han Sans SC', sans-serif;
}
#p-logo a:lang(zh-hant), #p-logo a:lang(zh-hk), #p-logo a:lang(zh-mo), #p-logo a:lang(zh-tw) {
background-image: url(https://upload.wikimedia.org/wikipedia/commons/d/d8/Wikivoyage-Logo-v3-zh-hans.svg) !important;
background-size: 152px auto;
}
nzrfqacwbqtij4spm3xslkjszw8qxfc
Module:Anchor
828
25138
183884
178485
2022-08-04T14:43:36Z
Xiplus
4323
已保护“[[Module:Anchor]]”:高風險模板:833引用([编辑=仅允许自动确认用户](无限期)[移动=仅允许自动确认用户](无限期))
Scribunto
text/plain
--模塊嵌入{{anchor}}
local getArgs = require('Module:Arguments').getArgs
local tableTools = require('Module:TableTools')
local p = {}
function p.main(frame)
-- Get the positional arguments from #invoke, remove any nil values,
-- and pass them to p._main.
local args = getArgs(frame)
local argArray = tableTools.compressSparseArray(args)
return p._main(unpack(argArray))
end
function p._main(...)
-- Generate the list of anchors.
local anchors = {...}
local ret = {}
for _, anchor in ipairs(anchors) do
ret[#ret + 1] = '<span id="' .. anchor .. '"></span>'
end
return table.concat(ret)
end
return p
b9b1m9cbawkszg8kojkuc0nie4gvx3h
User:Xiplus/protect-config.json
2
25483
183856
2022-08-04T14:26:34Z
Xiplus
4323
创建页面,内容为“{ "enable": true, "summary": "高風險模板:{0}引用", "template_full": 0, "template_temp": 0, "template_semi": 500, "exclude_regex": "" }”
json
application/json
{
"enable": true,
"summary": "高風險模板:{0}引用",
"template_full": 0,
"template_temp": 0,
"template_semi": 500,
"exclude_regex": ""
}
02vjdmbkglo1rxt44w8jgso27hqbilg
深圳/龙岗
0
25484
183926
2022-08-04T16:07:28Z
Stevenlam11
15241
创建页面,内容为“{{pagebanner|頁名=龙岗|caption=}} '''龙岗''' 是深圳的一個市轄區。郊區的發展已經包圍了這個地區的老客家村莊。 ==抵达== {{mapframe|22.72275|114.24295|zoom=10|width=400|height=600}}{{mapshape|wikidata=Q1001406}} {{mapshapes|Q867680}} {{mapshape|wikidata=Q16924991|type=geoline|stroke=#44a729|stroke-width=2|stroke-opacity=0.7}} <!-- tram --> {{mapshape|wikidata=Q842103|type=geoline|stroke=#00AB39|stroke-width=4|stroke-opacity=…”
wikitext
text/x-wiki
{{pagebanner|頁名=龙岗|caption=}}
'''龙岗''' 是深圳的一個市轄區。郊區的發展已經包圍了這個地區的老客家村莊。
==抵达==
{{mapframe|22.72275|114.24295|zoom=10|width=400|height=600}}{{mapshape|wikidata=Q1001406}}
{{mapshapes|Q867680}}
{{mapshape|wikidata=Q16924991|type=geoline|stroke=#44a729|stroke-width=2|stroke-opacity=0.7}} <!-- tram -->
{{mapshape|wikidata=Q842103|type=geoline|stroke=#00AB39|stroke-width=4|stroke-opacity=1}} <!-- 1 Putting it last to be on top of other lines for greater visibility because it's almost the same color as streets -->
地鐵[[File:ShenzhenMetroLine3.svg|45px|link=]]、[[File:ShenzhenMetroLine5.svg|45px|link=]]、[[File:ShenzhenMetroLine6.svg|45px|link=]]、[[File:ShenzhenMetroLine10.svg|45px|link=]]、[[File:ShenzhenMetroLine20.svg|45px|link=]]服務龙岗地區。
* {{listing |type=go
| name=深圳東站 | alt= | url= | email=
| address=广东省深圳市龙岗区布吉街道吉华路94号 | lat=22.603889 | long=114.114444 | directions=地铁3、5号线布吉站下车
| hours= | price=
| wikipedia=深圳東站 | wikidata=Q4023043
| content=廣深鐵路上的一座車站。
}}
==观光==
* {{listing | type=see
| name=大芬油畫村 | alt= Dàfēn Yóuhuà Cūn | url= | email=
| address=广东省深圳市龙岗区布吉街道大芬社区 | lat=22.61179519385492 | long=114.13140220800832 | directions=地铁3号线大芬站下车
| phone=+86 755 84732622 | tollfree=
| hours= | price=
| wikipedia=大芬村 | image=Artists at work in Dafen Oil Painting Village.jpg | wikidata=Q1019090
| lastedit=2018-12-05
| content=在1988年,一個名叫黃剛的香港商人,他的生意是做複製藝術的,他認為香港沒有未來,並在大芬設立了基地,儘管它不在經濟特區。很快,來自中國各地的藝術家也加入了他的行列,其中有一些受過古典訓練,但也有許多剛從稻田出來的才華橫溢的業餘愛好者。大芬就這樣誕生了。它坐落在曾經的客家村莊,由一條條街的工作室、畫廊和出售油畫、水彩畫和刺繡畫的商店組成。仔細檢查,因為有些藝術品是機器打印的,而不是手工製作的。大部分都是垃圾,但一些中國最優秀的藝術家也在大芬設有工作室。只需幾百元,您就可以委託藝術家複製您最喜歡的藝術品、結婚照或家人的照片。堅持“A”品質——雖然貴一點,但很值得。您還可以在等待時獲得令人難以置信的快速構圖和廉價的藝術用品。在他們的工作室與藝術家一起喝茶,或向專家學習一點中國書法。還有一個漂亮的現代畫廊,展出大芬當地畫家的作品。
}}
* {{listing | type=see
| name=深圳中医药博物馆 | alt= | url= | email=
| address=广东省深圳市龙岗区体育新城大运路1号龙岗区中医院科教楼2楼 | lat=22.7107319384 | long=114.2099293850 | directions=
| phone=+86 755 28338833 | tollfree=
| hours=08:00-12:00, 14:00-17:00, 周六閉館 | price=免費
| wikipedia= | wikidata=
| content=
}}
*{{see
| name=大鹏所城 | alt=; Dàpéng Suǒchéng | url=http://www.dapengsuocheng.cn/ | email=dpsc@chinaoct.com
| address=广东省深圳市龙岗区大鹏街道鹏城社区南门围二巷八号 | lat=22.59788 | long=114.50770 | directions=
| phone=+86 755-88883333 | tollfree= | fax=
| hours=周一至周五, 09:30-18:00 | price=免費
| wikipedia=大鹏所城 | image=Dapengcheng.JPG | wikidata=Q1022212
| content=大鵬砲台是一座保存完好的明代砲台。始建於1394年,與其他要塞分擔守衛珠江口的職責,鴉片戰爭期間在江河保衛戰中表現突出。它保存得非常完好,並正在作為博物館進行修復。鄰近村莊的舊建築已變成出售紀念品、食品和衣服的商店,附近是受歡迎的海灘和巨大的佛教寺廟(東山寺)。
}}
*{{listing | type=see
| name=龙岗客家民俗博物馆 | alt= | url= | email=hakkas1817@21cn.com
| address=广东省深圳市龙岗区龙岗街道南联社区罗瑞合北街一号 | lat=22.730665 | long=114.261452 | directions=地铁3号线南联站下车步行至C1出口
| phone=+86 755 84296258 | tollfree=
| hours=09:00-17:30 | price=¥10
| wikipedia=龙岗客家民俗博物馆 | wikidata=Q431828
| content=深圳市有一半原來是客家人。這是在 17 世紀康熙皇帝為打擊台灣的明朝擁護者而將海岸線減少到 30 公里深度之後發生的。當海岸重新有人居住時,客家人(13 世紀華北移民的後裔)來得最快。客家和廣東人之間的關係經常緊張。在 19 世紀,有 50 萬人在客家和廣東人之間的內亂中喪生。因此,大多數任何規模的客家人聚居地都設防得嚴嚴實實。中國南方最常見的防禦工事形式是“圍”(圍圍),其中最大的防禦工事之一是龍崗的鶴湖圍。它兼作客家文化的半露天博物館,非常安靜,沒有太多遊客。
}}
[[File:甘坑客家小镇 2.jpg|thumb|甘坑客家小鎮的傳統建築]]
* {{see
| name=甘坑客家小镇 | alt= Gānkēng Kèjiā xiǎo zhèn | url= | email=
| address=广东省深圳市龙岗区吉华街道甘坑村 | lat=22.65753 | long=114.10033 | directions=地铁10号线甘坑站
| phone= | tollfree=
| hours= | price=免費 (包括博物館)
| wikipedia=甘坑客家小镇 | image=甘坑客家小镇 1.jpg
| content=另一個擁有許多傳統建築的客家小鎮:沿著古老的狹窄小巷走,參觀家用工具和文物博物館,進入山上俯瞰小鎮的巨大圓屋,並在各種商店和餐館品嚐客家美食。
}}
==活动==
*{{do
| name=龙岗高尔夫 | alt= | url=http://www.golfshenzhen.com/golfcourses/longgangpublicgolfcourse.php | email=
| address=广东省深圳市龙岗区橫崗水官高速公路附近 | lat=22.6763 | long=114.1984 | directions=
| phone=+86 755 28937188 | tollfree= | fax=
| hours= | price=
| content=這個球場是一位前深圳市政府官員的心血結晶,他想把高爾夫帶給大眾。它是一個 18 洞 72 標準桿的球場,位於龍崗區連綿起伏的丘陵上。該球場的創始人希望將果嶺費保持在商業高爾夫球場的 20-30%。
}}
*{{do
| name=桔钓沙 | alt= Júdiàoshā | url= | email=
| address=广东省深圳市龙岗区南澳新东路 | lat=22.55932 | long=114.55076 | directions=
| phone= | tollfree= | fax=
| hours= | price=¥35
| content=
}}
[[File:西冲风光Scenery in ShenZhen, China - panoramio.jpg|thumb|西冲海滩]]
*{{do
| name=西冲海滩 | alt= | url= | email=
| address=广东省深圳市龙岗区南澳新屋村68号 | lat=22.4750 | long=114.5288 | directions=
| phone= | tollfree= | fax=
| hours= | price=
| content=美麗的西沖海灘遠離市中心,過了大梅沙。這個海灘不太發達,比深圳的其他海灘安靜得多。
}}
==购物==
* {{listing | type=buy
| name=深圳书城龙岗城 | alt= | url=https://www.szbookmall.com/ | email=
| address=广东省深圳市龙岗区龙城街道龙翔大道8028-4号文化中心C区 | lat=22.72288 | long=114.24581 | directions=
| phone=+86 755-2890 3001 | tollfree=
| hours= | price=
| wikipedia=深圳書城 | wikidata=
| content=深圳本土大型書店連鎖書城龍崗分店。尋找一座紅色的大建築。
}}
* {{buy
| name=深圳龙岗万科广场 | url= | email=
| address=广东省深圳市龙岗区龙城街道龙翔大道7188号 | lat=22.71440 | long=114.24360 | directions=
| phone= | tollfree= | fax=
| hours=周日至周四:10:00-22:00,周五至周六:10:00-22:30 | price=
| wikipedia=深圳龙岗万科广场 | wikidata=
| content=
}}
* {{buy
| name=深圳布吉萬象汇 | url= | email=
| address=广东省深圳市龙岗区布吉街道深特变科技园 | lat=22.59395 | long=113.90134 | directions=
| phone=+86 137-6036 7653 | tollfree= | fax=
| hours=00:00-22:00 | price=
| wikipedia= | wikidata=
| content=
}}
==用餐==
* {{listing | type=eat
| name=春梅园海鲜大酒楼 | alt= | url= | email=
| address=中國广东省深圳市龙岗区布吉街道百鸽路口 | lat=22.59833 | long=114.12243 | directions=
| phone=+86 755-2888 8388 | tollfree=
| hours=08:00–14:00, 17:00–22:00 | price=¥78/人
| image=
| content=
}}
* {{listing | type=eat
| name=鹏城饭馆 | alt= | url= | email=
| address=广东省深圳市龙岗区大鹏所城东城巷21号 | lat=22.59607 | long=114.51377 | directions=
| phone=+86 755-8431 5341 | tollfree=
| hours=09:30–14:30, 16:30–22:00 | price=¥78/人
| wikipedia= | wikidata= | image=
| content=
}}
* {{eat
| name=权仔农家菜馆 | alt= | url= | email=
| address=广东省深圳市龙岗区六联六联路95号 | lat=22.77980 | long=114.32433 | directions=
| phone=+86 755-8405 5333 | tollfree=
| hours=11:00–14:00, 17:00–22:00 | price=¥74/人
| image=
| photo=
| content=
}}
==夜生活==
==住宿==
* {{sleep
| name=深圳龍崗珠江皇冠假日酒店 | alt= | url=http://www.ihg.com/crowneplaza/hotels/us/en/shenzhen/szxtr/hoteldetail | email=
| address=广东省深圳市龙岗区龙城街道龙翔大道9009号 | lat=22.7258 | long=114.2454 | directions=
| phone=+86 755 3318 1888 | tollfree= | fax=
| checkin= | checkout= | price=
| content=優質的客房。酒店和附近街道的餐廳很多不同選擇。
}}
* {{sleep
| name=三联大酒店 | alt= | url=http://sanlian.hotels-in-shenzhen.com/zh/ | email=
| address=广东省深圳市龙岗区布吉街道联布北路1号 | lat=22.62812 | long=114.11510 | directions=
| phone=+86 755 2828 6988 | tollfree= | fax=
| checkin= | checkout= | price=¥211起
| image=
| content=
}}
* {{listing | type=sleep
| name=中海凯骊酒店 | alt= | url=http://www.pavilionhotelshenzhenlonggang.com/ | email=
| address=广东省深圳市龙岗区大运路168号 | lat=22.70337 | long=114.21531 | directions=
| phone=+86 755-8989 9888 | tollfree=
| checkin= | checkout= | price=¥590起
| content=五星級酒店
}}
==通信==
{{IsPartOf|深圳}}
{{outlinedistrict}}
{{geo|22.72275|114.24295}}
5xa6f9rcsz5sbg6flx7aln5iildsozo
183927
183926
2022-08-04T16:07:57Z
Stevenlam11
15241
/* 住宿 */
wikitext
text/x-wiki
{{pagebanner|頁名=龙岗|caption=}}
'''龙岗''' 是深圳的一個市轄區。郊區的發展已經包圍了這個地區的老客家村莊。
==抵达==
{{mapframe|22.72275|114.24295|zoom=10|width=400|height=600}}{{mapshape|wikidata=Q1001406}}
{{mapshapes|Q867680}}
{{mapshape|wikidata=Q16924991|type=geoline|stroke=#44a729|stroke-width=2|stroke-opacity=0.7}} <!-- tram -->
{{mapshape|wikidata=Q842103|type=geoline|stroke=#00AB39|stroke-width=4|stroke-opacity=1}} <!-- 1 Putting it last to be on top of other lines for greater visibility because it's almost the same color as streets -->
地鐵[[File:ShenzhenMetroLine3.svg|45px|link=]]、[[File:ShenzhenMetroLine5.svg|45px|link=]]、[[File:ShenzhenMetroLine6.svg|45px|link=]]、[[File:ShenzhenMetroLine10.svg|45px|link=]]、[[File:ShenzhenMetroLine20.svg|45px|link=]]服務龙岗地區。
* {{listing |type=go
| name=深圳東站 | alt= | url= | email=
| address=广东省深圳市龙岗区布吉街道吉华路94号 | lat=22.603889 | long=114.114444 | directions=地铁3、5号线布吉站下车
| hours= | price=
| wikipedia=深圳東站 | wikidata=Q4023043
| content=廣深鐵路上的一座車站。
}}
==观光==
* {{listing | type=see
| name=大芬油畫村 | alt= Dàfēn Yóuhuà Cūn | url= | email=
| address=广东省深圳市龙岗区布吉街道大芬社区 | lat=22.61179519385492 | long=114.13140220800832 | directions=地铁3号线大芬站下车
| phone=+86 755 84732622 | tollfree=
| hours= | price=
| wikipedia=大芬村 | image=Artists at work in Dafen Oil Painting Village.jpg | wikidata=Q1019090
| lastedit=2018-12-05
| content=在1988年,一個名叫黃剛的香港商人,他的生意是做複製藝術的,他認為香港沒有未來,並在大芬設立了基地,儘管它不在經濟特區。很快,來自中國各地的藝術家也加入了他的行列,其中有一些受過古典訓練,但也有許多剛從稻田出來的才華橫溢的業餘愛好者。大芬就這樣誕生了。它坐落在曾經的客家村莊,由一條條街的工作室、畫廊和出售油畫、水彩畫和刺繡畫的商店組成。仔細檢查,因為有些藝術品是機器打印的,而不是手工製作的。大部分都是垃圾,但一些中國最優秀的藝術家也在大芬設有工作室。只需幾百元,您就可以委託藝術家複製您最喜歡的藝術品、結婚照或家人的照片。堅持“A”品質——雖然貴一點,但很值得。您還可以在等待時獲得令人難以置信的快速構圖和廉價的藝術用品。在他們的工作室與藝術家一起喝茶,或向專家學習一點中國書法。還有一個漂亮的現代畫廊,展出大芬當地畫家的作品。
}}
* {{listing | type=see
| name=深圳中医药博物馆 | alt= | url= | email=
| address=广东省深圳市龙岗区体育新城大运路1号龙岗区中医院科教楼2楼 | lat=22.7107319384 | long=114.2099293850 | directions=
| phone=+86 755 28338833 | tollfree=
| hours=08:00-12:00, 14:00-17:00, 周六閉館 | price=免費
| wikipedia= | wikidata=
| content=
}}
*{{see
| name=大鹏所城 | alt=; Dàpéng Suǒchéng | url=http://www.dapengsuocheng.cn/ | email=dpsc@chinaoct.com
| address=广东省深圳市龙岗区大鹏街道鹏城社区南门围二巷八号 | lat=22.59788 | long=114.50770 | directions=
| phone=+86 755-88883333 | tollfree= | fax=
| hours=周一至周五, 09:30-18:00 | price=免費
| wikipedia=大鹏所城 | image=Dapengcheng.JPG | wikidata=Q1022212
| content=大鵬砲台是一座保存完好的明代砲台。始建於1394年,與其他要塞分擔守衛珠江口的職責,鴉片戰爭期間在江河保衛戰中表現突出。它保存得非常完好,並正在作為博物館進行修復。鄰近村莊的舊建築已變成出售紀念品、食品和衣服的商店,附近是受歡迎的海灘和巨大的佛教寺廟(東山寺)。
}}
*{{listing | type=see
| name=龙岗客家民俗博物馆 | alt= | url= | email=hakkas1817@21cn.com
| address=广东省深圳市龙岗区龙岗街道南联社区罗瑞合北街一号 | lat=22.730665 | long=114.261452 | directions=地铁3号线南联站下车步行至C1出口
| phone=+86 755 84296258 | tollfree=
| hours=09:00-17:30 | price=¥10
| wikipedia=龙岗客家民俗博物馆 | wikidata=Q431828
| content=深圳市有一半原來是客家人。這是在 17 世紀康熙皇帝為打擊台灣的明朝擁護者而將海岸線減少到 30 公里深度之後發生的。當海岸重新有人居住時,客家人(13 世紀華北移民的後裔)來得最快。客家和廣東人之間的關係經常緊張。在 19 世紀,有 50 萬人在客家和廣東人之間的內亂中喪生。因此,大多數任何規模的客家人聚居地都設防得嚴嚴實實。中國南方最常見的防禦工事形式是“圍”(圍圍),其中最大的防禦工事之一是龍崗的鶴湖圍。它兼作客家文化的半露天博物館,非常安靜,沒有太多遊客。
}}
[[File:甘坑客家小镇 2.jpg|thumb|甘坑客家小鎮的傳統建築]]
* {{see
| name=甘坑客家小镇 | alt= Gānkēng Kèjiā xiǎo zhèn | url= | email=
| address=广东省深圳市龙岗区吉华街道甘坑村 | lat=22.65753 | long=114.10033 | directions=地铁10号线甘坑站
| phone= | tollfree=
| hours= | price=免費 (包括博物館)
| wikipedia=甘坑客家小镇 | image=甘坑客家小镇 1.jpg
| content=另一個擁有許多傳統建築的客家小鎮:沿著古老的狹窄小巷走,參觀家用工具和文物博物館,進入山上俯瞰小鎮的巨大圓屋,並在各種商店和餐館品嚐客家美食。
}}
==活动==
*{{do
| name=龙岗高尔夫 | alt= | url=http://www.golfshenzhen.com/golfcourses/longgangpublicgolfcourse.php | email=
| address=广东省深圳市龙岗区橫崗水官高速公路附近 | lat=22.6763 | long=114.1984 | directions=
| phone=+86 755 28937188 | tollfree= | fax=
| hours= | price=
| content=這個球場是一位前深圳市政府官員的心血結晶,他想把高爾夫帶給大眾。它是一個 18 洞 72 標準桿的球場,位於龍崗區連綿起伏的丘陵上。該球場的創始人希望將果嶺費保持在商業高爾夫球場的 20-30%。
}}
*{{do
| name=桔钓沙 | alt= Júdiàoshā | url= | email=
| address=广东省深圳市龙岗区南澳新东路 | lat=22.55932 | long=114.55076 | directions=
| phone= | tollfree= | fax=
| hours= | price=¥35
| content=
}}
[[File:西冲风光Scenery in ShenZhen, China - panoramio.jpg|thumb|西冲海滩]]
*{{do
| name=西冲海滩 | alt= | url= | email=
| address=广东省深圳市龙岗区南澳新屋村68号 | lat=22.4750 | long=114.5288 | directions=
| phone= | tollfree= | fax=
| hours= | price=
| content=美麗的西沖海灘遠離市中心,過了大梅沙。這個海灘不太發達,比深圳的其他海灘安靜得多。
}}
==购物==
* {{listing | type=buy
| name=深圳书城龙岗城 | alt= | url=https://www.szbookmall.com/ | email=
| address=广东省深圳市龙岗区龙城街道龙翔大道8028-4号文化中心C区 | lat=22.72288 | long=114.24581 | directions=
| phone=+86 755-2890 3001 | tollfree=
| hours= | price=
| wikipedia=深圳書城 | wikidata=
| content=深圳本土大型書店連鎖書城龍崗分店。尋找一座紅色的大建築。
}}
* {{buy
| name=深圳龙岗万科广场 | url= | email=
| address=广东省深圳市龙岗区龙城街道龙翔大道7188号 | lat=22.71440 | long=114.24360 | directions=
| phone= | tollfree= | fax=
| hours=周日至周四:10:00-22:00,周五至周六:10:00-22:30 | price=
| wikipedia=深圳龙岗万科广场 | wikidata=
| content=
}}
* {{buy
| name=深圳布吉萬象汇 | url= | email=
| address=广东省深圳市龙岗区布吉街道深特变科技园 | lat=22.59395 | long=113.90134 | directions=
| phone=+86 137-6036 7653 | tollfree= | fax=
| hours=00:00-22:00 | price=
| wikipedia= | wikidata=
| content=
}}
==用餐==
* {{listing | type=eat
| name=春梅园海鲜大酒楼 | alt= | url= | email=
| address=中國广东省深圳市龙岗区布吉街道百鸽路口 | lat=22.59833 | long=114.12243 | directions=
| phone=+86 755-2888 8388 | tollfree=
| hours=08:00–14:00, 17:00–22:00 | price=¥78/人
| image=
| content=
}}
* {{listing | type=eat
| name=鹏城饭馆 | alt= | url= | email=
| address=广东省深圳市龙岗区大鹏所城东城巷21号 | lat=22.59607 | long=114.51377 | directions=
| phone=+86 755-8431 5341 | tollfree=
| hours=09:30–14:30, 16:30–22:00 | price=¥78/人
| wikipedia= | wikidata= | image=
| content=
}}
* {{eat
| name=权仔农家菜馆 | alt= | url= | email=
| address=广东省深圳市龙岗区六联六联路95号 | lat=22.77980 | long=114.32433 | directions=
| phone=+86 755-8405 5333 | tollfree=
| hours=11:00–14:00, 17:00–22:00 | price=¥74/人
| image=
| photo=
| content=
}}
==夜生活==
==住宿==
* {{sleep
| name=深圳龍崗珠江皇冠假日酒店 | alt= | url=http://www.ihg.com/crowneplaza/hotels/us/en/shenzhen/szxtr/hoteldetail | email=
| address=广东省深圳市龙岗区龙城街道龙翔大道9009号 | lat=22.7258 | long=114.2454 | directions=
| phone=+86 755 3318 1888 | tollfree= | fax=
| checkin= | checkout= | price=
| content=優質的客房。酒店和附近街道的餐廳有很多不同的選擇。
}}
* {{sleep
| name=三联大酒店 | alt= | url=http://sanlian.hotels-in-shenzhen.com/zh/ | email=
| address=广东省深圳市龙岗区布吉街道联布北路1号 | lat=22.62812 | long=114.11510 | directions=
| phone=+86 755 2828 6988 | tollfree= | fax=
| checkin= | checkout= | price=¥211起
| image=
| content=
}}
* {{listing | type=sleep
| name=中海凯骊酒店 | alt= | url=http://www.pavilionhotelshenzhenlonggang.com/ | email=
| address=广东省深圳市龙岗区大运路168号 | lat=22.70337 | long=114.21531 | directions=
| phone=+86 755-8989 9888 | tollfree=
| checkin= | checkout= | price=¥590起
| content=五星級酒店
}}
==通信==
{{IsPartOf|深圳}}
{{outlinedistrict}}
{{geo|22.72275|114.24295}}
rp4uy3e3be5c6essbks9t1obuu4667n